Tech Aside: What does it mean to be 'Agile' to me?
Introduction
The Flow of Work
- it usually becomes apparent that the original estimates were incorrect (and too optimistic) due to various factors, like making constant changes to the requirements, changes in the development team, technical challenges
- it can occur, that the finished product doesn't meet the original business requirements and/or is not user friendly enough to make the users actually use it
- the business landscape can shift during the development window enough to make the product obsolete
In general, of all the above can be traced to lack of a fast Feedback Loop. Once the requirements are complete and the development process begins, there's no good way of measuring quality and accuracy of the developed software, at least until the first release hits the UAT (User Acceptance Tests) phase.
To address all of that, an "Agile Revolution" was born.
Agility
Feedback
Team Roles
- Lead Developer/Architect - a person that
- takes full responsibility for all technical aspects of the Product including Tech Stack, Architecture, applying Patterns and Best Practices, Code Quality, Automated Testing, Performance, etc,
- can delegate parts of the decision making to other team members (for example Back-end Lead, Front-end Lead, Dev-Ops Lead etc), but retains full responsibility for all those things to all Stakeholders outside of the Dev Team,
- serves not as a despotic ruler, forcing everyone to use technologies and practices at all cost, but as a definitive technical decision maker that takes Dev Team's Feedback into account,
- takes full responsibility for Team's Estimates and declared Deadlines. Makes sure that the Requirements are in good enough shape to be properly estimated, without having to make wild guesses. Is able to recognize and reject too vague and incorrect Requirements,
- is a go-to person in case of any technical issues with the Product
- Business Requirements Owner - a person that
- is a source of knowledge about the business purpose of the Product,
- can gather, define and describe functional and non-functional Requirements,
- is able to come up with mock UI screens or to closely work with UX expert(s) to obtain them
- is able to attend the Sprint Demo and decide whether the Requirements were implemented in a correct way or not,
- can communicate with the target Users and other Stakeholders to make sure, that all interested parties are OK with how the Product is being developed,
- is able to perform a Business Demo to a wider audience and collect meaningful Feedback,
- can define, in collaboration with the Lead Developer, the Product Roadmap including Milestones, Epics and planned Releases,
Those are, in my opinion, two crucial Roles that greatly contribute to either success or a failure of any Software Development effort. They lead it and bear the whole responsibility for it, shielding the Development Team from unnecessary stress and backlash related to not meeting Deadlines, poor Performance and/or unsatisfactory User Experience.
'Cut my Scope into Pieces, this is my Last Resort' is what would Papa
Fowler probably sing, if he would be into rock music. Yeah. Defining
Team Roles is a big step forward, but it's not enough to guarantee
success. For that to happen, we need to divide the Scope into manageable pieces: Milestones, Epics and finally Stories. Stories that will then be assigned to...
Sprints
- They force Business Requirements Owners to create very small User Stories, that can be then expanded into manageable sets of Use Cases (given/when/then). Such Stories are easy to estimate and with pretty good accuracy/confidence level. That means we can efficiently plan Sprint Scopes and rarely deal with Carryovers,
- Having documented Use Cases promote and encourage good programming practices, like BDD/TDD.
- Creation of Use Cases serves as a crucial filter, helping to find out which Requirements make sense and can be implemented, and which ones do not, before even touching the Code.
- Having well documented and estimated User Stories are a powerful weapon against those, who'd like to endlessly add new Features to a predefined Release Date. Presenting them can cut pointless discussions about 'adding just that one new thing' and will leave the decision-makers with a clear choice - either don't touch the Scope, or move the Deadline.
- They allow for frequent, weekly Sprint Demos at the end of each week. The newly implemented Scope is small enough so that eventual corrections will not hurt the Development Timeline too much and Team can end the week with a clean slate, not having to think about the tasks in progress during the weekends.
- Sprint Planning and Retrospective
- Who?: The entire Dev Team
- When?: First day of the Sprint, preferably it the beginning of the Business Day
- What?:
- Assigning Tasks from Backlog to the current Sprint
- Analyzing what went good and what went bad in previous Sprint, applying the conclusions to the current Sprint.
- Backlog Refinement
- Who?: Lead Developer and Business Requirements Owner
- When?: No fixed schedule, can occur on a need-to basis
- What?:
- Reviewing new requirements, deciding if a requirement makes sense and to which Milestone the requirement should be assigned (prioritizing)
- Writing requirements in a form of User Story: as <Someone> I want to do <Something> so that I can have <a Result>.
- Splitting Requirements into Use Cases: given <an initial condition> when <I perform an action> then <there is a result of that action>.
- Analyzing functional and non-functional requirements, making sure they make sense and are applicable to the Business Context.
- Analyzing UX impact, reviewing proposed UI designs and workflows
- Updating existing Tasks and Creating new ones – applying Feedback from the previous Demo (if applicable).
- Backlog Tasks Estimation
- Who?: The entire Dev Team
- When?: No fixed schedule, can occur on a need-to basis
- What?:
- Estimating the Tasks that don’t have an estimate yet.
- The only Tasks eligible for estimation are the ones that have a completed User Story and Use Cases.
- Working on Sprint Tasks
- Who?: The entire Dev Team
- When?: Every day
- What?: Doing the actual work on the Stories assigned to the Sprint.
- Daily Standup
- Who?: The entire Dev Team
- When?: Every day
- What?: Giving an update on what everyone is working on and how is the work progressing
- Sprint Demo
- Who?: The entire Dev Team and Business Requirements Owner
- When?: Last day of the Sprint, preferably it the end of the Business Day
- What?:
- Showing the Results of the work performed during the Spring to all interested Parties: Requirements Owner, Potential Clients/Users, Senior Management.
- Getting a feedback on the current work and noting it to apply during the next Backlog Refinement
Comments
Post a Comment