β‘οΈ "Deliver value daily" β¬ οΈ
A one-principle manifesto for agile software development
Why?
By delivering value daily:
- β You will maintain an understanding of what value means for your users
- β You will put things into place to deliver that value
- β You will receive daily feedback validating your assumptions
And of course:
- π You will deliver value daily
How?
- π¬ Continually extract smaller features
The single most important technique is to repeatedly choose features smaller than what are assumed to be needed, and make them useable by real users by the end of each day. Ideally they will be much smaller, so you limit the risk of not completing them within a day, and so you increase the chance of delivering value multiple times each day.
To make this choice, you often need to be close to users - for example in direct contact with them. It also requires a certain level of confidence - do what it takes to develop this if you think you're low.
But... what about https://agilemanifesto.org/?
- π§© Delivering value daily is compatible with the original 12 principles (mostly)
Following this one principle will result in following the 12 principles of the original Agile Manifesto - at least the ones that help deliver value in your case. The exception is the apparent lower bound of a "couple of weeks" on how frequently working software can be delivered - we can do better!
But... what about investing for the future?
- βοΈ Balance value today with investing for tomorrow
You can do tasks that don't result in value today, but just not whole days at a time - at least some of each day should be spent delivering value. By following the principle you will balance delivering value today with investing for more value tomorrow.
Do not refactor or address "tech debt" without a clear idea of how it will lead to value, and merge and release such investment changes daily, just as you would any other. And of course, if something repeatedly doesn't lead to value, you should consider not doing it.
But... does this risk reducing quality?
- π― Maintain standards by including time for quality
No! This is not about cutting corners, this is choosing the smallest pieces of work you can complete in a day that provide value at the quality level you decide is appropriate.
But... we have a fixed release cycle and I can't change that?
- π«΅π» Do what you can to get close to value
Do what you can to split out the smallest valuable parts of remaining tasks, and get them as close as possible to releasable that you have the power to do every single day. Be the change you want to see.
But... I won't be able to keep up by delivering every day?
- π Maintain velocity by aiming to complete only thin slices of features
Do not set out to complete features as envisaged each day - this is impossible. Instead, set out to complete thin slices of them, and don't be afraid of shrinking things even further as each day progresses.
This is effectively the opposite of Scrum's committment to achieving fixed sprint goals.
But... everything that's valuable will take more than a day?
- β© If you really can't deliver value today, set yourself up for value tomorrow
If you really can't extract a small enough amount of work that's valuable today, is there anything that you can complete today that can set you up for delivering value tomorrow? Often something that gets feedback on your riskiest assumptions from users or technology is a good choice.
What other techniques can help deliver value every single day?
You will probably build up your own project-specific suites of techniques to help you deliver value, but here's some to start off with:
- π£ Speak to users every day
- βοΈ Vertically slice larger pieces of work
- π₯ Work in mobs or pairs
- π Maintain CI/CD pipelines
- π Maintain good ranges of tests
- π¦ Initially limit features to specific users
- βοΈ Automate, but gradually
- π― Make features for very specific cases
- π Deploy to production on day one
- π Adapt plans in order to deliver value
- βοΈ Practise atomic commits
- πͺ Regularly reflect on progress
- π± Refactor incrementally
- π΅π» Continually learn how things work
- π Seek help quickly and frequently
- π§ Remember: some value beats no value