Skip to content

TWU week 3: the tech side

July 11, 2010


So, here in India things are going fast! There are two ThoughtWorks offices here in Bangalore: B-1, inside the Diamond District (the amazing apartment complex where we TWUer’s are staying, A on map), and B-2 (B on map).

So, right now, TWU days starts at 8:15 AM, when we have a bus to take us from B-1 to B-2. At B-2, day starts with an Indian breakfast with masala omelet, some bread and my indian favorite, sambar, that for me is the ‘taste of India’. And after breakfast, we must work…

The day starts with a maybe-to-long stand up meeting. We stand up to keep it short, and then everyone has the chance to talk about what he/she did in the previous day, and what he/she is planning to do in the current day. This is when you can ask for help if you’re struggling at some specific problem. But if you forget about it, you are able to ask for help anytime during the workday, you just have to communicate. We work in ‘dinner tables’ (no cubicles at all!), and everybody has its personal laptop, courtesy of ThoughtWorks, so you can move around. The codebase is owned by the entire team, using svn. We also have a Continuous Integration server that give us a baby laugh when the automatic build is successful or a baby annoying cry if it is broken. This keeps everyone updated when it comes to the app status, and if something goes wrong, everybody knows right away.

Right now, we are developing a kind of social network to keep track of ThoughtWorks story, seen through TW employees’s eyes. We’re using the Spring MVC Java framework, a huge hard-to-understand ugly thing, full of java annotations, where you have to code an elephant to get a mouse. For a guy that loves Ruby, it can be a little bit painful… but OK, I’ll survive. It was our first week in the project, so it has been more learning, configuring and suffering then adding value to our app.

Things that I’ve learned this week:
Evolutionary Databases: how to keep your database evolving during the project. In waterfall projects, people spend way too much time to design the entire database. In agile, we start the database with the first migration, that contains all it had to contain at that moment. When I need to modify the database, all I have to do is to create another migration. Migrations should run automatically with your build script. Each migration must provide a way to get the database back to the state of the previous migration. This way, you can chose where you want your db to be.
Hibernate and Spring: Those guys can work together to give you what you need in a Java MVC app. Spring gives you the controllers to map your urls to the business logic, and the business logic uses Hibernate as an awful way to abstract the database. I still don’t like it. We don’t have consistency between Spring versions, we’re mixing concepts from 2.5 and 3.0. This, for me, is BIG technical debt. But is hard to choose: version 2.5 is xml based; every configuration goes in xml files. 3.0 is annotation based, which can make your codebase really ugly. I do like the annotations the most: at least you keep everything in the same place.

However, when I think about it, it seems to me that Java, Spring and Hibernate are not the answer to a social network project. They are too heavy and clunky! What should we use? I’d go with Django, and in ThoughtWorks we could had it in Ruby on Rails. Right now I know why are we using that clunky thing: we’re in a training program, and Java is a common language between the attendees of our program. However, I really want my next project (first real project) to be in RoR. I just love the Ruby way! But this is subject to another two hours trying to write something interesting. 🙂


  1. good luck and keep dreamin´ in India!!!

  2. Tim Chen permalink

    “We’re using the Spring MVC Java framework, a huge hard-to-understand ugly thing, full of java annotations, where you have to code an elephant to get a mouse.” hahah welcome to ALL frameworks. Even RoR is that way, you just can’t see the elephant because it’s hidden in the maze that RoR creates.

  3. Pedro Nascimento permalink

    Not exactly. Java is more verbose than Ruby, so it’s perfectly reasonable to see it as a ‘smaller’ framework.

Leave a Reply

Fill in your details below or click an icon to log in: Logo

You are commenting using your account. Log Out /  Change )

Google+ photo

You are commenting using your Google+ account. Log Out /  Change )

Twitter picture

You are commenting using your Twitter account. Log Out /  Change )

Facebook photo

You are commenting using your Facebook account. Log Out /  Change )


Connecting to %s

%d bloggers like this: