Older and wiser programmers have experienced the era of the 80s and the 90s, when software programming was radically different than it is today: No integrated development environments and color coding, Elementary make files rather than sophisticated dependency management tools, no possibility to “google” errors, no access to online communities such as StackOverflow. Twenty years later developers are not only offered much more powerful tools but they also have access to the predefined best practices, blueprint solutions and a wide range of software libraries that save them time, effort and costs. Nonetheless, software development productivity is still one of the major concerns for the IT industry. The reason is quite straightforward: Software teams must nowadays deal with changing business environments, unpredictable requirements, systems of greater complexity, as well as larger, specialized and highly distributed teams.
In order to cope with these requirements software teams should adopt and fully leverage agile principles and practices as part of their software development methodology.
Problem Signs that you should go agile
No matter your software development methodology, there are always some signs that should alert you about the need for changing the way you develop software systems. In most cases, these signs stem from the fact that you are still relying on conventional, heavyweight and inflexible waterfall-like methodologies instead of the modern agile best practices. However, these also appear in cases where your adoption of agile principles is poor or in its infancy. The most common of these symptoms are:
- Poor and inaccurate understanding of end-user needs: You realize that you perceive systems requirements differently than your customer. This means typically that your methodology does not cater for a proper and timely clarification of ambiguous points, due to a semantic gap during communications with the customer.
- Inability to cope with requirements that change over time: During the course of a project’s implementation customers are frequently changing their minds about features and functionalities. This should not be a major issue for your team. In case it is, your software methodology is problematic.
- Incompatibility between the modules that comprise the product: When building a sub-system you realize that the effort required in integration is larger than the effort for developing its individual modules. In such cases your methodology is problematic and your project is at risk.
- Major problems are discovered with significant delay: The earlier a major flaw is discovered, the more cost-effective is it’s fix. In case you frequently discover software problems later in the project execution cycle, it’s highly likely that your methodology is not iterative and responsive enough and the team also lacks proper communication between stakeholders.
- Software quality problems: The presence of many bugs is a clear indication of poor testing. Software testing is typically associated with a methodology that does not emphasize frequent testing i.e. a methodology that is highly unlikely to be truly agile.
- Unable to track team members’ activity: Software development is a game of teams and its successful management is becoming highly dependent on knowing who changed what, when, where and why. Failure to track and access full context about developers’ activities signifies poor change management and a highlights the fact that the team hardly follows agile principles.
- Problematic build-and-release processes: Is it the case that your build process repeatedly gives errors? Do you hear from your developers the typical quote “…but it worked on my machine?”. These are all signs of a poorly structured build process that is untrustworthy and most likely not automated. This means you have to work harder on becoming agile.
Agile Principles and Methodologies
Agile software methodologies emphasize early, iterative and continuous delivery of valuable software, in a way that can flexibly embrace changes in customers’ requirements. Agile welcomes changing requirements, while delivering a working system in short timescales (e.g., even on a weekly or biweekly basis). Moreover, these methodologies emphasize on frequent and effective communications across project stakeholders, including developers, business people and representatives of the customer side. Furthermore, using Agile, a sustainable flow of software production is attained, as sponsors, developers and users collaborate to maintain a constant pace throughout the course of the project’s implementation.
There are a number of agile methodologies, which suit different needs and are used by many teams all around the globe. Among the most popular ones are SCRUM, XP (Extreme Programming) and lean development. The selection of the proper methodology for your organization depends on a range of different factors including the types of the projects you undertake (e.g., innovative high-risk projects or well-known projects), the skills and culture of your team, past experience with agile principles and more. No matter your final choice, all agile methodologies comprise a set of best practices that alleviate the above-listed problem symptoms, such as:
- Iterative Development, which enables early and frequent reception of customer feedback, thorough testing, incremental deployment of changing requirements, as well as disambiguation of requirements when needed.
- Test-first programming and/or test driven development, which makes testing a priority in the software development process and helps in alleviating quality problems.
- Frequent integration and releases, which eases integration and facilitates the timely discovery of project flaws, while providing opportunities for accommodating new or changing requirements.
- Automated builds, which safeguards both the responsiveness and trustworthiness of the build and configuration processes.
- Customer Involvement, which facilitates communications with the customer, boosts a common understanding about the project and ultimately develops relationships of trust.
Depending on the methodology used, there are also other best practices, which remedy the common problem areas and failure symptoms of software projects.
Five Best Practices
As in all our use cases blogs, here is the part of fives i.e. five best practices that you could follow for a successful adoption and implementation of one of the above listed agile methodologies.
- Gradual Adoption: Rome was not built in one day, so you cannot become agile overnight. Rather, the adoption of an agile methodology is a lengthy and gradual process. As part of this process, your developers will progressively engage more and more actively in agile practices. This is likely to be done based on a structured roadmap as several practices have others as prerequisite. For example, you can hardly implement automated testing, unless you have first implemented an automated build process.
- Adaptation and Customization: Real-life projects and situations are never identical to examples listed in articles, blogs or textbooks. You will therefore have to customize your agile methodology to the needs of particular projects and the capabilities of your team. SCRUM or XP are not likely to be implemented in their pure form, but rather reasonable compromises and adaptations of these methodologies will be implemented as part of their field deployment and use.
- Team involvement: Involve the software team in the process of specifying the details of your agile methodology. The team’s feedback will be invaluable in appropriately customizing your methodology, much as your past experiences are.
- Measure and Improve: Make sure you continually benchmark your team’s performance, as changes and fine-tuning to your agile methodology are introduced. Measure delivery times, number of software defects, overall effort, customer satisfaction, time for discovering project flaws, scope slippage and more. Ensure that all these indicators become the drivers of a continuous improvement process, as you can really gain many and significant benefits from perfecting your software development methodology.
- The value of operations: During the last couple of years, agile software methodologies are increasingly blended with operations as part of the DevOps movement. It is strongly recommended that you ride the wave of DevOps development in order to maximize the value of your agile development processes.
Overall, several years after the introduction and use of agile principles there are still many teams that are not truly agile yet. Moreover, there are others, who can significantly improve their processes. What’s your status? Is is probably time you improve in this forefront?