In this article, I want to share how one of my typical days looks like. If you’re not interested in reading the random story of a random developer, stop right here and go back. I warned you ;)
This ‘typical’ day is a bit (a lot?) generalized and I probably never actually lived through this exact sequence of events. If you want to become a software engineer this will give you a glimpse of how one of our days actually looks like.
Who am I
Before we get to my usual day, let me introduce myself. My name is Thibault Denizet and I’m a French guy currently living in Thailand. I’m currently working at Playlab. Before getting to the active life, I studied a master in Bordeaux, France, at Ingesup. I’ve started development about 6 years ago but I’ve only been working full-time as an engineer for the last 3 years.
In my free time, I write articles for my website Devblast. I also wrote a book about creating modular applications (a.k.a Component Based Rails Applications) so if you’re into that kind of things, don’t hesitate to check it out.
Where do I live
As I said earlier, I live and work in Bangkok, the capital of Thailand. It’s a great city to be in and the tech scene keeps growing. It’s great to see the changes! More and more developers are needed, so if you’re looking for a job and you like Asia, come and give it a try!
I came here for the first time 5 years ago and I’ve came back a few times to do internships since. Finally, 2 years ago I completely moved to Thailand and I am absolutely not regretting that decision! I love it here. Life and people are both great and I get to do what I like: build stuff!
Who do I work for
This is an important part to understand the following sample day. I work for a company called Playlab where I’m currently a backend software engineer. Playlab is a mobile game company. You might have heard about the game Juice Cubes if you like match-3 games. Well that was Playlab!
The backend team’s job is to create APIs for the mobile games, deal with operation tasks and produce usable analytics. We use a wide range of tools including Ruby on Rails, pure Ruby, Node.js, PostgreSQL, Cassandra, Docker and so on!
Playlab is a great place to work where the APIs need to handle millions of users. Lots of challenges and an awesome environment!
A typical day
Enough with the presentation! Time to go through my day… Enjoy the ride!
I usually wake up between 7:45am and 9am, depending on my laziness. Since we have flexible hours, it’s alright to show up at 10am after a late evening (out partying of course!).
I’ve never been a morning person, so I do the bare minimum and just go to work! I use the BTS, Bangkok’s Skytrain, to get to the office. Unfortunately, the station is a bit far. No worries, I can jump on a taxi motorbike and get there in 5 minutes. Plus it’s super cheap (like half a buck). Oh and it’s super dangerous!
09:00 - Starting the day
Once I arrive at the office, I get a freshly mixed fruit juice full of fruits and vegetables including carrot, guava, tomato, beetroot, pineapple and apple. That’s my energy cocktail and a great way to start the day.
I then hop in the lift and I’m finally at the office. Let’s boot up and check emails. Of course, there’s nothing interesting since the whole company is using HipChat for communication. There’s not much use for emails except for automated reports and the likes.
We’re following Scrum and using Jira to keep track of who’s doing what. We used Trello until recently and I really liked it. Unfortunately, no burn down chart and estimate field made us move over to Jira.
So after the uninteresting emails, I will usually check Jira and see what people are working on: it’s always good to know what your colleagues are doing! It allows me to find out when there’s a pull request waiting for review and that’s usually my next step!
Pull request reviews are an important part of the development workflow at Playlab. Not only does it make the code better, it also makes the whole team better!
Next up, I will actually start working. It will usually be a coding task related to one of our micro-services or something to change in our analytics system. It mostly involves Ruby but we are not limited to it. We just pick the best tool for the job. Whatever the task is, I will usually start by a basic draft of my code to figure out the best way to do it. Then the way will just reveal itself. Before actually writing the code, I will write some specs.
Tests are super important. I didn’t write any tests a while back and I don’t know how I manage to not destroy everything. Also, the bigger your team grows, the more important specs become. You cannot refactor or update code that you don’t know if you don’t have a failsafe. Tests are this protection and ensure that you are not breaking the application. Writing them before or after doesn’t matter, just write them!
So after having created a few Ruby classes (I love to use POROs everywhere), wrote my specs, refactored and made sure I was happy with my code, I will just push it to Github and create a Pull Request with a clear description. People are usually notified in HipChat automatically when someone pushes something or create a pull request but it’s always good to remind people who have an interest in the PR.
Alright, that was a lot of stuff for an hour because I wanted to explain exactly what I’m doing. I can’t say much about the actual coding because it changes everyday!
10:00 - Fully awake
10 comes by and catches me in the middle of making some changes in my code based on some comments on my pull request. Nothing huge but there were indeed a few optimizations that could be made to improve the code.
That’s also the time when most of Playlab’s employees arrive (flexible hours ftw) so I will usually have a chat with some members of the backend team or notify a game producer of some changes he requested at the coffee machine.
11:30 - Daily Standup
We are following the Scrum methodology to measure and improve the team. I’m not really convinced about the whole Scrum thing to be honest. I’ve been working with it for a while but I’ve never been able to make it work perfectly: we always end up on some form of Scrum-but. I’m simply not sure it’s actually helpful. It might be because we’re working on many projects at the same time that relate to different things: operations, analytics, services… Let me know if you have some experience with Scrum and what’s your feeling about it!
One thing I find good about Scrum however is the daily standup meeting. That’s great to hear what people are working on and if they are having any trouble. It’s quick and helpful!
12:00 - Free Lunch
When noon clocks in, it’s time for lunch. And you don’t want to be late at Playlab. Everybody rushes to the kitchen and grab some of the delicious thai dishes cooked by the cook. We’ve got rice (welcome to Thailand) and 2 to 3 Thai dishes. There’s also a salad bar.
After lunch, there’s a lot of available activities: taking a nap, playing ping-pong, playing PS4… or just going back to your computer!
After the break, it’s time to start working again! We planned a Group Code Review at 1 so it’s time to head over to one of the meeting rooms and talk… about code!
Group Code Review are one-hour-or-less meetings where all the team members review a new project/feature/big change. It’s usually a walkthrough so everyone gets up to speed about the specificities of this project. Some good ideas usually come out of those meetings in order to improve the project.
The task I created this morning has been approved by some members of the team so it’s time to merge! It’s first going to be merged from the branch I created for this feature to development. We’re using continuous integration which means that as soon as I merge into development, the code will be pushed to staging and ready to be tested by the platforms team. To pull, test and push the code automatically, we’re using CircleCI.
CircleCI is also responsible for building the Docker container in which the application runs. Docker is a great tool, check it out!
Since my code is now live in staging, I’m going to move my task in Jira to the staging column. I will then notify someone in the platforms team that the feature is available in staging and that they can test it when they have time.
I have to wait a bit for the feature to be tested but don’t worry, I have plenty of other tasks. When I’m about to start one however, one of the game producers comes to bug me about a fix to his game’s analytics. We’ve made the change already and it will be reflected in the data the next time our analytics pipeline is run (the next day). He asks me a few more questions and we spend a bit of time chatting about some of the analytic results.
It’s my lucky day! The platforms team already notified me that the feature is working as expected and that the Q/A team is currently testing it. I should be able to push it to production the following day, simply by merging development into master. Yay continuous integration.
I finally have time to start working on a new task which involves creating a Dockerfile for one of our Ruby on Rails micro-services. Dockerfiles are used to generate the Docker container and have to be written before the application can be pushed to our servers. I’m not usually working on operations related tasks (we have people just for that) but we recently started to spread the knowledge in the team in an effort to bother the ops guys less, especially for simple things.
So yeah, I’m creating a Dockerfile. It’s probably not the most exciting stuff ever but it’s important and we just have to do it one time. Plus, I can reuse pieces from other dockerfiles so it’s not that hard. Once it’s ready, I just update the circle ci config in the project to define where the application should be pushed and that it should build a Docker container. The application is now available in staging and I can start the service with a quick
fleetctl start myservice.service!
Alright! My day is over, I will push the new application to production tomorrow. It’s time to go home so I just jump again on a 30 baht motorbike taxi, take the BTS and get to my condo. That’s where my second day starts.
Once I get home, I put on my Devblast hat and start to write articles! But first, I like to check analytics to see the traffic and get some motivation. I will also answer to any email I received and check the comments on Devblast.
Nothing very interesting at that time on the tech side. I will usually have dinner (like a bami moo deng) and watch some TV Shows.
[บะหมี่แห้งหมูแดง - Bami Moo Deng
For the following two hours, I will keep working on Devblast. It could be a new article for the blog, an email for the newsletter or a new book (like Master Ruby Web APIs). It varies depending on the day and I keep track of all my tasks in Trello.
After a hard day of work both at the office and at home, it’s time to relax. I will usually grab my iPad to read some articles or a book. Maybe I’ll just play some games like Super Smash Bros or this amazing mobile game called Dungeon Link that got me completely addicted!
I also like to build stuff. These days, I’m having fun with my Arduino kit but I also enjoy building Gunpla and playing around with Lego bricks! That might sound childish but it’s a great way for me to get some time away from the computer and actually build something real (as opposed to softwares… :p).
I like to read some fiction before going to bed. These days I’m enjoying the great Dune written by Frank Herbert.
Time to sleep! See you tomorrow for a new adventure.
Well that’s it. That was a ‘typical day’ for me as a software engineer living and working in Bangkok. Let me know if you liked it in the comments! If you hated this article, let me know why so I can keep improving ;)
If you like to read about the crazy daily life of web developers, checkout CommitStrip! It’s an amazing website full of funny web comics related to programming.