The Internet is full of “10 Rules For Effective Meetings” blog posts so why not create my own? Sure, why not?

These are the guidelines I try to follow when organizing meetings. They work fine for me in the context of the company I work for (flat structure, ~80 people, no managers, no corpo-bullshit). I have no idea what happens if you apply them to your workplace (but I bet, it would be something positive).

 

Meetings People Love

Meetings People Love

A Meeting? Seriously?

Sometimes it is enough to visit your colleague in the next room, sometimes all you need is a short discussion on group chat with few people, sometimes simply wait till certain people are having coffee break and join them for a five minutes discussion.

Meeting is a heavy, time-consuming, corpo-smelling, commonly disliked thing – look for a lighter solution.

Save People’s Time

As an organizer make sure you do everything possible to save people’s time. This means you make sure that:

  • all important people will show up,
  • the room is ready (see below),
  • all participants  know what they should prepare for the meeting (if anything), and that they really did,
  • lead the meeting so that it is worth being there

One minute of your preparations can result in few minutes saved for each participant. Do the math.

Organize the Room

Always be there at least 5 minutes before the meeting. This gives you time to reorganize tables and chairs, tweak the air conditioning, bring missing markers, clean the whiteboard, check the projector works etc. Make sure the flip chart, markers, magnets, pencils, cards, or whatever else you gonna use is there.

They way the tables and chairs are organized is important. Make sure you know what type of meeting you want (a lecture? an open discussion?) and put the chairs so that people have no choice but sit according to your plan. If it doesn’t work just like that, ask people to rearrange so they sit the way you intended. Really, do it. If not, you will end up with weak discussion only because people sit side by side and can’t really talk to each other. Or you will have two hostile tribes on two other sides of the table. And it will be your fault.

Action Points

A meeting without Action Points (AP) is a waste of time. Make sure everyone knows what was decided (remind them right before the end of the meeting). Every AP should have an owner. For every AP it should be clear what the next step is, and when this next step should be finished.

Meeting Notes

Keep them short – usually the APs is all that matters. Add pictures of whiteboards notes, sketches, diagrams etc. – a good reminder of what happened during the meeting.

Send the notes ASAP (to all interested parties) after the meeting is finished.

Make Fun of It

If possible make some fun around the meeting. Yes, do it. The invitation can be funny or you can put some funny accents into the meeting notes. I’m trying to do it for (some) meetings I run at Codewise and I think it works. From discussions with my colleagues I suspect some of them take look at the notes because they want to find out what kind of stupid stuff I put there among serious notes. Good! – at least they will scan through the notes looking for hidden gems and will inhale some of the essence (if they want it or not).

I will give you one example of what I’m talking about. This is an email invitation to developers to take part in our weekly “devs meeting” – which is a gathering of interested individuals from each development team to share business and technology news. So usually the invitation email is “standard”, but from time to time, I try to tweak it a little bit. For example, like this:

meeting_code_monkeys

Facts First

For problem-solving meetings always start with the facts. Even if you think people know the full picture. They usually don’t. It is your task to learn about it before the meeting, and then present it in a concise way. Or – even better – ask the participants to list them. If not, you risk all kind of misunderstandings (like people discussing different issues, while thinking they all talk about the same).

OK, here comes a story. So once upon a time we had this meeting. And I explicitly asked participants beforehand to prepare a list of facts so we start discussion with them. Once the meeting started one person gave like one fact and immediately followed with a general solution, which, in his opinion, solved all problems related to the discussed topic! I stopped him in the middle of a sentence and refused to discuss the solution until we learn about the whole picture. We continued with the facts and listed 12 of them on a whiteboard. After 30 minutes of a discussion we agreed on some action points. The solutions we discovered were completely different from what the first guy suggested. I would also say they were much better. Can you guess why?

Do Not Distract People

Do not turn on the projector too early, and make sure you switch it off when it is not needed anymore. For some reason, people will stare at the screen even if nothing happens there (instead taking part in the discussion).

Switch off all communicators/calendar reminders when presenting. First, it distracts people. Second, it can be pretty embarrassing. 🙂

