“If you hit a wrong note, it’s the next note that you play that determines if it’s good or bad.” –Miles Davis
That’s pretty deep. And it applies to things very far removed from jazz. Things that are very structured and precise. Things like code. Or, maybe, software isn’t as structured, precise, and linear as we think.
Before you get upset and tell me I’m nuts (which may be true, but doesn’t matter here), I want to be clear. Writing code that is well structured and precise is important. Being clear and understandable is important. Separation of concerns and listening to the data is important. Big ball of mud development is not what I’m talking about. I’m talking about how we write code, not the code we write.
Consider this alternate phrasing of what Miles Davis said.
You learned something new. How you respond determines if the knowledge was good or bad.
Those two sentences pretty much define the software development process. Everything else is an implementation detail. Waterfall or agile, greenfield or brownfield, startup or established in the industry, it doesn’t matter.
Put another way, it’s the OODA loop. Observe (see where you are). Orient (understand the situation). Decide (choose the next step). Act (do it). Because you are where you are, and the situation is what it is. Your involvement in getting there (Miles’ wrong note) doesn’t matter anymore. The only thing that matters is what you do next. How often (or fast) you run the loop.
Think about how empowering that is. The immutable past has happened. You can’t do anything about it. But you have a lot of control over the future. You have agency. You have power. You have the ability to make sure that the next step puts you in a better place than you are now.
If your next action moves you closer to your goal than where you currently find yourself then your move was good. Whether you find yourself closer or farther1, run the loop again. And keep running it. Eventually you find yourself at your goal. The more experience you have in the field, and with the situation, the more likely your choice of action will move you closer to your goal.
That applies whether you’re playing jazz or writing software. And now that I think about it, to life in general.
Closer or farther in the minimizing time and effort sense. Sometimes refactoring, which takes time, appears to be irrelevant, and has no visible impact, actually gets you to your goal with less time and effort. ↩︎