March 25, 2007 – The Second Deadly Sin of Software Projects – Skipping the Must Dos
In this business, we are all subject to schedule pressure which is essentially market pressure. This pressure is often real, coming from executive management, the board, or investors. Despite this, there are some necessary steps in the development process that can seem expedient to skip that in many cases, just shouldn’t be skipped:
- Prototyping the UI and getting feedback and buy in from Marketing and target customers. In the rush to get to market, we can easily skip this one. After all, once the design is done and the developers are implementing, its very expensive to change. Also, when working with new technologies, you don’t always know up front what is possible in the UI.
- Throw away the prototype. Its tempting to keep the hastily constructed prototype and evolve it into the final product. Especially when considering the need to prototype to explore UI options and technologies, this early deliverable is critical but also a mess under the covers. Learn from it and toss it.
- Internationalize the code and externalize strings up front. Its tempting to say “we can do that later”. Later is incredibly expensive. In our globalized world, most commercial software must be internationalized – design it in.
- Assess unknown architectures. While I’ve talked in this blog about what it takes to truly embrace new technologies, the fact is we must not allow ourselves to fall into to the trap of solving new challenges with the same old tools and techniques we always use. At the start of a new project, assess the new technologies and directions in the market to explore the options for the new product.
- Build out the Unit Test. Its a fundamental tenet of Agile development for a good reason. Building out the unit test framework before or as the code is written enables the elimination of defects at the point where they are least expensive to remove. As we drive towards release, a full unit test framework greatly increases the velocity that we can fix late lifecycle defects with confidence.
- Invest in Performance and Scalability benchmarking. Build out automated, large scale performance test frameworks and leverage solid commercial solutions available. Building these baselines not only serves to show you where the software needs to improve, every release can be compared to the baseline to better understand the profile of the new features. Final word – if you can get repeatable performance metrics from your system, you have also attained a significant quality milestone.
- Get an Independent Security Review. In the on-demand, software as a service world, it is critical to seek an external security audit to provide an inside out look at your system, as well as an outside in actual test of vulnerability. This is best done in an open and blame-free environment. The surfacing of issues should be seen as a successful outcome rather than as a failing in our people.
- Beta Feedback is essential. Users just do the craziest things. When your software is used in the real world by real people, you will just find issues and gain feedback that will never be possible through the best internal test.
Any one of the above can easily sink your project and just as easily skip. My best advice: really think through all these steps and plan the development schedule to accommodate these milestones with the business constraints in mind.