The title is a slight reference to Paul Graham’s excellent talk titled “What You’ll Wish You’d Known”. Personally, I really love it. It’s a highly recommended read, especially for young and clueless people.
If you ask me, three years is a lot of time. Since I am leaving Microsoft soon and this is the third fiscal year that I’ve spent as a consultant at the company, I thought it would be nice to look back and gather the key learnings from this period. I learned incredibly lot during these years, because Microsoft was my first true multinational corporate job, with all its good and bad.
So I was thinking recently: how could I recap that? What advices would I give myself, if I could travel back in time and have a short chat with my younger self? I looked back, wrote those advices down, and you can read them below. (The order of the advices has nothing to do with their priority.)
Some of these stuff I learned by burning myself, some by watching other people burning themselves, or simply by working alongside incredible and sometimes not so incredible people. I hope all of these thoughts will be useful for those out there who are in similar shoes like I was in a couple of years ago: starting a job as a rather inexperienced IT consultant at one of the biggest tech giants on the globe.
Respect wisdom, respect experience, respect behavior. There are so many qualities in a human being based on which you can respect that particular person, so choose what is important to you. But never respect somebody based on how many wrinkles or white hair they have.
Mind you, I am not saying you shouldn’t help an elderly lady cross a busy street. What I say is that in a work environment, accepting everything from somebody based on the fact that they are older than you is highly counterproductive. When you don’t have to fight day by day for survival, and you have access to modern medical care like most people do in the developed world, living long is really not an indicator of anything other than a healthy lifestyle and/or lucky genes.
Even though titles are much more reliable indicators of a person’s qualities than their age, they still can be very misleading a lot of times. Different companies value employees based on very different aspects and metrics. Or they were simply at the right place at the right time. Or they know somebody who know somebody who… There are a lot of reasons why someone is in a particular position at their company that you simply cannot see just by looking at their title.
Because of all these, somebody who is titled “Senior Software Engineer” in one company might not have the same level of experience or personal virtues as another person at another company with the very same title. Make sure you always keep this in mind when working with someone who you don’t have previous experience with.
Being on time is one way to show respect for your partner (which is not based on age, right?!), be it a customer or a coworker. Being late from appointments doesn’t show how busy you are, and being busy is not an indicator of your importance anyway. Being late is rude. It’s simple as that.
Stay up to date and be hands-on with technologies you use and talk about. Of course, you can bluff your way through a lot of situations, but sooner or later people will see right through you and that’s the worst possible situation that you can get yourself into. Keep it real and dedicate time to your technical readiness. Nobody in our industry can afford the luxury of not learning constantly. You either do this, or you’ll become irrelevant in a matter of months, if not weeks.
Also, in our industry, everybody who worth their salt must possess T-shaped skills. It’s pretty much the only way to be a valuable part of a proper IT team. So pick one or two fields where you become an expert, but don’t ignore the surrounding technologies, especially the ones that can be directly connected to yours. Otherwise, you’ll quickly end up as a coder instead of a software developer.
As a consultant, your task is to solve your customer’s problem, not to write code. Writing code is just one way of solving those problems. Sometimes all it takes to overcome a hurdle is to pick and use an appropriate SaaS offering instead of firing up your favorite IDE.
Listen to your customers, pay close attention, ask questions, think twice and speak your mind only then.
During planning, consider real life/business problems first, technical/implementational second.
When it comes to implementation, choose the tech stack that is battle tested, solves the problem quickly, effectively and reliably. Never choose a tool just because that’s currently the sexiest one on the market or the one you are most interested in playing with.
If you want to be perceived as a professional, then you have to communicate clearly, politely and honestly.
Document what you do. Have decisions written down and approved by key stakeholders. Every decision. All the time. It’s really not just about protecting your own back. I firmly believe that expectation management is one of the most crucial and sometimes the hardest part of a software development project. It’s in the best interest of not just you, but of the customer as well that you speak the same language and you work towards the same goals with the same expectations.
Sooner or later you’ll realize that the most difficult part of this job is communicating with people and keeping relationships healthy. Writing code and maintaining infrastructure is dead easy compared to that.
If you want people to trust you, then being honest is not enough, you must be accountable as well. Customers and coworkers will trust you fully only if you take ownership of your decisions and their consequences. Be able to admit you did something wrong and have the courage to take the possible blame for your mistakes.
This is a mistake that many people tend to make early in their careers. Especially when you are in a new environment and you would like to get on the right side of everybody, you tend to put too much on your plate. Sometimes it’s not even you who volunteers for the extra work, but a customer or coworker pushes something your way that is either out of scope of the project or simply not your job to do. Trying to please the people you work with is important, challenging yourself is great, but you need to recognize your own limits and you must be able to make them clear to others. You have a life of your own and you work to live, not live to work.
Always give constructive feedback, as objectively as possible. Never start turning down an idea of a customer or a coworker by saying, “this won’t work, because…”. Don’t refuse ideas flat out just because they are not yours or because they are coming from someone you wouldn’t expect them to be coming from. Be open to criticism and take it as an opportunity to improve yourself, not as a personal attack against you. Stay humble.
I am sure that working extremely long hours and pulling off incredible technical feats are nice, and your customers and employer will be thankful for it in a way or another. But being able to use your legs after the age of 30 is even nicer, and I am sure you will thank yourself for that even more. Don’t fall for the usual trap that a lot of people who do intellectual work fall for, and don’t let your body dwindle while you train your brain. Work will wait, but your health won’t. Do a favor for your future self and your loved ones and make sure you dedicate enough time and energy to your well-being: do regular exercises, eat healthy and sleep well. And buy a vertical mouse before your wrist starts to hurt!
Even though I’ve worked with a lot of exceptional people during my short career at Microsoft, I would like to say special thanks to three particular persons who made the greatest impact on me, both personally and professionally. Those are Erzsébet Jenet, Genady Belenky and Francesco Tumiatti. Thank you for sharing your experience with me and guiding my steps through the past couple of years! It was truly a privilege working with you.