Transparency

For problem-solving meetings always leave the door open. Invite crucial people and let other know that such and such meeting will be held. And don’t worry – only few (if any!) will come. But those who decide to join you will probably have something interesting to say. Good for you, right?

Similarly, publish the notes so that all employees can read them. You have nothing to hide, do you?

As Attendee

  • Come prepared. If asked to read something, read it. If asked to think about some idea beforehand, think about the idea. Simple, isn’t it?
  • Don’t attend a meeting if you do not feel like going there. Your absent-presence won’t help anyone.
  • Think about other people who could help and discuss inviting them with the meeting host.
  • Always inform the organizers if you attend or not. A simple click in the calendar is all they need – and it really helps them to prepare a meeting.

Tips & Tricks

  • If we chit-chat instead of discussing it means the meeting is over. Finish it.
  • For recurring meetings, change the meeting host once in a while. It helps to fight the boredom.
  • Throw away empty markers immediately. Have no mercy!

Ending Quote

For all programmers out there, who love all kind of meetings 🙂

delete_emails_and_avoid_meetings

During the Unexpected Meetup: 1st Open Space I had an opportunity to discuss the topic of changes with fellow Scrum Masters / Team Leads / Agile Coaches. Here are some notes (subjective and incomplete):

  • Books to read:
    • Our Iceberg Is Melting
    • More Fearless Change
  • You shouldn’t expect that your team will come with new change proposal every day. It will be rather your task to help them to discover that some changes are required and decide that they are worth the effort.
  • External experts can really make a difference. Somehow people from the same company are less credible (“No prophet is accepted in his own country’)
    • New hires – especially if they are seniors – are treated similarly to external experts. At least for some time.
  • Imposed changes are much less effective than grassroot changes.
  • No sense to order changes (e.g. “you will do the pair programming 100% of time starting today!”). Much better is to show the idea and let people use it at their own will.
    • Onboarding (especially with fresh devs) is a great time to inject some desirable behaviours.
  • A nice way to introduce a change is to run an experiment (e.g. “Let us do the pair programming 1 hour per day for 2 weeks. Then we decide whether we like it or not”.) Be prepared that people might not like the change. But this is fine.

 

I was addicted to email checking. Or maybe I should say that I still am the same way an alcoholic doesn’t stop being alcoholic, he merely doesn’t drink anymore. So let me say I’m still emailoholic who checks email in controlled manner. Or at least, one who tries to achieve the inbox zero.

Checking email often was exhausting, pointless and stupid. I didn’t like it, so I decided to put an end to this bad habit. In fact, there were two goals I wanted to achieve:

  1. stop checking my email account too often,
  2. don’t let the unanswered emails pile up in my Inbox.

Interestingly these 2 things come together – at least for me. The thing is, that I used to check my email when I had no time to handle it. This had two very negative effects. The first, and an obvious one is, that I was thinking about answering my emails right after I checked my mail account. This disrupted my work, family life or whatever else I was doing at the moment. The second, less obvious effect is, that sometimes I hadn’t answered to emails at all (or I did this after very long time). This one is harder to explain, but my theory (uh-oh, big word!) is the following. There seems to be a certain good time for some things. A book should be read right after you buy it. If you don’t start reading it immediately, you probably won’t read it at all. Similarly, an email should be answered right after you see it.

So, in order to improve the situation I took one resolution: I will check my email only if I have time to process it right away. This means saying no to:

  • email checking while my code compiles,
  • grabbing tablet on my way from dining room to the kitchen only to check my email and put down the tablet on the table,
  • no quick checks in between other activities.

I started with the cleaning of my inbox. This wasn’t very hard, I had like ~40 emails there. Then I removed pinned tabs from my browsers. And hid the email icon from the front page of my tablet and phone.

Since 2 weeks I check email rarely (compared to what I used to do) – sometimes only once a day, sometimes few times a day, but the important thing is, that every time I do this, I make sure my inbox is empty before I switch to other tasks.

meme_email_inbox_zero

