During my career I've been fortunate enough to work with more than one teams; where we would fight like dogs; kill each other; get out of the grave and go grab a cup of coffee together and have a friendly chat.

When you're working with teams that are so tightly knit and open you may not be always right, but you tend to get thick skinned, full of conviction, highly critical, highly opinionated and blatantly honest in your feedback.

At Multiplitaxion Inc, when I was asked to review a website built by a committee, asked what was wrong with it and how we could improve it, my feedback was spontaneous, honest, straight from my heart and exactly like it had always been when I was working with other teams of kick-ass programmers. I may not remember the exact words, but basically here is how I reacted:

'The website is Fu@#ked up. We can sit here and talk for days about what's wrong with the website or why it's fu@#ked up, but that's not the point. What we really need to do is dump the current version and then have one person take ownership for it, get a few graphic designers, throw in some ideas and have this team, get it done; afresh. It's really that simple.'

It was almost as if I had dropped a dead rat on the meeting table. The senior project managers in the room looked at each other. Someone fairly down the pecking order giggled. One very senior person looked down; another looked away. There was silence in the room. Someone got up; pretended to check his cell phone and left the meeting room.

To say the least, it was what can be referred to as a rather embarrassing and awkward moment for me and everyone else in the room.

For days I genuinely tried to figure out where I had gone wrong and then I was told that it was the use of the F-word that had triggered a chain reaction and got a lot of senior folks very disappointed; turns out, a couple of them thought I lacked class.

It has been a long time since then and most people involved with the incident are no longer a part of my life; so I thought I would do dedicated post on the F-word and how affective it is in the world of software development.

To those reading this far, specifically those who might be knitting their brows and doubting the concept of beauty in ugliness in general and my class in particular, I present to you, Joel's first encounter with Bill Gates in his fill Review done by Bill:

In those days, Microsoft was a lot less bureaucratic. Instead of the 11 or 12 layers of management they have today, I reported to Mike Conte who reported to Chris Graham who reported to Pete Higgins, who reported to Mike Maples, who reported to Bill. About 6 layers from top to bottom. We made fun of companies like General Motors with their eight layers of management or whatever it was. In my BillG review meeting, the whole reporting hierarchy was there, along with their cousins, sisters, and aunts, and a person who came along from my team whose whole job during the meeting was to keep an accurate count of how many times Bill said the F word. The lower the f***-count, the better. Bill came in. I thought about how strange it was that he had two legs, two arms, one head, etc., almost exactly like a regular human being.

The article is an interesting read about how the project review projects worked at Microsoft but ends up describing the importance of the F-word when you sit down to discuss something important, both hilariously and rather accurately. Joel describes the end of his review session with Bill:

"I don't know, you guys," Bill said, "Is anyone really looking into all the details of how to do this? Like, all those date and time functions. Excel has so many date and time functions. Is Basic going to have the same functions? Will they all work the same way?" "Yes," I said, "except for January and February, 1900." Silence. The f*** counter and my boss exchanged astonished glances. How did I know that? January and February WHAT? "OK. Well, good work," said Bill. He took his marked up copy of the spec ...wait! I wanted that... and left. "Four," announced the f*** counter, and everyone said, "wow, that's the lowest I can remember. Bill is getting mellow in his old age." He was, you know, 36.

On a side note if you still haven't clicked the link and still haven't read through the entire Joel's Bill Gates Review post, I highly recommend that you do.

If you are a traditional manager, you might find the whole idea of being blatantly open, laughing at your own screw ups and bringing things out in the open a little strange; but we as programmers; have been filthy mouthed for years. We've been filthy mouthed for years; right from the days when your management teachers in that fancy management school were teaching you how to wear a suit and tie your tie knots.

If you don't believe me, go to Google Code Search and search for the F-word. For your viewing pleasure, dear reader, I bring you, some of gems, which I found on my search for 'fun' with the F-word and how programmers have been using it all the time; 'under the hood' far away from the prying eyes of traditional managers who find it difficult to do real work. Here are some comments found submerged deep down inside the code base of multiple open source projects:

The GSA Code-base /** Only Sun can take such nice parts and f@#ck up the programming interface like this. Good job guys... */ The Mozilla Code-base // No other modifiers can be down. Especially CTRL. CTRL+ALT == AltGR, and we'll f@#ck up on non-US enhanced 102-key keyboards if we don't check this. Code At Perl Monks ## Ugly as f@#ck, but necessary -- check if there's a repeat on the previous line at this position, and take care of the + at it's right-hand-side, to avoid the choice processor becoming confused. The Open JDK Code Base /* This method returns the Nth bit that is set in the bit array. The current position is cached in the following 4 variables and will help speed up a sequence of next() call in an index iterator. This method is a mess, but it is fast and it works, so don't f@#ck with it. /* The Free BSD Code base * While the GuppiDataTree does expose its GuppiDataTreeNodes, they should be treated as *read-only*. If you change them, you could really f@#ck things up. */

As hilarious and bizarre as me searching for the F-word in the Google code search might sound, it does result in more than 84,000 search results; quite a few of them happen to be from prominent developers in prominent projects or products.

My point?

If you work with a manager or managers who think that use of the F-word while coding is evil, extend a hand of friendship; break the ice; get them to step out of their stupid ivory tower; get them to put their feet on the ground and get them to talk like real programmers doing some real work.

If you can't get them to cut the crap and admit that things are fu@#ked up when things are; run; and don't look back because 'acting professional' and 'acting nice' is something that can eat years of your professional life and keep you busy for an entire life time; only to realize that you did 'nothing' meaningful when your grow white hair on your head.

If you don't believe me when I talk about the importance of expressiveness of language when you are talking about things that are messed up, ask Ted Dziuba.

The F-word is crucial in software development. It is in fact, probably the single word that can, with true intensity, describe how bad things are in your project; particularly when they are really bad. Thom Holwerda uses his drawing abilities to rightly illustrate: the only valid measurement of code quality is WTFs / minute.

If you don't have a team where you can get in the room and talked about how f@#cked up things are, chances are high that your project is going to be basically... f@#cked up. Chances are also high that you might spend the rest of your work life indulging in mitigated speech.

Long story short, If you can't take the F-word sportingly, there is something fu@#ed up with your style of working.

There; I said it - and you are just going to have to deal with it.