5 Steps Towards Better Engineering.
I just realized that I haven’t posted anything to my blog since my dad’s passing, and this post has been in my draft since about 2 days after Tim Dodd’s interview was uploaded onto Youtube. It’s still worth a read.
I “recently” (retroactively applied) watched an interview of Elon Musk by Tim Dodd, the Everyday Astronaut, and in it he listed 5 steps every project must follow to be successful. I couldn’t agree more with him, and at the risk of coming across as an Elon fanboy, I wanted to share them here:
1. Question your requirements, or bluntly put, “make a requirement less dumb.”
Even smart people are dumb some of the time. So question every feature requirement that comes along your way. Especially, if it’s coming from a smart person.
Product managers and customers ask for many things, and a lot of it truly necessary. But, some of their asks may sound like necessary feature requests on the surface, but once you dig deeper, the reason for the ask might be moot or can be solved in a simpler way with less work or no work. Question whether requirements are actually necessary, or if they can be simplified and made better, or be eradicated.
2. Delete the part, delete the process.
This follows logically from #1, but is more of an active conscious effort to remove clutter that adds to unnecessary complexity. Every single additional feature you implement adds one more item that can and will fail, needs to be tested, requires additional maintenance, and increases complexity and adds to backwards compatibility headaches when developing new more important features.
So, cut down ruthlessly on what you deliver, and build only what is absolutely necessary. Spring clean your spring board.
3. Simplify, then optimize.
Do step #1 and #2 before you start to optimize features. If you’ve eradicated the part/feature completely, there is no need to optimize it at all. Think of it as 100% optimization at 0% cost.
4. Accelerate cycle time.
This is about iterative development, and to speed up spec, implementation, test, and evaluation time. If you’ve worked on Agile teams, you probably are already accustomed to fast iterations… but even then, it’s good to always think of a project as a bunch of small iterative MVPs that are built and validated quickly.
Yes, this may not always seem feasible, especially in long term large scale efforts. But, when SpaceX is launching, testing, failing, and iterating on giant Startships, you really have no excuses to claim you can’t practice this in your software project.
5. Automate.
Once you’ve figured out how to do something consistently at an acceptable standard, then automate it. Automation is the last step, but it’s critical.
A. It will improve quality of your outcomes by minimizing variance in operations and eradicate operator error; and
B. It frees you up to work on other cool and more fulfilling things.
No engineer wants to be repeating the same mundane manual process day after day, week after week, month after month… You do it manually once or twice to figure it out, but then as soon as you have it figured… AUTOMATE!
But, remember not to rush and do things out of order. We are struggling to get past #1 and #2 at my current work but are already automating things, and it is just soul sucking every time I have to do the monthly bill run, where a bunch of script automations have to be manually kicked off in sequence over a period of 5 days… Ahem! I have said too much.
Seriously though, #2 is probably the most important step. While the rest of my org is skipping to #5, I myself have made the blunder of optimizing performance for steps that shouldn’t exist in the first place, albeit while I’m fully aware of it. For instance, we have a manual workflow that involves exporting data as CSV which then gets validated by another team… and I have optimized memory utilization and implemented multipart uploads for this CSV generation step.
Am I proud of it? Uhhhh… Quick! Look here! Elon Musk!
https://www.youtube.com/watch?v=t705r8ICkRw&t=800s
I have linked directly to the part where he talks about the 5 step process, but the entire video (along with Part 2) is very informative and totally worth your time.