The Shippocratic Oath
Do no harm, and move quickly!
You're likely familiar with the Hippocratic Oath:
First do no harm
You're also likely familiar with the the saying:
Move fast and break things!
Based on the research done in Accelerate and the DevOps report, I'd instead like to modify these for all those who are later in the adoption cycle as the Shippocratic Oath:
Do no harm, and move quickly!
Do no harm when shipping, ship as frequently as you'd like. The research shows that these two things actually aren't at odds at all. In fact the more frequently you ship code to production the more likely you are to do no harm, and avoid issues that need to be reverted and harm the user.
This seems counter-intuitive, but the smaller batches result in more contained potential impact, for better and worse, which results in easier testing, and narrower scope of things to change if things go poorly to resolve the issue.
Just a few of the things you could be thinking about:
- Does this harm the user?
- Does this make things harder for the user?
- Will users be surprised or confused by these changes?
- If this has issues, what will it look like for the user? For the developer?
- Does this harm the platform?
- Will this negatively impact performance?
- Will this negatively impact memory?
- Will this negatively impact query times or connection pool usage?
- Does this harm the developer experience?
- Will this be understandable by a new junior engineer 3 months from now?
- Will this design need to change dramatically in the near term future?
If you can't answer these confidently, you probably ought to reconsider personally, or help the team to reconsider.
Shamelessly riffing on a version of the Oath from the 60's, if you'd like to have something fancy looking hanging on the walls of your office:
I swear to fulfill, to the best of my ability and judgment, this covenant:
I will respect the hard-won knowledge and product based gains of those software engineers in whose steps I walk, and gladly share such knowledge as is mine with those who are to follow.
I will apply, for the benefit of the user and organization, all measures that are required, avoiding those twin traps of over-engineering and engineering nihilism.
I will remember that there is art to software engineering as well as science, and that warmth, sympathy, and understanding may outweigh the algorithms' efficiency or the shiny new technology's promise.
I will not be ashamed to say "I know not", nor will I fail to call in my colleagues when the skills of another are needed for a successful project.
I will respect the privacy of my users, for their data is not disclosed to me that the world may know.
I will remember that I do not build for a faceless user or a nameless corporation, but for people, whose usage may affect the individual's family and economic stability. My responsibility includes these related problems, if I am to build and maintain adequately for them.
I will prevent bugs and technical debt whenever I can, for prevention is preferable to rework.
I will remember that I remain a member of society, with special obligations to all my fellow human beings, those who use my software, as well as those who do not, but are impacted.
If I do not violate this oath, may I enjoy life and art, respected while I live and work on this project and remembered with affection thereafter. May I always act so as to preserve the finest traditions of my calling and may I long experience the joy of building and maintaining.
Share this with your colleagues if this resonates with you.
Inspired by the good folks in Engineering @ Spiff.