Compiled on: 2024-05-07 — printable version
Increased collaboration
Shared responsibility
Autonomous teams
Focus on the process, not just the product
Risk management
Resource exploitation
Principles inspire practices
Practices require tools
We applied DevOps (and microservice-ification) to an existing software project, measuring some metrics before and after the operation.
Metric | Prev. | Now | Change |
---|---|---|---|
Release frequency ($\frac{releases}{day}$) | 0.071 | ||
Commit to release time (hours) | 8 to 24 | ||
Commits per day ($\frac{commits}{day}$) | 2 | ||
MTTR (hours) | 36 | ||
Prod. env. setup (working hours) | 16 | ||
Dev. env. setup (minutes) | 120 | ||
Nightly downtime ($\frac{minutes}{night}$) | 30 | ||
Support ticket frequency ($\frac{tickets}{month}$) | 40 | ||
Issue resolution time (days) | 4 |
Metric | Prev. | Now | Change |
---|---|---|---|
Release frequency ($\frac{releases}{day}$) | 0.071 | ||
Commit to release time (hours) | 8 to 24 | ||
Commits per day ($\frac{commits}{day}$) | 2 | ||
MTTR (hours) | 36 | ||
Prod. env. setup (working hours) | 16 | ||
Dev. env. setup (minutes) | 120 | ||
Nightly downtime ($\frac{minutes}{night}$) | 30 | ||
Support ticket frequency ($\frac{tickets}{month}$) | 40 | ||
Issue resolution time (days) | 4 |
Metric | Prev. | Now | Change |
---|---|---|---|
Release frequency ($\frac{releases}{day}$) | 0.071 | 2.7 | +3700% |
Commit to release time (hours) | 8 to 24 | ||
Commits per day ($\frac{commits}{day}$) | 2 | ||
MTTR (hours) | 36 | ||
Prod. env. setup (working hours) | 16 | ||
Dev. env. setup (minutes) | 120 | ||
Nightly downtime ($\frac{minutes}{night}$) | 30 | ||
Support ticket frequency ($\frac{tickets}{month}$) | 40 | ||
Issue resolution time (days) | 4 |
Metric | Prev. | Now | Change |
---|---|---|---|
Release frequency ($\frac{releases}{day}$) | 0.071 | 2.7 | +3700% |
Commit to release time (hours) | 8 to 24 | 0.19 | ~ -98.5% |
Commits per day ($\frac{commits}{day}$) | 2 | ||
MTTR (hours) | 36 | ||
Prod. env. setup (working hours) | 16 | ||
Dev. env. setup (minutes) | 120 | ||
Nightly downtime ($\frac{minutes}{night}$) | 30 | ||
Support ticket frequency ($\frac{tickets}{month}$) | 40 | ||
Issue resolution time (days) | 4 |
Metric | Prev. | Now | Change |
---|---|---|---|
Release frequency ($\frac{releases}{day}$) | 0.071 | 2.7 | +3700% |
Commit to release time (hours) | 8 to 24 | 0.19 | ~ -98.5% |
Commits per day ($\frac{commits}{day}$) | 2 | 7.1 | +255% |
MTTR (hours) | 36 | ||
Prod. env. setup (working hours) | 16 | ||
Dev. env. setup (minutes) | 120 | ||
Nightly downtime ($\frac{minutes}{night}$) | 30 | ||
Support ticket frequency ($\frac{tickets}{month}$) | 40 | ||
Issue resolution time (days) | 4 |
Metric | Prev. | Now | Change |
---|---|---|---|
Release frequency ($\frac{releases}{day}$) | 0.071 | 2.7 | +3700% |
Commit to release time (hours) | 8 to 24 | 0.19 | ~ -98.5% |
Commits per day ($\frac{commits}{day}$) | 2 | 7.1 | +255% |
MTTR (hours) | 36 | 0.5 | -98.6% |
Prod. env. setup (working hours) | 16 | ||
Dev. env. setup (minutes) | 120 | ||
Nightly downtime ($\frac{minutes}{night}$) | 30 | ||
Support ticket frequency ($\frac{tickets}{month}$) | 40 | ||
Issue resolution time (days) | 4 |
Metric | Prev. | Now | Change |
---|---|---|---|
Release frequency ($\frac{releases}{day}$) | 0.071 | 2.7 | +3700% |
Commit to release time (hours) | 8 to 24 | 0.19 | ~ -98.5% |
Commits per day ($\frac{commits}{day}$) | 2 | 7.1 | +255% |
MTTR (hours) | 36 | 0.5 | -98.6% |
Prod. env. setup (working hours) | 16 | 0.35 | -97.8% |
Dev. env. setup (minutes) | 120 | ||
Nightly downtime ($\frac{minutes}{night}$) | 30 | ||
Support ticket frequency ($\frac{tickets}{month}$) | 40 | ||
Issue resolution time (days) | 4 |
Metric | Prev. | Now | Change |
---|---|---|---|
Release frequency ($\frac{releases}{day}$) | 0.071 | 2.7 | +3700% |
Commit to release time (hours) | 8 to 24 | 0.19 | ~ -98.5% |
Commits per day ($\frac{commits}{day}$) | 2 | 7.1 | +255% |
MTTR (hours) | 36 | 0.5 | -98.6% |
Prod. env. setup (working hours) | 16 | 0.35 | -97.8% |
Dev. env. setup (minutes) | 120 | 9 | -92.5% |
Nightly downtime ($\frac{minutes}{night}$) | 30 | ||
Support ticket frequency ($\frac{tickets}{month}$) | 40 | ||
Issue resolution time (days) | 4 |
Metric | Prev. | Now | Change |
---|---|---|---|
Release frequency ($\frac{releases}{day}$) | 0.071 | 2.7 | +3700% |
Commit to release time (hours) | 8 to 24 | 0.19 | ~ -98.5% |
Commits per day ($\frac{commits}{day}$) | 2 | 7.1 | +255% |
MTTR (hours) | 36 | 0.5 | -98.6% |
Prod. env. setup (working hours) | 16 | 0.35 | -97.8% |
Dev. env. setup (minutes) | 120 | 9 | -92.5% |
Nightly downtime ($\frac{minutes}{night}$) | 30 | 0 | -100% |
Support ticket frequency ($\frac{tickets}{month}$) | 40 | ||
Issue resolution time (days) | 4 |
Metric | Prev. | Now | Change |
---|---|---|---|
Release frequency ($\frac{releases}{day}$) | 0.071 | 2.7 | +3700% |
Commit to release time (hours) | 8 to 24 | 0.19 | ~ -98.5% |
Commits per day ($\frac{commits}{day}$) | 2 | 7.1 | +255% |
MTTR (hours) | 36 | 0.5 | -98.6% |
Prod. env. setup (working hours) | 16 | 0.35 | -97.8% |
Dev. env. setup (minutes) | 120 | 9 | -92.5% |
Nightly downtime ($\frac{minutes}{night}$) | 30 | 0 | -100% |
Support ticket frequency ($\frac{tickets}{month}$) | 40 | 19 | -52.5% |
Issue resolution time (days) | 4 |
Metric | Prev. | Now | Change |
---|---|---|---|
Release frequency ($\frac{releases}{day}$) | 0.071 | 2.7 | +3700% |
Commit to release time (hours) | 8 to 24 | 0.19 | ~ -98.5% |
Commits per day ($\frac{commits}{day}$) | 2 | 7.1 | +255% |
MTTR (hours) | 36 | 0.5 | -98.6% |
Prod. env. setup (working hours) | 16 | 0.35 | -97.8% |
Dev. env. setup (minutes) | 120 | 9 | -92.5% |
Nightly downtime ($\frac{minutes}{night}$) | 30 | 0 | -100% |
Support ticket frequency ($\frac{tickets}{month}$) | 40 | 19 | -52.5% |
Issue resolution time (days) | 4 | 3 | -25% |
We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:
That is, while there is value in the items on the right, we value the items on the left more.
(emphasis mine) (comments mine)
Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
Welcome changing requirements, even late in development. Agile processes harness change for the customer’s competitive advantage. (Not an excuse for not collecting requirements upfront)
Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale. (Daily, hourly)
Business people and developers must work together daily throughout the project. (And understand each other!)
Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done. (Teams must be independent)
The most efficient and effective method of conveying information to and within a development team is face-to-face conversation. (Yes, it is pre-covid stuff)
(emphasis mine) (comments mine)
Working software is the primary measure of progress. (But if used as the only measure progress, progress will halt soon)
Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely. (Bureaucracy and maintenance task should not pile up)
Continuous attention to technical excellence and good design enhances agility. (First, do it well)
Simplicity–the art of maximizing the amount of work not done–is essential. (Also known as KISS)
The best architectures, requirements, and designs emerge from self-organizing teams.
At regular intervals, the team reflects on how to become more effective, then tunes and adjusts its behavior accordingly. (Or, maybe, continuously…)
Principles get reified into practices
Practices get often interpreted and formalized into frameworks
Framework are actionable, but formalization may introduce assumptions about projects and teams that do not hold always!
Agile principles and practices get often captured into these well-known frameworks, with slightly different focuses and goals:
Seminal paper from 1986 by Hirotaka Takeuchi and Ikujiro Nonaka:
Then refined to the current framework. The name is from Rugby’s “scrummage”
Product owner (PO), Goal: maximimizing ROI
Development team, Goal: make things happen
Scrum master (SM), Goal: coaching and supervision
Apparently simple concept that is central for Scrum to work
(and for many other workflows)
Every actor in the process must agree and what is the meaning of a task being considered done
Based on the concept of a board (Kanban is Japanese for “board”) divided in columns where cards can be moved, specifically:
(Scrumban actually exists)
Base ideas:
Scrum and agile are often used as synonyms, but they are not
In the literature, Scrum and agile show mixed evidence of efficacy
(even though, anecdotically, many success stories can be found)
Waterfall replicates the social model of a dysfunctional organization with a defined hierarchy. Agile, quite often, replicates the social model of a dysfunctional organization without a well-defined hierarchy.
If your team has combined agile with a legacy methodology such as waterfall, creating a ‘water-scrum’ approach, you may have the worst of both worlds: You have combined the rigid structure of the traditional approach with the terminology of agile.
Many practice the terminology without appreciating the underlying values.
I knew the end of Agile was coming when we started using hockey sticks.
If management is essentially ignoring the developers, there are fixed deadlines to be achieved with a predefined scope, or it’s a dog-eat-dog environment instead of a team focused on achieving the same goal, if planning ahead and thinking out of the box are not appreciated, then yes, eventually you’ll give up and resort to just doing the assigned tasks. I’ve been there.
Standup is effectively “update management”. The notion that standup is for developers is absurd. Does anyone actually wait until 9AM to report a problem or are they going to just ask in the group chat immediately? In practice, it is someone higher up the food chain keeping tabs on how fast things are moving so they can ask about it later in the day.
it usually bends and breaks every other process to it and becomes this overarching process where you do nothing consistently except Scrum rituals and making those Scrum rituals seem successful
Blindly adopting a pre-existing set of practices may lead to failures
Mixing cherry-picked parts of workflows requires a great deal of experience
It’s stupidly, dangerously short-term.
Two-week delivery schedules are overkill
Estimating the effort is a good practice.
Replacing reality with estimations is not.
High-risk/high-gain activities hardly fit into time slots
Great developers are often sought out for advice and for second opinions. But any time doing that is less time spent churning out tickets, so their velocity falls.
Scrum and infinite defects can be good friends because the infinite defects approach lets velocity be artificially high as long as bugs are found after the sprint and therefore counted as new work. You could have an ever higher velocity by constantly generating new bugs.
Because the developers are independently working away on each ticket sequentially, the architecture rapidly begins to mirror the tickets. The tickets are typically 1-2 sentence user stories. Ticket driven architecture rapidly gets messy simply because more code gets piled on as required.
I call this the Whisky Goggles Effect: it turns the 3s and 4s into 5s, but it makes you so sloppy that the 7s and 9s want nothing to do with you. Unable to get their creative juices flowing under a system where everything has to be justified in terms of short-term business value, the best programmers leave.
[Emphasis mine]
Culturally, agile may threaten some team members, including those who feel they had obtained an informal leadership status under the previous process that disappeared under agile.
developers who think they are under pressure will do a crappy job in any development methodology
Great developers are usually defined as those who can solve tough problems. Scrum encourages picking work that can easily be done and rapidly churned out at a steady pace. A tough problem is a developer being slow on getting the tickets done.
Teams might self organize if they all have the same goal and incentives. The problem is, that is rarely true. One guy wants a promotion. Another is studying for a degree on the side. A third is upskilling to go to another company. Another just doesn’t want to have arguments so agrees to anything and lets the codebase become a mess. A lot of good design requires the developers to sit down and hash out how a thing should work.
Even if you get a situation where you are not formally judged on the points completed (which will not happen if management is mostly interacting during Scrum rituals as that is all they have to see regarding progress), people are still going to compete for attention and rewards.
Just imagine 11 people being handed a soccer manual and being told practice is every day for fifteen minutes around 10 AM in conference room #5. Do you think that is what makes a good soccer team? But what if those 11 people were really good, professional players? Still no team? No. Even Christiano Ronaldo would be getting “average” sooner or later with that kind of “team”. But that’s not soccer’s fault. It’s just not how you build a team.
opinion warning below
Many practice the terminology without appreciating the underlying values.
If you really don’t have an agile methodology but call it agile to attract and retain developers and other team members, you are in trouble.
In Scrum, you need to clear tickets and there is no real check on the quality of the work as “done” or “not done” is decided by a usually non-technical project owner. That incentivizes going into a void and focusing on outputting code.
The high level of developer independence means each developer takes different approaches. […] While it is not necessarily wrong, it makes debugging a heck of a lot harder as more places need to be checked.