Closing in on my second decade of programming, and I keep noticing how often we step on the same rake. A change breaks something, and in hindsight we already had the information to prevent it, we just never surfaced it. Or we ship a feature and never circle back to check whether it's used the way we intended, so we keep shipping more on the same untested assumptions.
Does this resonate? I'm fairly sure we all hit this, but I can't tell how many people see it as a fixable pattern versus just part of the job.
- After you finish a feature or project, where does what you learned actually go? Is it your head, an issue comment, a doc or wiki, a retro, somewhere else?
- When you start something new, do you explicitly pull in past learnings, like copy, link, reference, discuss it? Or is it all from shared memory?
- Got an example where remembering something earlier would have saved you real time? What happened?
Trying to work out whether this is a shared pain or just mine. War stories very welcome.
For example, when I launched what is now Uber One, two days later, I got a call that I broke something. It turned out I had forgotten an edge case in a completely different service. Yes, this was 2016 Uber, 3000 microservices, but I don't think the users who didn't get their discount really cared.
The takeaway I still remember from that today is about always looking for "works by coincidence"; I often ask myself about the preconditions that must be in place for some class of mistake to be impossible.