Zeigarnik effect and productivity

waiter

Effect of Directed Forgetting

In 1927, in a restaurant in Berlin, Dr. Kurt Lewin and his colleagues were engaging in a long conversation. The waiter had not yet given them their bill, so Lewin called him over and asked for the amount. The waiter told him immediately, and Lewin paid and reengaged in the conversation for some number of minutes. Suddenly though, Lewin had an insight—he called the waiter over a second time and asked again for the amount of their bill. The waiter no longer knew.

The Zeigarnik Effect

This day marked the beginning of something known as the Zeigarnik Effect, a theory which was first dreamed up by Lewin and then later researched and named after his colleague.

When a person intends to perform a task, a quasi-need is established which causes a strong desire for fulfillment of that task. These quasi-needs, or „tension systems‟, come into being because of a person‟s decision to begin a task.

Another more common, every-day example is one that is experienced by most students: when taking a timed multiple choice test, the questions which are never answered, or those that the student is not sure about, are the ones most often remembered after the test has been finished. According to Lewin and Zeigarnik, this represents a lack of closure, which is the driving force behind the tendency for individuals to remember incomplete or interrupted tasks better than completed ones.

How does this relate to productivity?

1. How finish task faster?

To be able to concentrate fully on current work we have to close all previous tasks. This is basically what Kanban with definition of “Work In Progress” limit is proposing. To be most effective we need to concentrate on one task and avoid multitasking.

2. How to remember stuff better?

The Zeigarnik effect suggests that students who suspend their study, during which they do unrelated activities (such as studying unrelated subjects or playing games), will remember material better than students who complete study sessions without a break.

Sources and more reading:
http://en.wikipedia.org/wiki/Bluma_Zeigarnik
http://course1.winona.edu/cfried/journal/Papers%202009/Liz%20formatted.pdf

Facilitating Global day of Coderetreat 2013

On the 14th of December 2013 – the Global Day of Coderetreat was held at Warsaw as part of annual Agile Development Day. Event was hosted by Pragmatists and Sages.

For me it was first time to facilitate this kind of event. Many thanks to organizers for providing hangout workshops about facilitating coderetreat event. This provided many helpful information

We followed a fairly standard format but we had only 5 sessions in total. We wanted to leave some time to participants to network and get to know each other doing brakes.

My first thought of theme of this coderetreat was Test-Driven development. But after seeing how good people are doing TDD and Pair programming after first few sessions we started to play with OO programming in last sessions.

Session 1 – Warm up with no constraints

Starting session to get to know the problem.

Session 2 – Ping pong pair programming with TDD

Session teaching pair programming and Test Driven Development rules. One additional constraint was not using plain arrays.

Session 3 – Mute pair programming with evil coder

Person being Evil coder was supposed to implement the code in a way the tester doesn’t expect.

Session 4 – Extreme OO.

3 lines of code per method
2 fields per class
3 methods per class
One dot per line

It turned up to be very difficult to follow those rules. But there were some insights that creating small classes and small methods made the code more readable and better designed.

Session 5 – Pick your own

In last session we voted for constraint. And “no if statements” was picked up. We have very interesting approaches to code without ifs and people have a lot of fun in this session.

Retrospective

One thing i could have done is ask user to write down one thing they wanted to learn before event. Then after last session write one most important thing they learned.
On Retrospection session we could compare this findings with others. I got this idea watching photos from other cites and i think its the best way to sum up whole day.

Interesting sessions in other locations

Some interesting sessions that other teams around the world were doing:

Amsterdam, Netherlands
Inherit the code from the previous session (yes we did not delete our code). With mixed pairs (1 of the 2 knows of the old code base).

Amsterdam, Netherlands
Zombie cells, which are cells that where alive, died, and then revived. Zombie Cells behave like Alive cells for now but we ought to know if they where ‘resurrected’

Berlin, Germany
No return values

Peterborough, UK
Abstract cartoon names for variables

Some thoughts after Agile By Example 2012

Last week I attended Agile By Example conference in Warsaw.
There are some notes about presentations that i found very interesting.

Great teams are grown, not hired

Inspiring presentation from Roy Osherove about role of team leader in agile teams.
How to take a risk and put your self and your team out of comfort zones to raise team to productive state.
He presented three steps in team can be and how to evolve your team to Self Organizing Phase.

Take a look at his blog and his book is avalible on lintpub.

Impact Mapping

Another good speech by Marc Löffler was about impact mapping technique.
Very useful and convenient way to specify you requirements to meet specific business goal.
Helps you to concentrate on features that will be most useful for you project to achieve your goal.
He was recommending this book by Gojko Adzic.

Distributed teams

In block about distributed teams Jamie Allsop and Roger Dahlen where giving examples what benefits has working in distributed teams.
Variety of culture and working environments and diversity was contributing a lot of value to project.
People sitting together in same space tend to have same opinions and same behavior whereas with distributed team you have individuals with unique way of thinking and doing things.
The final conclusion was that you can use fact of distribution to make better team and in emulating Distribution with Co-located teams can be also useful

Failure publishing Play modules

Today i found interesting module for my Play application on git-hub.
Unfortunately it was not published on modules repository (I didn’t know the reason).
So i forked it and made some changes (i hope that it was an improvement).
Then i wanted to use it in my app so i wanted to publish it in play modules repository.
And this is what i found about sharing modules in play repository for 1.2.4 version:

Share module in Play

“First you need to have an OpenID.
Then you have to send module registration request on the Google Group.
Then you can release your module
And then log in to module repository and upload the generated package”

Damm, now i know why creator of this module didn’t share it at first place. More detailed instruction available here http://www.playframework.org/documentation/1.2.4/modules

Share gem in ruby
Compare all of this tasks to rubygems one line way of publishing your gem:

gem push foo-1.0.0.gem

Postgresql vs MySql

In previous project we were using DRBD to achieve high avalibility on postgresql 8 database. DRBD offers file system replication – all changes to a file system are mirrored to a file system residing on another server.
After many problems with DRBD split brain we decided to find better replication solution.
As postgresql didn’t had synchronus master-slave replication at this time we decided to go for MySql as we already had experience in MySql replication.

Next step was to migrate from postgresql to MySql. During this I found two minor cons of MySql I wasn’t aware of before:

MySql’s strange unicode support

MySql stores UTF-8, using 3 bytes per character (not 4 as you’d expect). It means that it doesn’t support any Unicode characters which would require 4 bytes in UTF-8.
Someone might ask who will need to store those kind of characters anyway. Here is our example.

We were using hashing mechanism based on generated seed. Seed was string generated from numbers in rage from 0 to integer maximum value. So some of our seeds for passwords had 4 bytes characters in it. No way to store it in Mysql.

No support for miliseconds in MySql

MySQL doesn’t support millisecond / microsecond precision. There is not type to store such values. Only way is to use String to store such timestamp. But this will be less eficient that integers in timestamp and more difficult to map in ORM.

PostgreSQL has an interval data type. It is capable of storing an interval of up to 178,000,000 years. Precision is maximum 14 digits. So we can measure time precisions from year to microsecond precision.

Replication

So finally we abandoned MySql and decided to wait for new Postgresql version that came with repolication:
http://wiki.postgresql.org/wiki/What’s_new_in_PostgreSQL_9.1#Synchronous_replication_and_other_replication_features

Finally we implemented PostgreSQL’s replication using build in features of 9.1 version with use of readable standby (pgpool)

Conclusion

As postgresql reached his maturity level long time ago and now is even more reach in features that MySql I would recommend it for opensource projects. Another important thing is that it’s free. No special community versions and licencing problems and all the features are always there.