Software Factories

Skills and services to implement successful Software Factory in order to improve a productivity and quality of development.

Since they were introduced, 4ward has invested heavily on Software Factory gaining considerable experience of setting up, start-up and customization.

In October 2007 Jezz Santos and Edward Bakkera have introduced the concept of Software Factory as an extension of Visual Studio Team System to automate software development in specific application domains. Starting from this there were born different sets of  customizable components including a reusable code, documentation, different types of implementation specifications for the most common situations, wizard, code generators and visual designers.

The main advantages resulting from the use of Software Factory are seen at several levels:

  • Risk reduction, increase of reused levels: starting from already tested and developed components on the basis of the internationally recognized Best Practice there are eliminated  the risks of  making setup errors and coding in the development of applications. The reuse of components is driven directly by the Software Factory, a very concrete way to help developers in their work..
  • Respect of the development and coding processes standards: thanks to the Sofware Factory there is generated a code which follows the project structure and guidelines that are in line with those set by the company, allowing developers to focus on activities related to drawing up of Business Logic. Similarly, the coding creation processes are guided by the Software Factory following more efficient and reliable practices.
  • Guide to the complex architectural decisions: Software Factory helps to define the architecture of the solutions from the beginning of the development cycle, also in the case of simple interventions of customization, reducing the work and the risks charged to the development team.
  • Valorization of know-how and exisiting skils: using Software Factory to which is assigned the task to deal with problems of a more technical natura, using already default code or automatically generated one, developers can work productively without having to deal with pure technological aspects of applications. Similar considerations are true with respect to the skills needed to produce new development environment.
  • Outsourcing and Offshoring: in the scenarios involving an assignment of the part of development outside of proper organization, Software Factory allows to improve the control of outsourcing /offshoring processes for assisted code generation that leads to the structurally uniform results regardless of who produced them, simplifying following control and maintenance.

Creating of Software Factory means to start  from a product  or from a prototype related to a specific domain that is wished to be automated, i.e. e-Commerce web site, to analyze it and break it into the automated elements, and then to identify single parts or blocks to be generated. Next step is to use specific Toolkits of Software Factory creation and together with the available extensions to assemble the production process through which arrive to a final product.

The critical points of such activity are detected on several  fronts:

  • Cultural aspects: on the basis of Software Factory there should be an excellent facility of Application Lifecycle Management, which covers aspects of traceability, process automation and control with the related reporting. In this context Software Factories offer important contributes for an increase of quality and productivity, at the same time reducing  maintenance and implementation costs also through the automation of code generation.
  • Organizational aspects: it is determined that gained benefits should be documented and quantified; 3 criterias to be used to evaluate gained improvements are:
    - On time and on budget
    - Satisfaction of explicit and intrinsic requirements
    - Achieved quality levels
    It is all about defining the metrics and tools with which to detect starting data and monitor process over time to demonstrate achieved improvements through the adoption of Software Factory.
  • Tecnological aspects: during releasing of proper Software Factory to the market Microsoft has developed some reference scenarios, a number of domains and some functions leaving a possibility of extending each of them. During the realized projects requested by its own clients and real cases that should have been resolved 4ward has begun to develop various extensions of basic Software Factory significantly expanding its capabilities.

4ward Software Factory Automation Extension is a unique tool developed by 4ward to make safer and efficient a creation of new extensions for basic Software Factory, enhancing the components, guide functions, patterns and availability of best practice. In this way single custom parts required by individual clients or projects are going to be realized enhancing the possibilities of reuse.
Basis Software Factories are following:

  • Web Service Software Factory: for web services based on .NET 4 (WCF)
  • Web Client Software Factory: for web interfaces easily customizable and based on well defined and known patterns
  • NHibernate Software Factory: for data layer based on the homonymous ORM open source
  • Smart Client Software Factory: for composable interfaces based on look&feel of Outlook and services
  • Biztalk Software Factory: for Biztalk applications that follow best practice
  • Sharepoint Software Factory: for easy creation of aggregation portals based on Sharepoint

Almost all of them have been amplified by 4ward, in particular all those commonly used in SOA environments. Especially there were enriched NHibernate, the connectivity between services through MSMQ, using third-party components for User Interface creation.

For creation  of new Software Factories or enhancement of existing ones 4ward performs product analysis and its domain (web, windows, web service) and evaluate together with a client a feasibility of its automation.

The next phase is defining the requirements of Software Factory and planning of iterations that will compose the release. In this phase we collect patterns, best practice, naming convention and all other components of software development already present at the client side so that they can be analyzed and inserted in Software Factory.

The creation is an iterative process where a client can see the results immediately and can adjust requirements based on a real usage.

Software Factory and SOA: study case

Thanks to a careful use of Software Factories it is possible to simplify considerably a creation of applications designed on the basis of service-oriented architecture (SOA), reducing costs and implementation risks as well as necessary skills for the definition of SOA.

In recent years 4ward has gained  considerable experience in building software factory targeted to production of components for service-based architectures. Thus, now 4ward has a series of custom components that can be used and integrated with each other to set up a chain of software production in a manner similar to what is done in the industry.

In particular, taking an example of the architecture represented in the figure it is possible to customize some specific domains, such as:

  • B2B
  • Frontend
  • Services
  • Infrastructure

For each of them was created one Software Factory to be able to exploit all the advantages:

  • Hiding the complexity of the infrastructure;
  • Using of predefined and consolidated architectural patterns;
  • Development time reduction;
  • Reduction of the skills needed in SOA environment;
  • Standartization of the generated code.

The basic scheme of the built architecture is provided below: