I collected a variety of proverbs over the course of 2017 that I thought had some insight into the world of software engineering as well. This won’t be a horribly technical post, but a sort of fun rehash of experiences I’ve had thus far working with engineers, teams, product managers, CEOs, etc. over the years.
Don’t cross a bridge before you come to it
Many systems that I’ve helped develop or analyze have had their fair share of IAbstractWindowFactory or IInterfacePrototype-like classes and interfaces. I’ve learned that the most effective libraries and frameworks are not the ones that account for everything possible from the beginning, but that consider the immediate needs and the needs 3 to 6 months into the future. Beyond that, the unknowns are still so unknown — will the project even exist then? Will the goals still be the same or similar? I have found that keeping frameworks and libraries relatively simple, especially when beginning, make them more manageable and simple for others to use.
Don’t let the perfect become the enemy of the good
In the same vein as the previous point — working on frameworks and libraries (or even apps or other projects) have significant potential to get out of hand quickly. Potential features are dreamed up, opportunities for plugins and expansions run wild, and chances for over-engineering rocket skyward. I think that even for personal projects, one should put on their product manager hat and really spend significant time away from their IDE and in Trello (or Excel, or on post-its, or whatever you do). It’s incredibly easy to dream up a perfect project with thousands of features, integrations, and capabilities, then never reach the finish line because of it.
The longest mile is the last mile home
As a contractor who has helped a number of companies develop all kinds of applications, it’s easy to give clients the false perspective that an application is almost finished or is really ahead of schedule. The first few important features look like a ton of accomplished work, but at the end of the day, it’s the last few features and list of improvements and bug fixes that end up taking a disproportionately long time.
Time is money
I remember at a cyber security company that I once worked for — we had a meeting with everyone on the team — full time or contract — for well over two or three hours planning out a research project. We debated technologies to use, skills we’d need, subcontractors we’d need to hire. We left exhausted but glad that we’d cranked out all of that good work. A week later (or so… my memory of the exact story is a bit fuzzy) the project was shelved. I thought about all of that work we had done and what, approximately, each person at the table’s time was worth that afternoon. At the end of that day, we’d spent well over $5000. If some more front-end product planning had been done, we could have realized the impracticality of the potential product and saved quite a bit of money!
More of these to come — I think I have well over 50 proverbs saved!