General

ThoughtWorks Brazil: Oink

In the next few weeks, I’ll be putting together a few posts that tell a little bit about the stories behind the scenes of opening the ThoughtWorks Brazil office. They’re entirely from my point of view, might contain an embarrassing moment or two and are absolutely not to be taken as the official voice of ThoughtWorks on any of these matters. I’m not a PR person ;)

- Hi Carlos!
- Hi Suzi! (Edwards, head of recruiting recruiters and big fan of otters)
- How many emails to the ThoughtWorks Brazil info address did we get so far?
- Too many! I’m swamped at the moment, but looks like we have some good candidates!
- Cool! What do we do now?
- For now, sit tight and wait for me there – I’ll be in Porto Alegre in a couple of weeks.
- Good old short notice, short term travel?
- Exciting, isn’t it? I’ll be over for a month.
- Yay!

Two weeks went by in a blink, and I find myself sitting in the lobby of a hotel in Porto Alegre giving Suzi a big hug for being such a trooper; YYC to POA is not an easy flight, but she didn’t care. The weather lost that minus sign next to the centigrades and really, that’s all she wanted to know. Calgary was hovering around -30 C, and summer in Porto Alegre had just started to kick in, with 28-32 C at lunch time, big tropical showers in the afternoon.

She got to work as soon as the jet leg went away, and soon enough we had invited enough people to join us for a day of breakfast, some presentations about ThoughtWorks and interviews. Honestly, I don’t know how that happened: Suzi landed on a foreign country, didn’t speak a word of Portuguese and yet, a few days later, we had an event with 80 people keen to hear about us.

I was flying back and forth from São Paulo, working at the client during the weekdays and helping out with recruiting and some of the random things that can get thrown at a company trying to establish an office in Brazil. And taking Suzi to the dentist to replace a filling… but that’s another story. I became more and more familiar with the recruiting process, still a good part of the secret sauce of ThoughtWorks. I did so many code reviews I can now recite the Mars Rovers code review problem statement with my eyes closed.

We decided on the first few hires and Suzi asked me to review their offer letters, just in case there was something culturally weird.

- Well, offer letters themselves are culturally weird. It’s usually just a phone call and a “when can you start?” kinda thing.
- Oh, that I’m not doing. I want letters, printed and signed… culturally weird as that might be!
- There’s one more thing about them that’s really weird, too.
- Uh oh…
- We are called ThoughtWorks Brasil Software Ltda, Formerly Known As Oink Participações Ltda!?
- The lawyers had me put that in there. Apparently, we have to use the full name of the company. Which we’re going to change, of course… but that hasn’t been fully approved yet.
- So all the offer letters we’re sending out to this first batch of hires are going to come from ThoughtWorks, Formerly Oink?
- Yes.

Histerical laughter ensued. Fast forward a couple of weeks.

Suzi and I are talking about how exciting having the new hires start all at once and how we’d put a big ribbon in the office door for them to cut, or something silly like that. I remembered this really cool photo set she did with the folks in Calgary, and thought it’d be great to do something like that here, too.

Maybe not with the bear hats, though.


Photo: Suzi stares at a chart, for no reason

General

Comments (1)

Permalink

ThoughtWorks Brazil: Going to Porto Alegre

In the next few weeks, I’ll be putting together a few posts that tell a little bit about the stories behind the scenes of opening the ThoughtWorks Brazil office. They’re entirely from my point of view, might contain an embarrassing moment or two and are absolutely not to be taken as the official voice of ThoughtWorks on any of these matters. I’m not a PR person ;)

Since the 2nd Brazilian joined the company there has been a discussion going on at a ThoughtWorks office, somewhere in the world: should we build an office in Brazil? When, where?

Choosing Porto Alegre as the town to build our first office was something unexpected to me. Until the beginning of September last year, I had heard lots of good things about the city, but had never visited it. It came up every now and again as a good IT spot in Brazil and as a generally nice place to live.

Sid, Roy (Singham, founder of ThoughtWorks) and a few others scheduled a visit to Brazil, in October last year, for a quick tour and meetings with a few more potential clients and friends.

I was living in Santo André, my hometown, about 25km away from the client, where I was doing some coaching and whipping a few legacy systems into shape. I took a little break from the client work and joined them in the tour where we were supposed to decide on a few things like incorporation, payment and benefits packages and most importantly, location.

