Software Project Best Practices
There are many different best practices in the software development industry. We give very special attention to two specific best practices: designing for change, and evolutionary delivery. These best practices drive every software project we undertake.
Every solution we implement for our customers has future evolution and adaptation in mind. In other words, we fully expect that your needs will grow and change to meet the needs of your organization as it grows, evolves, and adapts to the environment in which you do business. As the old proverb says, "The only constant is change," and so this is a natural fit with our iterative customer-driven philosophy.
Designing for Change
Some of the most damaging influences on a software project schedule are late, unexpected changes to a product: changes that occur after initial design is complete and after implementation is underway. Projects that deal poorly with such changes are often perceived as slow, even if they are on schedule up to the point where the changes were introduced.
This best practice emphasizes rapid response to changes: changes in market conditions, changes in a customer's understanding of the problem, changes in underlying technology, and so on. When this best practice is applied correctly, it lays the groundwork for long-lived programs and it provides flexibility to minimize the cost and schedule impact of late (or entirely new) requests.
This is a software project lifecycle model that delivers selected portions of a program on a regular basis, and it provides the ability to change product direction mid-course to respond to customer requests. When it is thoughtfully applied, it has significant benefits. These include:
- Reduced risk of delivering a product that you don't want (avoiding needless expense and/or re-work)
- Improved progress visibility by delivering software early and often
- Improved support for frequent product releases
- Reduced cost and schedule estimation errors by allowing for re-calibration of estimates after each delivery
- Reduced risk of integration problems by integrating early and often
- Improved overall product quality, leading to a more balanced distribution of costs, risks, and resources