Archive for the ‘Software Development Best Practices’ Category

Aligning Business and Software Development Needs

Monday, July 12th, 2010

DaggerBoard is frequently approached by early stage companies with questions or issues surrounding product development. These issues range from: (1) We can’t seem to get products properly defined, to (2) Our releases are always late, to (3) Our software has so many bugs that our customers are unhappy with us, to (4) Why does product development cost so much? Defining, developing and releasing quality products should become an easy cycle, so that the company can focus on the harder tasks of selling into new marketplaces. Following a few simple guidelines that align the business and software development needs is frequently all that is required to accomplish this. Since today we are in the era web-based applications, my discussion will focus primarily on this type of company and software.

In establishing appropriate product develop and business alignment, first consider the stage of development of the company. The diagram below portrays the 6 phases typically associated with the start-up lifecycle. The right level of development processes and structure needs to be put in place for each stage. In the early stages it is key to be fast moving, flexible and maximally cost efficient. Stay small and lean, adding only enough infrastructure and process to ensure that your products are properly defined and sufficient quality levels are achieved. Only as you find success in the market place and revenues increase, should processes and practices be added to handle the growing size and complexity of the engineering organization.

Figure 1. Start-up Company Growth Phase

The main areas to consider for product development relate to Processes and Practices, Tools and the Organization (see Table 1). Processes and Practices encompass those areas relating to defining, developing and maintaining your product. The Tools selected should align with the key decisions you make on Processes and Practices. Tools should help, and not get in the way of, product development. Likewise, Organization decisions should support rapid delivery of quality software. It is important to understand that the organization must evolve as the company progresses through its stages of growth.

Some Key Considerations For Product Development

Thinking about when to implement the elements in these 3 key product development areas by company growth phases provides additional insight (see Table 2). Deciding early on your preferred development methodology is important for team productivity. Most web software companies are adopting some form of Agile methodology. Similarly, the greatest point of leverage for almost all future product development occurs with architectural decisions made during the inception, prototype and initial release phases. So careful attention should be paid early on to this area. The same can be said about putting forth the effort to have good requirements definition from Product Management and proper Design of the code so that it fits within the Architecture. I’ve seen too many development organizations think that they knew exactly what needed to be done, were eager to get going and jumped directly into coding. What inevitably results over time is unsupportable spaghetti code that has to be re-factored and slows down future development. The other significant area I recommend implementing early is defect tracking and formal release criteria. This is key to ensuring your initial release is sufficiently tested, has acceptable quality and you know what level of quality you are delivering.

Table 2. Evolution of Product Development in a Start-up

Organizationally, the early phases of a start-up are frequently the most exciting. Usually, the team is small, focused, highly productive and in constant communication. IT support may be done by the engineering team for itself, but development can frequently be accelerated with some support by an experienced IT person to help set-up workstations, servers, Amazon Web Services and the Tools selected by the engineering team. QA and test is generally done first by the development team, and then by everyone else in the company.
During the early start-up stages Tools can be kept to the minimum essential to accomplish initial product release. There are two main objectives during this period:

• Provide the engineers with the Tools necessary to properly develop the functionality and performance required by the software. In some situations this may be as simple as an IDE for all developers. In others there may be database, specialized performance/scalability testing or database administration software.
• Ensuring that the code base you develop is under control and safe. This specifically means putting in place a source code repository, version control and back-up systems. Builds are generally done by a designated software developer using these tools. At any moment in time you should be able to recreate any release that has been made.

Next month we’ll look deeper into software development for the later stages in the life cycle of a start-up…