What it’s like to work at ShuttleCloud as an Engineer?
Following our series about startup culture, I would like to talk about the ShuttleCloud engineering team. Our engineering team is really small compared to most startup companies: there are only 6 engineers in it. However, we’ve achieved great things. We are proud to list Gmail, Google Contacts and Comcast among our clients.We’re able to cope with Service-Level Agreements (SLAs) of 99.7%. Every day we perform more than 12,000 new migrations, which involves 12 million emails and 2.5 million contacts, supported through 247 different providers. We move 1TB of data every 6 hours, more than 220 TB per month and 6TB per hour during spikes.[caption id="attachment_698" align="aligncenter" width="588"]
The ShuttleCloud Engineering Team[/caption]So how is such a small team able to cope with this and, at the same time, be happy, restful and ready to grow and improve every day?
Culture, culture, culture
We try to create a culture that helps us to be better and to live better. I personally hate seeing people working too many hours. I’ve been in this profession more than 14 years and I’ve never met anyone who is able to do a good job after working more than 6 hours. You can still do things, sure, but how well? Normally this means shortcuts, tradeoffs, stupid errors, bugs, and so on.In order to create our culture, we have a few rules which allow us to move forward and make as few mistakes as possible.
Daily topicEvery day, someone from the team proposes a new topic to discuss/learn about. These topics range from best practices to how TCP works, context switches, weak isolation levels, and more. This practice is really great: it helps us to grow technically and it creates a fantastic atmosphere of learning. Sometimes we end up spending a long time discussing really difficult stuff. By the way, you can follow what we discuss on the ShuttleCloud engineering team Twitter account.
Talks/workshopsWe host and help organize several meetups in our office. We’ve hosted meetups with PapersWeLove, DevOps, d3, and more, and our office is always available to the community to host an event for free. We also host WorkShopsWeLove (Kubernetes, Cassandra, Ansible). These are one-day workshops in which we treat a technology, framework or other subject in depth. ShuttleCloud takes care of everything in them; we bring in speakers from all over the world, and everything is free (food, drinks).
More than 150 people have attended the "WorkShopsWeLove" organized by ShuttleCloud[/caption]
People need to grow; engineering must grow If someone needs or wants a book, it’s bought immediately. We have a budget for conferences, talks and offsites to spend time together as long as we learn new things. W also encourage people to talk about what they’re doing and help them in everything we can including time, flights and hotels bookings.Every member also has one day each Sprint to do R&D so that they can learn something new, improve something, reduce technical debt or pursue other goals.
During the last edition of #CranfConf, in Budapest[/caption]
Learn your product's problems so it can excelCreating software is really nice. If you’re working in a product company, it’s rewarding to see how it grows and evolves. But sometimes, as engineers, we’re far from the users—we are so focused on programming that we don’t pay attention to the user. Support is a really good way to understand the problems that users are facing, and when engineering is working closely with the users, new tools or solutions often arise. That’s why we all do support: the support role rotates and lasts one week. All of us also participate in on-call shifts. This forces us to keep everything well documented and automated, as every member has to be up to speed on the crucial components.
Goals/GuidelinesEvery three months, every member of the engineering team sets 3 or 4 objectives... well, these objectives are more like guidelines for improvement. These are not attached to anything, so no money is involved. The idea behind this is to help us improve and to have clear guidelines. The objectives are not enforced. I try to identify a few things every member needs to improve on and every member has to do the same thing for themselves, so between the two we set the objectives together. For example:
More exposure: You could prepare a talk or a post.
Testing: There is room for improvement, so why don’t you read this book and then share with the rest of team?
More initiative in technical discussions.
I guess our learning culture can be defined in one sentence: learning is not only actively fostered, we seek to have zero impediments to learning and growth.
Sharing knowledge culture
Every two weeks, we have at least one workshop in which anyone who has made something new or wants to start using a new technology teaches us how it works and why it is beneficial, and we set the steps to start using it in the team. As a rule of thumb, we can’t start using a new technology/framework/language without a plan to teach it to the team.We do a lot of pairing so that we can learn about every component and also improve our code skills.https://twitter.com/ShuttleCloud/status/666824149290098689
We have very relaxed rules because we trust our people, although I understand that if the team were much, much bigger these rules would be inadequate.
Flexible schedule. The only time when it is mandatory to be working is in the Daily. The rest is up to you as long as you don’t block other people from getting their work done.
Unrestricted vacation. We don’t count how many days you’ve taken; we prefer people fully rested and we want to avoid burnout. On top of that, we try to encourage people to go on vacation. Sometimes people are so focused that they forget there are more things than working.
Working remotely. You can work from home whenever you want.
Every new deploy, every new bug fixed and every new feature added is immediately communicated to the rest of the company. We have two channels in Slack for this:
Deploys. Here we have every deploy that has been made for every component in technical language.
Changelog. Here we convey what new things are in production in plain English.
Most of the components in our infrastructure are monitored. The same goes for business metrics. We measure what is important for ShuttleCloud migrations so we know in real time how many migrations we’re doing, how many are failing, why they’re failing and how many contacts/emails we’re importing. Our alert system is attached to these metrics, so we receive an alert when a component is down or a disk is going to be full. We are also alerted if the migrations for a provider are starting to fail more than usual. We don’t want surprises, and we don't want to deal with a "perfect" engineering system with zero value for our clients.
Minimizing human error is important in every organization but it’s vital in small teams. It’s impossible to know everything in depth, and we don’t have a separate team for ops and a team for the frontend or the backend, so it’s really important that every step we take is automated and documented.
Culture is neither written in stone nor sets by the company. Culture evolves with the people working in your company—that’s why we review it from time to time and we are open for new ideas from any member of the team. We try new things and, if they don’t work well for us, we change them. We move forward and try other things.[caption id="attachment_556" align="aligncenter" width="740"]
The first meeting of the past Innovation Week[/caption]
Our office is an amazing place. It’s really nice to work there, it’s beautiful and it provides everything we need to focus on the things we’re good at. Kudos to our office manager ;)In our office you can always find drinks, food, office stuff... things to help you have fun and disconnect.
We don’t even have to think about lunch. Our office manager deals with that every day! We even have a barbecue and terrace that we really enjoy. Remember that we are in Spain—we have a lot of sunny days :D. You also can find the usual suspects: a ping pong table, a PlayStation and more, and every now and then we have movie nights at the office. After all, the projector can be used for more than tech talks :).https://twitter.com/flopezluis/status/718029405994528768I almost forgot! Mark every Tuesday afternoon, when we have a massage session.This post can be summarized in a list:
Holidays are unrestricted: we work with rested people and bright minds, not with chair-warming zombies.
Our marvelous office.
Learning culture, learning fostered.
We're all in this together. This is more than just lip service. We believe in a horizontal model, which means that everyone on the team has a big influence on the whole company. Everyone contributes, and when something is wrong, anybody can bring it up and we fix it together.
Your health is very important, so we also provide private medical insurance, including dental care.
Every Tuesday afternoon, we have a massage session.
We all have catered lunch together in the office, paid for by the company.
We’ll buy a laptop for you.
We have a budget for books, as well as attending and organizing conferences.
I don’t like calling these "perks" because I truly believe these are not something special. These are the things that define ShuttleCloud.