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