Building Simple, Intelligent Systems

arrow_back Data Science Accelerator: Homegrown Talent at RV Hiring Engineers: In Defense of Inexperience arrow_forward

By Garrett Johnson

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.

Rube_Goldberg's_-Self-Operating_Napkin-_(cropped)

 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.

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.

Garrett Johnson first joined RV as a Senior Engineer in 2010. After a brief hiatus (during which he helped build the infrastructure for Segment.com), he’s back doing amazing work on the RV Platform Engineering/Cloud Ops team. Outside of work, you can find Garrett hanging out with his Whippets at home.

Related Posts

The Red Ventures Guide to SXSW
RV Exclusive: Kenneth Cukier Predicts the Future of Data Science
Building a Great Engineering Culture