There are some issues, though. First of all, my email is also my personal database of various things. Sometimes I need to look there searching for something. To do it, I need to break my promise and take a look at email, even if I do not have time to clean it. Secondly, sometimes I have time to process email, but for some reasons I can’t – e.g. I need to consult something with my wife before answering, or I need to check something at home before I answer. Fortunately, neither of these happen often. Another issue, is that sometimes I wait for an email answer which I need ASAP – e.g. will I meet with X today or not? Then it is hard not to check my email every 30 minutes or so.

But all in all, it works pretty good for me. I’m not so obsessed with my email anymore. People who contact me by email should be also happier as they receive answers much faster than previously. I enjoy email-free evenings, and email-free-thoughts. My inbox is often at zero, and I hope to keep it this way.

Some time later

After 2 weeks – To get rid of unwanted emails I spent some time signing off from all kind of customer survey etc. This takes time (usually you need to log in to change your notification preferences) but I believe it is worth the trouble when thinking in the long term.

After 2 months – It is much easier (at least for me) to keep inbox at zero than to restrain myself from constant email checking!

After 2,5 months – I have never checked my email using phone or tablet. Yes!

After 3,5 months – Block site helps to fight the urge to check my email often. Not ideal, but helps.

I performed a Journey Lines team building activity (as described by Lyssa Adkins) with various teams. In general, I was really happy how it went (and so were my colleagues).

The idea of Journey Lines is that each of the participants draws a line showing ups and downs of previous jobs. Each chart contains also some additional information like technologies used, skills acquired, names of companies they worked for, or any other comments that people find important. This activity:

fosters self-organization and cross-functional behavior because it reveals a person’s skills, experiences, background, etc. This way, the rest of the team knows what this person “brings to the party.”

Some observations:

  • Some people need to check LinkedIn to help them remember all the places they used to work (especially freelancers with short-term contracts really need such reminders),
  • The time required to tell the story differs – some people needed 6 minutes, for others even 15 seemed to be not enough (next time I will probably put some time constraints). The whole exercise took an hour (for 4 people team) and more than 2 hours for 8 people (including 15 minutes pizza break).
  • Even though this activity is intended to be used when forming a team, we played it a long time after the team was created and it was also fun & informative. Team members learned a lot about each other, even though they worked together for a long time already.
  • Personal things (marriages, kids) showed up rarely.
  • It was very interested to see how many different ways lead us to this particular company that we work for now. Also, it was funny to notice that in the past we all went through similar stages (e.g. freelancing during high school, hacking games etc.).
  • Some people draw really beautiful charts with nice fonts and additional drawings.
  • There was a lot of new things about each team member that no one knew before.

Probably the most interesting for me was to learn about the “down” moments (where the line of journey went down, down, down – often very abruptly and usually resulted in job change). There were few reasons for this:

  • people issues – stupid team lead / manager / boss can ruin even the best place,
  • stagnation – nothing new? maintenance and bug fixes for too long? people will look for a different place to work,
  • people leave their jobs when put in a position they did not want (e.g. someone was appointed a PM, another dev ended doing some office-management tasks).
  • a lack of vision (“why are we doing this?”) or lack of business impact (“we did it, but then they started to argue if they really need it, and it never went to production”) is a serious motivation killer

One more thing. I like this activity because it creates a symmetrical situation – “I show you mine, you show me yours”. Also, each participant can decide how much he wants to reveal. The only potentially intimidating thing is that at some point you need to stand in front of your colleagues and tell your story. But somehow, it hasn’t been an issue for any of devs I worked with.

P.S. Ask participants to write neatly on their charts so that later all can read it! 🙂

It is almost the end of January, but I believe it is still a good time to make some New Year’s resolutions. Today I want to describe one of mine, which I believe could be a good fit for many of us.

As you know, it is very simple to make resolutions but much harder to fulfill them. So before I reveal it, let me tell you why I believe I will keep it:

  • it is not hard to do,
  • no special equipment/weather/mood required,
  • doesn’t take much time
  • requires only a little bit of preparation
  • I have heard many people saying it is a very valuable habit
