As I look back to May 4th, 2015, the first day I started at Wattpad, I can't fathom how much I've learned and grown since then. Coming in, I expected to learn about things like writing good code, learning a complex system, and just getting stuff done. What I got was so much more than that!
Onboarding
Right from my first day, I was given real, meaningful tasks that would affect millions of users. Things like ensuring SSL for all web pages (even those old ones that aren't linked anywhere, but people still have bookmarks to), sorting items in users' news feeds, pagination of messages, and the list can go on and on. There was definitely no shortage of meaningful tasks, but there was a lot happening to ensure I was properly on-boarded: constant feedback, awesome mentorship, and much needed patience. There's much more that goes into making Wattpad what it is though...
Process
One of the great things I admire at Wattpad is the process of how we do things. Not only does the process work, it's always open to change.
Our JIRA board is split up in to various swim lanes for parts of the product that each person is working on. Then, every Monday, we prioritize and select all the tasks that we think are reasonable to complete. Then, at stand up every day, we're constantly evaluating to see how feasible completion of the tasks are. We only get better at predicting how long tasks take as the time goes on, and we've gotten pretty accurate at it.
For pull requests, we use the popular Git Flow method. It's quick, and it works. Other subtle nuances include things like having ticket numbers in branch names for easier cross-reference, commit messages that are actually meaningful, and just because you're deploying doesn't mean you're done a task.
Tasks
I've been an intern at Wattpad for over a year, so I've gotten to do a huge variety of tasks. Each and every single one of these poses its own unique challenge and required me to learn things differently. I'll go through some of them:
Upgrading to PHP 7
This task may seem simple at first, but there's so much more to it. This required updating our production AMI's, updating our test and local Dockerfile's, and ensuring our giant code base actually worked. We had to use our own PPA for PHP 7 since the only one available would archive older versions of packages every time a new PHP version came out, essentially meaning we would have to upgrade PHP 7 versions every time (not feasible in a production environment). To ensure our code was compatible with PHP 7, we ran Phan - a tool to analyze code for PHP 7 incompatibilities. Then things were fixed one by one. A fairly tedious task, but it allowed me to navigate to parts of the system and see the vast amount of code required for making even the smallest thing work in production.
Efficiently store our event data
We have a newsfeed that users use to see an overview of what's happening in relation to them. We refer to these as events internally, and were running out of space on our existing database (we get ~400 events/second during mid-peak hours). We needed to quickly shard our data, but we also wanted to see if there was something better we could do to store these events. It was completely open-ended, and I came across MySQL compression! It required no code change in how we interact with our events via code, rather only MySQL server variable changes.
Using a new password hashing algorithm
We decided to use a new hashing algorithm to store our passwords, but since we don't actually know the password of the user, they had to be migrated on the fly on login. The sensitivity of this task made it that much more challenging - we have over 45 million MUV (and counting), and the last thing we need is them losing access to their account. Lots of testing ensured that everything ran smoothly, and there were no problems when we started rolling this out.
TL;DR?
Why Wattpad?
Wattpad harbours an awesome environment for learning. From a beautiful office, to a fully stocked kitchen, Wattpad has everything you need to get you through the day. It greatly helps that everyone is knowledgeable and approachable. If you need help, they're right there to git it done with you.
You get to ship production code right from day one. Expect this to be a frequent occurrence! Everything you do matters, and will affect millions of users. Every. Single. Day.
Wattpad is huge. We have a lot of users, and it's gotten to a point where scale has to be thought about up front. You don't usually have to deal with things like these in the classroom, so this makes everything that much more challenging and fun!
Everyone does the same work. We rotate from roles every so often, and this means that everyone ends up doing the same types of tasks over time. I feel that I'm given work no different than any other full time engineer would be given.
YOU ARE READING
The Wattpad Internship
Non-FictionAn accumulation of posts written by interns on the Platform Team at Wattpad! Thanks to raydeguzmanTO for the cover photo!
