Friday, June 19, 2015

Basic SW Engineering - Essential software engineering quality principle

Description of the Scenario

The basics of software engineering has not changed a lot the last 25 years. Of course we have seen the introduction of new paradigms like object oriented and agile methods. But the basic principles behind quality are still the same.
When the software in a product in a company grows from a very small size with one or two developers to more than 15-30 developers, this usually puts new demands on both software processes and software architecture to cope with the increased group of developers working with the same piece of code. Two developers can handle requirements, configuration management, quality assurance, project planning and follow up in a more informal way than is possible in a larger team. With a larger team a lot of communication problems arise that do not exist when the team is smaller.
There are still three elements that are essential to assuring good quality in the software product. These three areas (called elements) are defined in Baker (2007). These elements are:
  • Establish Requirements and Control Changes
  • Evaluate Process and Product Quality
  • Establish and Implement Methods to Achieve Quality (methods to build quality into products or other entities)
Establish Requirements and Control Changes includes definition of the requirements of the product and the control of changes of the requirements. In this area we need a process for establishing the requirements. We also need a defined process for controlling changes of the requirements, like a Change Control Board (CCB). The important thing is not what the process looks like, but that there exist a process that handles the requirements in a controlled way. The importance is on always knowing what to do and what is the most important for the project. It can be done differently depending of which software development model that is being followed. For instance the requirement definition process for the Waterfall model and the Agile model will obviously look very different, but the main importance is that the process is engineers always know what is needed by the customer of the system, so that they can focus on development in those areas.
Evaluate Process and Product Quality includes the definition of the testing processes, but also the process for making sure that the processes that are defined in the organization are being followed. Just like within development, testing has its own test models that there has to be decided which one to follow in this particular case. There also has to be a routine for continuously check that the teams are following the processes defined and if there are any problems in the current processes a way of changing and improving the current processes.
Establish and Implement Methods to Achieve Quality (methods to build quality into products or other entities). This area defines processes to establish what shall be done and by whom. So development, configuration management, project planning, project follow up and role definitions need to be defined and put into use. You have to decide which development model to use, is it a Plan-and-document model or a more Agile model like Scrum or Kanban? You also need to consider how to keep track of all the artifacts that are being developed in the projects. This is done in the configuration management process.
We have to keep in mind that there is no proofs that a structured and consistent usage of processes will lead to better quality products. Gibson (2006) has studied 35 organizations and measured their improvements on cost, productivity and quality. And have found empirical evidence supporting the connection between these three elements and better cost, productivity and quality.
Although there is general belief that the use of a structured, consistent process will lead to better quality products, a number of researchers point out that the cause and effect relationships have not been established quantitatively. Thus, the relationship between quantitative measures of process quality and their relationship to product quality has not been clearly demonstrated. However, there is empirical evidence supporting our intuitions that there is a connection, i.e., a cause and effect relationship (Baker 2007).
The other area that will be affected by the number of engineers working with the software system is the architecture. There will not be a lot of problems with the architecture due to communication issues in an organization with one or two engineers. But when the size of the organization increases, the software architecture needs to be refactored in a way that supports the number of developers involved in the project.

Main challenges

Here are some of the very characteristic problems that you will see in an organization that is growing rapidly:
  • The product management experience that they do not get the requirements that they have asked for. 
  • Even more alarming they do not get an insight into the status of the project is or when the requirements can be implemented.
  • Projects are constantly slipping schedule.
  • Problems delivering with quality on time.
  • The software development process becomes slower and slower.
  • The software organization gets a bad reputation for never finishing projects on time and always having quality problems. 
When your organization experience these issues, you probably need to implement the Essential software engineering quality principles in your organization. If your organization is experience the problems above, then it is very probable that you have problems with the architecture. Then your organization need a refactoring of the architecture to better support the new number of developers that are currently working on the code at the same time. See the architecture scenario.
When implementing the Essential software engineering quality principles Scenario in your organization, you need to implement the different principles differently depending on which development method your organization is using or plan to be using. If your organization is using a Plan-and-Document software development processes (like Waterfall, Spiral or the Rational Unified Process (RUP) lifecycles) or an Agile (like Extreme Programming (XP), Scrum or Kanban) the implementation of the Essential software engineering quality principles will be done differently.

Main Business drivers and Growing pains

The main business drivers for the Scenario Essential software engineering principles are:
  • Improvement of cost, performance and quality is needed
  • Improvement of quality towards competition
  • Implement a future proof architecture
When implementing dealing with problems in this Scenario, very often companies has to deal with other drivers as well. The other drivers are not the main drivers for this scenario, but they might be the reason that the software organization is growing in the first place. Some examples of those drivers are: safety standard, frequent releases to customer, selling additional features, wider product range, ease for customers/update service, new services, maintenance and intelligence/self-diagnostics and new markets.

Relation to other areas outside the software development organization (product management, sales, HR, sourcing ...)

There is a lot of relations to other organizations outside software. The software organization is due to the problems they have with the growth not considered to be very trustworthy on delivery times and functionality. Sometimes software organization is also considered incompetent due to those problems. It is important to understand that the software organization has those problems not because they are incompetent, but due to the rapid growth of the organization without defining the new way of working. However this is possible to change, by following the principles described in this chapter.
When introducing a more formal process for software development it will directly affect other departments as well. Usually other departments outside software like the freedom that comes with the more informal process. However they do usually not realize that the informal process might work for a couple of software engineers, but definitely not for 20 or more engineers. So a more formal requirement process will get some negative comments from organizations around the software organization. Also the configuration management process defines how software is delivered and deployed. This of course is affecting the other organizations around the software organization, like the product management, sales, electronics and hardware organizations.

Summary of literature study and references

  • (Baker 2007) Basic principles and concepts for achieving quality, Emanuel R. Baker, Mattew J. Fisher, 2007, Software Engineering Institute, Carnegie Mellon University
  • (Chrissis 2006) CMMI: Guidelines for process integration and product improvement, M. B. Chrissis, M. Konrad, S. Shrum, 2006, Addison-Wesley
  • (Gibson 2006) Performance results of CMMI-based process improvement, Diane L. Gibson, Dennis R. Goldenson, Keith Kost, July 2006