What I learned after two years as a software developer at Microsoft



As my second year as a software developer at Microsoft India is coming to an end, it makes sense to speculate about what I have learned over the past two years.



I came to Microsoft right after college, Indian Institute of Technology Guwahati, and this job was my first experience. Over time, I have grown a lot and have learned many new lessons. In this article I will try to structure my thoughts about them.



So, here are five things I've learned.



1. Research, research and research again



"The facts generally accepted today are the results of yesterday's research." - Duncan MacDonald


When I say research, I mean two things:



Conducting research to identify the root cause of a problem.



I realized almost immediately that it’s very easy to get into the habit of not going into the details of the problem and not understanding its true causes. And if you do not know the specific reason for the existence of the problem, it almost always affects when you are almost done with the problem. Almost is a very important word here.



Conducting research to find the most effective solution to the current problem.



It is important to understand that we do not just want to solve a problem; it is equally important to solve it in the most efficient way. This is what separates great work from mediocre. To stand out, you need to spend some time mastering this view of things, not just getting the job done. This is what gives you the greatest growth.



Everyone knows that preparing and completing homework in advance is very important, but at the same time it is very easy to complete them not completely, especially if you are solving not one, but many problems.



When there are several tasks in your mind, it is very easy to compromise and not get to the depths of each of them. Therefore, it is extremely important to keep this in mind at all times.



Thorough preliminary research helps us not only to look at the problem effectively and find its optimal solutions, but also not to lose sight of the big picture.



The most important thing is to remember that you are not paid for a quick solution, but for an accurate and complete solution to a problem.



This requires research, research, and more research .



2. Murphy knew about it, you should know too!



Murphy's Law:



"If something can go wrong, it will go wrong."


Two years later, I know this law very well, and it is the true truth!



I have constantly encountered it in all my projects, it is always applicable, and those who do not know it will be forced to find out in a painful way.



Therefore, it is very important to break a large solution into several separate, very small parts in the first place. Then you need to take the time to account for any exceptions / errors that can happen in these small discrete parts. At the same time, you need to understand how these parts will behave together and what exceptions / errors may arise due to their interactions.



Developing foresight is key .



But what can you do while you develop your foresight? You need to create many checks and balances to catch such problems in advance.



Many of the future problems can be caught early with unit tests, integration tests, and performance tests . One of the most important technical lessons that I learned only when I started working in the industry was the need to write code with test coverage . This will help not only me, but the whole team, who will take my work and develop it in the future.



To catch problems missed by tests, there is an infrastructure called the pre - production environment., which simulates work in the real world, that is, in a production environment . It is very important to check that your piece of code works reliably in the preproduction environment for some time.



But even after applying all these checks and balances, problems can still arise.



The most important thing in this case is to learn from these mistakes and not reproach yourself for them, because it is much more critical that they do not arise in the future.



3. Everything can be solved. The important question is what to decide first



Working in the software development industry, I realized an important thing: we have too many tasks to solve, but time is limited.



Therefore, it is perfectly acceptable to use prioritization and accurate assessment of key components, both for a successful team and for an individual. Since we do not solve each problem separately, I realized that any problem can be solved sooner or later, but you need to evaluate the time that will be spent on it and its importance.



To answer the question of how important it is, we assign a priority to the task, which can be a prime number indicating its importance. You can also assign a number to represent the number of days we estimate it will take to resolve the issue. These two parameters are very important for the following reasons:



  • In most cases, the project has not one, but several responsible persons. Therefore, it is always helpful to establish good communication with all management.
  • These options help you select the job that optimizes the use of your limited time.


Thus, we are trying to answer an important question, namely: which problem to solve first?



4. Incident management teaches you so much more



An incident is an unplanned outage of customers who are using your service.



"Incident management is the fastest possible process of logging, recording and resolving incidents to restore a business process or normal service operation."


When I was in college, I always imagined that my job would be to write code to solve a problem, that is, to be creative. But over the past two years, I've realized that it's a very important part of my job to be involved in resolving incidents with our product.



To manage these incidents, we in the team take turns taking responsibility for the entire product. That is, when an incident occurs, it may not be related to what I created earlier.



What have these incidents taught me?



Incidents in the past made me realize that it is very important to be aware of what others are working on.



This not only develops in me the habit of looking at their solutions and finding problems in them early on, but also taking examples from them, as well as using key components in my own solutions.



These incidents result in serious downtime for our clients / management and are often given high priority to resolve.



They also teach a lot about the subtleties of various aspects, so we can understand them deeper. Prioritizing these incidents develops quick thinking and teaches them to quickly offer clear, reliable solutions so that clients can continue their work.



Often times, when dealing with such incidents, we face larger challenges, which in turn help us understand the following:



? ?



5.



Β« - - , . , . , . , Β», β€”


Collaboration within a team is a very powerful thing that reinforces individual work.



It was only in a professional environment that I understood the role played by a group of individuals with their unique strengths and experience in approaching and solving a problem.



When looking for a solution to any problem, a fresh pair of eyes is always helpful. Therefore, conflict-free cooperation is very important to overcome obstacles.



Collaboration at Microsoft involves not only working with people in your office, but also working with people on different continents and in different time zones. So how do you optimize it, especially when you have to interact with someone you've never seen? You do not know this person or the difficulties that he had to face.



In addition, we were faced with a unique situation: due to the COVID-19 pandemic, everyone had to work from home. During this period, the size of our teams increased significantly, and many of our colleagues joined the organization virtually.



The most important lesson I have learned from all of these situations is that it is best to always assume the good intentions of others and always understand the problems they have.



Exercising tolerance and confidence in times like these will always help create a good team spirit and a positive culture. Gradually, this will affect the results.



Conclusion



I believe that at its core, software development is about solving problems : although it is quite easy to grasp and understand the technical details, it is much more difficult to understand the right attitude, view and approach to solving a problem.



The main purpose of this article is to repeat all those points that we have always known, but constantly ignored. It is the constant awareness of them that distinguishes the professional from the student, and over the past two years I have been able to make this transition.






Advertising



Order and start working right away! Creation of a virtual server of any configuration within a minute, create your configuration in a couple of clicks.



Subscribe to our chat on Telegram .






All Articles