and last but not least:
  • I have first started doing it and I already like it (and only later decided to make it my resolution – usually first you take a resolution and then you start).

And the resolution itself is very, very simple: I decided to perform a short (5-10 minutes) retrospective of my work achievements each week. Have I done what I promised (to myself or to others)? Have I worked on really important stuff or maybe I spent my time doing 2nd rate stuff? Have I started new tasks without closing the older ones? And so on.

In order to be able to do that, I take notes every day before leaving the office: few bullet points with major things I have been busy with. Then, on Fridays (I set up a reminder so I don’t forget it) I go through the notes from the last wee and ask myself questions. And then I write down some TODOs – like “do X – don’t wait any longer” – but also I praise myself – e.g. “good job with Y!”.

After three weeks I already have few observations and ideas:
  • Maybe Monday would be better, so my TODO list was kind of fresh and I would be able to jump into the action without waiting for the weekend to pass.
  • Why only work achievements? Why not introduce the same idea to my family life?
  • A week is kind of long, at least in some cases. Wouldn’t it be better to have it twice a week or daily to shorten the feedback loop? I’m not sure.
  • I do not have a good way of reminding me about the TODOs I created during the review. A sticker on the monitor doesn’t work for me – somehow after an hour it is like I don’t notice it anymore. Maybe I should set up a reminder for this as well so e.g. every day I got reminded about things I decided to do?
  • I have already been able to achieve some small victories (e.g. doing some stuff I have been putting off for weeks…) so I can say it works for me. So I plan to continue.
There is still time to change this year into something more valuable. Why don’t you give a try to this self-retro idea? I hope it helps you.

Cheers!

Few months ago I published a list of books that I really, really wanted to read in 2015. 2015 is finished so I can now tell you how it went.

…and there isn’t much I can be proud of. Out of the 14 books I read.. well… around 3. Not exactly 3 because in fact I read 2 books and also halves of another 2 books. At first I was really disappointed when I realized this. But after some thinking, it doesn’t look so bad any more.

  • The list was published end of May 2015, which gave me only 7 month and not the whole year. Still the 3/14 ratio sucks big time.
  • I have read few books outside the list. Apparently, new topics (e.g. user stories) got my attention in 2015 and I decided to devote more time to them .
  • I have read numerous blog posts and watched many online presentations. It seems much easier to read/watch them than read a book. You can read a blog post during a short break but you can’t (or at least I can’t) read a book like this.
  • The books on my list were mostly about “background” stuff – things which aren’t urgent but crucial in the long term (think Eisenhower method important and not-urgent tasks). It is OK I haven’t read them all as long as I go back and pick one from time to time.

Now, what has it thought me?

  • Long list of books “to read in the nearest future” doesn’t work. I still have a list of “books I want to read one day” (and it is always growing and rarely shrinking) but I do not fool myself into thinking that I will eventually read all of them.
  • Sometimes reading a book is a waste of time – it is enough to read what others have learned from it (at this point it is hard not to mention Pierre Bayard’s “How to Talk About Books You Haven’t Read”)
  • I have very limited time for reading books. I should pick them wisely so I do not waste it.

I will end my today’s mumblings with the quote of Stanisław Lem:

“No one reads;

if someone does read, he doesn’t understand;

if he understands, he immediately forgets.”

Enjoy reading, folks! 🙂

One year ago I blogged about a game we played during retrospecitve. A year has passed and it was time to open this “time-capsule”. No one guessed the right answer to all 13 questions, but some people were pretty close on many of them. Some questions got kind of outdated – e.g. we asked about the number of traffic-handling servers but in the meantime this functionality was split in two.

We liked the idea so this year we played it once again. The questions were similar to the previous ones but we tweaked them a little bit. Also, we invited our account managers to join the fun so the number of players grew to 14 (last year it was devs-only event, and there was only 9 of us).

P.S. Some people decided it would be fun to play it at company level so we prepared 5 questions and played the “New Year Predictions game” together. Will see what 2016 brings!

So you have just developed this new feature and your application can calculate things. Some very, very important things. Business people are happy. …at least for few days. Then they start asking questions. They want to know how the numbers you give were calculated.

