Creating a spontaneous environment

While I was away in China, a friend kindly lent me Malcolm Gladwell’s “Blink” (great book).

In “Blink”, Gladwell touches briefly on the subject of improvisational theatre. “The important thing,” he says (my paraphrasing) “is never to say ‘no’ to anything that anyone on the stage does. Work with it, and reply with anything which comes into your head, even if it’s silly.” So if someone says, “Regina! Everyone, this is Regina, that penguin that I was telling you about!” then your reply should not be “Um… I’m not a penguin.” Instead, it should be something like, “Why, it’s little Stanley! My, how you’ve grown! You were still a fish when I last saw you.”

The luckiest amongst us were given the opportunity to try our hand at this during our UK Away Day, with hilarious results.

I was very impressed by the ability of my peers to generate weird and wonderful ideas. With the certainty that no one would say ‘no’ to their suggestions, people played to their strengths. They were imaginative or supportive, dramatic or comedic, brave and wildly entertaining. “Wow!” I thought. “Wouldn’t it be great to have that kind of spontaneity in our projects? But how do I help anyone improve if I can’t tell them when they go wrong? What do I do if I see a better way, without making suggestions? How do I encourage them to try things out, and make them gravitate towards the right kind of things?”

The equivalent of this in a software project is to take other people’s solutions and build on them, instead of rewriting them; to never tell them that they’re violating a rule; to never say, “No! Don’t do it that way!” It’s pretty hard work – sometimes, people who aren’t familiar with the project’s single and elegant metaphor make a hideous mess, and others have never even heard of Dependency Injection – but with a little patience, I think it’s possible to get anyone moving in the right direction. Here’s a few things I found out / reminders to myself.

  • It’s no use telling anyone they’re wrong anyway. Bright sparks hardly ever take advice on board unless it makes sense to them. The easiest way for someone to learn is to find out for themselves that there’s a better way. Sometimes, left to their own devices, people will naturally gravitate towards the simplest, most elegant solution – and it might just be simpler than yours. For instance, I played a Lego XP game with some newcomers from India who’d never seen Lego before. Instead of making their animals’ legs by stacking up small bricks, they simply turned the Lego sideways on and used the long pieces for legs – very clever!
  • Encourage good things by using them – eg: read the names of tests to work out what a class does; trust that a method does what its name suggests; believe that the projects’ tests will tell you if you break anything. If no one thinks that an aspect of their work is actually being used, they won’t bother doing it properly – but when everyone in a project starts believing that the tests are reliable, that the design is maintainable, that the wiki is up to date, and everyone is using them appropriately, then everyone will work to keep things that way.
  • Trust and respect people. Also trust and respect the work that they produce. Always believe that the thing you’re about to look at is perfect, or can be made so very easily. Remember that other people’s idea of perfection may differ from yours, and that there’s always more than one way to skin a cat.
  • In a spontaneous environment, people are happier to remove restrictions they’ve placed on themselves. I was helping some newcomers to Agile work through a coding kata (little exercise) in TDD. Their design wasn’t optimal, but I congratulated them on their successful solution, then presented them with some new stories which conflicted with the design they chose. They optimised their design spontaneously, and I don’t think they even realised that their first one was over-engineered.
  • Give people tools, and let them work out how and when to use them. Show them a couple of IDE shortcuts, and where to find the rest. Tell them where the Wiki is, but let them explore it and decide which bits are useful.
  • Lose the bad by doing the good. Your customer can’t prioritise his stories? Prioritise and release them for him until he wants something different. He keeps changing his mind mid-iteration? Ask him which of the cards on the wall he wants you to swap out. Your new recruit doesn’t understand extensible design? Pick up a story which touches his code and ask him to pair with you; help him to drive. Your pair keeps coming in hung-over? Call out, “Good morning!” in a very cheerful voice. Etc.
  • Do things that you’ve never done before, and encourage others to take on new roles too. Everyone learns! A lack of confidence is one of the biggest barriers to spontaneity. When people find out that it’s all right not to know the answer, they’re more likely to explore solutions than just guess. They’ll ask other people for help. Encourage people to help each other, and swap pairs if you’re needed somewhere else.
  • Never wait to do the Right Thing. Right Things should happen spontaneously. Love the Right Things that other people do, and celebrate them. With chocolate. Let others see that you’re happy to do the Right Thing as and when it’s needed. Quick fixes and pragmatism are acceptable if they’re required for other Right Things, eg: to check in regularly, or to deliver that story within this iteration – but value those goals, not the Wrong Things which led to achieving them.
  • Many best practices happen in a spontaneous environment without people realising that they’ve started doing them.
  • There is a speed beyond which a rocket will inevitably escape the grip of the Earth, without any further thrust. Similarly, there is a level of spontaneity beyond which spontaneous things will happen without encouragement.
  • It helps to have other spontaneous people around (thank you, Simon.)
  • Spontaneous people surprise themselves, and the people around them.
  • Surprise is a good thing.
Posted in Uncategorized | 9 Comments

Plus ça change…

Agile means “responsive to change”. Unfortunately for me, that means coming home early. Just one of those things that happens in the big, wide world of consultancy and changing requirements!

Xi’an has been amazing. The team here is incredibly dynamic, trusting, patient and helpful. I’ve learnt so much from them; far more than just the Chinese culture and language. It’s been wonderful to work with our friends from Bangalore, too. I’m going to miss these guys so much.

Posted in Uncategorized | 1 Comment

