Years ago I was impressed with an article Josh Bloch published entitled Bumper-Sticker API design, full of "pithy maxims" for creating an API. I was thinking about this unique approach as I reflected on my years of attempts at following agile methodologies in many of its various and sometimes grotesque forms.
There have been a lot of words spoken both in print and on the Internet about how to be more agile, and it can be hard to filter. In the spirit of Bloch's post, I distilled my experiences down into my own hopefully-pithy maxims. The ideas are not original to me, but this list captures what I think is important and maybe it will help you deliver just a little more value, faster.
Call it Bumper-Sticker Agile.
Excel at shipping software first. Shipping software early and often is the first competency. Master this before you focus on anything else. Continuously deliver.
Don't start with the elimination of waste. Don't require a homogeneous tech stack across all teams. Don't worry about whether teams might be producing overlapping features. Address efficiency after you have learned how to ship to your customers.
Work tiny. Favor smaller iterations over longer ones. Solicit early feedback and immediately apply it to the next cycle of development.
Treat iterations as experiments. Don't be afraid of failure. If your iterations are small, little will have been lost. Learn from the result and improve.
If a customer can't see it, it provides the same value as if you didn't build it. Iteration without delivery is just one step removed from big up-front design. You'll get the information you need at the last possible moment rather than the earliest.
If a customer can't see it, it provides the same value as if you didn't build it. Iteration without delivery is just one step removed from big up-front design. You'll get the information you need at the last possible moment rather than the earliest.
Respect the principle of the Last Responsible Moment. Delay unnecessary decisions to avoid building unnecessary features. Remember YAGNI.
Empower teams with cross-functionality. An organization silo'ed by function (dev, test, ops, dbas, product, pmo, etc) will defeat collective code ownership. Factions will be concerned with only their particular function. Instead, group roles together on a single team and give it sole authority.
Be transparent. Every member of the team should be able to know what everyone else is working on. The team should have nothing to hide from stakeholders or each other.
Radiate the right information. Make it easy to see what the team values, whether it's the status of tasks, tests results, velocity, or whatever they choose. Physical radiators are often more effective than electronic radiators.
Make testing and refactoring first-class citizens. One implies the other. Do both in tandem to combat software entropy.
Pair program rather than holding KT sessions. "Knowledge transfer" done by Big Group Meeting has terrible retention and results in little sense of ownership. Work with someone side-by-side if you want them to understand what you're teaching them.
Don't "hope" for good outcomes. Make rational decisions based on real data. Measure that which you do not understand, or about which you have insufficient data to reason. Prefer taking action to lengthy deliberation.
Stand-ups are for the team. Don't allow the meetings to become status updates to a single person. The team should be talking to each other about a shared commitment.
Keep stand-ups short. Stand up. Don't allow one task or story to monopolize the discussion. Don't bring laptops. Don't go longer than 15 minutes.