Just recently I went through the amazing interviewing process with Amazon. I had really positive experience and I would like to share with you.
Disclaimer: The opinions expressed herein are exclusively my own personal opinions. To the best of my knowledge and understanding, this blog post is compliant with Non-Disclosure Agreement I have signed.
First of all, it is not like any other interview I ever went to. Though, I have to mention that it is also the first time I go through the interview with a tech giant company.
The interviewing process is really language and frameworks agnostic and at the same time it is very code and problem-solving centric. So what happens is that you are not asked about any specifics of any given programming language, but you are expected to write a lot of code on a whiteboard. You are expected to solve problems and your way of tackling problems and your approaches are something that is very important and evaluated.
Now I see how Amazon manages to build great teams and deliver awesome products. In my opinion, this is because they hire problem solvers and people capable of coding and thinking. I believe bias factor is greatly reduced because of the way they do interviews.
Let me take you through my Amazon Interview experience. I have signed NDA, so I cannot share any specifics of projects they are hiring people for, nor it is appropriate to mention exact questions I was asked.
Amazon was organizing Hiring Event in Vienna (Austria) and one of their recruiters contacted me on LinkedIn. I don’t know whether there was anything interesting in my profile or not, but it is how it happened.
If you are actively looking for a job and want to get to the interview with one of big tech companies, seeking a direct referral from within the company is probably the best bet.
In my case, it was one of those rare HR messages which I didn’t want to ignore and decided to pursuit further. I was asked to share my resume. After it was reviewed, I was asked to do an online coding test.
To know whether you are even worth talking to there is a coding test. It is organized online, but you also have the option to program live with some coder.
You can program in any language you feel comfortable with, as long as it is one of the major ones.
My test had three problems to solve, two of which were writing code. It is very similar to what you can get on programming competitions (ACM, TopCoder, etc), but less formalized and with fewer tests. I personally spent way too much time on the first task, because I decided to implement an efficient solution using BFS. Later I realized that any solution that passes tests would be ok as well. So instead of mine O(n), O(n^2) would be fine to get me to the screening session. Two of solutions were passing their tests. I didn’t have time for the third question, so I just wrote that I didn’t have time and explained how I would have solved it.
Screening is just 30 minutes chat. They would only ask you basic computer science fundamentals. Questions would be completely agnostic to programming languages or technologies. I believe, they just want to check that you know basics of programming, you can express yourself and that you will feel comfortable during the interviews.
This is something awesome. My right thumb still hurts because of holding whiteboard marker. Something I really liked was that there was challenge, there was coding, there was problem solving.
Almost all other interviews I had before with other companies were standard boring questions about one specific technology stack, starting from persistence layer moving towards presentation layer. I never had to write code during my interview (maximum few lines of code). And only once I was asked to solve a specific problem for a start-up company.
I had four interviews during the day lasting for 50-60 minutes. For me, it looked like I would get a bit more senior level questions with every next interview, but I may be mistaken. I also don’t know if this is the way interviews are usually organized at Amazon.
So, as I said, I cannot tell exactly what I was asked, but my first interviewer was a person who writes a lot of code himself. He would slowly transition me to the coding task, which was to implement some data structure of some sort. I guess I could be something else as well. I messed up the beginning, but later it was fairly easy and I had the implementation on a whiteboard.
The second one was really interesting. It didn’t have much introduction. There was a coding problem right away. Unfortunately, I was a bit too sloppy on this one. I jumped to writing code too quickly. So, as first solution I implemented three loops O(n^3) and then, with guidance from my interviewer, I switched to writing O(n^2) solution. Somehow, even I was able to solve the problem, I feel I was too quick to jump to writing code and didn’t think enough up front. So, remember – less rush!
The third one was way more smooth at the beginning. Many situational questions. When we switched to writing code, I believe the problem was also more complex. I fairly quickly identified that the problem had to be solved using XYZ technique, but I struggled a lot with an actual implementation. I didn’t manage to have a complete solution, but I hope I was able to convince my interviewer that if I had a bit more time I would have had a complete solution in place.
This one was the easiest for me. There were two designing questions. The first one was object-oriented design for some system. And the second one was system design for the very same system. I didn’t have issues with either one of those (at least I think so).
I was very quick with OO design. I’ve done a lot of design in the past and I believe in core principles of OOD. Besides, I have even written a book on design patterns. That had to play some role.
The system design part also went very smoothly. Probably because I have very relevant experience working for a big web company. Scalability, availability, performance principles for system design isn’t something new to me. I’ve never configured load balancer nor I ever setup Master-Slave-Replica, but I just knew these things and how they are supposed to work. Just by coincidence recently I read “Release It!” book and that could have played some role as well.
In the end, I could ask questions that were most important to me. Like questions about the team, learning and growth opportunities, projects, and technologies.
I don’t know. I’m not there yet.
There is one aspect I don’t like about the interviewing process like this. Amazon, Facebook, Google, Microsoft are huge tech companies that have somewhat similar standardized interviewing process. You can read online about how it looks like and what are common questions. There is even book “Cracking the Coding Interview” that has 189 coding questions.
So hypothetically, let’s imagine there are two deep copies of me. And by “deep” I mean that we both have absolutely identical personalities, knowledge, background, experience. Now we are both to be interviewed in one month. Copy One doesn’t have time to prepare and just looks up what are the main types of questions. Copy Two takes a month of vacation and sits at TopCoder in practice rooms solving, say 300-500 problems. Copy One is also capable of doing it as both of us did some ACM in university 8 years ago. Now when the interview comes, Copy Two just shines and cracks all questions. Copy One struggles with solving problems but manages them somehow. So when the performance of these two copies is compared Copy Two wins. But what hiring company gets is almost identically same with a difference of 1 month of TopCoder practice.
Definitely, there are reasons why the process has to be standardized. It could have been way worse if it was otherwise.
I did prepare myself. Not as much as I would like, though. Buying a whiteboard for kids was definitely a good investment from my side. I did couple of problems on the whiteboard, watched couple of MIT lectures on algorithms, bought a copy of CLRS (I was even ready to use Master Theorem if asked).
I really liked interviewing process at Amazon. I appreciate all the time invested in interviewing me.
Disregard if I get an offer or not, or if I will have to decline it, I won’t change my opinion about this interviewing experience. Just going through Amazon Interview is worth the time and preparation effort.
Even if you listed tons of technologies, badly looking resume hints that you don’t care about the quality of things. Employer might think: “He must be writing his code in the same ugly way.”
In this blog post I want to share few things I did to my resume.
Actually, I have more of a CV than a resume. After recent changes I created two different versions of my CV. One is more concise two pages that I would normally use and another is extended 4 pages version. Four pages version contains detailed information on projects I worked on, so it can serve for my future editing, should I need more information.
Probably, the main thing anyone should do to their CVs is to ensure your future employer will have a clear idea on what you had done before. Obscure general phrases are just destroyers of a resume or CV.
For my own resume I completely rewrote everything into smarter format. I used past tense bullet-point sentences to clearly describe what I did. Let’s have a look at before and after of one concrete example.
This is what I previously had as a summary for my experience at bwin.party company:
“Developing and extending large set of back-end services in scope of enterprise SOA architecture in large betting company. Scalability and performance were top most requirements.”
It was followed by a list of projects I worked on. One of them was statistics service I created. I described it like this:
“Service which fetches huge amount of statistics data from external provider over FTP and transforms it for internal consumption.”
Obviously potential employer looking at this description wouldn’t have any idea at what my contribution to this project was. Was I implementing it from scratch or was I fixing bugs? Or, maybe, I just know something about the system so I listed it.
After editing, the summary became:
“Bwin.party is an online betting company. I worked in the company’s sports branch, with a team responsible for backend services. Scalability and performance were the top most requirements. Most services were exposed through REST API; they had to be available 24/7 and withstand extreme loads during championship events.”
Then, I came up with this description for the statistics project:
“Designed, implemented, and launched a new sports statistics system. This system imported data from an external FTP location and made it available on our website through AppFabric Cache.”
This description exactly says what I did and even provides a glance look at some of the technologies used.
Another thing I had to improve was my writing. I’m not native English speaker and I’ve never took any English grammar classes. I make many mistakes.
I hired an editing and proofreading company to go through my CV and fix mistakes. I only paid 31 Euro, but my CV became English language error free. Plus they provided a few general suggestions on improving my CV.
You have to be really careful with someone editing your CV, as they might change the meaning unintentionally. For example, they wrote “Fixed a serious performance problem using search engine…” when it really had to be “Fixed a serious performance problem in the site’s search engine…”
There were obvious problems that made their way from times when my English was even weaker. For instance, sentence “I was awarded in nomination “Best Rookie Developer of 2008” in my team of 50 people, so am proud of this, because at that year our team got a lot of new people.” sounds horrible to me. Now it just says: “Was awarded the “Best Rookie Developer of 2008”.
I completely changed the format of my CV. I’ve borrowed styling and formatting from my friend’s resume. He’s hired a professional technical writer to create a CV for him.
Previous version was grey 4 pages wall of heavy text with odd formatting.
The new version is just two pages. It is nicely formatted and is error free. It is available here.
It’s very important that someone reviews your CV. I asked my colleague who does a lot of interviews to review my CV. He said that if CV is short, screener reads through all job posts, but if it is long screening ends at your last job post. So it depends what you want to show. Other thing he thought of, was adding skill grades for different technologies, like C# (major skill), F# (minor skill). I didn’t incorporate this advice, but I’m still considering it.
I added a new photo to my CV, not the one you currently see. After I showed my CV to my wife, she said that she would never hire someone who looks that frowning and sad. I had to make a new picture with a hint of a smile.
I already have official recommendation letters from two of my previous companies. I’m planning to include those when applying for a job. A recommendation letter for a software developer is not common in Ukraine where I had worked before moving to Austria. But here in Western-Central Europe it is almost a must. I think that it doesn’t do any harm to ask for an official recommendation letter even if it is not common in the country where you live. Ask for it now, otherwise it could be a difficulty to get it few years later.
I’ve never used a cover letter. It has never came to me that this might be a useful technic. But it might, especially if you are looking for a specific job and want to outline exactly why you are the best match for it. Should I find my “job of dream” I might consider creating dedicated cover letter. For now, I won’t create one. Have you ever used a cover letter? Did it work for you?
I haven’t done this. I also have mixed feelings about hiring someone to write my CV completely from scratch. Probably, they can do a great job. But finding a really worthy professional might take lot of time. Also a good one would cost you few hundreds $. Though, it is definitely a great investment, if you resume looks terrible at the moment.
My resume wasn’t looking good. It isn’t extraordinary great now, but I think I’ve improved it significantly. Main things I did to it, was rewriting it in more concise and descriptive manner, fixing mistakes by hiring a proofreading company, and changing the styling.
Hopefully, this post can be of some help to make your resume look better. I would be really happy to know if it helped.
If you have suggestions on further improvements to my CV, I would really appreciate it.
There is more to having professionally looking CV / Resume. You should consider having market oriented resume versions.
For instance, described above two pages CV with a photo is common for EU, but it is not a great thing for US market.
In US it is more appropriate to have 1 page resume without any personal information.
As a result I created US oriented one page resume.
After going through short free blogging e-mail course by John Sonmez, I didn’t sign up for the marketing course. I was a bit sceptical about paying few hundreds for the course. But not to miss on the opportunity to learn from John I decided to read his book “Soft Skills”. (Actually I listened to it via Amazon Audible.) The book wasn’t exactly what I expected it to be – it was much more. It’s kind of a book I would like to write myself someday. The book isn’t just about soft skills needed to perform your everyday tasks at work, it is much more generic and broader in topics. The book is about skills you need to succeed in your life as a software developer. “Soft Skills” includes advise on career, productivity, finances and even fitness and nutrition.
There is a lot of unique in the book, but probably you will find yourself familiar with some of the recommendations. For example, in one of the chapters on productivity John suggests using pomodoro technique. Obviously, it isn’t something new. But the author explains how to make it work and also adds few of his own practices. Everybody knows that their health is very important, but unfortunately too many of us neglect to do anything about it. I think emphasis this book does on fitness and health in general is something that makes the book special. Personally, I didn’t really enjoy some of the chapters on finances. Maybe that’s because I’m almost done with my goal of reading 13 books on finances and investing this year. But, still, I think that others might find it useful, plus it is interesting to know about the financial experience of the author himself.
I’ve certainly learned few concrete tricks and technics I’m going to use when searching for my next gig, like creating a resume that stands out, applying for a job, hacking the interview, negotiating effectively and other.
I will also apply some of the productivity recommendations at my current work.
A lot from the section on learning is very practical. Hopefully, concrete steps this section is offering will help me overcome some of the inefficiencies in my learning process. I have to admit that I often learn incorrectly. For example, frequently I first read a book and only then try things out. Intuitively it felt to be an inefficient way of learning, but I continued to do so.
The other big takeaway is health related. This year I started to run (well, again), but this is not enough to feel myself fit and full of energy. The problem is that I’m not consistent in my runs. I will add some scheduled fitness exercises to my runs and will try to follow John’s advise on the topic.
John has managed to retire at age of 33 and even I’m 5 years away from that age I have less aggressive target of retiring at 41. Best takeaway on the financial side was realising that I share same opinions on the matter and have already taken few of the first steps on the way to financial freedom.
“Soft Skills” is up to date book with very sensible, practical and actionable advice for any software developer. It has a potential to greatly improve your life – not just your career. I would highly recommend to read this book. I’ve even ordered a printed copy of the book as a gift for my friend for his birthday.
See the book on Amazon or buy it using my my referral link below.
*** NOTE/DISCLIMER: The opinions expressed herein are my own personal opinions and do not represent my current employer’s or any of its employee’s view in any way. I also won’t mention complete names of my colleagues or company names, you have to guess or just know ***
Today is my last day with my current employer. I worked for this company for almost 1.5 years. Not much, but during this time I worked with many great people and I gained unique experience. I just read my post on leaving my first job and I actually enjoyed the structure in which it was written. In this post I will express my thoughts and impressions of working for this company.
In summer 2011 one of my former colleagues who had left SS years before me wrote a mail asking if I’m not interested to move to another country. He said that he remembered me as a good developer so he wanted to recommend me for a position in Austrian company where he worked at the time. Now he works for MS. Since I felt myself young and limitless I agreed. I had first interview over Skype. Not sure if I impressed interviewer, since I wasn’t strong in my Web skills, which has probably decided on the team to join. But seems that he liked me. Around that time I got married and we were heading for Europe for our honey week. Next interview was scheduled for the time when we planned to be in Vienna. This was the first time when the company saved money on me. This interview went much smoother and I’m sure I have impressed guys.
One of the most toughest questions was salary expectation. It is obvious that estimating salary expectation for living in another country you have no clear idea about is hard. Forums/government papers and reports help but not extremely much. I made my number and it fitted into company’s rage well since I got an offer with exactly that number.
BUT it definitely wasn’t the reason to move. I knew that cost of living in Western Europe is high and for money I got in Ukraine I can buy lots of goods. You know what? Higher cost usually means higher quality. This is absolutely true for Austria. But even this wasn’t complete portion of my decision. I guess primary reason was to try new experience and plus it was a time to change my learning curve as well.
Unfortunately it takes ages until Austrian government issues long term visa for 3rd world country. I had my interview in Summer, but started to work in Winter. I didn’t know what to expect in Austria and knew very little about the company I was joining. Whole move was very exciting time. Our parents had tears in their eyes while we were waiting for the flight. I understand them – it was not possible to know if we were going to return back or stay living there. It is still not known.
This time was very much different from anything I would have had if I stayed in Ukraine. Me and wife had great chance to travel across Europe and we have a daughter being born here. I anyway plan to have a blog post on how it is to be foreigner (developer) in Austria, thus wait for it. Now I will concentrate more on career.
On my first day I was assigned a bug in search engine. But since I didn’t have credentials to most of the systems and tools and I knew nothing about the domain I have fixed only 2 days later. Fix was one line change in the config. I remember how Sebu helped me right from the beginning. This was colleague support you can only dream about. Managers wanted to try me out, thus assigned a project with middle importance and priority. When I finished with it I remember none was really expecting it to work completely properly right away. But project itself turned out to be a success. This is how I proved myself to be reliable worker producing quality software.
And I started to enjoy it. Every piece of code I was assigned to write received lots of my attention. I cared for the code quality much. I even tried to have my code 100% UT covered.
The company I joined is specialized in online entertainment, and I started in sports betting section of it. Biggest difference to what I had to do back in Ukraine is that this company is product company. We produce our own product and make money for ourselves. Team which I joined is responsible for developing/extending/maintaining whole bunch of services (maybe 40 or more) within enterprise SOA architecture.
It is pretty normal that there was room for learning when you start in new company. I definitely gained new experience in tools and the way how software is produced and deployed to production. Plus it was a move to more “webby” things for me. My team is doing production rollouts almost each weak. Millions people use our web site and we change something behind the scenes at the same time. Great.
I didn’t change my team for the entire time in the company and I don’t regret. I know that there were people who got tired or stopped enjoying their work or there was something they didn’t like. But I like the team very much. Every developer in the team is highly skilled and experienced.
Sergey, Sebastian and Simone are three developers from whom I gained the most knowledge and have taken something from them. Other developers Predrag, Lukasz, Alex, Raphael and Vladimir were very kind to me and it was pleasure to work with all of them. Some just joined the team, some left and for some big career journey just started.
For sure I improved my English, but there are two other languages I improved, like German and Russian. Before this company I never spoke Russian. But things turned in a way that I’ve significantly improved my verbal Russian skills in Austria. The most collaborative with me was Sergey. It was eye opening how frequently he has new ideas and knows about new features and tools. Thank you.
I would like to thank all developers with whom I worked and also our testing team. Without testers we wouldn’t be able to produce quality software.
It was also a pleasure to work with product owners, delivery managers and other departments of company.
Special memories will stay with me about the DB dev team. It was joy.
I will definitely miss Friday lunch walks to Greek restaurant. It might be surprising but except of improving my dev skills I’ve learned how to play table soccer. Not that I play like a pro, not even comparable to guys who work here for years, but quite acceptable. I think you can even tell how many years person worked here when you look at his/her wuzzler skills.
Also I will miss this year’s action day and numerous parties throughout the year. I say I “will miss” since I will work in place where people probably don’t like parties, sport activities that much, but I have to try before claiming anything.
If you read my post on leaving my previous job you will understand that I left not because of money or dissatisfaction but because of new experience and new opportunities. I’m very happy about my current team and satisfied with work I do. On the other hand things have changed for me. My daughter is now 18 (… Days!) and understanding that I will have to support her (and likely her sibling) changes the way I think about money.
Nearly 3 months ago I was contacted by some UK company looking for .NET developers for work here is Vienna. They titled e-mail with solid salary number, which was so attractive it would be silly not to try. First interview I had on the phone with some Indian interviewers. My questions on what this is about were somehow avoided. True conspiracy. But after they were much satisfied with my skills all the cards where turned. This company is just man in the middle connecting me with something big.
After some negotiations with man in the middle and and direct interviews at UN I was offered a job as a contractor. I’m officially starting my own business from 1 of July being registered here in Austria. I even have my own European VAT identification number. And can accept business opportunities from whoever I want. Well, not that I will have much time, but it is just nice to realize this.
I was in healthcare and then moved to gambling and now will dig into atomic energy. There is a rumor flying around about how depression it is to work for those guys and how it is difficult to change bureaucracy things. I see myself as a changing force aimed to make more things being done. And I’m looking forward to it!
It was great time to work for the Company.
I miss you all!
For me it is time to bet and I hope to win!
“Be so good they can’t ignore you” is a quote from comedian Steve Martin that captures what is needed to build a working life you love.
“ The career capital theory of great work […] provides the foundation for all of the ideas that follow it in this book. It claims that the key to work you love is not to follow your passion, but instead to get good at something rare and valuable, and then cash in the “career capital” this generates to acquire the traits that define great jobs. This requires that you approach work with a craftsman mindset and not a passion mindset. ”
Never heard of such book? Don’t panic, I’m here to help you understand if it worth your time or not.
So, last week I read “Being Geek” in hope that it will energize me and give some additional inspiration, which I’m lacking it in my new job, but this is topic for separate post.
I’m not completely sure if I’m any kind of geek, but the book describes people who share many similar habits to those I have and very likely many other developers have as well.
Michael takes you though one reincarnation of your gig from the beginning, when you are just passing an interview until the end, when you are considering to leave. He provides you with lot of hints and tips for any stage of your career, whenever it is negotiating of your salary, creating quality code or leading others.
I’m lucky that I’ve never heard about author’s blog “Rands in Repose” before, because otherwise I would not reap anything new accordingly to reviews on Amazon. I read this book in quick pace, as I usually like short essays talking about our developer’s job. I think that book has increased by baggage of understanding how developers see their profession, how real management should look like, and what are interactions between different types of people in software organization.
Author definitely has much more management experience than average developer has therefore his story is shifted towards company’s core – employees and their interaction. He helps to understand how organizations operate on higher level. I think that this is exactly what I’ve grasped from the book, and what you can also take for yourself.
Do I recommend the book? – Well, if you don’t read Lopp’s blog and if you like career and software craftsmanship books and if you don’t have any other higher priority books in mind, then yes. :)
Recently I’ve got e-mail from guy, looking for some advice. At glance it sounds like he is worrying about finding his first job as software developer and willing to get some hints/advices.
First of all I would like to thank very much to those people who read my blog posts and who comment or send me e-mails. This is the best feedback I can get and it is the only true measurement of blog’s success.
So, I’ve got this well-written e-mail from student (I guess):
Hope you are doing well. My name is Wes, I just read your articles, I have to say, I am your fan now.. Guys like you make a difference.
I am writing to you because I have the similar passion for programming as you, and that is why I went for my bachelors in Software Engineering, and while in school, I learned many languages like C, C++, Java, VB.NET and ASP.NET.
Out of all, .NET excites me the most. But now when I am about to graduate, I dont really feel good about my programming skills, and getting a job.. The best I have done in VB is made a calculator, made connections to the database, and executed some queries.
What I want from you, is some tips about what my approach should be at this point AND are their any sample projects that you recommend I should do, that will help me learn more and expose me to different sides of the programming world..
I would highly appreciate, if you write back, and I am sure you will.
Thanks – and good luck with your career!
I’m replying publicly, so I can share with other’s who have similar questions. Wes is not mentioning his last name so you won’t identify him :). Anyway I think that this e-mail is good one and it raises good questions. Starting from now “you” means either Wes or any other starting programming guy looking for some advices.
First of all seeking for personal improvement is great step towards it. I think that once you have clear goal and passion about it you won’t waste your time and life.
I just came across small e-book where found great answer for you from Karl Seguin:
“… If you’re willing to take the time and try it out, you will see the progress. Pick a simple project for yourself and spend a weekend building it using new tools and principles (just pick one or two at a time). Most importantly, if you aren’t having fun, don’t do it. And if you have the opportunity to learn from a mentor or a project, take it – even if you learn more from the mistakes than the successes.”
So I will expend this thought a little bit further.
You would need to write many projects – the more the better. Keep your hands dirty and work with the code, every other day you should feel that code, you wrote yesterday is crap and you can write it better today. If you are still student in Software Engineering be sure that you are fulfilling you time with programming. If you feel that learning courses are not supplying enough tasks for you, just create them for yourself.
I know that when being a student it is very interesting to take part in some sport programming competitions. So do it. You can also take part in some online competitions like Algorithm competitions at TopCoder. Those can be for your gym.
Definitely you need big projects to work on as well. These projects should take from couple days to couple of weeks. Write your own “paint”, not comprehensive one, but at least with basic functionality. Write your own money accounting system with your database, so you learn all basics of data access. You then can change data access from simple ADO.NET to ORM (try Entity Framework or NHibernate), you then can try to explore non-relational databases, like NoSQL. Do some web programming, if you did ASP.NET you can explore MVC ASP.NET. Explore mobile development by just writing same simple calculator for Windows Phone 7. You will get familiar with some Silverlight/XAML. If you are excited about .NET make sure you know C# (personally I cannot understand why Microsoft promotes VB that much, trend is C#).
Find your peers interested in programming. Learn programming in fun way, enjoy it.
Whatever you do, make sure that google in your force.
You will need to learn continuously. Read many books, but know that human forgets 90% of things heard, 60% seen & only 10% of things done. So if you read, but not try things read your time can be wasted. I have another blog post where I propose some tips on how to become successful developer, read those.
As of job. Ask older peers what are opportunities in your location. Visit software companies near you, ask them if they have some learning courses, which skills are in demand for that company. I ensure you, this is not as much difficult as you might be expecting. Also here is my article about career plan for software engineer. Probably it is too early for you to think deeply about career before you actually started as developer, but at least make sure you know how your future job might look like.
So key things:
Hope I have been of some help for you, Wes and Dear Reader.