We've been a "yes man" web studio for the most of our history.
Whenever a client requested that a feature should be implemented differently, or "fixed", or changed altogether - for reasons clients thought were justified - we said "yes" most of the time.
Whenever sales people thought we should upgrade a product with some feature, just because competitors had it - developers obliged.
Whenever the bosses - my partners or me - wanted to add some feature to make a client happy, developers obliged. After all, employees don't say "no" to their bosses, do they?
"It cannot be done" didn't exist in our vocabulary
We could pull off any coding stunt, whenever we wanted and in whatever way we wanted. We always came up with some workaround, a hack, some dirty hardcoded piece of work that made it possible to give the clients exactly what they thought would make them happy.
We were afraid that saying "it cannot be done" made us look incompetent - especially if it had to be told to the client. So we organized our company and our development process around never having to disappoint anyone with a "no". And we hacked away. And thought what great developers we are.
Our culture of "yes" could have finished us off. Dirty hack on top of dirty hack makes for nothing good. Years of such practice accumulated and created many problems. In software development, we sacrificed many good practices - such as code readability, easy maintenance and fewer new bugs - just so we could stay in our comfort zone. There, nobody had to explain to anyone that something really couldn't - shouldn't - be done. Nobody had to put their asses on the line.
If I didn't experience it myself, I wouldn't believe how much trouble less-than-perfect software development creates everywhere, even outside itself: in sales, marketing, support, management, human resources, company morale - and especially in finances. No one and nothing is safe and protected from bad software development. It's like a plague that makes sick everything it touches, even the inanimate objects, and it spreads in every possible direction it can.
The good news was that very early, we became aware that we had a problem. We were eager - later even desperate - to solve it. The bad news was: for a quite some time, it never occurred to us that we should look in the development department first. How could it be, when we were such great, nice and polite developers who always said yes!
"No", in its many forms, should be desired, not suffocated
"Just because you sold a bullshit feature, it doesn't mean I have to code it."
"Tell the client he can't have it, because A, B and C. And D, six months from now."
"Even though you're my boss, I won't do it, because it makes no sense. You either trust me, or you don't."
If words like this are unthinkable of in your company, you can be pretty sure you are working in a very dangerous culture of "yes", where all sorts of anomalies occur:
- Bosses don't trust their employees, and their employees never trust them back.
- Only clients - not the management - actually run the company, and decide in which direction products will be developed.
- No one learns anything.
- No one takes responsibility for anything.
- Culture of "yes" becomes dangerously close to the culture od crippling fear - fear of everyone and everything.
"No" usually goes hand in hand with knowledge, experience and expertise. In business, it usually never mixes well with self-doubt, fear and ignorance - when it does, it doesn't take long for you to see right through it. Not everyone dares to say "no", and that's why "no" carries more weight than "yes". If I want to find a person who actually gives a crap about the way things are done around here, I look for people who are not afraid to say no.
Good things happen to those who learn to say and to accept "no"
Today I strive to do things in two ways:
- If it doesn't work, I try something else.
- I am not afraid to try the exact opposite thing.
As soon as at least one person on our team started to say no to all the bullshit everyone else was accustomed to, things started to happen.
- We got rid of most bad development practices in a very short time. It wasn't easy and it wasn't always nice - but "nice" would not work for us in that moment. Tried that, didn't work.
- New products were developed extremely fast, and everyone involved had fun working on it and with it. We cut all the bullshit features we previously thought we could not be without, and launched early. Not one client needed any of those features or asked about them. Many lines of unnecessary code never saw the light of day.
- Clients don't actually terminate their contracts on the spot as soon as they hear "You can't have it, because X". They are actually willing to listen and value your judgment and expertise more. And they don't actually care deeply for every little thing they ask for. Would you believe that? :-)
- Saying "no" was spreading. It infected one other person in the company - me. I made sure people saw me do things the other way. I used every opportunity to sell the idea of "no" to everyone else on our team, especially my colleagues in sales.
"No" mixes best with one important concept...
...And that concept is common sense. Never leave home without it.