30 Sep

Working with Thoughtworks

Last update on 2012-09-30

During the last three months, we have been working along side Thoughtworks for a governmental client. It has been exciting to experience Thoughtworks team culture of pair programming,  test driven development, continuous delivery, small company environment and technical excellence.

We have worked in pairs and have enjoyed the shared ownership of the code base. We can work work on every feature of the system and this means that we can work on Ruby one day and with Java on the next. In this way, It is clear to compare how the different languages address similar concepts such as testing, aspect programming, web development frameworks and support tools among others. Every week the work can also vary greatly such as google analytics integration, new front-end features, server API end-points or performance optimization to name a few.

The test driven development culture is prevalent following the principles described in the book ‘Growing Object-Oriented Software, Guided by Tests’. Unit testing, mock-ups, stubs, decoupling with test objects and other techniques are used extensively in Ruby, Java or Javascript depending on the subsystem. Every subsystem can be tested in isolation and is decoupled from their dependencies by stubs. In most of the cases, tests are developed to run fast and focus only on the domain functionality under development.  

Continuous Integration practices are widespread and supported with: automatic deployment tools such as Jenkins and Puppet; zero-downtime deployment configuration of servers (I gave a talk at the London Ruby User Group on this topic); real-time monitoring of services with Nagios and Ganglia; support of smoke tests while deploying; and use of feature toggles for new development instead of topical branches.

Finally it has been great to attend their social events, the teams are positive, open, diverse and very united. There is also the chance to meet great authors like Martin Fowler and Jez Humble and learn even more about agile methodologies or the latest trends.

comments powered by Disqus