This is a recurring pattern that I observe.

For the first time it happened to me few years ago. Back then I was working on some fancy system which allowed to calculate bonuses for sales of financial products. Oh my gosh, how many (stupid) rules where there! And they were time-bound and they changed oh-so-very-often. Marketing people were adding new rules (new bonuses) for different products on daily basis.

The software used Drools (ver. 2.0 if I remember correctly) and had a nice GUI so users could create quite sophisticated rules by clicking. It worked like a charm.

…and then they started asking questions.

Of course they wanted to know! After all, it was all about the money. And every salesrep had his/her own excel with calculation. And whenever our system said they should get less money than what their excel calculated then they wanted to know how the hell we calculated our result.

An interesting thing is, that they were always wrong. They made mistakes. They always did. They forgot some rule was no longer holding when they made a sale. Or that some other rule was only applicable when sales was over 20k. Or that they needed to sell 3 items of certain type and they sold only 2. Really, this is the kind of mistakes they made.
And we never made such mistakes. We calculated money without emotions. Our answers were right. But it was not enough.

Lesson learned: it is not a valid result unless you can explain to users why it is valid.

So after having our perfect system working perfectly we spent few more days on making it output not only the final result but also how it was achieved. As far as I remember, we ended up with list of all rules with green dash (rule applied) or red tick (not applied) next to each rule. It was enough to radically cut down number of questions.

After this I got a little bit wiser and now, whenever I feel users might be interested in learning about the reasoning behind the final result, I try to think about such features from the very beginning (no, it is not a YAGNI, cause you definitely gonna need it).
And the thing is that often it doesn’t have to be anything fancy. Few log entries with crucial data used for calculation might be enough. If someone asks all you have to do is to find the appropriate log lines. Once you get tired with logs browsing you can think about exposing this data via some API or even GUI. But this can wait.

…and if you do not implement anything to explain the result then you will spend your time writing (No)SQL queries so that you can understand why the answer you gave to your user was 44. Good luck!

I remember some time ago I was really excited about the idea of soft assertions. The latest blog post by Rafał Borowiec reminded me about them. …but wait, if I was so crazy about them some time ago, then how it happened that now I need to be reminded about their existence?

So first of all, I believe they make sense only for integration or e2e tests. Only, where execution of test is so costly (in terms of time) that you really, really want to learn as much about the tested scenario as possible. So, if you have a long (Webdriver) test, which ends with bunch of asserts, then I think it might make sense to write them using soft assertions.

But for unit tests? Oh no, you do not need soft asserts! Execution of such test takes milliseconds so rerunning them is simply a matter of few keystrokes using your IDE. Not much gained by soft asserts here.
And I also see a potential downside. I think that using soft asserts might lead you into the wrong direction: it might encourage you to verify much more then required, or to verify different thing “because you can”. No, thank you, I strongly believe you should go with one (logical!) assertion per test.

So, all in all, my initial excitement about the soft assertions has vanished over the years. I would never use them for unit tests, and I do not use them for other kind of tests. Why not? I think that when I first learned about them they were not supported by the tools so I gave up the idea. And later… well, I think I got used to not using them, and as I think now about my E2E/GUI/Integration tests I do not see compelling reasons to change my mind.

Just my 3 cents.

We all know that rubber duck is programmer’s best friend (it was also proven that such duck should be yellow for maximum effect). Not surprisingly I have also a yellow toy on my desk. But it is not a duck. It is a little yellow human-like figure.

Usually it sits and waits for me to start explaining some code. It waits patiently till I get to the aha! moment. Sometimes it waits long. But it never gets bored. From time to time I can see it’s smile widens when I explain the nuances of my-oh-so-perfect-and-surely-working code.

2015_09_yellow_static

But that is something which every rubber duck can do for you. My yellow friend has one hidden superpower which makes it much more useful. Look at the next image. Awesome, isn’t it?!

2015_09_yellow_hold

See? When I take my laptop home my yellow friend makes sure next time I come to the office I won’t have to dive under my desk to catch the cables. Cool, isn’t it?