Being from São Paulo (well, Santo André… but if you’ve been there, you know it’s all the same urban sprawl), I’ve backed it quite strongly. For me, it’d be extremely convenient — friends, family, etc. For ThoughtWorks, it wouldn’t be so bad either: it’s not hard to find excellent talent in a city with over 25 million people, especially one where the majority of the IT market is.

Paulo wasn’t so sure. (Paulo Caroli, the second Brazilian to join… or maybe third, I can’t remember). Being from Rio de Janeiro and having a bit of a thing against São Paulo, as all Cariocas jokingly do, he argued the picture wasn’t that clear: alternatives to the high taxes, heavy competition and the cost of living in São Paulo were worth thinking about.

At this point, choosing the place to open the office was becoming more and more of a big deal. The more we did the maths, the less São Paulo looked like a good place to start, even if it seemed like the obvious choice at first. High taxes and cost of living would drive our cost base up quite significantly, nearly killing our chances of competitively offering near-shore projects to our existing clients in North America and Europe. If we wanted to start from São Paulo, we’d have to find enough local work to keep us going (and growing), but the highly competitive market would drive our prices down enough to kill any margins and we would sink. D’oh!

The crew had visited a few cities around Brazil at this point: São Paulo, Rio de Janeiro, Campinas, Salvador, but there was maybe another dozen cities in Brazil where a TW office could thrive. After a lot of digging around and looking up statistics from all sorts of sources, we narrowed down the list of potential cities to two or three, and Porto Alegre was the next one to try out.

We got there and had a couple of meetings with the directors of PUCRS, the Pontifical Catholic University of Rio Grande do Sul… and wow. They have a technology park, TECNOPUC, taking up a good quarter of the (rather large) campus. Companies like HP, Dell, Microsoft and Accenture have a big presence. It looked nothing like I imagined, though: instead of a soul-crushing sea of cubicles in high-rises full of tired people in suits crammed in a corner of the University, I found a really vibrant, open area with a few short buildings scattered between huge leafy trees. It’s the sort of place I’d like to work at; others promptly agreed.

Talks with the directors went really well, and we partnered. ThoughtWorks joined the TECNOPUC community and we started talking about how much office space we’d need, and how much they had available at the time. Meanwhile, Francisco Trindade (developer and lean dude, born in Porto Alegre, based in London at the time) showed us around town. Again, I was impressed with the quiet, nicely kept streets, parks and facilities. There are trees everywhere, a decent public transport system, a good number of restaurants and things to do.

That evening, we flew to Florianópolis to attend Ágiles 2009, where Roy had the closing keynote. We spent most of the time at the conference still trying to figure out tax codes and benefits while Roy worked on the slides.

At the end of the usual politically charged and motivating keynote, Roy announced: ThoughtWorks Brazil is ready to roll, and we’re hiring!

Picture: Roy announcing the opening of ThoughtWorks Brazil at Ágiles 2009

General

Comments (3)

Permalink

ThoughtWorks Brazil: The First Day

In the next few weeks, I’ll be putting together a few posts that tell a little bit about the stories behind the scenes of opening the ThoughtWorks Brazil office. They’re entirely from my point of view, might contain an embarrassing moment or two and are absolutely not to be taken as the official voice of ThoughtWorks on any of these matters. I’m not a PR person ;)

- Hi Sid! (Sid Pinney, sales guy extraordinnaire)
- Carlos! Heard you’re definitely leaving the UK?
- Yeah, not really happy around here anymore. Personal stuff. I really want to head back to São Paulo. And I really want to stay at ThoughtWorks…

At this point, I had already written my resignation letter from the ThoughtWorks London office. Hadn’t handed it in yet, but I did tell Sid and a few others about it. Sid and I had been chatting for a few years about getting a Brazilian office together, and since then we’ve been trying to make some business contacts and hire more Brazilians to expand our network and reach.

Both turned out really well: at this point we had something like 12 or 13 Brazilians from all over the country working at various ThoughtWorks offices around the globe, and some really interesting prospective business and contacts in some 4 or 5 companies and universities. Sid was in Brazil a month or so before this conversation with a group of Brazilian TWers to meet more those contacts and to attend a couple of conferences in São Paulo and Rio de Janeiro. I tried to help organize it, but the Personal Stuff got in the way. Props go to Danilo, Francisco, Paulo, Phillip and a few others I might be forgetting who stuffed their agendas with interesting trips and talks. They gave me the confidence to leave London without letting go of all the good stuff going on at ThoughtWorks, which I wasn’t that prepared to miss.

