February 8, 2007 Leave a comment
.NET Software Engineering best practices
February 1, 2007 Leave a comment
The software sector is still in an era before “industrial revolution”. The systematic rationalization of software production is just beginning
Software development, as any industrial production, needs to be addressed with rigor. The work done by « software workers », with high profile and high salaries, needs to be part of a structured process guaranteeing consistent project architecture and the fluid cooperation between parts designed by each contributor. On the field, this level of maturity is rarely observed.
More than two hundred billion Euros are dedicated to software development each year, and there are bout 3 million developers worldwide. Facing diverse constraints depending on domain, development teams share the same challenge: acceleration of technology and market change. This double pressure strengthens expectations for cost and delay reduction, while availability and scalability constraints of applications increase.
This high level of expectations requires an industrial and rigorous approach for software development. Despite a sustained innovation rhythm, software development on the field remains a long and costly process, with uncertainties in delivery, and excessively dependent on human factors. Studies on the topic mention pessimistic numbers about project success, especially when it comes to large projects. 70 to 80 % fail or are completed with a significant delay or overspending. Evolution of development technology and tools are not driving significant cost reductions for enterprise application development as one would legitimately expect.
Today, the success of a software development project relies too much on the human factor. Achieving a project is often the result of a subtle alchemy including the involvement of key people and a set of experimental recipes more than the adoption of a strict methodology and a rigorous process, ensuring a regular and predictable progress of developments. The human factor always played a major role in numerous businesses. Still, can we imagine automotive workers working for months on the construction of a new car, without respecting the production schedule and worse, making a car that is unusable in the end? However, these are real situations in software development project today.
Despite its relative youth as compared to other industrial sectors, the business of software development is made of numerous dimensions. These different aspects of software development may be source of difficulties or even failures in leading such a project:
• modeling the business,
• managing the development cycle,
• application architecture,
• data storing and manipulation,
• developing custom business code and services,
• user interface design,
• code integration,
• legacy interoperability,
• other software, application or service interfaces,
• code security,
• testing (unit, feature, performance and scalability),
• methodology and organization,
• development team management.
Several answers have been proposed on each topic: modeling tools, patterns for application architecture, best practice for coding each layer (with experts debating for hours about the optimal number of layers…), implementation technology X or Y. Choosing the appropriate answer combination is the real challenge. The success of a development project depends mostly on the consistency of this combination, defined and implemented by quality people.
The main success factors revolve around three axes:
We will develop these three axes in the next part of this article that will be published in a next post. In particular, we will detail the elements that are key success factors for a software development project.