Going through the door
I’ve seen many an algorithm throughout the years, and I like to think that I can work with code, but I actually feel like a complete novice. This describes my train of thought but a few months ago. I’d built a lot of puzzle style algorithms to resolve challenges in Olympiads, USACO, Project Euler and Hacker Rank, but I had very little experience in crafting more complex projects. I basically had no experience of working in the actual software industry.
As I ventured through the doors of RightScale, I reassured myself with memories of the whack stuff I’d done throughout the years, often under pressure. But a lovely thing I came to learn was that the people here value their devs and give them tools; time and support as opposed to pressure in aid to their work.
RightScale boasts three core products as of the time I am writing: Cloud Management, Cloud Analytics and Self-Service. All of these services aim to make Cloud Computing more simple and convenient to our end users.
As with most of its customers, RightScale is also hosted in the Cloud. Amazingly, RightScale uses its own software to manage how its servers are hosted and to find its own optimal cost-performance. There’s something particularly sweet about working on a product that is meta.
I come from a Windows background. This means that when I was told beforehand our devs work with Macs, I knew there’d be a plethora of new tools which to become familiar. Through trial and google (oh, and error), I’ve become quite accustomed to Macs, bash and UNIX systems in general.
I also got to participate in the office text editor feud, by joining the Sublime faction (although vim was quite the sidekick in working with remote servers).
We never left it to chance to see if our code functioned as expected, but manual testing is less than efficient, so I also had the pleasure of working with tools such as Chrome dev tools, RSpec, Grunt and Jenkins CI. Although, Jenkins often proved to be a bit cumbersome and we eventually began to migrate towards TravisCI.
There was a lot to learn, but I can’t emphasize enough, how supportive my colleagues were. I was given a week to familiarise myself with my new tools of trade. Thereafter, Google was less supportive than my knowledgeable compatriots in clearing gaps in my knowledge (which is saying a lot).
Despite being a startup, RightScale has quite a magnificent customer base. It’s fun to know that the app we’re working on is being used by software giants like EA Games and various enterprises all around.
It’s also pleasing to know that the code I’m working isn’t likely to end up being unused; not only because we have a lot of customers in number, but also because I was implementing features that companies were explicitly requesting.
My work day
Every two weeks, we set goals for ourselves with regards to what we want to accomplish. It may be tackling a few bugs, introducing some new features or even redesigning our code repos.
On any other day, when we weren’t planning, we’d start off with a stand-up meeting to brief one another about our progress and goals for the day.
The rest of the day involves a lot of coding. Coding often involves getting stuck and when getting unstuck seems rather difficult, that’s when we turn to pairing. A fresh look at a problem or just explaining your issues to another person often helps resolve issues at a moment’s notice. Otherwise, it’s just nice to have a trustworthy partner to help walk through the unknown or more likely - the complex.
The leftover moments mostly go into various meetings.
My tasks & work
I wasn’t sure what exactly my role as a coder would turn out to be when I first came here, but I had my work cut out for me. I had 2 main tasks: working with the company’s code base (i.e. writing new features and fixing various bugs) and undertaking a personal project.
I’d never worked with code actually used by software before to any decent extent. And this is what I was most looking forward to. Thankfully, I got to work with code that actually went into production from the very beginning.
A lesson that I’ll remember is how difficult it is to raise an accurate estimate for a task’s complexity. As an example, we’d recently developed a CSV generator that allows users to export information about their server instance into a CSV file. I was asked to use this same generator to allow users to add CSV attachments to their scheduled report emails. The end result was this:
It looks and sounds like a relatively simple task, but this seemingly simple looking feature actually required more than 300 lines of code changes spread across more than 10 different files in our code base. In fairness, a lot of the changes went into specs and error handling, but nevertheless my initial estimates went to the bin.
All in all, I’ve gained a lot of experience in working with code, and there’s a few truths that I’ve come to see. It’s hard to determine how much time (and code) a specific task will take to finish, and, at times, it is even harder to define “finished”. There is always room for improvement.
At RightScale, the engineers value automation, and at the time of my arrival there were a few click-heavy tasks that could have benefitted from being automated. To be more precise, engineers had to invest some unnecessary effort to execute some Jenkins commands and to push code to our staging environment.
This is where I came in. I was asked to create a ChatBot that could automate these tasks. The main thing necessary to create a chat bot without an exorbitant amount of hacking in an API. Thankfully, the company had recently started testing a new chat client with a public API - HipChat.
After a little investigation, I chose Hubot to become the base of my new ChatBot. For a few reasons:
- The bot has a big community and a large variety of pre-existing scripts (including a Jenkins one)
- We were still testing HipChat, so it was best to use a bot supported by many chat clients
- Hubot is lovely
I dubbed the bot Leeroy as it was initially made to run Jenkins.
As time went by the bot evolved into many things. I adapted it to work on Slack, as we changed chat clients once more. Later, I even moved Leeroy to live in a RightScale owned amazon server, as we came to notice that while Heroku is easy to set up, it is also very difficult to customise. This was an issue that arose while I was making some of the scripts to enable pushing code to our staging environment.
Although RightScale has moved on to use Travis, Leeroy retains his original name and above all - his limitless customizability. I’m not sure if Leeroy will remain RightScale’s pet bot for a long period of time, but I’ll always remember him as an amusing pet project.
The gents at the office
The thing I most appreciated about RightScale was probably the culture.
Everyone from a different background, and yet proficiently intelligent without exception. It’s hard to described how much I’ve learnt from these guys whilst working at RightScale.
Nevertheless, the air in the office was rarely ever tense. The gents were fond supporters of humor, wit and most of all - having fun at what they do.
Another big thing about the culture was Mario Kart. Break time always consisted of the lot of us duking it out on a virtual racetrack of endless fun. If nothing else, this internship has most definitely improved my Mario Kart skills.
The people at the office were many things. Smart, intelligent, but more than anything, I now consider them friends.
If I thought I could stand my ground as a software engineer before, I can say that this internship has taught me how to walk. There’s still a lot to learn before I can start doing sprints and marathons, but I now have a number of role models. The time I spent here was magnificent and it would be an understatement to say that the guys at RightScale were welcoming.
A few honourable mentions that are due.
I want to thank Santander and the University of Edinburgh Careers Service for supporting my internship.
I also want to give a big thank you to Ali for being a great supervisor and hiring me in the first place. Also, thanks to the gents at the office for being awesome (and often very helpful).