- Caring about the quality of the product
- Proactively implementing improvements to the product
- Not waiting to be told what to do
The best architectures, requirements, and designs emerge from self-organizing teams.
Software is about people, not code.
The best architectures, requirements, and designs emerge from self-organizing teams.
Agile processes promote sustainable development. The sponsors, developers, and users should be able to maintain a constant pace indefinitely.
I'm kind of obsessed with the idea of sustainability. In fact, you could say it's a major theme of my writing on this very blog.
Below are some unsustainable practices I've covered in the last few years, with links to my writing on them.
We've been collecting paychecks for several months without delivering a valuable feature to a real user.
We complain often about the need for improvement in our processes, but we don't make time for the work or hold anyone accountable.
We're paying highly-trained technical experts to do tedious, manual tasks that a computer could do.

We're pulling our hair out trying to forecast release dates, and working overtime to fit in all the work.
The QA people never have enough time to test all the code the developers are writing by the end of the sprint.
We're rushing to meet deadlines, and we insist on getting every detail right the first time.
We're slowing down the delivery of features to do code reviews of every commit, but the code quality is still low and we have tons of bugs.
My favorite principle of the Agile Manifesto addresses simplicity, or as they describe it...
the art of maximizing the amount of work not done
This principle is so core to the way I approach my work as a software developer, that I often take it for granted.
"Maximizing the amount of work not done" almost sounds like a definition for laziness, right? No, it's not about laziness--we just don't want to work on things that no one will care about.
Software is such a pain in the ass to describe, develop, test, budget for, maintain, operate in production, etc. I can stomach all these things because I think about the people who will use the software and how it will save them time and make their lives easier.

It's hard to get motivated to work on things I don't feel confident any real user will value.
In fact, I'd say a thread that is woven throughout the Agile Manifesto is this idea of never drifting too far away from what we know will be valuable to real people.
Let's examine a few more of the principles of the Agile Manifesto...
Principles:
Our highest priority is to satisfy the customer through early and continuous delivery of valuable software.
Deliver working software frequently, from a couple of weeks to a couple of months, with a preference to the shorter timescale.
Translation: At every stage, let's make sure that the customer sees exactly what we're building for them, so that we don't waste time building things they don't like.
Principle:
Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.
Translation: We don't want to keep building something the customer doesn't like just because the requirements say so.
Principle:
Business people and developers must work together daily throughout the project.
Translation: Let's make sure the people who will actually use the software we're building actually like what we're building for them and find it useful.
Principle:
Working software is the primary measure of progress.
Translation: The people we're building the software for only know that we've built something valuable for them when they have real software at their fingertips. Until then, they must take it on faith that we're building something valuable.
Maximize the amount of work not done. The customer gets the most bang for their buck, and the team stays motivated. Everyone wins.
- marked by ready ability to move with quick, easy grace
- having a quick, resourceful, and adaptable character
Responding to change over following a plan
Welcome changing requirements, even late in development. Agile processes harness change for the customer's competitive advantage.
Environments like staging or pre-prod are a lie. When you’re starting, they make a little sense, but as you grow, changes happen more frequently and you experience drift. Also, by definition, your non-prod environments aren’t getting traffic, which makes them fundamentally different. The amount of effort required to maintain non-prod environments grows very quickly. You’ll never prioritize work on non-prod like you will on prod, because customers don’t directly touch non-prod. Eventually, you’ll be scrambling to keep this popsicle sticks and duct tape environment up and running so you can test changes in it, lying to yourself, pretending it bears any resemblance to production.
Hopefully we’re all familiar with Parkinson’s law of triviality:
Parkinson observed that a committee whose job is to approve plans for a nuclear power plant may spend the majority of its time on relatively unimportant but easy-to-grasp issues, such as what materials to use for the staff bikeshed, while neglecting the design of the power plant itself, which is far more important but also far more difficult to criticize constructively.
One anti-pattern to watch out for in retrospectives is what I would call process bikeshedding.
Topics like these tend to get a disproportionate amount of coverage in retrospectives:
They come up over and over because they’re simple, easy to have an opinion on, and no one’s feelings will be hurt by discussing them. Unfortunately, this also means they’re trivial—i.e., not impactful to the delivery of working software to production (the purpose of a sprint).

So how does a team get beyond the trivial to discuss the real stuff? That’s the tough part. But I believe it comes down to trust and scope.
People need to trust each other in order to discuss deep concerns. There’s no magic to building trust. It just takes time.
In Parkinson’s example of the nuclear power plant, why are people so focused on the bikeshed while ignoring the design of the plant itself? I’d say it's an issue of scope. Luckily on a Scrum team we’re not approving designs for a nuclear power plant (hopefully); we’re just trying to improve the next two weeks on our software project.
In this video on Scrum retrospectives, Jeff Sutherland cuts the scope:
You only want to fix one thing at a time.
What is the one thing, that if we fixed it, would have the biggest impact on making this team go fast? And then commit to fix it.
Certainly the color of the bikeshed is not that one thing.

My name is Matt Blodgett, and I believe the most important problems in software development are non-technical.
I write from Chicago, Illinois.
Copyright © 2022 Matt Blodgett