Software developer life Cycle

Tons of articles nowadays encourage people to try to learn programming. They try to convince us that it is a fun activity. Programming is fun, initially that is….

A software developer might go through five major phases(based on what he thinks his job is vs what it actually is) during his career.

Stage 1 — Denial:

“OMG, I can’t believe they are paying me to write code. Life is so awesome.”.

First stage is exciting(the honeymoon period if you wanna call it). You got your first paid job. No more asking mom and dad for pocket money. You can barely contain your excitement... Works starts, and you are all charged up… A common pitfall at this stage would be ‘accidentally’ doing two to three developers worth of work in the initial months to create a good first impression.

Your above average productivity will usually be frowned upon by some of the senior members of the team, while some of nicer team members start to envy you as you remind them of their early energetic years of their careers.

Stage 2 -Anger

As time goes on and you start noticing that how the requirements keep on changing all the time and you start to form shallow opinions about your clients(mostly thinking of them as some lower life form that just simply can’t comprehend your day to day pains). You eventually learn the lesson that gathering/understanding Requirements is infact a tough and messy process…atleast tougher than what the SD community would like to admit.

Stage 3: Bargaining

But eventually you’ll learn to make peace with the clients changing requirements. Also, if you are weak, you’ll use your client’s ignorance to your advantage and might exploit him in subtle ways. You will come up with all sorts of time/budget explanations to convince yourself that the extra hard work needed to produce a quality product isn’t worth it and that you in fact are a good person and that life ain’t fair(especially for Engineers).

Stage 4: Depression

As time passes by, you are assigned bug tickets after bug tickets, you start realising that okay its more about maintaining existing code than writing new one and that on average around 1/3 of the product code consists of error checking and exception handling. If the product is for normal users, a lot code is there to just prevent the users from doing dumb shit.

Then as your code slowly get converted from neatly written modular code to spaghetti code(Yes that happens), you learn how difficult it is to keep the complexity of the system down and slowly you start realising what your actual job is.

Your Actual job was to solve problems by writing correct,readable, robust and maintainable code, all while keeping the complexity down to something that a human brain can tackle.

You feel betrayed. Writing error checking code/refactoring code is no fun. That’s not why you become a hacker. You waned to build stuff and not watch GCC giving up on you at 2 in the morning:

fatal error: too many errors emitted, stopping now.

Some of us will try and go back to Stage 1, by convincing ourselves that: “Hey, Debugging ain’t that bad. Its creative work and I’m still better off than those 20 something business folks who work on excel sheets all day and like to think they are running the show.”

but sadly for others, its time to reflect... Yes you Choose Software Engineering as a career, but maybe Software Engineering didn’t choose you!

Stage 5: Acceptance

You eventually start to realise that how you are you own worst enemy and that every decision you’ll make have consequences. But first a moment of silence for those who didn’t make it to this stage. That’s okay you don’t have to feel too bad. They will go on to do other great things in life. Anyways, pat your back for making it to this stage. Also if there is any consolation, you are not alone with your troubles.

“In fact, my main conclusion after spending ten years of my life working on the TEX project is that software is hard. It’s harder than anything else I’ve ever had to do.” ~Donald Knuth

There you have it, ladies and gentleman. If the master thinks writing software is hard then it must be hard! Anyways coming on to this stage, you have gathered some wisdom.…some of which may have been nicely captured by this quote by Wil Shipley:

The fundamental nature of coding is that our task, as programmers, is to recognise that every decision we make is a trade-off. To be a master programmer is to understand the nature of these trade-offs, and be conscious of them in everything we write.

Just like everything else in life…

Good Engineers are in short pessimists! They question their every decision and the consequences that each decision/action might yield.