Tuesday, December 30, 2014

How do software engineers work as a professional ? ! ! ?

The following image pretty much sums up my college life when I was in 3rd year.


Third year of college is the most important year in one's life because it is then when we have to decide whether we want to continue with the technical domain and wait for some computer giant companies to hire us or should we switch to some other domain and leave computers behind by giving a management exam like GMAT or CAT or should we go abroad to pursue M.S in computers and live the American dream.

NOTE :- I have intentionally written "we" because our seniors/alumni/classmates/batch mates are also a part of this decision.

THE ASSUMPTIONS ERA

I too faced the same dilemma back in college when more than one half of the class started preparing for GMAT/CAT ,  about 5% of my class started preparing for M.S and the rest started preparing for the campus placement session. I belonged to this third category There were the students who were also preparing for CAT/GMAT side by side and kept the option for tech/non-tech placement open for them.
I had no interest in MBA - by the way I figured this out after I joined a well known MBA classes in Delhi area. It had nothing to do with the teachers/coaching classes but lets say it was my inner voice. I didn't have the courage/money to pursue MS from U.S and leave everything behind. So, by following the method of elimination I figured out that the only option I had was to prepare for placement session and hope to get placed in a super amazing tech company. 
Browsing, through the websites like Geeksforgeeks or Cracking the Coding interview.I often used to wonder that how software engineers work in big tech giants like Google, Microsoft and Adobe. Another important question which used to linger in my head was how do sites like GeeksforGeeks and CareerCup help us become a better engineers once we get placed. So I assumed that all questions like reversal of link list, maximum sub-sequence problems are miniature of real life problems which software engineers face everyday. And I started solving algorithm/programming problems on daily basis and continued with my research based projects.  

REALITY
In my opinion when a fresher joins a company, the fresher is already afraid and the rest who are working on some projects will make sure that the freshers gets even more uncomfortable and they start throwing new words/technical Jargon/domain knowledge on you for the sake of "Ramp Up" session. Now there will be one person in the team who will be serving the notice period and will have all wrong things to say which a fresher does not want to listen. And the fresher will think I literally killed myself for this job and this guy is leaving this job seriously ? What is wrong with him ? The answer to this question or rather I should say truth of life is no wonder which company you get in from your campus placement there will be a hundreds of people leaving the company on your joining day and other hundred who will be preparing to become your colleagues in near future. So this outflow and inflow of employees is not big deal.

Now coming to the topic of today's post that how do the software engineers work. 
First of all you need to understand a general structure of a team.
A company is composed of a numerous teams. Your future with that company depends on that team and not on the company's name itself.
Now this team generally consists of  :-
1.)  Senior Manager  
Now this person does not code but is usually the most intelligent person in the team.This person knows all the domain/business knowledge and is the face of your team for the outside world.

2.)  Program Manager (PM)
If you have studied that topic of Requirement Engineering as a part of software engineering course in your undergrad then you have your answer. This person gathers all the requirements of what the product/API is supposed to do. Refer image below

3.)  People Manager
The person who makes sure that you are happy in the team. This person approves your holiday and reimbursement requests. If you have some permission issues or need a new laptop from the company or want to get an early cab he should be our contact person. They are also involved in making sure that you are assigned work as per your expertise/interests.

4.)  Software Architect
Decides technologies to used. Does software design, mentors you to manage the software and deployment process extra. Unlike college, where getting some output on console was considered more than enough, in professional world you should also know the response time of your service. In other words in college/placement sessions it is enough to know whether insertion in a link list will take O(1) – assuming you have tail pointer or will it take O(n) – you just have start pointer. But here you need to know response time of your service exactly. You need to work on scalability of the service/product etc. You need to work in coordination with testers to find how much time will the 99% of the requests take. One of such parameters is called TP99.

5.)  Software Development Engineer
This is where you come in picture. The one who rights the code from the requirements as given by the requirement set from Program Manager and the architecture/design as decided by the software architect.

6.)  DataBase Engineer
Writes stored procedures, manages DB be it on Sql or NoSql technology. Has the entire knowledge of database architecture. Will never give you the admin rights to insert or delete a column at your own free will. Writes queries for you which you didn’t even know exist in the world. Personal Experience – I didn’t know that I can search a database to get a list of table which contain a column name with something like “xyz”. The query can be easily be found at stack overflow - just in case you are wondering.

7.)  Software Test Engineer
Person who files bugs on your name in Jira or Trello as per your companies standard directions. Tests the application/service you made either manually or the technology stack which your company follows.

Having introduced you to various roles and responsibilities you can find in a team. Now let me touch upon the process of work getting assigned to you. Most companies these days have started following Agile Development

Though I have never heard of a company where Agile development is followed ideally but this is what companies aim to achieve. One of the component of Agile development is Excessive Preparation/Planning also known as Sprint planning.
Sprint in simplistic terms means a cycle. A company may follow a sprint of one week or a month. Two week period is assumed to be idealistic. So a PM sends engineers, architect/lead a meeting invite. PM opens a Jira/Trello/similar issue tracking software dashboard. So, for ex if you are supposed to design a restful Java API so that a user can insert a record. If you have completed insertion API without testing or performance number. So now backlog will contain to two stories 1.) Test the API
2.) Get performance number of API. As per the capacity or number of man hours available in the sprint stories will be picked.

NOTE :- Stories consists of tasks. Tasks is something doable like code/review request etc. After breaking a story into a task, these tasks get assigned to the software developer/tester/architect/database architect.
So next day onward of  the sprint planning meeting you have daily meeting of 15 min. Now this is where the actual work gets discussed. Engineers discuss what issues they are facing. Or if they need some kind of database permissions etc.


FINAL COMMENTS
That is how a software engineer gets allocated the work and finally they start writing the code/documentation/class diagram as required. A software engineer’s job is not necessarily all about just writing the code blindly in isolation without getting any acknowledgement. It involves understanding requirements and which of these requirements require immediate attention and which of them can be delayed to next sprint. It involves proper justification of why your method/approach is better.
Software engineers play table tennis, foosball, snake & ladder and sometimes chess too. Though we never meet the clients of our product directly but this does not means we live a life never seeing light of the day.

P.S – This lifestyle is more about a product based companies where a development is going on. Service based companies have a bit different lifestyle and Startup culture is totally different and is super fast. And if you are working in a team where even though you are a software engineer but your work involves mainly the maintenance of an engineer's life might be pretty different.

P.P.S – Special thanks to Google for the images.








No comments:

Post a Comment