Using Agile

How did we help one of our clients move from a traditional waterfall development process to agile? Read on.

In 2010, we began our journey with Agile in the Software Development Life Cycle (SDLC), initiating with Microsoft’s Team Foundation Server (TFS). Emphasizing iterative development, projects adopted a hybrid model where each iteration was rigorously reviewed and required independent deployment to verify application robustness. This resonates with the “shipping is a feature” mentality.

Iterative Breakdown:

  • Initially, three-week iterations were employed, segmenting the quarterly release cycle. The first iteration revolved around new feature mockups and prior release bug fixes. The subsequent iterations focused on new feature development and refinement.
  • Internally, iterations were divided further: backlog in the first week, development in the second, and testing in the third. Various iteration lengths were explored, from two to four weeks. This flexibility allowed process introspection and adjustment at each iteration’s conclusion.

Process Innovations:

  • Concepts like ‘hack days’ and strict 15-minute stand-ups were introduced. Client meetings evolved from monthly to weekly, realizing the dynamic nature of requirements as product development progressed.
  • We’ve experimented with different iteration lengths, all depending on the reactiveness and makeup of our team. Recently, our iteration spanned four weeks, providing ample development time and a designated testing week. With monthly releases either in QA or Prod environments, roles within the team alternate weekly, from deployment to scrum mastery, ensuring multifaceted exposure. More recently, during limited availability of resources, we switched to biweekly iterations. This has helped reduce the need for meetings but focus on delivering more visible results.

Task Management:

  • In our Agile mechanism, tasks were time-capped to 1-2 days for clarity and manageability, aiming for frequent “small victories”. Any task exceeding this timeframe triggered a team review. Over time, a pattern emerged, offering insights into the feasible number of user stories per iteration. New team members now undergo an initial familiarization phase, later diving into real tasks with the aid of training videos and quizzes.

Retrospectives and Feedback:

  • Iterations concluded with thorough retrospectives, refining tasks and work estimates. Clients now participate in overarching retrospectives post each full release, illuminating the iterative enhancements. We want to know what’s working for them as well as us.

Tech Innovations:

  • Embracing continuous integration, both TFS and Azure DevOps were instrumental. Each code commit triggered immediate rebuilds to ensure compilation integrity. Nightly builds and auto-deployment to the dev build environment were standard practices. More recently, we’ve introduced a pipeline automation that checks every pull request for completeness and tasks that used to require manual intervention.
  • A team member’s innovative installer enabled complete application builds, reversions, and ready-for-deployment setups without manual intervention. Azure Git Repos securely housed our code, including separate repositories for database alterations. While SQL database projects handled schema comparisons, custom scripts catered to new data due to the system’s dynamic nature.
  • Our testing approach centered around end-to-end testing with Cypress.IO, given the distinction between API vs. UX and database access requisites.