EPeak Daily

Classes discovered in my 10+ years as a developer – freeCodeCamp.org

0 18

12 months.

That’s the time we wasted whereas rewriting our software program from scratch.

Twelve lengthy months within the software program market.

With out innovation.

With out transferring ahead.

Actually, I can not cease asking this query to myself.

What might we obtain on this fast-moving world in 12 months?

“Tuesday, January 20, 2015, 5:10 PM, AntiMalware product is lastly going its first public beta.”

After hours with out sleeping, the primary launch notice that will give a begin to our new journey was printed on the web site.

I used to be working for one of many small cybersecurity corporations which supplies safety software program for finish customers and enterprise corporations. Our software program protects customers in opposition to malware. It cleans their laptop in the event that they get contaminated. Our AntiMalware was one among them.

The primary beta model’s feedbacks and impressions have been promising. We have been 4 builders, engaged on that product and continually fixing bugs, iterating new variations by enhancing the product.

First secure model

After two months engaged on bug fixing, enhancing and coding, we launched the primary secure model of AntiMalware.

What have been customers saying?

Most of our customers’ feedbacks have been nice, and so they appreciated the product. This was protecting our staff motivated. We have been actively engaged on the product to enhance our core options.

The airplane is taking off.


Our golden years earlier than the large storm.

Antimalware was dwelling its greatest instances. It was changing into our flagship product. Customers have been recommending it to their buddies. Each weblog and boards associated to safety have been recommending our software program. It was the primary possibility in relation to rescuing contaminated customers.

Downloads, installations, gross sales.

Each metric was going up, the consumer base was rising rapidly over months. Founders have been pleased, the staff as effectively. This was the large success the corporate was on the lookout for. Everybody thought: “We did it! Like different large corporations, we thought we created our personal success story.”

New alternatives (at the very least we thought like that): Getting into the enterprise market

The corporate determined to enter the enterprise enviornment. We have been constructing a brand new staff for the company product. The product proprietor of AntiMalware was leaving the staff. Our CTO was taking accountability and changing into the brand new proprietor (Huge mistake, I’ll clarify why).

Some builders have been leaving the corporate, but it surely was okay. We have been dealing with every thing effectively and AntiMalware was nonetheless the best choice out there.

Good days have been behind. Let’s face actuality.

As I advised you, our CTO was dealing with every thing about AntiMalware. He was the primary developer, continually releasing new updates and enhancing the product’s functionality. Nonetheless, due to his place, he needed to deal with different firm stuff additionally.

Certain, to start with, every thing was going effectively. As in each growth course of, in our case additionally, we needed to preserve sustaining and enhancing our software program.

As we must always have anticipated (clearly we didn’t), by some means, the event course of began slowing down.

The times once we have been releasing new updates have been behind. At that second we have been dwelling the fact of late updates and shortly no updates in any respect. This bugged me lots and someday I requested our CTO:

“What’s unsuitable with this product?
Why do updates take an excessive amount of time and growth is slowing down?”

He took a deep breath and began speaking:

“The code base is basically sophisticated. It isn’t structured effectively and it’s not loosely coupled. The structure was designed in a very unsuitable approach. The UI and core logic intervene with one another. Each time I repair a bug or change one thing, this impacts different elements of the software program. Even small adjustments are arduous to be accomplished. With each new replace, one thing new comes up.

There are some strategies that take 20 parameters, they’re two pages lengthy! Are you able to think about? There are numerous issues that have been supposed to not be carried out however they have been carried out anyway.

That’s why each replace takes too lengthy and I can not implement a brand new characteristic. If we launch a brand new replace, I’m scared that we’d introduce new bugs and break this system’s core performance that works effectively now. That’s why it’s too dangerous for us to launch a brand new replace. We are able to lose our customers. We are able to lose our product as effectively. ”

A burst of actuality got here out from his finish and all of us knew it. Really, we have been anticipating this reply from him.

However there was another factor to be requested. He was main the earlier essential developer who led the product for one yr, so how might the code be that tousled?

“I didn’t wish to break his motivation. We needed to enter the anti-malware market as quickest as potential and he was good at this. That’s why I didn’t wish to cease him.”

Principally, we sacrificed the code base to enter the market within the quickest approach, however this destroyed our product’s future.

Lesson discovered: Don’t hesitate to say “that is sh*t” if one thing is basically sh*t. The way forward for your product is extra vital than your spaghetti code. Give attention to to have a sustainable product.

How can we repair this horrible code?

We’re programmers. Programmers are, of their hearts, architects, and the very first thing they wish to do after they get to a web site is to bulldoze the place flat and construct one thing grand. We’re not excited by incremental renovation: tinkering, enhancing, planting flower beds.
 — Joel Spolsky, CEO of Stackoverflow

Builders at all times tend to throw away the code and begin over. There’s a purpose for that. The reason being that they assume the previous code is ineffective and a multitude. However once more we simply assume! Nonetheless, once we attempt to discover out what’s the actual purpose behind that, we will face the very fact:

We are in all probability unsuitable!

The explanation that the previous code may look messy to us and that it needs to be rewritten from scratch isn’t truly due to the code however quite due to a cardinal, basic legislation of programming:

