20 June 2013

Experience Report: Pairing with a Programmer

It was one of those typical "do or die" scenarios: A feature was implemented that was critical for the project but it was delivered late due to slightly optimistic estimates. To make matters worse it touched on rather fundamental parts of the product making it somewhat complicated to roll back. The job was to quickly test, fix bugs and, in corporation with our product owner, decide if the feature was ready to be released. The feature in this case was rather technical with a simple interface that, depending on configuration, triggered tons of background activity including communication between different servers.

What we did
Me and the programmer teamed up. The first day we worked in front of his computer only. Initially he pretty much explained the feature and I noted down some thoughts and scenarios that popped up in my head. When done we started with the most straight forward scenarios and immediately found some serious bugs that required extensive investigation and experimentation to fully understand. We managed to solve the most critical ones and left not that late feeling really good about ourselves. Day two would be a breeze!

Day two we made an "upgrade" and booked a room as well as brought one computer each. Immediately we found out we had badly underestimated the work left as critical bug after critical bug emerged. As some of them required knowledge we lacked we called in a domain expert to help us and continued to work all three together for the rest of the day (one computer each). Day two turned into a 12 hour long exploration and bug bashing. When done we felt slightly exhausted but proud, it was working!

Some info about the group
I'm a decent programmer and a good tester. The programmer in this case is fairly young but good programmer progressively becoming a better tester. Finally the domain expert is a bit of everything. He knows the system and customers as well as having a fairly good understanding of both programming and testing.

  • We had fun! Personally I liked day one best, not because the presure was somewhat lower but because we cooperated more when sharing one computer.

  • Continuing on the track of computers: I think from an efficiency standpoint one computer each was, short term, mostly more efficient (possible exception would be during the most intense and mind challenging investigations). It's important to note that one computer each didn't mean we just sat together testing individually, what we did was to work together on one task but doing different things (like taking notes, executing tests, monitoring logs, correcting code etc.). Working together at one computer though was a more learning experience and, as I said before, I think it was more fun if that counts for anythings.

  • I feel very comfortable saying we would not had caught and fixed anywhere near the amount of bugs we did if working separately. A few reasons why:
    • We have different investigation methods. The programmer did low level investigations really well adding debug printouts, investigating code etc. while I did high level investigations really well checking general patterns, running additional scenarios etc. Not only did this make us avoid getting stuck by changing "method" but also, my high level investigations benefited from his low level additions and vice versa.
    • We could share some of the work, for instance I took notes as the programmer ran scenarios. This helped us avoid losing momentum.
    • No time was wasted performing handovers from bug reporter to bug fixer back to the reporter.

  • When we worked all three together I felt we often worked in one pair and one person alone (not all the time but most of it). In this case it was probably the right thing to do as we required all three persons' skills but I think that was an exception. My general judgement, only based on my own experiences, is there is little or no gain in being three compared to two if you don't really require everyone's skillset more or less constantly.

  • We learned so much!:
    • All three learned new things about programming, the system in general and testing, both from each other and from ourselves explaining stuff
    • I learned more about logging in general
    • I learned more about the system and feature
    • I learned more about the code/code architecture
    • I learned more about the others' strengths and weaknesses
    • The programmer got help being skeptic about his own code
    • The programmer learned some new scenarios his implementations need to handle

  • We got to know each other's personalities and skills better which fosters trust/respect/team spirit.

  • It made us communicate more which helped us gain from everyone's observations (sometimes an observation was communicated that didn't mean anything to the one making it but did to someone else).

  • Pairing also made us stay focused for longer stretches (you don't want to be the first one to procrastinate).

  • A byproduct was code review. As we investigated code sections other improvements/problems/potential problems became apparent and fixed.

  • One thought that popped up was working separately and then pair as problems occurred. However, that would require time to be spent rerunning the actions, explaining the steps and possibly missing crucial details from the initial run. All and all I think there's a place for that kind of approach as well but not that often.
Sum up
I did pair up with programmers quite a few times at Ericsson and found it useful but for some reason I haven't done it on my current job until now. I will definitely continue doing it though, for the learning experience, for the laughs and for the (at least perceived) efficiency gain. Luckily it seems I wasn't the only one feeling that way!

11 June 2013

Reflections and feedback request on communication

This is a post in which I will mostly ask for your help rather than me trying to help you. If that's not what you're after, feel free to skip to "Improving my communication" further down.

So what I would like from those of you still reading is any:
  • Exercises
  • Experiences
  • Advice
  • Helpful ideas
  • Free speculation
  • Things to look into
  • Things to think about
  • Other stuff you think might be helpful/useful
... related to what I'm about to describe. I leave it up to you to decide how to feedback but some suggestions are as comments to this post, email (brickuz(a)gmail.com), Twitter (@brickuz) or Skype (brickuz). Thank you so much for taking your time, I value this tremendously!

I will talk about drifting as something bad. In many cases following thoughts to explore new ideas are  (I think) a great way to learn but the drifting I refer to is drifting away from a point I'm trying to make ending up with me not coming to any point.

I will also talk about communication only as verbal communication that is not (suppose to be) one-way.

Slowing down my tempo
I speak very fast, something I've done for as long as I can remember. The more excited I get the quicker I speak but it's an issue long before I get excited.

Problems: Sometimes people find it hard to pick up what I'm saying, it creates a barrage of words which makes people lose interest, it (I think) affects my credibility and it makes people lose track making it hard to get what I'm trying to say even when they stay interested and hear the words.

So far I've tried to actively lower my tempo but I quickly forget about it when discussions get intense or when I'm excited about the topic (as a passionate person that happens constantly). I've read before that it may be connected to stress, which is probably a factor and I'm trying to work on that as well, but I doubt it's the main reason. After all I've done this ever since I was a kid.

Lowering my voice
I often talk loud.

Problems: It can make it somewhat uncomfortable to listen to me for long stretches and it leaves a bad impression, especially when it's used to drown out other speakers (unfortunately not uncommon). The fact that I have a somewhat high pitched voice makes it worse I think.

I don't have perfect hearing but I also don't think that really affects this. I would rather say it's a bad habit I haven't learned to control. It also seems there's a connection between me raising my volume and my tempo which makes me believe there is something else that is the main problem.

Come to the point
I often have a point I want to make but I tend to drift off, simply because something pops up in my head and it immediately turns into words. A special case of this is when I throw out a claim and start reasoning around it (is it really true or not) as I speak. I do this in a way that, I don't think, is really helping anyone. Finally a third variant is I associate something said to something in my head giving me a starting point but not having any point to move towards. Even though this is the case I start talking and often end up in a situation there I'm desperately searching for a point to make AKA rambling.

Problems: A very common end result is lots of words, few relevant points which in terms makes people lose interest.

I try, but once again often lose the ability to when excited, to stop myself and just end my rambling as soon as I realize I've forgotten where I'm heading.

Stop interrupting people
I often interrupt the person speaking because I have a point, association or addition that fits in exactly at where we're at.

Problems: Apart from being rude/giving a bad impression, I make the speaker lose track/miss out on valuable information and it seems that interrupting others also makes it more okey to interrupt me more often.

My greatest ally in this so far is a well developed empathy. Thanks to it, "something" stops me and says: "if I speak now I'll likely hurt the person speaking's feelings, or at least rob him of the chance to shine"... not remotely close to stop me often enough though.

How did I come to these conclusions?
  • Stopping and reflecting on what just happened after I've gone bananas in conversations
  • I'm blessed with some really smart friends who care enough for me to give feedback
  • Observations of how people react to/act after I've spoken/rambled.
  • Reflecting on things said by people who don't like me.
Isn't this "just the person I am"?
I believe we all have various characteristics, like being impatient or humble. These provide us with some ups and some downs. I'm quite satisfied with the characteristics I have so I'm not really trying to "take the me out of my communication" but... it's also a lot about skill. Sure I get impatient or excited and that affects my communication, but on top of that there's a lot of skill I want to improve.

Why does this happen
Apart from impatience and excitement another thing that seems to "passively" affect my communication is fear. First it's the fear of people not letting me into a conversation. This, based on my own observations/reflections, makes me interrupt more often as well as keep talking without letting other people break in. The fear of not coming back into the conversation also gets worse the longer I go as I know people will hesitate to let me in again, for good reasons, when I stop. This is of course very counterproductive as people will stop listening at some point. Reading what I just wrote actually sparks some thoughts, we'll see where that ends up.

Second is the fear of forgetting about something that, important point, in the moment seems incredibly important (not so much when I say it though). I try to battle this by bringing a notebook but so far it hasn't improved the situation much.

Related to these fears there seems to be a mismatch between how I evaluate the "wow factor" of a thought inside my head compared to how it comes out. I don't think this is based on poor construction of the message, rather that I exaggerate the importance in my head. I think this mismatch is an important factor for me to generate a constant flow of ideas to explore so the problem is probably not the mismatch itself but rather that nothing stops my brain from communicating all those thoughts as soon as they pop up.

Improving my communication
In general, to battle these problems, I try to remind myself that people will only remember a few things I say (in general at least) so I better make sure that what I want them to remember is what's in focus rather than having it mixed up with a million other words and thoughts.

I try to stay aware of my though process and create a small gap between thinking a though and speaking the thought so that I can quickly make a rough estimate of: "is there a point relevant for this conversation in what I'm about to say".

I try to think more egotistically: When listening I generally learn more than when speaking. This way of reasoning has also made me use questions more often to still bring the conversations in directions I find interesting. One byproduct of doing this is I tend to communicate my own messages a lot more efficiently when baking it into this "question driven approach". Questions also help me stay focused on the current topic rather than drifting away. I thank Peksi and his exercise, as well as RST with James, for helping me learn how to do this.

Taking time to reflect, like in this blog post, helps me to become more aware of what I should think about/practice when speaking. Just getting this far has made me more aware of the silliness in many of my bad habits and ways of handle fear.

Moving on
Apart from putting my trust in some great things coming from those of you who have read this (grateful once again), one thing I've realized during these reflections is I should record my conversations and try to learn from listening to myself more often. Apart from learning more about my patterns I hope it'll make me better aware of how/when/why my speedy rambling kills any substance within.

Also I need to go into "practice mode" more often, observing myself as I speak and try to tweak the why/when/how/how much I talk instead of keeping my head busy with figuring out more things to say.

... I should do this kind of reflections more often it really generates interesting thoughts!

Wrap up
Thank you for surviving this rather long blog post. Please share your experiences and ideas regarding:
  • Speaking slower
  • Speaking more quiet
  • Getting to the point
  • Stop interrupting people
I really appreciate any input I can get!

(I keep coming back to the idea that I maybe should release a recording of me rambling... well, let's save that for another time .)