Bridging the gap between expectations and actualization requires a streamlined process and a well-defined strategy. A structured approach aided by established processes is the key to deliver consistent, quality and on-time products. These pre-listed steps not only act as a checklist but a framework for the team to use repeatedly. This is expected to help the team to come up with predictable results. In the long run, benefits in terms of reduced number of development-related iterations and the defects reported from both from the field and during the software development lifecycle results in stable products and faster deliveries.So, is there a defined set of practices aimed at developing and delivering an “ideal” product? For the sake of simplicity, “ideal” in this context would meanindustry benchmarked, reusable and configurable; easy to deploy and meeting customer expectations. The list is, needless to say, never-ending.
In this context, I have thus listed a few best practices that, in my opinion, can ensure the product meets and exceeds the customer’s expectations.
ANALYZING REQUIREMENTS
Thoroughly gauge and understand all requirements pertaining to the product. Focus not only on the explicit but also the implicit requirements. Gather not only functional requirements but also the non-functional ones.
BE MINDFUL OF CHANGE
Analyse and identify the areas of change. Do not just focus on that particular component but evaluate the potential impact on the complete system.
DESIGN AND REVIEW
Understand the importance of detailed product design and evaluate different options to obtain the best possible solution. Keep in mind that most of the products fail due to bad design. Concentrate on developing a scalable architecture.
COMPREHENSIVE CODING
Develop codethat compliesto the organization’s coding standards. Focus on building reusable components and developing easy to configure products. This not only reduces development time but also makes the testing less time consuming. Get the code reviewed and incorporate the feedback.
TESTING AND VERIFICATION
Follow a thorough routine of functional, integration, regression and load testing. Verify the transactions/logs after testing process. Focus on testing automation to reduce time required for testing repeated releases. Test automation may take time once, but saves considerable time going forward.
RELEASE TAGGING
Appropriately tag the releases to avoid any ambiguities
ADOPTION OF ENGINEERING TOOLS
Use some best available tools for testing and delivery of quality product.
Today there are many open source plug-ins and tools are available to make the development faster, do the static code analysis on the fly while coding, dynamic code analysis, test automation, testing and continues integration and deployment.
For quick reference some of the tools that I have used and found extremely includes SonarQube for static analysis, jstack, valgrind, jmap, jprofiler for dynamic analysis, JUnit , TestNG for testing, Sahi, Selenium, TestComplete for Test automation, Jenkins, Travis CI for continuous integration, ansible for continuous deployment. The list is endless but the objective to mention some of the tools are to make readers understand the importance that some of these tools bring to the product quality and faster product development and delivery.
Net, net, it isn’t easy for organizations to deliver consistently good quality products but at the same time, there exist best practices that if adopted can make a big difference. The only thing is to keep working on them even if it requires someone to go extra miles in terms of putting effort, energy & time or pushing the environment to challenge the status-quo to change the existing mind-set.It only needs discipline!