Are we building pyramids or excavating them?
Over the past year I've had the opportunity to join a larger company and lead a small front-end team working on their SaaS product. It's gone pretty well so far and I'm excited for what the future holds. In particular it's been a chance to hone my management style, lean harder into my mentoring interests and see how my personal philosophies regarding software and people hold-up and manifest in the work.
First and foremost, I regularly remind my reports it's okay to be human. Log off at a normal time, never apologize for asking for days off, don't beat yourself up over mistakes or feel unduly responsible for bugs that slip into production. I tell them mistakes are part of amy process, and so long as we're not making the same mistakes over and over, how we respond to them and grow matters much more to me.
I've also found myself leaning on certain phrases and analogies. One in particular jumped out at me recently:
Sometimes I'm not sure if we're building pyramids or excavating them.
For context, the team is all relatively new and the software has what might feel like an above-average amount of legacy code and decision making baked into it, given it's otherwise recent launch. Literally dozens of other engineers have been in and out of the codebase over the years, and all of them are gone now. It's not uncommon for our engineers to dive into parts of the code they've never touched before each sprint, and oftentimes discover things that are new to the whole team.
No particular part of this equation is unique in the tech sector. Engineers hop jobs every 18 months or less. Knowledge is lost. Agile processes are a great way to get a lot of work done without really having a plan (I kid, I kid... mostly). Band-aids are put over band-aids. Metropoloises collapse like a dying star into a blackhole and become lost cities.
So I come back to this archaelogy analogy, surprisingly often. Over a long enough timeline I wonder if all software development starts to resemble excavating pyramids even though we talk as though we're building them?
Maybe, more deeply, I wonder if all human endeavor starts to resemble this, over a long-enough timeline? Fields of study emerge dedicated to studying our past selves. We come to know ourselves again, imperfectly, for it's all conjecture and theory. With this new-found knowledge of what we suppose ourselves to have been we can move forward, building upon this new bedrock of understanding. Until, inevtiably, somewhere along the the line it's... lost. Again. And future generations have to revisit our work to understand where we've been. Or perhaps a new generation comes in and chooses to eschew all the things from the past, start over fresh and build things from the ground-up. Until that knowledge is... lost. And the cycle repeats.
Software development did not invent this part of the human condition. Like everything else, software simply acts as an accelerant and a multiplier.
Practical TLDR: Keep your documentation updated and write helpful comments, please.