Archive for category Team

Take the Stoic Test

An underestimated developer superpower: Keep calm and focused with a juicy geek discussion exploding in the office/Twitter/Comments/Yammer around you. You get one point for each question that you can claim to keep your head down and your mouth shut:

  • Is this an entity or a value object?
  • Does Apple provide open software system?
  • Does using Open Source Software pose a risk?
  • Is Google evil?
  • Is this interface really RESTful?
  • Is Java dead?

If you score higher than five, you get an official hand-drawn STOIC badge to attach to your CV.

I doubt that I ever get one.

Leave a Comment

The Quiz!

[Before I start, a few more words regarding my last post. A colleague of mine recently also took the ISTQB certification exam, and in her group she was the only woman. So as far as my observation about the weak male/female tester ratio goes, there's another confirmation. Sad but true.]

But now, the quiz. About four years ago it all started with a motto/quote-of-the-week on a white board. This quickly turned into a trivia-question-of-the-week and born was the QA Quiz. Week for week, someone on the team would come up with a question for all the rest to answer. As word got around, more and more “players” became regular participants. The category of the question was up for the questioner to decide, and we had it all: trivia, movies, puzzles, history, politics, you name it. He would write down the question and a number of possible answers – of course including the right one - on Monday. The players then had the whole week to leave their mark on the answer they deemed correct until the question was resolved by the questioner on Friday.

With growing numbers, I invented some basic rules. Anyone who read the question had to answer it on the spot – while in the room – to prevent googling. There had to be a minimum of three and a maximum of seven possible answers. As a guideline, the questioners were asked to choose questions they could answer on top of their heads – not to make it easy, but to encourage them to choose a category they knew much about (and not necessarily the rest of the group). Choosing the right answer would score one point, and the questioner himself could not score that round. The person with the most points was asked to go next with the question.

The last rule we changed when it turned out there were always two who fought it out, ping-ponging questions back and forth. The rule had been meant to allow the rest to catch up in the ranks, but choosing a questioner randomly amongst all who had not yet asked any questions turned out to be much more fun. I split the year into two seasons with 20-25 games each, and the winner would be titled QA Quiz Master. As their prize, they’d even get a small trophy, a challenging cup – and they had to bring donuts or cake to please the masses. Every win also comes with a price, like.

So what’s this to do with anything, let alone testing? Not much. I was new at the company when I started the quiz and I am terrible at names. Due to the increasing popularity of the quiz, almost every single person in the department would come by my office at least once or twice a week. I got the chance to do some smalltalk, get to know them, do some team building. First meant for my own benefit and fun mostly, it also brought together odd groups of people talking about silly things sometimes, but talking. It didn’t cost a dime, hardly any time for anyone, and it was a lot of fun.

We stopped playing this summer at the end of a season when organisational changes brought other priorities, but I’ve heard people asking about it again recently. For something like this, you need a group of a manageable size and some minimal moderation, but up to 25 players we had no problems at all. I suppose it wouldn’t work in just any company or department, but (the right culture provided) I’m willing to try it again at my next gig, which is around the corner – I miss the quiz.

,

Leave a Comment

Of Coping

Recently, I was in Vietnam to give a week of developer training. The company over there is quite big, and they’ve got several development projects running at the same time.

To one of the teams, something very bad happened: their project was cancelled in mid-flight, without any warning, from one day to the next.

Now if such a thing happens in Germany (where I live and normally also work), people will be, umm, taken aback. Everyone in the team will need a way to express their frustration, sadness, and anger. There’s going to be a lot of a) ranting against the management, b) expressing disappointment, and c) with some people, a well-groomed attitude of told-you-so. Summed up: not a good time.

What the guys (and girls; there’s a lot more female devs than what I’m used to) in Vietnam did: they threw a Farewell party. In the evening of the very same day the news was broken to them, they went to a restaurant, invited us visitors, ordered lots of food and beer (on company cost), took photos, and had what you’d called a very good time. Of course the topic of the day kept creeping up, but when too much bitterness entered the room, there was always some-one to shoo it away – not the end of the world, new chances are going to come, over and forgotten.

I think there’s a lot to learn from that when you or your team suffers a loss:

  • Don’t let people leave alone; they’re the only ones who share this experience.
  • As a company, acknowledge the need to communicate and socialize, and pay for the beer. Even if they rant at you (they’re going to do that anyway).
  • If you’re in the losing team, don’t let it bring you down too much. The others can help you.

Leave a Comment

Code as Lingua Franca

I’ve recently had the pleasure* to give a week of developer training in Ho Chi Minh City, Vietnam. The team was hand-selected, skilled, and motivated professional developers, and had already received three weeks of introduction training in the underlying technology of the project. I had run the same training sessions to different groups already. So the conditions were almost ideal.

