Recipe for Successful Agile Software Development

| By: Ashok Swarnalatha, Chief, Advanced Software Design & Development, NUS-ISS

There are three pillars to the Agile Software Developments as I see it. The success of an agile software development project requires firstly a change in the mindset, secondly the choice of an appropriate methodology and thirdly a set of essential engineering practices to support the quality of the final deliverable. In this article, these three areas will be discussed.

Organisation Culture
Organisation culture is one of the three key elements in the success of agile software development. Most organisations exhibit a combination of the four types of culture (Figure 1) in differing degrees of proportion. Depending on the characteristics of an organisation, it may be mapped closely to one of the four cultures, which would give an indication of the areas that may pose challenges when transitioning to the agile way of developing software. Organisations requiring a change in culture in order to embrace the agile software development methodology will need a shift towards collaboration & cultivation culture (an agile mindset). This change must first be effected at the top management level and propagated down to the bottom of the organisational hierarchy.

Figure 1. Four organisation cultures, based on Schneider's Culture Model

Agile methods
The choice of a suitable agile software development methodology is the second pillar of a successful agile project. Many agile methods have evolved over many years. A few popular ones are Scrum, Feature Driven Development (FDD) and Dynamic System Development Model (DSDM), among others. Each has its strengths and weaknesses and addresses the specific needs of different characteristics of a software project.

Scrum is a popular approach for team collaboration and product development, created by Ken Schwaber. Scrum enables the creation of self-organising teams by encouraging face-to-face communication across all team members involved in the project. A scrum project is facilitated by a scrum master whose primary goal is to remove impediments for the team instead of “handholding” them. Work is done in short sprints (iterations) of less than 4 weeks.

Jeff De Luca and Peter Coad created the Feature Driven Development method. Peter Coad describes FDD as ‘having just enough process to ensure scalability and repeatability while encouraging creativity and innovation’. FDD is proven to be advantageous for any team size and advocates the approach of “building by features”, each feature being assigned to a team. This essentially means that in a large project, teams can be of different sizes depending on the requirements of the feature.

The Dynamic Systems Development Model (DSDM) advocates active user involvement and empowered teams. It facilitates frequent delivery of products, using fitness for business purpose as the essential criterion for acceptance of deliverables. Like all agile frameworks, DSDM also advocates iterative, incremental development and collaboration between all stakeholders. Emphasis is also on requirements to be base-lined at a high level and integration testing throughout the life cycle.

It is interesting to note that all these three agile methods do not specifically mention about the software engineering practices required for the development of software. I think that they are deliberately left out to give the flexibility for the development team to pick and choose the engineering techniques that are effective for specific projects. Unfortunately, many software projects embracing agile seem to go by the book and follow the frameworks without realising that they are only a guiding light and not a process handbook. In that sense, these are probably only frameworks and not full-fledged methodologies. Neglecting the engineering aspect in agile projects is a sure recipe for failure. Robert C. Martin a.k.a Uncle Bob, in his article ‘The land that Scrum forgot’ crystallises this problem.

Software Engineering practices
The third pillar that is vital for the success of agile software development projects is the software engineering practices. In my opinion, the goals of agile software development such as responding to change and delivering working software fast are only possible with high degree of software craftsmanship. This essentially means that agile teams must at least follow certain essential software engineering practices to save them from failing.

There are many software engineering practices out of which successful agile projects teams follow at least the following practices:

  • Test Driven Development (TDD)
  • Code Refactoring
  • Continuous integration and build
  • Code reviews and Pair programming

Other software engineering practices such as class diagrams, database design, etc, are fundamental to producing good software and should be practised. Sound software architectures are imperative for large projects and projects that need to deal with many non-functional requirements.

Transforming organisations to embrace agile ways of developing software require a change in three areas. It is imperative to change the culture of the organisation to align it to that which is characteristic of the agile philosophy. In addition, a suitable framework that scales up to the needs of the nature of the project should be chosen. Finally, instilling good software craftsmanship skills and practices in the team is vital to the success of the agile software development projects.