I left the UK a few weeks after that (and still don’t know how I survived the leaving drinks!) and went to Louisiana to spend a month cooking, crabbing, drinking and fishing for sharks (!) in the Gulf with some friends who lived there. Meanwhile, Sid was working his magic and we caught up every few days. Talks about salaries, incorporation, general number-crunching, potential clients and what to do in what order and hardly any sleep in the meantime.

- If I got you a 3 to 6 month gig at that last client we were talking about, with you contracting to ThoughtWorks, would you be cool with that?
- Sounds good! Are we incorporating in Brazil later, then?
- Yeah. Need to get you on the ground first, and then we’re hiring a law firm to help us with the incorporation. It’s not too far down the road!

A few days later, Sid emailed me the contracts and I ran off to a public library in the small town of Carencro (population: 7000), where I was told they still had a fax machine. Signed, sent and $1.50 later, I was employee #0 of ThoughtWorks Brazil and a couple of weeks from that, I’d be starting at the client site, in São Paulo.

General

Comments (0)

Permalink

Don’t Ever Make Me Hit Save

A little usability story: my girlfriend spent a good chunk of last night working on a paper for her Copyright Law class in Microsoft Word. At about 4am I get a desperate call: “Help! How do I unclose a document?”

Whoops.

She had written something like 5,000 words, cited sources, added pictures and diagrams. Being in a hurry, she never bothered to save the document in the beginning. After a few hours, as she was getting more and more sleep deprived and the massive jar of tar-like coffee emptied out, it’s only understandable she didn’t bother to read or reason about the confirmation dialog, which I’m sure at this point read “Are you sure yadda yadda yadda?”, with the options “Just do what I said”, “Go away” and “Whatever”.

There probably is some delicate procedure in Microsoft Office applications to deal with this occasion, and that’s exactly the point I want to make: when this kind of human error happens, it is not a good time to bring out an extensive and meticulous procedure. This kind of error shouldn’t even be possible in the first place.

If I dig out my rusty Olivetti Lettera 22 typewriter from the spare room, put a sheet of paper in it and start typing, I would have to rip out the paper and shred it or burn it in order to make the words vanish. No amount of sleep deprivation will make that happen accidentally. If Word is trying to conform to that usage model, then this crucial part of it should behave like that as well: not that we should be “burning” or “shredding” digital documents, but that it should be really hard to get rid of them by accident.

Instead – and this is 2010, folks – Word offers me a button with the image of a floppy disk, labelled ‘Save’. It’s a little digital dinosaur, fossilized as one of the most important things this application can do, as a reminder of the tough times application developers had to go through back when keeping two different versions of a text document in memory and disk was considered a desirable luxury. Nowadays, when any decent text processor will have built-in version control and infinite steps of undo, is there even a point in having to hit ‘Save’, ever?

What about your application, the one you’re building now? Is there any jurassic ‘Save’ button lying around? If I pick up a form on your web application, do some work on it, go away and come back after lunch, will it rudely tell me I didn’t save my actions?

General

Comments (9)

Permalink

Encoding Detector 1.0 released

Ever had nasty problems coming from multiple development environments set up differently on your team, with developers accidentally creating files with bad encodings? Are your users complaining about all that mojibake showing up on your internationalised UI?

Well, I had… plenty of times. So I created a tiny little tool to help fight that. Encoding Detector is an aptly named tool (if I do say so myself) that recursively detects the encoding of files in a project directory errors out if anything seems fishy.

I’ve only ever used it with Ant, but it should be a breeze to set up and install on any project. All you need to do is call the main script against a directory, like:

$ python encoding-detector.py src

You’ll need a somewhat recent Python installed — anything that came out in the last 5 years should be OK — and that’s about it. Multiple directories can be passed as arguments, and fixing the errors is sometimes as easy as adding a few UTF-8 characters to boost the detector’s confidence up a bit.

This hack would definitely not be possible without Mark Pilgrim‘s amazing chardet library. The code, as always, is on GitHub, and you can also grab a neat little tarball here.

It takes about 5 minutes to set up on your project, and you can thank me later ;)

General

Comments (0)

Permalink