However: every session took a lot longer than planned, even when I was skipping over some topics and time-consuming hands-on elements. The reason was mostly the English language.

My typically slide decks are slim, and do not contain many words. I rather use some diagrams and photos than bullet points of what I’m going to tell anyway. This means that I spend most time standing next to the projector screen and talk. I sometimes use Prezi instead of PowerPoint and jump around the presentation content. While this style gives me a dynamic and lively way to present, and seems to have some entertainment value for the audience, it did not work well with this group.

Without bullet points, the audience relies on the spoken words to understand the structure of the presentation. I had to talk really slowly and pronounced (and quite loud, with 25 people in the room) – which I tried, but I constantly had to remind myself (and be reminded) to stick to it. I still received feedback that I’ve been too fast, and that some of the audience could not really follow well.

And it’s not that their English was bad. It’s just that when you come from e.g. German (like me), English is quite an easy language to learn. But just look at a map – England and Germany are just a tiny bit apart. Vietnam however is on the other side of the globe. And so is the Vietnamese language. Just an example: the same sound, spoken in a different tone, can have four different meanings. Like I said, the group were excellent – they even had received English training. Reading and writing is not a problem at all. But listening and speaking is.

When you don’t speak a language well enough, spoken language becomes an obstacle.

So I reworked the slide deck to be more rich in text. But still, you can’t have all your content on the slides, and some of the stuff was quite conceptual. For example, I had a slide about the Arrange-Act-Assert structure in unit tests.

It was not before the end of the week were it dawned on me that me and the audience shared one language that is extremely expressive: code.

Here’s the evolution of the Arrange-Act-Assert slide:

Original version

I show a movie where the engineers first prepare the building with the explosives, add the wires, dampening mats, the works. Then the explosion is triggered, the building collapses. After that, the engineers examine that no surrounding buildings have been damaged. While the movie runs, I talk about what they’re doing. After the movie has finished, I flash up three images from the different phases and draw the connection to arranging the preconditions, running the tests, and checking the results. If questions come up, I use them to elaborate on that point a little deeper, in an ad-hoc fashion.

In a group that does not well understand English, the movie and the spoken information together easily lead to information overload. They lose track, and while I’m on the finishing line with the elegant conclusion, they still wonder why the building was razed after all.

Text-Heavy slide

The structure does no longer rely on spoken word. However, the content is still abstract and requires some explanation. Specifically, the translation of the concept into code is not laid out: does the arrangement belong into the text method itself, or is it in the test setup? What about tests that do not require arrangement? This still has to be given verbally.

Code-based explanation

I start with a method to be tested. I add the skeleton of a test method. This is augmented with verbal explanation. Then I add the method call and add a comment “Act”. The method requires a precondition to be set, so I add a line of code and the comment “Arrange”. Then I add an assertion, with the matching comment. After the code is complete, I switch to a PowerPoint that shows the just created code blocks, and adds an abstract diagram as a overlay.

This approach has the advantage that it starts with a language that the group of developers understands perfectly well: C# code. The abstractions follow after the coded example has been shown. Verbal explanation is given, but only adds to givens that do not rely on the audience’s ability to understand English.

For developers, code is the language everyone understands.

I did not have the time to rework the slide decks to follow this schema, so I tried to improvise and used a text editor to write up some code while I was presenting. I’ll definitely give some more consideration to the audience’s language skills.

———
Pleasure: Vietnam is awesome, and Ho Chi Minh City is a place that you must have seen.

Leave a Comment

Peer pressure

About yesterday’s post: I continued to discuss making successful sprints objectives for sprint teams, and someone gave me a good point against doing this. Not only would it mean putting the sprint team under a lot of pressure and it would probably make them commit to less user stories – that I thought about myself – but more importantly, it would also put a lot of pressure on the people who accept or reject a sprint: the product owner and other reviewers. This can quickly become very tricky when these people have conflicting interests or close relationships with people in the sprint teams.

,

Leave a Comment

My goals, your goals, our goals

Many companies do it: variable pay, or bonus payouts based on individual performance. It’s easy if you work in sales: The more you sell, the higher your bonus. It’s trickier with us developers and testers. We’re too far away from the money, we need personalized goals. Could be getting a certification, or reading a book. Could be team work related. The softer the goals become the harder they are to rate. And what good are goals that basically only tell you to do your everyday job?

So what’s the goal of having goals? You need a specific task or project getting done. Or you want to develop a specific skill. Or, you aim for personal fulfillment. Motivation. It might depend on many variables. Do you/your manager need to delegate a bigger task? How much time do you have to fulfill the goals? Is it a bonus plan? Is it variable pay, i.e. considered part of the “normal” salary? Do you have team goals?

