Have a plan — My biggest Software Mistake

Jake Mellichamp
3 min readDec 14, 2020

In continuing my blog series, I feel like it would be appropriate to rip the bandaid off and share a failure that has haunted me ever since it’s happening. This will be a less technical, straight to the point, post.

Sip come coffee, and allow me to tell you a story

It all started at a summer internship. I remember feeling so mature: working in an office, getting paid, and doing what I love! A month into the internship my boss came up to me and said “Hey Jake, we have this in-house software written in Visual FoxPro that we would like to update into .NET, think you can handle it?”

Me: “Yes!”

My boss turned around, and the start of a crazy adventure pursued. Up to this point, I had never been tasked with creating an application from scratch but was beyond excited to begin!

The thing was, this was a summer internship, time was not on my side. I opened up the FoxPro source code and my jaw dropped. It was complete gibberish. (It might still be a useful language to some but please never again)

I also hadn’t worked with .NET before but it was similar to C++/Java so I figured out the syntax pretty quick.

In an effort to save time I thought, “you know what… I don’t need to translate this Hebrew-FoxPro source code, I can just make it from scratch with .NET!”

And so that’s what I did.

My ego was definitely at play here too — I wanted to prove to myself, as well as my boss, that I was a competent programmer. In my mind that equated to making this application as quickly as possible! I didn’t make a plan and went straight to programming.

Each day I came into work with a mental note of what needed to get done. “I need to make this query to get that data” or “This button needs to have a flashy design” or “This table needs to be saved to a CSV file”. I would set little goals, accomplish them, and move to the next mini-goal.

This strategy ultimately worked, I remember reporting back to my boss that I was “95% done” and just had to fan out a couple of bugs. He was impressed… I was impressed. But for the duration of the internship, the words “100% done” never rolled off my tongue.

I was 95% done, the application performed its responsibilities most of the time — however, every so often something would always come up.

It might be worth noting that at this point I didn’t know about the existence of Unit Testing.

With Unit Testing, a programmer can formally test routine, boundary, and challenging inputs into their code. In my case, I was lacking white-box testing.

Whitebox testing from https://www.testbytes.net/blog/white-box-testing/

Whitebox testing can guarantee 100% code coverage. This is possible because, with White-box testing, we conceptualize the outcome of every possible path.

Because I lacked this critical knowledge, I did not have the awareness to make my code efficient, cover edge cases, and most importantly — guarantee the outcome of the program.

As a result, I ended my internship with an incomplete project. This can be directly correlated with the fact that I “coded first, and asked questions later” (which should be considered a deadly sin amongst Software Engineers). I was fortunate enough to be surrounded by great leaders who were not harsh on me for my shortcomings, but I certainly learned a valuable lesson about Software Development.

Plan, ask questions, plan some more, and above all… code last.

--

--