My dentist tells me that taking great care of my teeth is essential for health. My chiropractor thinks my spine is the #1 thing I should keep in order. (Well, my former chiropractor; I didn’t revisit that one after the guilt trip.) A personal trainer will say exercise is a top determiner, and a dietician that food is first.
They’re all right; all these are important. But I can’t do everything! I have work to do and a life to live!
It’s a balance. At each moment one of these things matters most; if my back is wonked then chiropractic care will help. If my energy is super low, am I low on iron or need more exercise? Life isn’t about doing everything right; it’s about getting the right things a little more right. And “the right things” are extremely contextual.
In software, people exhort developers to be responsible. Write tests first. Make good abstractions. Create a universal language. Experiment and validate. Retrospect and follow up. Refactor. Read everything in Slack, and all the commits, and emails. Get the user docs beautiful. Add null checks and error messages. Unit test and property test and integration test and simulation test. Learn the business and the code and the tech. Alphabetize your imports.
If I wrote code Correctly, it’d be useless by the time I shipped it.
(qualifier: I’m talking about business software that’s unproven, not serious libraries.) Oh yeah, and ship constantly.
It’s contradictory! So you know for sure it’s contextual, that some of these rules don’t matter in your situation.
There’s several ways that my team is doing it “wrong.” There are several dirty things in the pull request I’m about to submit. The question is, is it good enough? and which improvement will make a difference in this context?
We tend to improve the things that stand out to us, which may or may not matter. Code smells, we know how to spot those. But what’s the leverage point, what’s the constraint in the system? Maybe it is a few missing tests. More likely it isn’t software at all, but communication among team members. Or my understanding of the business.
The magic solution for one team is a waste of time for the next. Consider your context carefully, and don’t let people guilt you about the tasks you consciously chose not to do right now.