Here at Raygun, programmers are expected to be somewhat self-directed. That means when deciding what to work on next, we can pull from a list of features that management wants, customer feature and support requests and our internal issue tracker. I thought I would walk you through my typical week, so you can see how we work here.
Because our deployment infrastructure allows us to get a release out in around 10 minutes, we can deploy new versions many times a day and will often deploy small features and fixes whenever we are happy with them.
To manage this, I have a whiteboard with a task list setup on it. I split tasks into High, Medium, and Low priority, shifting things to Done or Handed Off when I’m finished with them. Before I had this I used to lose track of the features I was working on – git branches would sit unmerged for weeks while I worked on other issues until I finished or noticed them again. Now if I get lost, I just look up at my board and I’m instantly reminded of what I was doing. It also has the other benefit of showing me what I’ve achieved so far this week so I don’t stress out about having done nothing showable. As long as I track all the things I’m working on, I can see measurable progress.
Early Monday morning I will typically catch up on customer queries from the weekend. We use Intercom.io for in-app and email messaging, so this is just a case of checking on conversations assigned to me and having a browse through the unassigned queue to see if there is something I can reply to. Lots of times I will find quick issues that could be fixed in less than an hour, so I put those up on my task list as space fillers – if I’m waiting for something or am stuck, I will grab one of these issues and sort it out quickly. I’ve found this is great for getting you back in the zone if you’ve gotten stuck on a particular problem, as it’s a really good feeling to be able to reply to a customer saying you’ve fixed their issue.
We have our weekly planning meeting once everyone has arrived and had a chance to figure out what they want to get done for the week. This is pretty informal – we sit in the board room, and each person puts on the whiteboard the major tasks they are looking to finish this week. Sometimes there is some back and forth with the bosses about prioritisation if they have something they really want done, but it’s usually pretty casual. The point is to let everyone know what you are working on this week, so we know where we might be able to help and where there might be overlapping work being done.
The rest of the day I’ll usually try to tackle the largest and highest priority task on my list. That way, if it looks like everything is going wrong, I’ve got plenty of time to hand off other tasks to make room in my schedule.
The Rest of the Week
Most mornings start with catching up on email and Intercom messages. I find this to be the easiest way to ease into the day – I’m usually dealing with less than 10 messages in total so it’s not a lot of work. Sometimes I might find some new issues I want to deal with in here – these get prioritised and placed on my list. The list isn’t supposed to just be a week’s worth of work, so it doesn’t matter if stuff goes onto it that isn’t going to be done right away. The important thing is to not forget about it!
At some point when both myself and Jeremy are free, we have a quick catchup over coffee and talk about how I’m doing. JD and Jeremy try to keep up with how everyone is doing and address any concerns early (that’s how Rick got his giant plate). To mangle the old saying, “Happy team, happy life”.
I have also made a point of checking in with other members of the team who seem stuck – sometimes it can help to talk over the problem you are having and get another set of eyes looking at it from a fresh angle. I definitely find this to be helpful myself, but half the battle is knowing when to ask for help so I try to pre-empt that if I can.
To run you through our development process quickly, for a small fix/feature I will:
- Checkout the latest of the
masterbranch in git and create a new branch from it.
- Make and test the changes locally.
- Push the branch up to GitHub.
- Teamcity picks up the new branch and builds it for me.
- Create a release in Octopus and deploy it to our testing environment.
- Make sure I didn’t break anything again.
- Create a Pull Request into
- If it’s a small enough change, I’ll just merge it straight away. If I’m not confident that I’ve taken the right approach I will ping someone in Slack (which we use for our team chat) to take a look over it for me.
- Once the Pull Request is merged into master, do the Teamcity/Octopus dance again to deploy it to Production.
There’s really not a lot of overhead here. The longest part of the process is waiting for Teamcity to build the project – if I had to make a one-line fix I could get it deployed to Production in less than 10 minutes. I think this surprises our customers sometimes, especially the ones in big companies who need sign off from 10 different people in triplicate before they can touch the production environment.
I try not to release anything after about 3pm on a Friday. Friday Afternoon releases are a great way to forfeit your Friday evening. Instead, I will try to tidy everything up so that I can pick it back up again quickly on Monday. It also gives me time to send out messages to anyone whose concerns I haven’t addressed this week, to let them know where their issue sits and what my plan is.
One of the perks of working at Raygun is free lunch on Fridays – today was fish and chips out in the sun.
We have a meeting around 3pm where people talk about what they got done, what went well, and what went badly. Marketing talks about their numbers, and if someone did something amazing or amazingly bad we have a few little awards (read: candy) that gets given out. We also have a fridge full of craft beer to drink which is a pretty nice way to end the week.
I hope that gives you a good overview of how we do things here at Raygun. Something I didn’t mention is that we’re hiring right now. So if you’re a motivated and talented programmer, designer, marketer or technical sales professional looking to join a fast growing globally focused company, drop us a line at email@example.com.