A few weeks ago, I was invited to speak at a local technology conference called DevOpsDays Charlotte. Originally, I planned to talk about Lambda workflows, tools like Apex and how to build these simple systems, but I’ll be honest. I think it’s more important to address the bigger picture.
There’s a disturbing trend that’s spreading throughout the engineering community, and I’ll admit it – I’m guilty too. We like to be cool. We like to be clever. We like to build magical, elaborate tools that are easily capable of solving all of the world’s problems, all at the same time.
Stop it.
Brilliant engineer, or complete idiot?
Make it simple:
The best engineer on your team isn’t the one who writes the longest code or even the one who resolves the most issues. It’s the one who solves the most important problems, most efficiently.
“There is nothing so useless as doing efficiently that which should not be done at all.” – Peter Drucker
Understand the context
Before you get excited about building something awesome, make sure you have all the information you need. Who are the stakeholders? What are the use-cases? Are you about to build something awesome for no apparent reason? Sorry, but that takes away from the cool factor and is also a giant waste of time.
Solve – don’t create – problems
A simple system is one that’s easy to operate for the rest of your team. It’s easy to reason about, it’s easy to change, it’s easy to debug, and it’s easy to replace.
Remove all unnecessary bullsh*t
Enough said.
For Pete’s sake, communicate
Don’t just assume other developers don’t know what they’re doing or they don’t understand the system. It’s possible that what you’ve created is an overcomplicated mess, like this federated kubernets cluster:
“All I wanted to do was upload a file.”
Make it smart:
Writing simpler code doesn’t mean you’re not still solving complicated problems. Here are three guidelines for writing intelligent code – without getting carried away:
Be aware of your environment
Tune your memory, your timeouts and everything that enables you to be able to reason about the system – and everything will start connecting.
Be informed
This goes back to my plea to communicate (^up there^). Before you start, make sure you’ve got all the information you need from your operations team, and work together to figure out the best, most efficient solution.
Be resourceful
As you teach people about how to connect pieces like Kinesis and IoT, you can start to build some really cool, decoupled systems – without building a giant mountain of magical, useless code.