A month ago, I finished my summer software engineering internship at RightScale where I worked on the Cloud Analytics product in Edinburgh, Scotland. Cloud Analytics grew out of PlanForCloud, which was launched by two brothers (Ali and Hassan) in 2012 and lets companies forecast, manage and optimise their cloud spend. RightScale’s been pioneering the Cloud Management space since 2006, when AWS launched EC2; they provide a platform that lets users do impressive stuff like auto-scale from 25K users to 250K users in 3 days or migrate their systems between AWS and Google Compute Engine. RightScale’s main office is in Santa Barbara, California; but they’ve been expanding in Edinburgh since they acquired PlanForCloud. They’re still growing and hiring…
Edinburgh is absolutely lovely, especially in August during the Edinburgh Festival Fringe, the world’s largest arts festival. The office is located in CodeBase, a world-class startup space where a lot of technology-related events also take place such as TuringFest.
I must say that I was a bit afraid at the start of my internship. I barely knew the technologies that they were using, and it was my first internship. Even if I had a good theoretical foundations of CS, I was not experienced at all in picking up the new technologies. It’s a startup, so there were no side projects. From the first day on, I was working on production code. And even during the early stages of this startup, the product’s codebase was quite substantial and involved around 20 different technologies and tools, most of which were open-source (e.g. Rails, AngularJS, Karma, Jenkins, Errbit). I also lacked domain specific knowledge, which is really valuable in B2B startups. Besides, I was the only intern who was surrounded by highly-qualified and experienced engineers.
It turned out that there was nothing to be afraid of. I received huge support from my colleagues. With their tremendous help, I learnt the product’s technology stack, got the gist of domain specific knowledge and became accustomed to open source projects. This allowed me to start contributing to the product. During my internship, I was lucky to jump between different aspects of our product being exposed to different kinds of problems and ways of thinking about them. However, what I enjoyed the most was the fact that the whole product makes heavy use of various networking components. I was responsible for writing code for on-boarding of new users, who had no data in our system. This was a crucial part of the product as it was a user’s first impression of the product; and the trick was to provide interesting data quickly to keep the user engaged until the system loaded their complete data from the cloud (this could take a few hours). After a couple of prototypes of the most optimised way of fetching data (including multithreading), we realised that this operation can’t be done in the required time frame. We had to put additional effort in the user flow to make the whole sequence of operations work nicely. Besides, I liked following plenty of open source projects and contributing to some of them. It was a good experience, to see in practice, all the fancy things that you are taught at a university or read on HackerNews, for example TDD, agile, lean startup… Using third party services was also very exciting, e.g. NewRelic, AWS and Google Analytics.
From non-technical perspective, it was amazing to see how the product grew; the codebase almost tripled during my internship. With the growth, assumptions are changed and different decisions are made. As I was treated as a normal employee from the very beginning (not a temporary intern), I was very lucky to sit at the “big table”, experiencing plenty of decision making processes. It was exactly what I had always dreamt about: a bunch of passionate and extremely smart people sitting in one room trying to create the best product, but having different ideas on how to do it. Also, they were very casual and funny. I am always going to have extremely good memories about them and the amazing atmosphere they created together.
Hopefully, I have got the gist of what being a good engineer is about. As one of my colleagues said, always being curious and wanting to learn more is an essential attitude. Another equally important thing is being professional - producing the highest quality output in the very limited amount of time. This requires being focused for 8-9 or much more hours and staying focused even if you face many disruptions (e.g. context switching) or pressure (e.g. releasing a new product). Also, my definition of the word “done” has changed - it is about taking into consideration much more details than I had ever imagined. I also appreciated the importance of clear and concise communication in software engineering, in speaking and writing, but also in your code and even in your unit tests.
Similarly, I have a rough idea what startups are about. Everything, literally everything, at RightScale was about the product. We always tried to push quality as much as possible. It’s hard because all decisions are based on very specific tradeoffs: considerable uncertainty around you, and your very limited resources. You need to realise what is worth doing, since it is important and what you should leave out, since it’s not worth it. Last but not least, people, their talents and interaction between them are the most important. It’s a cliche, but true: it’s people who make great companies.
P.S: I’d like to thank the St Andrews careers team and Santander for supporting my internship. I would also like to say a big “Thank you!” to Ali, who hired me in first place, and the whole RightScale Edinburgh team for the best summer of my life! You are all great guys!