Working at ThoughtWorks, a three month retrospective

More than three months ago I took the first step of a fascinating journey: It was my first day at ThoughtWorks in Hamburg. The prospect of a new job in a new city had made me curious and nervous for the past couple of weeks. As it turned out, the anxiety should only last until my very first hours at work. After that everything immediately felt like home.

My first day

My first day at ThoughtWorks started after a night of fairly restless sleep. I woke up way too early that Monday morning and everything felt unfamiliar. A different apartment to wake up in, an unknown way to work, being a complete stranger in a big city. “This will take ages to get used to”, was the thought that constantly accompanied me.

Breakfast and Handshakes

I took public transport to the office that morning which worked way better than I expected, considering I am a complete public transport dilettante. So there I was, outside of the new office, way ahead of my time and hesitant to enter. I grabbed a coffee from a shop at the corner and decided to wait outside since I did not want to be the first on the scene.

When I finally entered the office I was greeted by a sweet breakfast with Franzbrötchen, Croissants and more people than I could ever remember in such a short time. Everyone was keen to introduce themselves and curious to hear who I was and what I had to tell.

Polyglot projects and the best tools for the job

Right during our breakfast I was told which project I’d be assigned to. I only got to know the project’s name so I was eager to get to know more about what would keep me occupied for the next months. After a short time of fiddling around with my new notebook I had a session in which I was introduced to the project, the business model and the technologies we chose to work with. Hearing about the technology stack and realizing how polyglot this project would be put a big grin on my face. It was obvious that these people really love technology. Leveraging the latest and greatest languages, frameworks and tools available is the way to go for the company and I was more than happy to be part of that. It is a great feeling to know that I could use many of the technologies I would fiddle around with in my spare time anyways.

I was used to work with self-written Java frameworks that were thought to be a one-size-fits-all solution to each and every project presented to us. There’s nothing wrong with using Java, not at all. However, I never liked the approach of shoehorning every single requirement into something that could be solved with the few given tools we had at hand instead of using the best tools for the job. Seeing that my team would share that opinion and was eager to try something new was obviously something I was absolutely happy with. Working on a project and getting the chance to learn new languages and frameworks at the same time was obviously something I was more than pleased to do.

Trains on strike, a pub & an expensive taxi

My first day ended quite spectacular. The train drivers were on strike so I had no way to get home to my apartment after work. A colleague suggested to join him for a beer at the pub which sounded like a solid plan to me. After some more than the announced “one beer” I ended up being stranded somewhere in Hamburg (thanks to my awesome orientation skills) with a dead phone and this random guy from Leeds I simply decided to call “Dave” even though that was certainly not his real name. Dave and I managed to snatch a Taxi and get to the Hauptbahnhof. I took the Taxi to get further home to my apartment and managed to end my oddysey. After all it was a great — albeit expensive, thanks to the Taxi — night and a great ending of my first day. The spontaneous pub night helped breaking the ice. On top of that I had a decent story to share on the next day.

ThoughtWorks, what’s it like?

It’s only been a little more than three months and I am far away from having seen it all. But I think I have seen enough for a first roundup. So here are a couple of things that I consider to be the most remarkable for working with ThoughtWorks:

TDD, all the way

One thing I really got to appreciate is the clear focus on Test-driven development (TDD). Of course I was familiar with writing automated tests of all kinds before. I read Kent Beck’s TDD by Example and was aware of the benefits you get from test automation. I thought I knew what TDD meant until I got to work with the people at TW.

Seeing the focus on TDD and how it helped shaping the software we created made clear that my previous understanding of TDD could at best be described with a ‘test-first’ approach. Sure, it worked and I produced results. I delivered software at my previous job as well, after all. However, it was far from what I encountered at TW and it didn’t take long to really convince me of the benefits of having a pretty strict focus on Test-driven development.

Pair Programming

The one thing that was completely new to me was the practice of Pair Programming. The entire development at TW is done in pairs. I have to admit that I had to get used to that in the first days. My fellow Devs made it very easy to get used to it, though, and turned out to be very supportive.

Pair Programming was the one thing I couldn’t decide on whether it made sense for me or not. I knew it would be practised at TW in advance so it came as no surprise. I just couldn’t imagine that having two people working on the same task all the time would really be worth the investment. It turns out that all my skepticism was unjustified. Working with a Pair turned out to be great, especially for new team members:

  1. You get up and running very fast. Your pair can introduce you to the tools and techniques you might not know yet.
  2. The bad conscience sits right next to you. No more “that’s good enough” solutions, no more “I will fix that later”. Everyone gets tempted to deliver a quick and dirty hack instead of cleaning up. We all know better but tend to ignore that. Good luck trying to ignore your pair!
  3. There’s always something interesting to learn. You always take away that one fancy shortcut you can’t believe you didn’t know or that new plugin for your favorite editor. You will be surprised how much of those little tricks you can gather in a short time.
  4. “Hitting the wall”: Your pair can help you. Everyone gets stuck from time to time. This is what we get from working with not completely understood technology and domains. Working with a pair will help you with that.
  5. Spread the knowledge. You reduce the Bus Factor if at least two people know about each topic and therefore reduce the risk for the entire project.

Keep it simple, stupid

The KISS principle is applied everywhere and I love it. Keep it as simple as possible, avoid over-engineering, don’t try to make things unnecessarily complex. This mentality is applied to technological and business decisions and really helps us moving fast and getting stuff done.

Contribute to the community

One thing you can clearly feel while being around at ThoughtWorks is the strong community focus. Internally as well as externally ThoughtWorkers try to contribute as much to their communities as they can. There are talks on a widespread range of topics every friday over lunchtime, free for every ThoughtWorker to join. Externally, people organize and participate in meetups, hackathons, even conferences for the local communities. Its something that everyone in the company values. Giving and contributing instead of just taking is something people strive for. And rightly so. You get to learn so much more as soon as you start contributing instead of just consuming.

Moving forward

It’s been a great three months so far. I’ve met amazingly knowledgeable, genuinely friendly and helpful people and I’m looking forward to working with these people in the future. I’m excited to be able to keep on learning new stuff every day and to contribute to the community. As it turns out it’s been a great decision to go to Hamburg!