I’m not going to cover good or bad goals in general here. Depending on your situation and company culture your goal and performance processes probably differ a lot. My question at hand is: How much sense does it make to have goals in an agile (Scrum) team? What kind of goals would you set? Would you still have individual goals? And most importantly: would it be a bad idea to make the success of the team’s sprints a goal for all team members?

I thought about this a lot and a fellow team lead has a very strong opinion about this. I can’t help but agree with many of his points. What’s the main objective of a sprint team? To deliver. To get their sprints done and signed off. By definition, they work as an independent unit while on a sprint, and all team members are equally responsible. If they fail, the whole team fails.

Of course you could still have individual goals, but the strict “do not interfere with sprints” rule applies and it’s a walk on a razor’s edge when a line manager from outside the team requests specific work from a sprint team member. If you don’t put time aside or rule that goals need to be worked on private time (a big no-no in my book), it’s nearly impossible not to interfere with the sprint team’s work if you’re handing out extra goals. So why not giving them all the same goal: successfully finish your sprints. Pass or fail. (You could still have individual development goals on the side, weighted less, if you’re extra careful (see above).)

I talked to some colleagues and they immediately said “No, bad idea. What if the sprint fails, but due to problems from the outside?” Well, in theory that should never happen. If the team cannot successfully finish their sprint due to influences from outside the team, it’s not their fault. Either their Scrum master failed to help, or the sprint needs to be cancelled, but not “failed”. Is it fear of being given the full responsibility? What’s the consequence of a failed sprint – if there isn’t any but “we’ll just start over”? Or is it that they’re scared one team member might be responsible for the failure of the sprint, and since they all have the same goal they would suffer, too? Don’t they trust their line manager, i.e. reviewer, to see this all and take it into consideration come review day? I believe it’s probably a mixture of all of it, the hurdles for successfully passing a sprint are quite high in our company (and rightfully so).

So my question remains, does anyone have a qualified, logic reason to vote against having a shared team goal for members of Scrum sprint teams that is based on the success of their sprints within the bonus/performance review period? Because I don’t really, and yes, I’ve been working within sprint teams as well.

,

Leave a Comment

Chocolate-covered unit tests

I just went through last week’s unread feed (a sleeping problem? me?) and found this on the Daily WTF. The unit test code you see there is so absurdly wrong it makes you smile, but then, there’s a serious problem behind that.

The author has been assigned to implement a development process that utilizes unit testing with a team whose members don’t buy into the idea. So management escalates the problem and enforces a policy that uses the code coverage metric to measure the quality of unit tests. Of course the team members still don’t buy into the whole idea of automated testing, and game the metric to the extreme.

And there’s the problem: if you want to have automated tests that really improve quality, and not just for the sake of a process requirement, you need to find a way to get developers to love them. If they don’t, they’ll find a way to weasel around any metric that you put up. All you can do then is forcefully review the tests, and live with the extra work and bad spirit that they create.

It is very easy to develop a love for unit testing when you’re the one responsible for maintenance problems. If it’s your own code that you’re living off. Or, when you’ll be held responsible for what others produce. On the other hand, if you’re mostly responsible for delivering features set in limited time, and then these result melt into some larger product, the responsibility for maintenance gets blurry.

Anyone: how do you put chocolate around a unit test?

, ,

Leave a Comment

More evaluation and meetings

I got some quite passionate feedback on my latest frowning on capturing feedback for internal trainings. In short, the reaction was that there are some obvious advantages to gain in capturing feedback, nothing to lose, and I didn’t really show a lot of innovative spirit. My main claim was that creating and evaluating the feedback materials could easily become a waste of time because participants would not be motivated to return feedback.

The key is to make giving feedback compelling, fun, and fast. Only ask one or two simple questions like:

What was the most useful thing you learned in this session?
If you could change one thing for the next group of participants for this session, what would it be?
What were you expecting that you did not get from the session?

And then, you can do better than filling out paper. Using an online tool lets your participants give their feedback when they are ready for it – and that is probably not directly after the session when everyone is rushing out for lunch or a few beers, but later in the hotel room or via their smartphone. And of course, an online tool does not pile up on your desk in an untidy fashion (yes, I’m the kind of person whose desk is always a mess).

I stumbled across a new thing called BetterMe - its primary focus is on personal feedback, but it works perfectly for a serious of sessions. BetterMe lets you send out questions, and a (predefined) set of ratings to a group of people, who then receive an invitation to come in and provide anonymous feedback. Well yeah, there are drawbacks – the rating questions can only be chosen from a small predefined set, you need to log on to provide feedback, support for small device isn’t great. But BetterMe really shines as a personal tool for accepting and giving feedback, in a professional or personal frame. (OK, the templates for personal questions are a little weird: How am I in bed – rate 1-10). You can try this out on me: go to BetterMe, create a login, and send some feedback to chr.heger@gmail.com.

