Why you are not a partner to your customer

At least once every month I hear a business person saying ‘We want to be seen as partners by our customers’. This seems an oxymoron to me. Here is why.

The relationships between partners vs. customers are different. Here are some definitions from a dictionary I want to express the differences.

Customer – a person who buys goods and services.

Partnership – a person who takes part in an undertaking with another. In a business with shared risk and profits.

Relation – the way in which two or more people are connected.

Does a chef want his customer to see him as a partner? Of course not. The relationship is transactional. Without financial transaction you won’t get food served.

In a healthy partnership between two people, either one of them might provide a similar service as the chef. The relationship is devotional. One may provide the service without expecting anything in return.

In a healthy marriage the partners promise to be true to one another in good times and in bad, in sickness and in health.

Why am I writing this? Well, next time when you think about saying you want your customers to see you as a partner, please think about the above.

Ask yourself: ‘Do I really want a partnership? Share risks, profits and losses in good times and in bad, in sickness and in health?’ or ‘Do I just want them to pay for my service without nagging about the price?’

One question to find out if your stand-up meeting is useful

The original objective of the scrum stand-up meeting is to assure that all team members make a commitment towards their peers. That means is that you will do as you say.

The idea that by saying what you will do in front of your peers is that you will feel more social pressure to actually do it.

The idea of standing up is that the meeting stays within 15 minutes. The assumption is that we don’t like to stand for much longer.

The scrum stand-up meeting is not a status update meeting.

There are three questions everyone is supposed to answer:

  1. What did I accomplish yesterday?
  2. What will I do today?
  3. What obstacles are impeding my progress?

This will create more transparency with what’s happening in the team, right? This is not necessarily true.

Add the following question after everyone has had their turn and find out if your stand-up meeting was a waste of time. Aks several team members.

What were the answers of team member X or Y to the three questions?

When several people can’t answer this question your stand-up meeting was a waste of time.

What can you do about this? Here are some suggestions to make it more effective:

  1. Focus on collaboration.
    1. Who needs to work or talk to who? Make sure they both agree to do so.
    2. When using a scrum or kanban board make sure that team members actually discuss stuff that is on the board. Stay sharp that people don’t wonder off doing other stuff. Is your board representing current reality? If not, inspect and adapt.
  2. Adapt the meeting structure (and length) to support what the team needs.
    1. Allow asking different questions or having some discussion.
    2. Allow for a different timing when needed to support alignment, collaboration and information sharing.
  3. Focus on agreements and decisions.
    1. Make sure the team aligns on goals and priorities and make agreements.
    2. Make sure the team calls on missed agreements.
    3. Make sure existing agreements can be re-negotiated.
  4. When a team is strong on collaboration, you may even make this meeting optional.
    1. Facilitate the meeting every day anyway.
    2. Make it everyone’s personal responsibility to decide to join or skip.
    3. All decisions made during the meeting are binding unless re-negotiated and agreed upon with those present.
  5. If you want to stick to the original scrum questions find out why people can’t answer the suggested additional question. You may have a team culture issue here.
    1. Did they not pay attention (this time)?
    2. Is the information provided to them not interesting enough? If so, why?
    3. Is there too much or too little information to make it useful?

Happy stand-up next meeting!

Do you really need that feature?

Do you really need that feature? Yes? Oh, because your competitor has it?
Ok, I get it. I have some questions for you to answer.

  • How many users of your competitor’s product are using that feature?
  • How often?
  • Do they like it?
  • How many bought the product because of that feature?
  • How many would not miss that feature?
  • How much money is your competitor making on that feature?
  • How many users of your compititor would switch to your product because of that feature?
  • What would happen if you did build that feature?

Think twice before you jump and demand yet another feature. Copying features can be a waste of money and hardly ever makes your product stand out in the market.

Just because your competitor has it, does not mean it’s a good idea have it too. You’ll enter price competition and your competitor has a head start. You may never earn back your investment.

Using PostgreSQL with Ruby on Rails (and RubyMine)

Everything when I start a new Ruby on Rails project on a new machine I am running into issues getting everything to work with Postgresql. This is not a Postgresql issue, but simply a memory problem. I don’t do this that often, so I simply forget. This has lead me to write this blog, because it will be my ‘extended memory’ next time I need it.

This blogpost was written while using the following tools:

  • Postgresql 9.3 configured on localhost on port 5432
  • Ruby 2.0.0-p0
  • Rails 3.2.13 (nope… not the latest)
  • RubyMine 6

The purpose of this blogpost is to give you a workflow that will help you do the least amount of work to get your new Rails app working with Postgresql. My assumption is that you have installed Postgresql and are sure it is properly running. I use pgAdmin to check that.

Step 1 – First create a new role in Login Roles. In this example we’ll call the role TestProject.

Step 2 – In the tab Role privileges check Can create database


Step 3 – Create a new Ruby on Rails project in RubyMine. This step will also run rake and try to create databases. This will fail for three reasons:

By default RubyMine does not have the Postgresql driver installed. You’ll need to do that manually using the database menus in RubyMine. Later more about that.

Postgresql allows you to create new roles without setting a password, but this is misleading, because it won’t allow connections without a password login. You have to set a password  in the Definition tab. Warning: once you do that the Account expires field will be set to the current date. As a result of that you may still not be able to use the new role. Make sure to set the date to a future date.


You may receive this error:

could not connect to server: Permission denied
Is the server running locally and accepting
connections on Unix domain socket "/var/pgsql_socket/.s.PGSQL.5432"?

Using Google Search you’ll find suggestions that require messing around with file system soft links or moving files. Don’t do that! That won’t be necessary. Just add host: localhost to each database configuration  in database.yml and that will do the job. Your configuration should now look something like depicted below.


Step 4 – Run rake db:setup followed by rake db:migrate. This will create both your development database and your test database. This will leave the production database untouched for obvious reasons.

You are now set to go and start developing your application and use the regular database migration steps from Rails.

Learning new programming languages and technology makes TDD and BDD hard (for me)

Today I find myself struggling. I have always been a backend server developer, c++, java, c# developer. I am trying to learn web development and mobile (web) development. I have never done any web development with javascript, html, css and that kind of stuff.

For over fifteen years I am a big fan of TDD and BDD. What I want is to development an application for a friend using Ruby on Rails for the backend server development and using Sencha Touch for the mobile web application. One of the reasons I stayed away from web development for a long time is the vast amount of technologies involved. As an eXtreme Programmer I love the idea of keeping things simple and I just never saw how the web development world was keeping things simple. And as a matter of fact this event of wanting to develop a web application for a friend has reminded me in not such a gentle way that this has basically never improved over the past ten year. I believe it only got worse.

Anyway… this is not what this blog is about. Forget about my whining about web development.

This blog is about an interesting phenomena that I ran into the last few weeks. While learning new programming languages, scripting languages and what else I find myself thinking time and again that it is just much easier and much faster to just write the damn code than to fiddle around and writing a proper unit test and applying TDD and BDD. Not only do I have to learn the language I also find myself struggling and learning how to write test for the new languages and technologies I am using.

This makes me wonder if this is a similar experience most people learning TDD and BDD have when they are completely new to these concepts. This probably even worse when you’re actually not an expert in the programming language that you have to use for your work.

I consider myself quite an expert on TDD, but I find myself struggling doing TDD in the new environment that I am working in. I am simply overwhelmed by the vast amount of other things I also need to learn.