Software Development Practices

Tried and True Software Engineering Practices

Consistent delivery of quality software requires more than general expertise. It also requires specific knowledge of how tasks are performed in your environment. That’s why the implementation of a targeted, yet nimble development process is crucial. MicroTools can help you customize your process to a specific tool set, technology, and team needs. All types of projects – including small, informal, Web-based, and mission-critical projects – can realize more predictable results by implementing these practices.

… we should strive for “early and continuous delivery of valuable software”


Practice for Success
  • Develop iteratively – Iterative development dates back to the mid-1950’s and has been known under various names (Rapid Prototyping or the Boehm-Spiral Methodology). Basically this technique calls developing in such a way so as to test as soon as possible. Preferably, the highest risks should be identified, isolated and developed first. Recent developments surrounding the Agile Manifesto (See have re-enforced this methodology. Stated in “agile” terms, we should strive for “early and continuous delivery of valuable software”
  • Manage requirements – Start by writing them down. Next, we need to continuously maintain these documents – at least through the entire development cycle. During the early stages, it is important to maintain a list of TBD’s (because there will be many) with dates and resources associated with them. It is also important to know the cost of each and every requirement. Often, designs can be cheaper and cleaner if we can change some requirement. This principle is overlooked all the time.

A well designed late product is not necessarily better than an on-time mediocre design

  • Re-use – This is probably the most misunderstood practice. We have found that although proper design can maximize re-use, two principles need to be instilled in all of your software engineers if you want to maximize re-use: 
    1. A well designed late product is not necessarily better than an on-time mediocre design.
    2. If you think you can do it faster by starting from scratch, than by understanding the existing code, come back when you understand the existing code.
  • Maximize Tool Usage – Very few projects allocate time up front to evaluate what tools could be made or bought that will reduce the time to market. The tools could be used for modeling, automatic code generation, testing or any number of other areas.
  • Continuously verify quality – Poor performance and poor reliability are common results of an inadequate focus on software quality. Rational places an emphasis on quality throughout the project lifecycle, with testing conducted in each iteration. This is in contrast to a more traditional approach that leaves the testing of integrated software until late in the project’s lifecycle.
  • Manage change – A key challenge when developing software-intensive systems is coordinating the work of multiple developers organized into different teams – sometimes located at different sites – working on multiple iterations, releases, products, and platforms. By establishing repeatable procedures for managing changes to software and other development artifacts, you minimize chaos, maximize efficient allocation of resources, and ensuring your freedom to change.