And then there’s Ketchup. Ketchup is a minimalistic planning tool for meetings, and very much focused on exactly that. You start by creating a meeting in Ketchup, invite some people (Ketchup sends out the invitations), and share the URL of public meetings. Then when the meeting is on the way or over you can add some notes. The whole meeting can be printed nicely, and there are decent export features into calendars. Ketchup does nothing that you could not do with your Outlook or Google Calendar, but it provides a very streamlined and concentrated user interface.

Finally, a visit on MeetOrDie can saves you the effort of actually running a meeting at all, as it precisely predicts the outcome of a meeting.

, ,

Leave a Comment

Evaluation sheets for internal training?

We’ll be running quite a massive series of internal developer trainings in the next months, and in a planning meeting, I got into a short but heated opinion exchanges about whether we should hand out evaluation sheets after the sessions or not. I was against it. And now I wonder if I’m right.

Sessions will be held by members of the development team, the audience are developers too; there should be two dozens of people. There’s going to be one or two repetitions of the sessions.

Pro evaluation sheets:

  • The speaker gets feedback on how he was doing. This helps her/him to improve both the session (slides, script, timing) and presentation skills.
  • Participants feel more involved. Maybe they can even vent away some frustration and feel better.

Contra evaluation sheets: (you might notice, I’m biased towards this side of the argument. Hence the longer and more arguments. Which does not make it right per se.)

  • I don’t like filling them out, so I presume nobody does. I would not expect an outrageously high return rate. Given that you only get a few data points (there are 12 participants in total), what’s the validity?
  • The speakers are just developers; teaching groups is an exception from their day job. Everyone will give their session maybe two times. So even if you get a very clear indication of things you could improve, there’ not that much opportunity.
  • Designing a questionnaire, distribution of sheets, and evaluation are all tasks that take their time – a scarce resource that I feel could be of some use elsewhere.

In the end, I still think it’s just not worth the effort.

1 Comment

Surviving the crunch

After a period of moving along relatively smoothly, January had us*. We had carried some unfinished work into the new year, had a non-negotiable deadline (a lot of people would be paid for twiddling thumbs…), a ton of work to do, and finally only  seven days to go. So last Monday I drew a list (a mindmap, in fact) of the TODOs, got the team together, and we went into crunch mode: you try to make up lost time by increasing to effort
It just happens once in a while. There is this grey area between a full success (8 hour days, relaxed coding,  you could even deliver earlier) and the clearly slipped deadline, or outright failure. You know that you’re on the right track, only that you need some extra hours.
I know that this runs against the idea of a well-run agile process. First of all, you should not be in that situation. You should have estimated better. Clear the impediments. And on the verge of failure, inform the PO and let her decide. But: not all environments support this modus operandi, and the negative effects of failing to deliver can be tougher than the extra work. Especially when facing a difficult situation, I try to follow some rules:
  • Don’t panic.
    We’re building software, we’re not trying to land a plane. Or doing brain surgery. The worst thing that can happen is that people lose money and become unhappy. When you let your panic take control, it becomes more likely that the first thing happens, and the second comes for sure.
  • Prioritize recklessly.
    Do only  things that need to be done _now_. Can it wait until next week, in calmer waters? Then it does.
  • Create acceptance.
    When you’re about to take some quality of life from your team members, make sure they understand why it’s necessary, even when there’s an uncomfortable truth. (“Customer X has been unhappy with us for some while, and we’re about to slip a deadline again…” ) If the thing at stake is mostly the team’s own reputation or bonuses, let them decide whether they want to take up the fight.
  • Go as fast as you can.
    Once you’ve discovered that you don’t have enough time at your normal pace, increase the focus on the bare most important pieces of work, and the working hours, to the maximum that you feel fit for. When you have to leave the comfort zone anyway, you can as well leave it early and deliberately rather than being forced out of it later.
  • But not faster.
    What quality of work can you expect from a coder after ten hours of concentrated work? I’ve yet to see anything not worth rolling it back the next day. And you don’t want people to exhaust themselves to the point where they report sick the next week. Make sure everybody goes home at a reasonable time, including yourself. And if you’ve spent one weekend working, leave the next one.
  • Failure is an option.
    Have a Plan B. When it becomes evident that you’re going to fail the deadline despite all effort, move to that plan immediately.
  • Be thankful.
    Whatever the outcome is: team members have spent extra time working for the company, and they can expect that this is not just taken for granted. Express some appreciation.
  • Don’t get addicted.
    Commitments should definitely not include crunch mode.

This time, everyone was at home Friday at 7:30PM, with the weekend free, and the goods delivered.

* A team of five developers including myself, and a QA specialist. We don’t use a defined method, but in a somewhat agil-ishway, but a looooot of deviations from SCRUM, all of which make sense. At least to me.

Leave a Comment

Follow

Get every new post delivered to your Inbox.