IM is your friend

Running a project with a customer in the UK and development split between China and India is, as you can imagine, full of challenge.

The biggest problem we could have faced was the communication bottleneck. In the first week of the project, India was only really speaking to the three people who’ve come to Xi’an from Bangalore, and to me because a few people there know me. (Bangalore have been working on this for a bit longer than Xi’an). This meant that we were continually passing on messages, trying to find information and not doing any of the enablement or mentoring that we needed to.

We did a number of things to solve this problem.

1) It’s a lot easier to talk to someone casually and ping them out of the blue when you know what they look like. We have uploaded photos of both teams, and installed video conferencing and a few webcams.

2) We all signed onto Yahoo IM; the de facto communication tool of Thoughtworkers everywhere.

3) Some of us signed onto Skype. The connection to India is really good!

But we still had another problem, in that no one in either office knew who was doing what. Do you just pick someone randomly to ask? Or do we all broadcast everything we’re doing? The idea of forty emails flying back and forth every day is quite scary, especially for those of us whose connection to our Lotus Notes server goes through a dozen countries and as many time zones.

So here’s our solution, proposed by Helen, who did this successfully on her previous project. Everyone sets their Yahoo Status message to show what they’re doing.


(Names changed to protect the guilty.)

It’s very quick and easy to see if anyone is working on something you’re interested in, looking at that broken build, in a meeting, fixing a bug. Anyone can talk to anyone else on the list, and get the names of newcomers from anyone else – and just as quick to start talking to them!

Bottleneck? What bottleneck?

Posted in Uncategorized | 2 Comments

Safe in Xi’an, China

That was easy. I got through Chinese security in 3 minutes, picked up my bags in 10 minutes after both flights (to Beijing and then on to Xi’an) and breezed through customs. Buying the ticket to Xi’an in Beijing was also easy (bring cash). No one has tried to feed me chicken feet yet. Xi’an is polluted, but the snow is very white, not black. It’s a little bit warmer than London. No one tried to rob me of my passport in Beijing airport. None of the awful things which my kind friends told me would happen have occurred.

The traffic, though, absolutely resembles the nightmare which was described to me by previous visitors. The signal for pedestrians to cross the road is an animated green running man. There’s a countdown beside it; when the countdown gets to three, the man starts running faster. I would. I’m guessing the taxi drivers have some complicated point scoring system, and play for serious money.

Posted in Uncategorized | 3 Comments

Want my job?

Thoughtworks UK is recruiting.

We’re particularly after Java devs with 4+ years’ experience – but all bright, creative, problem-solving, honest, courageous, fun-loving, responsible, mad, weird and wonderful people will be considered for a variety of roles.

Posted in Uncategorized | Leave a comment

Leaving on a jet plane…

I’m going out to Xi’an, China, for a few months (pending visa application). It’s a very exciting role, full of challenge and responsibility. I’m looking forward to the cultural differences, the language barrier, and having to grow up a bit.

I am secure in my ethicality, and will happily indulge in debate with any comers once I get back. In the meantime, wish me luck! If this blog goes quiet for a while, it’ll be because I’m busy – nothing more!

Posted in Uncategorized | Leave a comment

10 signs of work goodness

You know work is good when:

  1. Your smile is infectious, even on the tube.
  2. Every day you find out something new…
  3. …and pass on something to someone else.
  4. You wonder how you’re going to have fun, not when.
  5. No tunnel is so long that you can’t see the light at the end…
  6. …and you’re learning to climb hills instead of ploughing through them.
  7. The team can reach agreement on anything except where to have lunch.
  8. You come to work with questions, and leave with different questions.
  9. Your friend asks you, “How was your day?” and really wants to know.
  10. Sometimes you amaze yourself.
Posted in Uncategorized | Leave a comment

When naming conventions attack

They say that if you put a frog into cold water and gradually bring it to the boil, the frog won’t notice. The same is true, I think, of Java devs (possibly others too, but for some reason it seems easy with Java). We get into hot water a lot, and it’s not because we jump in; it just heats up gradually around us. For instance:

  • We make a domain object with a status Status.
  • We update the status with a StatusUpdate.
  • We define a service from which to retrieve the status updates. We call it ServiceStatusUpdate.
  • We require the retrieval of updates to the status from the service with a ServiceStatusUpdateRetriever.
  • We require a mapper to map the status update messages from the service to the status update objects. We call it ServiceStatusUpdateRetrieverHelper.
  • We implement the mapper with a ServiceStatusUpdateRetrieverHelperImpl.

If you’re thinking, “What’s wrong with that?” then write down ServiceStatusUpdateRetrieverHelperImpl on a piece of paper. Show it to everyone in the room. Someone will laugh. Ask them to explain the slightly manic, desperate edge to their laughter, and pair with them today.

Posted in Uncategorized | 5 Comments

Thought for the day

If you can keep your head when all about you
Are losing theirs and blaming it on you;
If you can trust yourself when all men doubt you,
But make allowance for their doubting too…

Thank you, Rudyard Kipling, for a moment of calm in an otherwise turbulent world.

Posted in Uncategorized | 2 Comments

The nice men in the white coats

When you do the same thing again and again, and expect a different result, that’s insanity.
When you do the same thing again and again, and get a different result, that’s stateful programming.
Stateful programming will teach you to expect different results when doing the same thing repeatedly.
It is impossible to write code which runs without state.

How’s your job working out for you?

Posted in Uncategorized | 5 Comments