In software development, the saying goes, “Fast, good, or cheap. Pick two.” This saying – which is called many things, including the Software Development Triangle – is rooted in the idea that projects must make compromises. If leadership wants a solution that is good and fast, then it won’t be cheap. If they want a […]
In software development, the saying goes, “Fast, good, or cheap. Pick two.”
This saying – which is called many things, including the Software Development Triangle – is rooted in the idea that projects must make compromises. If leadership wants a solution that is good and fast, then it won’t be cheap. If they want a solution that is good and cheap, then it won’t come fast. If they want a solution that is fast and cheap, then – you guessed it – it will likely be an inferior solution.
There is a growing realization that the software development landscape is changing. New and better software development practices help teams to transcend the software development triangle. This important idea, the effective use of automation and the right tools and technology, is catching fire and making it possible for teams to deliver more of all three: fast, good, and cheap.
When continuous integration (CI) is properly implemented there is greater insight and faster reporting of issues, such as breaking builds and failing unit tests. This establishes a shorting control and correction cycle, which means issues are resolved faster and more efficiently. There are many very capable, low- or no-cost CI servers available today. The CI server is automated solution that adds fast and good to software development projects.
Automated testing brings a lot of “goodness” to a project. Today the developer’s toolkit can be filled with many tools and technologies that put automated testing at the center of their development. The arguments against test-driven development (TDD) have finally fallen to the wayside as project managers see the huge benefits in greater control and correction and increased efficiency and speed. When you look at the total costs of software development, automated testing can bring the fast, the good, and the cheap to projects.
Manual deployments are time-consuming and error-prone. Often the most careful and thorough developer is asked to take time away from their development tasks to perform menial deployment steps. Because deployment is repetitive and unchallenging work, steps are skipped and configuration mistakes are made. In stark contrast, automated deployment has many virtues. If all the steps are automated, then they are performed reliably each and every time.
Most automated deployments are faster than manual deployments because the deployment scripts are optimized to eliminate any unnecessary waiting or any wasteful file transfers. Automated deployments take less time for the developer to perform and are far less distracting. It is the quality, correctness, and thoroughness attributes of automated deployments that make them really shine. Every step is performed correctly, completely, and consistently. Automated deployment can also deliver on fast, good, and cheap.
There are more and more software tools that help answer important questions, like these:
These questions come down to evaluating its “goodness” or fit-for-purpose. With many software systems, it’s very important that their assessment is done properly and thoroughly. There is no substitute for a good and careful code review. However there are often two things that go wrong:
First, the formal review is time-consuming and is not performed frequently enough. Second, when these reviews occur and problems are identified, there is either too much to do to remediate them or the remediation is expensive. The dilemma is that the ounce of prevention has too many bad side effects, and so, software projects tend to wait until the pound of cure is prescribed.
Fortunately, there are many effective, low- or no-cost code analysis tools and technologies that can help transcend this dilemma. They analyze and monitor things like adherence to coding standards, quality metrics, and development guidelines. They can diagram the as-built design, structure, and dependencies of the system so that the software’s architect can compare it to the as-planned architecture. All of this adds ongoing control and correction. In addition, this visibility and reporting enable the manual assessment and review to happen more efficiently and more often. It is no surprise that effective code analysis helps projects build better software, but it is also time efficient (fast) and inexpensive (cheap).
The reality is that you may not be able to have it all when it comes to your software development project. Let’s face it – car dealerships are not selling Mercedes Benz luxury at Toyota Corolla prices. However, new and better software engineering practices can change the project’s equation and help your team transcend the software development triangle.
What other software engineering practices have you implemented to avoid the software development triangle? Please share your stories below!