It’s more durable to learn code than to put in writing it.

That is why it’s so arduous to reuse code. That is why we expect “It’s a giant hair mess”. That is why our unconscious thoughts whispers to our ears “Throw it away and begin over” once we learn one other developer’s code.

Like each developer, we fall into this lure. Simply checking our messy code one time was sufficient to consider rewriting it from scratch.

After a collection of conferences, regardless that our CTO was proof against code rewriting (proper habits), he was satisfied in the long run and we began the rewrite.

Nonetheless, this choice didn’t final too lengthy…

It was a weekend. Sunday. I used to be ingesting my morning espresso and studying some articles. Like my feed knew what to indicate me, I got here throughout essentially the most identified article about rewriting the code. It was Netscape’s rewriting story written by Joel Spolsky.

Sharing this text with the remainder of the AntiMalware staff, together with our CTO, was my rapid motion after I completed studying it.

One other dialogue began.

It was already arduous to persuade our CTO to rewrite the code however after studying that article, he modified his thoughts once more. He didn’t wish to execute this choice. Different staff members have been yelling at me:

“Why did you ship this text? We already satisfied him. This product should be rewritten from scratch. That is the one approach.”

Hereby, our first try was finalized and we closed that rewrite matter. Our CTO believed that he might handle this crappy code and that he might launch a brand new replace. This matter was closed till harsh actuality knocked us down.

One yr with none replace…

Actually, this isn’t a joke. This occurred!

“Why no replace?”

“It has been months for the reason that final replace.”

These unfavourable feedback from our customers grow to be our actuality. As a small firm, we had too many merchandise to handle, and on prime of it, we entered the enterprise market which brought about us to come back to that time truly.

Combine all of that and also you get one level: we forgot about our customers.

So, think about. We didn’t wish to launch a brand new replace as a result of we didn’t wish to lose our customers.

Really, it ought to’ve been reverse: if we don’t launch a brand new replace we will certainly lose our customers as a result of hey we didn’t give them an replace for over a yr and a half.

After the fact slapped us within the face, we determined to achieve again and for us, rewriting software program was the one possibility so we did it.


“Monday, 17 December 2018, 21:40. The e-mail was ready to be despatched to our personal beta group.”

After 12 exhausting months, we accomplished our rewriting course of. We ready the primary beta launch notice, identical to the primary day our product met the market.

Right here we’re once more…

The rewritten model of the product continues to be in Beta. It has been virtually one month. We’re fixing bugs, listening to our customers, reviewing feedbacks… As we did four years in the past…

What have we missed throughout these 12 lengthy months? Who is aware of what else we might have accomplished as a substitute of rewriting?!

Many questions will be requested at this level. All I do know is that rewriting was the one possibility for us or we couldn’t see another answer.

Should you fall into this lure too and begin pondering “I ought to rewrite the software program from scratch”, contemplate asking these questions that I consider each developer ought to ask earlier than taking step one to code rewriting.

1. Are you able to throw away all that data?

I’m asking severely! Please be trustworthy with your self and reply this query: Are you actually able to throw away all that data, all these collected bug fixes, years of programming. That is what you anticipate whenever you throw away the code and begin from scratch. Whenever you have a look at code rewriting from this attitude, it’s painful, isn’t it? All these sleepless nights attempting to repair bugs undergo your eyes. Imagine me, I do know.

You needed to discuss to a whole lot of customers to search out the problem that brought about your software program to not work correctly. You then needed to discover this bug in your software program. You then needed to reproduce the problem then discover the repair, then… and so forth and so forth.

2. Are you able to assure that you will do a greater job than you probably did the primary time?

It’s vital to understand that whenever you begin from scratch there’s no assure that you will do a greater job than you probably did the primary time.

Because you selected to throw away all that data, collected bug fixes, there’s a excessive risk that very same bugs may once more come up.

In all probability, the rewriting staff goes to be completely different than the staff labored on the primary model. So that you don’t even have “extra expertise”. You’re simply going to make many of the previous errors once more and introduce some new issues that weren’t within the authentic model.

Should you don’t plan effectively the rewriting course of, there’s a large threat {that a} new model could be worse than the unique model at fixing your buyer’s downside. With this rewriting choice, you’re going to take this threat that may trigger you to lose your clients.

3. Are you prepared to offer a present of months/ years to your rivals?

Are you aware precisely how a lot time do that you must rewrite your software program?

It takes a whole lot of effort, planning, preparations. You’ll plan every process and dash one after the other and you’ll precisely know your deadline to complete this painful course of. Or you’ll miss the deadline. Who is aware of? There’s a excessive risk that you simply gained’t end this course of on time.

You can be in an especially harmful place the place you’ll have to ship an previous model of the code for months or years, utterly unable to make any strategic adjustments or react to new options that the market calls for since you don’t have shippable code.

Your clients may as effectively simply abandon you since you don’t give something new and you retain delivery your previous product with none adjustments.

Did you concentrate on this?!

Supply hyperlink

Leave A Reply

Hey there!

Sign in

Forgot password?

Processing files…