I Really Enjoyed My Internship At Amazon...
I am sure a lot of my close buddies, family, and potential interns will be asking me, how was it to intern at Amazon. Honestly, it was amazing, and I would suggest it to any young developer out there. It’s really eye-opening, and really puts your own skill into perspective, along with all kinds of really amazing things. Here is my Amazon internship experience. Some things may be vague however, since HR couldn’t answer some of my questions before I left.
Interviewing for Amazon
So, I applied for the 12-week summer Amazon internship around September, and got an email saying they were interested in offering me an internship. For an intern, you start by doing an online debug test (which is very similar to CodeFights, and quite easy in my opinion), and then you do a phone interview. In my phone interview, I got a really kind and well-spoken individual, who asked me to solve a Breath-Depth search problem. I didn’t know it was Breath-Depth till after, but essentially it involved adding rows in a binary tree. Funny enough, my landline phone did not have a speaker option, so I did it all with one hand, and I finished in exactly 45 minutes (you are given about an hour in the phone interview, but the other 15 is for general introductions). I coded the problem very inefficiently, but I stressed to the interviewer I would definitely be going back to improve it, if I had Google, and a little more time. As he was reviewing my code, he thought I made a mistake, but I told him I did not, and we could come to a solution together if it was indeed wrong. But, I was right, and we then gave our goodbyes. The whole time during the internship, I tried my best to appear to the interviewer as “The friendly intern who knows a little bit about code, but is willing to learn, and is easy to work with”. I even used the word “we” a lot as I thought about my code (out loud). Thankfully, I found out about 3 weeks later I got the internship!
My general tips for a big company code interview are: Be very friendly and be someone that is really easy to work with (because even if you cant code, you’d still be nice to have around), Do code fights or any online debug tests, code on a personal project in the language you will be interviewing in, check that your land line HAS A SPEAKER PHONE OPTION, and read “Cracking The Coding Interview”
Preparing for Amazon
My amazon recruiter told me that there was nothing I could do in the meantime to prepare for my internship, and they encourage me not try to prepare for it. But at the time, my perspective of Amazon, is that everyone was light years ahead of me in code, so I wanted to be as familiar as I could with whatever I was learning. So, I eventually learned I would be on the “Speech Platform” team. After hearing this, I did some research and asked some buddies, and I decided I should look into Machine Learning and Natural Language processing. So, I learned a bit of python using Google’s AWESOME machine learning Youtube series, and I made a machine learning program that could analyze text and learn if it was a meme or not! However, after this, I found out I would be working on Alexa, which is REALLY exciting!
My manager then voluntarily reached out to me to answer any questions I had, which is awesome, and I am quite thankful for it. I found out that I would actually be working in AngularJS (Which is what I was already very comfortable with, and love working in), and I would be working on developer facing tools for Alexa. I was a little bummed that I didn’t get to use any of my new Machine Learning knowledge, but I was quite excited to be working in Angular, and being developer facing. I eventually found out you need to be VERY qualified to touch any of the Machine Learning or Natural Language Processing at Amazon. In conclusion, My manager was someone I knew I would get along with from the beginning, and was a super cool guy (He used to skate like me!).
Also, for living situations, Graebel/Aboda (Amazon’s intern housing provider), offered me the following options: Single 1bd room corporate housing, Shared 2bd corporate housing, Hotel for the entire summer, shared UW dorm room apartment, and shared 1bd apartment for yourself and any guest that would need to be living with you (Spouse, or family). I knew my girlfriend would be visiting me a couple of times, so I requested the following:
- Single 1bd apartment
- Hotel for the summer
- Shared UW dorm
However, I ended up getting the hotel for the first month, and then they moved me to the UW dorms for the last two months. Which wasn’t optimal (I’ll explain more in my “Living in Seattle”). However, Amazon was kind enough to pay for a flight for my girlfriend to visit, which was extremely nice, and I was VERY grateful for it :)
Working at Amazon
I learned a lot from working at Amazon. Not only did I learn about different coding practices and how to code better, but also, I learned a lot about corporate culture, and the developers that work for these big companies. These are the main things I learned at Amazon:
Things I learned at Amazon
-
Rebasing in Git. Amazon uses their own git management system, and has a very odd git flow in my opinion. But because of this, I couldn’t get away with a lot of my debug, and testing commits, as each commit represented a feature, rather than parts of a story. My mentor was kind enough to show me this, and I definitely am going to try to start doing this in my personal projects.
-
AngularJS Directives. In my angular projects, I have used directives many times, but never at the scale that the project I worked on used them. Almost every component on the pages were a directive. And because of this, when I created my own, I had to dive deep into how they were creating theirs
-
Alexa Skill Development. I learned how to make skills for Alexa, which is quite fun. I currently have one published, and I definitely plan on making more for my Echo.
-
How to behave at a corporate company. Software development is very laid back. As in, it is extremely casual, and everyone wears what they would like, and isn’t afraid to express themselves. Personally, I see myself as an EXTREMELY casual person, and I often say very out-of-the-box things. However, I always think before I do or say anything, so I definitely had to slowly see where the points were. I am glad to say, I definitely felt like myself while at Amazon. But, there are definitely some unspoken rules about what you can/can’t say. And what you can/can’t joke about.
-
Web Scale. Pushing to production is a big deal anywhere you work. But, it matters more than ever when thousands or millions of users are using your code. I defintely got to see how Amazon does things like Continous deployment, and the lifecycle of how code is run and tested before reaching production. I definitely learned how to code for edge cases much better, and how Quality Assurance is done at such a large scale.
-
Estimating code. Estimating how long code will take is something that is difficult for any software developer. But I am glad to say, after facing a few tough dedlines, and needed estimations, I have deifnitely learned how to estimate my code MUCH better, through the help of SCRUM sprint planning, and my team!
-
How to handle an always changing team. While at Amazon, my team grew 5 more developers (including myself), but we also lost 3 developers (including myself). I learned that teams are almost ALWAYS changing. From skating in the past with my skate crew, I definitely have a strong sense of team work, brotherhood, and group mentality. And, I definitely brought that with me, and I do feel like I helped the team come closer together. But, It is quite hard to say good bye, and I can definitely see why software teams are close, but not ride-or-die for one another. Because they join and leave so often.
I definitely feel like I grew exponentially as an developer, and my manager was kind enough to let me keep the feedback he gave me, and I wrote down all of the career advice the junior and senior developers gave me. And next, I would like to go into a pros and cons of Amazon:
Pros of working at Amazon:
-
Web Scale. Like I said above, if you want a big impact on the world, this is the place to do it.
-
Friendly employees. 90% of all the employees I met at Amazon were very awesome to be around. I did not dislike anyone there, and I definitely became close with a lot of people there.
-
Build Process and Workflow. I is very enlightening to see how Amazon works, since they are such a large scale. You definitely get to see a lot ideologies you can bring with you wherever you code.
-
Wikis and Tech talks. Amazon has a wealth of information that is all kept internally I watched about 10 tech talks that greatly expanded my knowledge on array of things such as: Code, AngularJS, Golang, Work life balance, Tech debt, Scrum, etc…
-
Competent developers and employees. Everyone I met at Amazon was very smart. After working at start ups, or clients who “think” they know code. It is very nice to work with UX designers, project managers, and other developers that understand what they are saying, and are willing to work with you to create a feature.
-
Freedom. Amazon provides a lot of freedom. My manager allowed me to come in at any reasonable time (just be here in time for daily meetings around 11am). And I was allowed to leave whenever I felt like I was at a good stopping point for the day. So, if I was working on a small or easy feature, and I got it done fast, I could leave after only 6 hours of work. However, I will admit, when I was crunching to get a feature done, I did work a few 10-11 hour days. But, it definitely averaged out to about less than 8 hours a day.
-
Networking opportunities. You meet so many talented people at Amazon, with a wide array of connections. I was fortunate enough to hand my business card to everyone at Amazon I worked with, and I definitely feel like I slammed doors open for myself in the future.
-
You work with the best of the best. Really, you get to work with those that have created AMAZING projects at a huge scale. They is a lot of opportunity to grow, and work with great developers, and it is awesome.
-
Innovation. Amazon is very innovative, AWS and Alexa are both very ahead of their time, and its awesome to work on either of them.
-
Free food, and tons of events. As an intern there were a ton of really fun intern events (mostly during the beginning and end of the internship). But, there were also a lot of org/team specific events that happened, and if you look for them, theres almost an event every day for you to meet other Amazonians, with free food and drinks! (mostly alcholic ones too ;)). Also, Amazon recently started a free community banana stand, which was really nice because it meant I got to eat two free bananas for breakfast every morning :)
-
Seattle. (I’ll explain more in living in Seattle)
Cons of working at Amazon:
-
Work flow and tools. Ironic right? As a huge open-source developer, I come across a BUNCH of amazing open-source tools. And I will admit, most of the tools I used were up to about 20x as fast as Amazon tools. Amazon works mostly in Eclipse/java, so their tools are really geared towards Eclipse/java development. Even when working with Eclipse/Java development, you still run into a few road blocks, or trouble getting everything set up when you create a new project. Any other development outside of this is generally slapped on to their internal tools, and really slow things down. My work flow is usually Vagrant, Npm, Grunt, Sass, Sentry, etc… And they do have some alternatives to these, but honestly, just aren’t as good. They are very out dated as well, and had a VERY steep learning curve. And the tools they did not have alternatives for, they kind of just worked around, and when i asked to use them, or introduce them to the team. I kind of got blank stares, or they would take forever to get past IT and legal teams.
-
Random Legal Requirements. Like I just mentioned above. I wasn’t allowed to use a lot of tools due to they may be leaking Amazon information. This is completely understandable, but there is not quick way to get things approved. Also, I had to sign many legalese-y documents on what I can/can’t do while working at Amazon, and when I reached out to get more information on it, it took extremely long, and I never really got a clear answer on it.
-
Lack of passion for code. I definitely felt like most of the developers at Amazon see code as a way to make money. A lot of the developers did not pursue any kind of code, or keep up with the development community. This is understandable because of non-competition agreements, but there are definitely ways to get a personal project approved, and mine only took a few days. It was quite sad to see, as I am very passionate about code, and I enjoy it very much. And, when I would ask someone if they keep up with code or communities outside of work, the strange looks of, “Why would I work outside of work”, was quite off-putting. Or, the “Code takes me the least effort to make the most money” was kinda of lame to see too. And to be honest, you could see this in a lot of the code quality at Amazon.
-
Corporate Politics. There is a lot of arguing, and seniority that kinda ominously floats around Amazon. Though, I am sure this is at every company, I did not like how this was. I don’t enjoy arguing at all honestly, and when people would shut me down because I was the intern, but then find out later I was right, it wasn’t really even that satisfying.
-
Seattle (I’ll explain more in living in Seattle).
-
Also, there are a few more minor things that i can’t think of right now, but I will add them as I remember.
So What Exactly did I do at Amazon?
While at Amazon, I worked on the Alexa Developer Experience Team. While there, I made two Alexa skills, added contributions to Amazon’s internal wiki on some open-source tools I used at Amazon, gave a talk on open-source tools to help my team’s development work flow, created some new components for the production project my team worked, and created an unannounced feature for Alexa on the production project as well. I was originally only supposed to make a single skill, and a single component for the production team project, but I got things done quickly, and it was a lot of fun. I was very happy to hear from my team that I performed VERY well at Amazon. Of course, I received some helpful criticism that I documented, but most of the time they told me I coded amazingly, and were extremely impressed. One of the most flattering feedback I heard was from my mentor. I asked him “So, how can I become a better developer?”, and he replied “You are a better developer”, and walked away. A lot of senior developers were quite surprised I did not work there full-time, and really want me to return. I also, had a lot of fun talking about code, and best practices with senior developers, and they are extremely wise people. I am really grateful for the team, manager, mentor, and people I was lucky enough to work with and I really hope I can see all of them again sometime in the future. They were all extremely mellow and cool people to be around. And I had a lot of fun developing with them.
Living in Seattle
I honestly did not enjoy living in Seattle too much. I was born and raised in Southern California (LA area and Inland Empire), and I lived there my whole life (I’m only 21 :p) until I moved to Seattle. Seattle did have nice things about it. Such as a very tranny focused skate scene, cool events around the city, a tech atmosphere, and VERY nice/polite people. And to be honest, I made a friends with a few Seattle natives that I am REALLY going to miss, and I plan on visiting soon. But honestly, I wasn’t happy or comfortable living in Seattle. Prices in Seattle are much higher for general cost of living. For instance, Rent is higher in LA, but you can get a full meal on $5 easy. However, Rent is slightly cheaper in Seattle, but all food, groceries, and general items/services cost a lot more. Like a regular burrito come out to about $7-10 bucks out in Seattle. Whereas, that would be considered expensive in California. Also, speaking of food, food in Seattle is very medicore, the whole time I have been out here, I have been craving my California food spots, and I miss them a lot. And though the people in Seattle a very polite and nice, they tend to be very mello, and have little energy. I am usually a very exciting, and glowingly happy person. So it is very disappointing to be stoked on something, and everyone else kinda be like “yeah, that’d be kinda cool…”. Also, living in South Lake Union (Where Amazon buildings are located), is not fun. South Lake Union has very little food places, which are all not good, and all of the fun parts of Seattle take a bit of a walk or a bus ride. Once I moved to UW district, things got a bit better since there was a little more to do. But things were still expensive, and it wasn’t very walkable since everything that is close requires walking uphill for about 10 minutes. Also, I am not too fond of the weather in Seattle. A Seattle summer is a Southern California winter. Occasional rain, with a generally cold temperature. And this kind of sucks, because Summer is my favorite time of year. Seattle is definitely not bad (though my girlfriend thinks it is), but there is nothing I really Love about it, that makes me desire to live there (other than the friends I have made). I like to compare it to my hometown, as I want to live in Seattle as much as I want to live in my home town. And the general consensus in my hometown is that, no one really wants to live in my hometown. I could go on about the “meh.”-ness of Seattle, but I would like to point out the best coffee I’ve ever had was out there! Go to Vivace, trust me.
Returning to California
I’m Going, Going, Back to, Back to, Cali, Cali! After saying a lot of hard good byes to my team, and friends I’ve made in Seattle, I am quite excited to go back to California. I really miss seeing my girlfriend, awesome buddies I have out there. And I have tons of stories I can’t wait to share. In the end of the internship, I was offered a return internship offer (As I have 3 semesters of school remaining), and I am leaning towards not taking it. This being said, I shall definitely be talking to those close to me about my final decision, to help me make the best decision. The reason why I do not think I shall take it is because: I am quite sure that I (or my girlfriend), want to live in Seattle for the up to about 2-3 years, After leaving my hometown and seeing Long Beach I was amazed and I want to explore what else (other companies/teams) might be out there, and I am honestly a little disappointed with the work flow and lack of passion for code that I’ve seen at Amazon. My main reason though, is definitely not wanting to live in Seattle, as I do feel the other two main reasons may be a “all tech corporations” thing. And, I know many may say “If you like Amazon, but not Seattle, why not just go to another Amazon office?”. Well, my reasoning behind that is that most other Amazon offices only support the main Seattle one. And, the reason why I love developing is because, “I like making dope shit”. It’s kind of my code motto. Seattle is the office where they really buckle down and make all the cool stuff, I want to be in the center of that, not just helping it out. However, some wise words my manager were: “Don’t keep yourself in Long Beach, if you want to make it big in tech, you need to go where the tech is”. And I definitely agree with that. I still want to explore silicon valley, and I think it is where I am going to try to explore. But if not, I’ll definitely reconsider Seattle, cause there are some things I enjoy about it. But honestly, I’d rather live somewhere where I am completely happy, and making enough money to be comfortable, then live somewhere where I feel “bleh”, and have more money to spend.
So in conclusion, I really enjoyed my Amazon internship, and I wouldn’t trade it for anything in the world. But as of now, I don’t think I am gonna pursue Amazon, and I am going to explore my options, in hopes of finding something a little bit better. And thankfully, my team said they would be open to having me back at anytime. So, I am still on a journey of exploration and learning as a young developer, and that’s not a bad thing, as I still have time to learn and grow.