Embedding agility in software developments
Agile methodology of software development is focused on ability to adapt changes rapidly. While many see it as a change in process and a set of ceremonies that need to be performed for software development, I see this as a change in the coding style and software design as well.
You can’t be agile if the code base of your software needs to be changed from ground every time you get a new requirement or change in existing one. To be truly agile, the code, the design, the documentations, the team all of it need to have agile embedded into it. Agility should be embedded in the design of the software itself from day 1.
Merely performing agile ceremonies, like sprints, backlogs, story pointing works, sprint velocities, etc, doesn’t make you agile. Agility requires embedding flexibility everywhere. Be it in the design of software, code, or even the documentation templates itself.
Let me break out the myths, and clarify what doesn’t make you agile:
- Having sprints - Sprints are just there to divide work milestones in certain timeframes and it has nothing to do agility of your design and team’s strength or ability to adapt changes. You might do just fine with kanban.
- Using Jira - Jira is just a tool to give some software development ceremonies a concrete format. If you are not thinking, designing, and working with agility in the mind, having these ceremonies bring unnecessary overheads and they certainly doesn’t make you agile.
- Sprint bound work items instead of goal bound - The whole point of working is to working, not reporting as working. Sprint bound work items may look like progressing on paper but, they may or may not denote the actual progress towards goal.
So what to do to achieve agility:
While there are decent amount of guidelines on it, I’d emphasize upon some practical points:
- Embed flexibility in the design - A well designed software is backward compatible (Unless a breaking change is needed), requires minimum changes on variation in requirements, is testable and is clear enough to be explained to an outsider in 2-3 sentences.
- Cross skilling - Agility should be embedded in the team’s skillset as well. Everyone should be trained enough to be able to do almost everything under the scope of team.
- Documents should be templated and auto generated- A well documented software / code is easy to handover, maintain, and sell. Every change in the software should be documented and should be stored on a VCS. Having a well designed template, brings uniformity to the documents and reduces chances of missed / incomplete documentations.
- Thoughtful automations - What could be automated, should be automated. But the automation scripts should be designed in a way that, they should allow software to be flexible and shouldn’t require re-writing every time a change needs to be done.