Making the Complex Simple: Aquaponics Edition

The most impressive software project any of my job applicants had written produced only a single, numeric output.

Making the Complex Simple: Aquaponics Edition

Writing software that is "simple" to use starts long before you write a single line of code.  

The first challenge is finding the root of the problem.  Once you do that, you determine the fewest user inputs required to arrive at a solution.  Finally, you strip away any outputs that do not contribute to solving the problem.

The purest example of this concept would have zero user inputs and only a single output.  And I just so happen to have such an example to share with you.

"Simple and easy are opposites."  
-Mo Willems

Bachelor of Arts in Film and Media Arts

Let me tell you a story about the time I hired a Film and Media Arts major to be a software developer.

I have a somewhat unique hiring method, so I knew this person was a strong candidate before I saw his resume.  Yet, I was still taken aback when I saw his major.  Perhaps my initial impression was wrong.  Would he really be able to handle the role of software developer?

I'm a strong believer that you do not need to be a computer science major to be a great developer, though.  I wanted to hear his story.

The Purest Example of Simple Software

After hearing him describe his software project, I knew he had a bright future.

"Tell me about your project," I said.

"It was an Internet-of-Things (IoT) data collection and automation solution for an indoor aquaponics farm," he began.

  • "I researched and purchased the necessary hardware and monitoring equipment."
  • "I designed and developed the required cloud infrastructure."
  • "I also created the client software to integrate with the custom hardware."

"The monitoring equipment generated massive amounts of data, so I used both SQL and NoSQL databases to manage it all."

I was impressed.  "It sounds like there was a lot going on.  What did the user interface look like?  How many reports were there?  Did it have some sort of dashboard?"  The next words out of his mouth floored me.

"There was no user interface."

End-User Software With No Interface

"I don't get it," I said.  "How was there no user interface?"  

At this point, I was half-expecting him to say that the project never quite got finished.  Instead, his answer managed to impress me way more than anything he had said to that point.

"The client didn't need one."

I was really intrigued now.  "What do you mean?" I asked.

"After several conversations with the client, he made it clear that all he cared about was the current pH of the system.  But that one piece of information was absolutely critical, and he wanted to be updated on it at all times.  So I built an SMS service that texted his cell phone with regular updates on the system's pH."

Brilliant.  

No bells.  No whistles.  No blinking LEDs.  

Just a single number between 0 and 14, texted to a cell phone.

Simple and Easy Are Opposites

It's hard to imagine a piece of software being any simpler to use than this custom aquaponics pH monitoring system.  And, yet, getting to that point must have been incredibly difficult.  

Integrating multiple hardware monitors with a custom cloud infrastructure that uses both SQL and NoSQL databases to manage the massive amounts of data the hardware monitors generate and then crunching all that data into a single piece of critical information before texting said information via SMS messaging is no walk in the park.

Simple software.  Hard to build.

Epilogue

By the way, that Film and Media Arts major?  I hired him as a Junior Software Developer.  And in less than two years, he became my Lead Software Developer.

Bright future indeed.


Referenced articles

Simple vs. Easy
It’s not easy to build simple software. These 4 simple tips will make the process easier.

External references

They want to outsource ethernet. from sysadmin

Photo by @shawnanggg on Unsplash

All original code samples by Mike Wolfe are licensed under CC BY 4.0