The chore I hate the most in my house is definitely laundry. It’s just never-ending, especially now that I have a couple of kids.
It’s better now but it took some mental improvements to myself to get there. Mainly because I had to change my psychological approach. I used to see laundry as a TODO list item to finish. Laundry had to be “done”, which means hunting down every piece of dirty whatever in the house and getting it washed. You see why this approach is basically designed to cause stress? Because the microsecond that the laundry is done there’s already more! Especially towels. There’s a new pile of dirty towels created before the first load of towels is even halfway through the wash cycle.
So what happened was I learned to think of laundry not as a “finishable” task but as a process. Laundry isn’t a chore to be over and done with. Instead there’s a process, a clothing lifecycle if you will, that all items of clothes in the household progress through. Clothes are worn, go in the hamper, get washed, and move back to the closets and drawers to be worn again. Towels aren’t “done”, you’ve simply executed the process for a week. This actually made me feel a lot better.
With CI/CD, especially with web-based apps and microservices and SaaS products, it’s the same approach. Your coding projects aren’t ever “done”, you’re just progressing through a development lifecycle to continuously add new value to your users. I usually try to point to something like Facebook or Netflix as an example. Is Netflix ever done? Nope, it just continuously gets better and better. There’s no version number presented to the users. It just silently improves itself in the background. The same holds true for many IT-based systems. Does your network infrastructure have a version number? What about your Active Directory domain’s OU structure and GPOs? There’s not necessarily versioning, just a continual improvement. Another way I like to put it is that IT and DevOps isn’t a “done” switch, like a light switch that you flip when done. It’s more like an analog dial, where you continuously turn the quality up and up.
Unfortunately this can conflict with traditional project management and product ownership processes. Stakeholders and managers usually want to know when a project is done, complete, in production, and now in a maintenance state. Telling them “never” is a tough message to portray. They want to see a giant EVM-based Gantt chart with a bunch of bars filling up to 100%, growing like clockwork in a way that can be extrapolated out to show a nice “Project Complete” finish line. I get it, I really do. You’re trying to create forecasts and budgets, you’re trying to wrap a marketing plan around your product releases. How do you know how to plan and execute your sales pipeline in the next 12 months if you don’t know when products are going to be released?
Modern speed of business is just ridiculously fast. The market is constantly changing, customers are constantly wanting new things, competitors are constantly appearing, and new technologies are constantly being made available to integrate with. Just as the moment you’ve committed to finishing a load of laundry, some new dirty socks appear, such is your product baseline. The moment you’ve committed to a release lifecycle with a feature list, new items are in the backlog and new ideas and requirements are popping up all over. And some of them are more important than what you’ve already baselined to work on.
Don’t stress yourself out because you feel like you’ve committed and there’s already more to do. There will ALWAYS be more to do in the product backlog. Just figure out how to build a process that moves items through the backlog and into production in a continuous process, and you’ll continuously deliver value (and clean clothes) without being caught in the stress of trying to “finish” something that will never be finishable.