Wednesday, March 30, 2011

Working with four continents

The last couple of months I have been working with a team out of Israel, a team out of Shanghai, an architect based in London, and me out of the US.

My job is to work under the guidance of the architect to develop a component which integrates tightly with what the team in Israel is doing but keeping the people in Shanghai in the loop so they can take over my piece. The easiest part is to keep Shanghai in the loop - I just do a presentation/training session every three weeks in the evening (usually 5 pm my time). They listen, ask a few questions -- but from colleagues having done such things I know that it might be good to give them homework and quizzes to assess the level of their understanding. But I kind of refuse (like I dow with my adult students) to drop people back to college level :-)

Working with the architect is awesome, too: I have him on IM and can drop him a note and he gets back to me really fast. But since he is like me new to the Israel team he does know the same amount as I do about how things should be done on this micro code level where teams differ. Do you use return codes for errors or exceptions? (Turns out they do both) and so on.

I am mostly working with a Senior Engineer and a manager in Israel and they are both really sharp people and a pleasure to work with. I send them e-mails and they usually get back the next day. I send them diffs and they tell me what to change and we have frequent screen sharing meetings (7 am my time) to discuss some of my more complicated changes.

That all sounds great until you discover at 9 am some pattern or detail in their code you don't understand but you probably need to to do your work. Then you have to wait until the next day for the answer. So I found it helpful to switch to some other thing to work on if I am blocked or do some speculative coding to show them how I think it should be done and send it to them to correct me. I have discovered quite some things that way which weren't apparent (to me) by reading their code.

Does it make sense to work that way? I am pretty convinced if I would be co-located at least with the Israel team I would avoid some rework, spent less time searching their source code, and ultimately get more done. On the downside I would probably slow them down a lot with me asking them stuff every 10 minutes or so.

On the other hand I know the piece I am supposed to code for them inside out so having them do it would probably take even longer. But all things equal having a Senior guy on site might be more productive.

I always advocate to fly people to actually meet each other for a few days to code together and get to know each other but with travel budgets tight that often isn't an option. Also often teams contain people from many continents so the way I work this though second best is probably more productive that other things.

The management of my coding is old school. So I don't call in to any daily stand-ups nor do I participate in planning or review meetings. I just keep a representative on each continent informed about my progress and they coordinate with QA and other parts on my behalf. Which let's me focus on coding and I don't have to get on the phone at crazy hours.

I know that this is frowned upon in the trade and we all should have one big scrum we all call in together but this works surprisingly well -- which I attribute to the fact that most of the people I interact with are quite senior and just know what to do.