Why your software should be auto-deployed within 15 minutes after you merge it, with no manual gates. This is the key to high performing teams and high-quality software.
novel problems that move the business materially forward. Lower-performing teams spend their time firefighting, waiting on code review, waiting on each other, resolving merge conflicts, reproducing tricky bugs, solving problems they thought were fixed, responding to customer complaints, fixing flaky tests, running deploys by hand, fighting with their infrastructure, fighting with their tools, fighting with each other, endless yak shaving and toil.
long does it take for code to go live? 🔥3 — How many of your deploys fail? 🔥4 — How long does it take to recover from an outage? 🔥5 — How often are you paged outside work hours? How high-performing is YOUR team?
your personal knowledge of algorithms and data structures. Technical leadership must focus intensely on constructing and tightening the feedback loops at the heart of this system. sociotechnical (n) “Technology is the sum of ways in which social groups construct the material objects of their civilizations. The things made are socially constructed just as much as technically constructed. The merging of these two things, construction and insight, is sociotechnology” — wikipedia It is a function of the sociotechnical system you participate in.
the heartbeat of your company. 💜 Shipping new code should be as small, as common, as regular, as unremarkable as a heartbeat. and CI/CD is how we get there. Right? So … do YOU do CI/CD?!??
the prelude to the main course. The ENTIRE POINT of CI is to clear the path for you to do CD. Continuous Deployment is what will change your life. If you aren’t going to hook CI up to production, honestly, why even bother with CI? Just run your tests continuously in a shell loop from your laptop. Same deal, less hassle. ¯\_(ツ)_/¯
merges a change to master 2. Any user-visible changes hidden safely behind a feature flag 3. Which triggers CI to run tests and build an artifact 4. The artifact is then deployed or canaried to production (or deployed to staging and later promoted to production). Time elapsed: <15min Notice: • Only one changeset by one engineer per build • No manual gates. No manual QA or variable times • Feature flags to decouple deploys from releases
code and when the code has been deployed is everything. wrote the code code deployed Keeping it small is the difference between toil and fulfillment, happy customers vs lost ones, nimbleness and bloat.
finish solving a problem, your mental state holds everything: your original intent, motivation, implementation details tried and tossed, tradeoffs, variable names, etc. This lasts for … minutes? 😬 Until you pick up the next problem, maybe.
all bugs in that magical, fleeting interval, so long as they 1) have good observability tooling, 2), instrument their code and 3) go and look at it. Ask yourself: 🌟 is it doing what I want it to? 🌟 and does anything else look … weird? A predictable interval of minutes lets you to hook into the body’s own intrinsic reward systems. Muscle memory. Dopamine hits! 🥰
batched deploys, so you can deploy one engineer’s changes at a time. 🌸 software ownership! 🌼 Otherwise, it starts to get grim very quickly. If your interval is on the order of hours or days, you are surely batching people’s changes together and not deploying automatically….
leads to … larger diffs … longer turnaround time for code review … multiple changes getting batched up and deployed at once … makes it hard to identify whose code is at fault … which severs ownership of changes … and soon requires specialists to deploy, run, monitor, and debug … more and more engineering cycles are spent waiting on each other … now we need to hire more engineers, managers, TPMs, project managers … more people and teams incur more coordination costs … more time spent paging state in and out of your brain … which costs MORE TIME …😱
single deploy, complicated outage recovery processes, bloated org, coordination costs, tool proliferation, too many teams, burnout, boredom, boilerplate, unhappy customers, competitive losses, too little time spent on core business problems… You can spend your life chasing symptoms and pathologies … Or you can fix it at the source. Fifteen minutes or bust.
Rule of Thumb: if it takes $num engineers to build, maintain, and run your software systems with a <15 min delivery interval, it will take twice as many engineers with an interval of hours. https://charity.wtf/2021/02/19/how-much-is-your-fear-costing-you/ With an interval of days? Twice as many more. And weeks? Double again.
novel problems that move the business materially forward. Lower-performing teams spend their time firefighting, waiting on code review, waiting on each other, resolving merge conflicts, reproducing tricky bugs, solving problems they thought were fixed, responding to customer complaints, fixing flaky tests, running deploys by hand, fighting with their infrastructure, fighting with their tools, fighting with each other, endless yak shaving and toil.
ethical issue. It also really REALLY helps with hiring and recruiting and retention, just sayin’. No one who has worked with true CI/CD is willing to go back.
teams that foster the next generation of great engineers. Let’s build systems that are well-instrumented and well-understood by their makers, and thus compatible with adult life and parenthood Let’s build high-performing teams that are low in toil, high in Autonomy, Mastery, and Meaning.
sociotechnical feedback loops adding instrumentation and observability practicing observability-driven development instrument, observe, iterate, and repeat how? by: auto-deploy your software within 15 minutes. and step one?