free html hit counter
Posted on: Tuesday, September 16, 2008 by Rajiv Popat

Throwing The (In)Frequently Asked Questions Out Of The Window.

When was the last time you read a FAQ?

No, Seriously. When was the last time you 'actually' read a FAQ?

When was the last time you found a FAQ useful?

Thought So.

Kevin Kelly refers to Most FAQ’s on the web out there as “NAQ" or as he prefers to call them, "Never Asked Questions”:

That's what most company FAQs really are. Easily answered questions that no one has ever asked.

These fake FAQs are useless. They are a turnoff to potential customers looking for reasons to buy, and an insult to existing customers troubleshooting. I now judge companies while shopping on how competent their FAQs are.

I've hardly ever found a FAQ section of any web-site useful. FAQs, over their long history have turned from something that was supposed to provide genuine help, to something that no-one reads and a rather elegant wall or facade behind which most support folks hide.

 

The idea of having FAQs wasn't always such a bad idea. The whole idea of documenting FAQs in-fact started with an intent that was good:

FAQ's started as lists of answers to common questions in Usenet newsgroups. Mark Horton wrote the first FAQ, which he regularly posted to the Usenet newsgroups with the answers to eighteen common questions, such as "What does 'foo-bar' mean?", and "What does 'Unix' stand for?".

 History has it that FAQ’s were written primarily because the same questions were being asked too many times:

On 15 September 1983, Jerry Schwarz announced on net.general that he was going to publish a list of "questions not to ask". On 1 November, he published the first Usenet FAQ under the title "Frequently Submitted Items".

They were, as their name suggest, supposed to be 'Frequently Asked'. They were supposed to help; back in the old days; when we didn't have this thing that we all love and call 'Google', FAQ's as a matter of fact, did help.

Today, I have multiple gripes with FAQ's.

The biggest of my gripes is that they are not written with a genuine intent of helping end users. Go to any web-site that has a FAQ section glance through them. Chances are, that you'll find the following whole set of issues with the the made up questions and their plastic answers. You'll notice that the question and answers are:

  1. Written by Non Technical Staff who usually come from backgrounds like marketing or content writing.
  2. Written by folks who are usually overly aware and cautious of the organization's image in front of it's customers or potential customers.
  3. Written to spoon-feed the users with questions the organization wants them to ask, not the questions the customers want to ask the product developers.

What historically started as a means for the technical folks to avoid repetitive answers in the community and support DRY communication, has gradually turned into a wall preventing customers from reaching the technical staff in a desperate attempt to lower the cost of support; or a place where a bunch of desperate marketers try to convince the 'potential' customers that their product works.

With all due respect to the marketing and PR folks, FAQ is supposed to be a support tool, not a marketing tool. Neither is it supposed to be a wall behind which the support staff hides.

The folks at 37Signals have a slightly different take on the whole support thing:

Avoid building walls between your customers and the development/design team. Don't outsource customer support to a call center or third party. Do it yourself. You, and your whole team, should know what your customers are saying. When your customers are annoyed, you need to know about it. You need to hear their complaints. You need to get annoyed too.

At 37signals, all of our support emails are answered personally by the people who actually build the product. Why? First off, it provides better support for customers. They're getting a response straight from the brain of someone who built the app. Also, it keeps us in touch with the people who use our products and the problems they're encountering. When they're frustrated, we're frustrated. We can say, "I feel your pain" and actually mean it.

Kevin explains in his post also why real providing answers to real FAQ’s which can solve real problems and genuinely help customers are very difficult to write:

Real FAQs will often be difficult to answer. An answer may mean admitting mistakes, or acknowledge a weakness, or explaining something very complicated. It's okay. Take all the room and time you want. People will read it.

Let's face it. If your Web-site has a FAQs section it's probably going to suck. It's that Simple.

Don't have a FAQ. Throw them out of the window. Delete that FAQ page from your web-site. Right now.

Instead: 

  1. Have product blogs with comments turned on so that product team can directly answer and respond to the questions. Let the search engines index those and help customers who have similar problems in future.
  2. Have forums. Get your technical team to answer questions there. Undermining the power of the community and trying to replace it with a ‘one-way-communication’ like a static FAQ list is stupidity.
  3. Provide email addresses and support numbers clearly and liberally on your web-site. If your customers have a problem with your product, your product team needs to take the responsibility and answer them. After all supporting what you write and being their for your customers is as important as writing the product itself.

If the same questions keep popping up again and again (and if you must), then, by all means, use a FAQ. But remember what a FAQ is supposed to mean in the first place.

Does your web-site have a FAQ section?

Is it written by your technical team or your Vice President of marketing?

Maybe it's time to give your FAQs a good hard reality check.

If they are not genuinely helping your customers consider throwing those stupid (In)Frequently Asked Questions out of the window.

posted on Tuesday, September 16, 2008 6:06:23 PM UTC by Rajiv Popat  #    Comments [0]
Posted on: Monday, August 18, 2008 by Rajiv Popat

You Don't Ask Why, You Don't Get Innovation (Comment Reply).

I recently wrote a post on YAGNI and asking "Why" Before adding features which led to quite a bit of criticism and questions through a couple of comments, email and personal one-on-one discussions.

If you drop me a comment on this blog, usually I’ll respond to it as a comment because I feel it helps in maintaining continuity of on-going discussion. But then, the YAGNI post received a comment that was different. By the Time I had completed writing the reply to the comment I had already crossed a couple of pages and it sounded like it deserved a new post.

Rohit Jain responded to my post with a rather opinionated but interesting comment. By The time I had read the comment I was busting with a temptation of a six year old who knows the answer that was just asked by the teacher.

  

Just so that you don’t have to swap back and forth I post Rohit's comment here:

"Why vs. Why Not" is an exciting topic. There is much to argue, much to disagree & much to settle at for.

Still it's precious, for it involves exchange of thoughts, exchange of visions, exchange of desires, exchange of expertise and so many other things.

But... when you ask "Why YES?” you at the same time also mean "Why not NO?” :) They are always twinned. Things are not always as they look to be, things are as you want to see them.

As for YAGNI, it's true. You need to focus, focus on needs first. You need to learn to control temptations, b'coz it's endless. You need to know what to do and what not to. That's a very thin line, but is a life saver at times... worth following. We all do because it unarguably makes processes successful.

But ain't it that an Innovation is a child of creativity? That's why we hear of companies giving "paid" time to their staffs for their own creative projects (things that company hasn't seen yet, don't need either....but still they care for).

The world will not end if new innovations are not born. The world is running & it will. People will take birth, people will live happily ever after, and they will die to rest in heaven. But we have innovations to ease our life, to make it a little better, a little easier. We never needed iPod, we enjoyed listening music on a heavy, fat & ugly looking gramophone player. But then we saw evolutions. And now, iPod is in everyone's wish list. I can't help commemorate the statement, "Needs are created". That's another exciting topic to argue :)

Taking out one line from my own blog site: "When you ask others 'why?', ask Yourself 'why not?'. Most of the questions will be answered automatically."

Still, needless to say that "Why vs Why Not" is always useful, for everyone. Because that helps, helps grow.

Cheers,

The 'Why not?' guy :)

Rohit Jain

While the comment is fairly constructive in criticisms and deserves a reply I feel Rohit was a little mixed up with contradicting thoughts and ideas. This post is my humble attempt to put these conflicting and confusing thoughts and ideas in right perspective. Let's take each part of the comment, dissect it and try to answer it in the sprit of sharing ideas and learning something new. 

> We all do because it unarguably makes processes successful

The comment starts by seeming to suggest that YAGNI as this thing that makes a 'process successful' almost seeming to suggest that the guys who talk about YAGNI are guys who are so-anti-innovation that they are completely so-not-cool.

The way I see it, answering the 'why' has nothing to do with making the 'processes successful'. To me, 'why' is the the fundamental question that needs to be answered before you do anything. Of course, the answer to the 'why' can very well be 'because it’s fun' or 'because I like it' and that's perfect; but if you can’t answer the 'why', you are probably just wasting your time.

Early on in my career I started asking questions like: Why do we need to wear a tie to office? As I grew up as a developer the 'why' related questions became more and more profound and at the same time much more subtle. I asked why most organizations out there can’t trust their employee, why people seek refuge in documentation, why people need to spend fixed amounts of time in office and even why managers can't or shouldn't write code. If you read this blog regularly you will realize that this blog asks a lot of 'whys'.

My Post on Johnny Knapsack’s story is interesting in this context. Johnny Knapsack kept running with a Knapsack on his back without asking 'why' he needed the knapsack till he lost the most important race of his life. You can read the post here and the original story here.

The post and how I use the story is fascinating in this context because the post uses the story as an example of how you should move away from a rigid formal process by asking more 'whys'.

Clearly  asking 'why' has nothing to do with following the process or being un-cool.  

> Ain't it that an Innovation is a child of creativity?

This is the part where the comment does what I refer to as playing with words. I do this a lot myself. Playing with words to confuse the person on the other side during an argument is an interesting technique we learnt during our debate lessons in school. Let's play with words, now; shall we? Ever heard of proverbs like 'Necessity' is the mother of invention'?  You need to be able to define 'why' you are innovating whatever-it-is-that-you-are-innovating before you innovate. 

On the other hand the comment doesn't really explain how asking 'why' kills innovation or creativity.

The History that I know and was taught in school, tells me that most innovations have constantly happened because some kick-ass-guys (and girls) with really smart brains were able to tap into genuine needs and wants of people. After they did that they were able to answer 'why' people will need or want what is being invented or innovated.

Software History that I've been a part of during the early windows days has taught me that there have been a few products which were built with the 'why not' mentality and most those that I can think of have failed miserably. Ever heard of Microsoft Bob? When you say 'why not' and try to replace your desktop with a barking dog who is not even very funny, you really don't expect your customers to put up with your idea of something being 'cool' just because you asked 'why not' and decided to go ahead and build it anyway.

37Signals have been sited by many as leaders when it comes to recent day innovation in software and they have a one line “why” attached to every single product that they build:

What does your app stand for? What's it really all about? Before you start designing or coding anything you need to know the purpose of your product — the vision. Think big. Why does it exist?

Notice the word 'why' in the quote? These guys have given a lot of innovative products to the world and the basic premise on which their products are built is asking 'why' before they start building the product and then asking the same 'why' as every feature they add.

When you’re hooked on with the idea of building something, being asked 'why' seems like an attempt to kill your creativity, which is exactly what the comment seems to make it sound like, but more often than not that is clearly not the case. Creativity and innovation happen by constantly asking yourself 'why' not just saying 'why not' and doing things even before the 'why' has been answered.

The idea that asking 'why' kills creativity is blatantly wrong. Simple.

> That's why we hear of companies giving "paid" time to their staffs for their own creative projects (things that company hasn't seen yet, don't need either....but still they care for).

This is where I feel that the comment really mixes up Freedom, Process with the whole 'Why Vs. Why Not' thing. I will assume the comment talks about Google which is often sited as a popular example of a company that gives twenty percent free time to employees to chase their dream projects.  

The first time I heard the idea I loved it. I went out telling everyone about it. I really think that every company out there, that can afford it, should do it; companies like 3M had done it way before Google Started it. I personally recommend it highly. Having said that we need to remember that the basic assumption here is that the employees would have answered the 'why' themselves.

Everyone loves Google; me included. Having said that, I've never been at Google to see for myself how things are. While, it's perfectly ok to learn from these companies and get inspired it's also important to remember that how you do things is not about how Google does them.

I know these things sound perfectly glamorous when you hear them but it may or may not be as glamorous in reality as it seems:

In other words, it’s your job to carve out 20% of your work week for a project. If you don’t carve out the time, you don’t get it. Your project needs to be tacitly approved by your manager. Whatever it is, is owned by Google. If you’re organized, you can “save up” your 20% and use it all at once. It’s not unheard of for people to have months and months of “20% time” saved up. Most people don’t actually have a 20% project. Most managers won’t remind you to start one.

On the other hand take a look at any Google Products including the search engine we all love and YAGNI is evident in every single part of their design. Do you think they can't afford to make a fancy looking User Interfaces for their products?  Obviously not. Simply put, their User Interfaces are simply sticking to YAGNI. That is what sets them apart.

Bottom line, I’m sure Google would have pulled the plug on this who free-time-thing if their employees were busy building BOBs  in their free time. Google continues this practice because Google Employees come out with Google Maps which provide direction to people and Orkut which helps friends connect with each other in turn building communities. All Google Products built on free time or as experiments have a core cause of existence and answer the 'why' very-very distinctly; and you know what? They follow YAGNI too! Every single one of them that I have seen so far does.

> The world will not end if new innovations are not born. The world is running & it will. People will take birth, people will live happily ever after, and they will die to rest in heaven. But we have innovations to ease our life, to make it a little better, a little easier.

This is the point where you feel like literally telling Rohit that he needs to slow down. Here's my response to this line in the comment:

Hold on. You seem to be jumping the gun here. You seem to have mixed up innovation with asking “why” and you seem to propose the idea that anyone who asks “why” is anti innovation which I clearly have a problem with because that’s wrong; blatantly wrong. In fact the reverse is often true.

Here’s how Wikipedia defines innovation:

The goal of innovation is positive change, to make someone or something better. Innovation leading to increased productivity is the fundamental source of increasing wealth in an economy.

Necessity truly is, the mother of invention and putting invention into practice like it has never been put before is called innovation. When you can answer the 'why' people need what you’re building chances are you are on to innovating something; if you can't, there's a high possibility that you're wasting your time and most probably their time as well. You know what? Unless your users can answer 'why' they should use your application or even read your blog; they just don't care.

Scott Berkun’s Video on Myths of Innovation which he gave at Google is interesting. It's interesting because Google is often sited by many as Mecca of innovation. The First Myth Scott breaks in the video is that innovation is absolute. He explains that innovation is in-fact, relative. In the video he explains that Innovation is the process of implementing an invention depending on the 'needs' of people.

His example is simple. Bringing electricity or water to an area which doesn’t have it is innovation for the people who live in that area even when most areas in developed countries around the world today, might not consider it innovation.

Asking 'why' people will need what you're building is the fundamental building block of innovation.

> We never needed iPod, we enjoyed listening music on a heavy, fat & ugly looking gramophone player. But then we saw evolutions. And now, iPod is in everyone's wish list.

Read this part of the comment again; seriously; Do it. Read it again; slowly. It’s ironic because it’s a question which answers itself.

Apple had a concrete answer to the 'why' everyone needs an iPod. Because the gramophones were heavy, fat & ugly. There. The question answers itself. Simple. On A side note, who is saying don’t build iPods, Eh? Apple had very good reasons to make the iPod; changing the way music industry works was one of them.

Now, Let's throw in some facts, shall we?

The comment picks an interesting example. The iPod.

 

I love the iPod. We all do; but for the not for the reasons comment sites. The comment almost seems to make it sound as if a couple of really hip-and-happening teenagers got in a room and said 'why don't we build a MP3 player' and then they suddenly started off building everything they could and changed the world resulting in an iPod to emerge out of nowhere. In a real world where I live, innovation is not that easy. In fact, Apple uses YAGNI extensively in their products which is what sets them apart. Ever wondered why most iPods don’t have a FM Radio? Dale Jensen explains:

Who needs an FM receiver when your iPod holds the greatest radio station that there is - perfectly aligned to your tastes, with no commercials, and no annoying DJs?  That's the innovation - the bit that frees us from other's decisions, other's limits and other's expectations. The iPod is what you are, not what someone else wants you to be.

Innovation by Asking 'why' and then sticking to YAGNI, simplicity and class; that is what sets Apple apart.

By now if you haven’t noticed how grossly wrong the comment is in its premise, let’s talk about MacBook Air, one of apples latest innovations, which they prefer to call 'Thinnovation'

Apple is surprisingly disciplined about asking themselves 'why' even before they add hardware to their latest notebooks. It lacks an optical drive, has very few ports, has internals that cannot be upgraded and lacks a swappable battery. As a commenter describes:

But now, today, we’ve got the MacBook Air, a laptop so thin and light it’s named after a shoe. At just three pounds, it fits inside a manila envelope, and is practically guaranteed to bring about envy in those with heavier laptops for at least the next three months. It’s not perfect — no Ethernet port, no FireWire port, and no swappable battery — but you know what? I’ll take it.

Apple could have said 'why not' and have easily decided to slide in that FM Radio in iPods and slide in those few extra ports in Mac-Book Air; but YAGNI to a large extent, is what makes Apple Products so desirable, classy, appealing and 'innovative'. Most people see Apple and Google as these cool and happening companies and don't even realize these facts. Of course these are cool and happening places, because they have the self discipline to constantly question everything that they indulge in.

> "Needs are created".

Who’s arguing with that? But if you can’t say why people will need what you’re innovating; people probably won’t. Create the needs, but answer 'why' they will become needs and 'why' others will need what you are building before you go in a dark cave and start building something. If you can't then how do you even know it's a 'need' that you're creating and not just crap?

> "When you ask others 'why?', ask Yourself 'why not?'. Most of the questions will be answered automatically."

I could rephrase this as:

When you ask others 'why not' answer the 'why'. Most of the questions will be answered automatically. Call me arrogant, but I make a personal hobby out of playing with words and philosophies. I practically have a cupboard full of books which talk about the meaning of life, universe and everything. I read them all night. But you know what? When it comes to getting down to hard realities of life, The answer is 42!

On a serious note, while these words and ideas are nice to play around with, truth is that simplicity, personal commitment, personal discipline, continuous focus and hard work lead to innovation. Notice that I use the word 'personal' (not externally imposed). Unless you can concretely ask yourself 'why' you are doing something and then answer that why, the commitment and and focus doesn’t happen magically. Saying 'why not' and adding features randomly often takes away the simplicity which is often the soul of any innovation.

The comment seems to resonate a tone that there are two things you can do; you can either meet your dead-lines and meet processes or be innovator and change the world. In the real world however, a lot of innovations are often created because of real life limitations. The guys at 37Signals explain:

There's never enough to go around. Not enough time. Not enough money. Not enough people.

That's a good thing.

Instead of freaking out about these constraints, embrace them. Let them guide you. Constraints drive innovation and force focus. Instead of trying to remove them, use them to your advantage.

While it's easy to say, that you had a time-crunch and other limitations which is why you couldn't innovate, another way to look at it is that limitations often breed innovations.

> Why vs Why Not" is always useful, for everyone. Because that helps, helps grow

Do You know what helps people grow? The smack down learning model where you basically start with strong opinions are weakly held and throw a few punches at each other. On a serious note, I really believe that it's one of the best learning models out there which is why this post wears a highly opinionated tone

The comment seems to mix up innovation, creativity and a lot of other things with asking yourself 'why' and seems to create a confused mesh of ideas. It's great because it keeps a lot of discussion points forward but it's confusing and misleading. I cannot get myself to agree on it because it's based on the premise that asking 'why' is anti-innovation which of course is blatantly wrong. That's where it starts and then it goes all over the place about how asking 'why' prevents changes from happening on this planet; which again, is clearly not the case.

The comment seems to break the world into two kind of guys; the we'll-change-the-world guys who go around doing things without answering 'why' they are doing them in the first place and build random stuff and change the world and the why-are-we-doing-this guys who basically don't innovate, stick to the process and get projects completed. That's where the premise of the comment goes wrong. The comment basically misses the fundamental point that you can constantly ask yourself 'why' in a fun way, continue innovating by answering those questions relating to 'why' and be pragmatic.

That's how the folks at apple Keep the iPod simple and not get carried away by their desire to build cool features. If they didn't restrain this desire, you would probably have hundreds of  features in your iPod and you probably wouldn't love it all that much.

That's how folks at Google keep their User Interface Simple. That's one of the reasons why they beat Yahoo which was then the dominant search engine. They did by using YAGNI and simplicity to their advantage.

Most innovators are surprisingly clear about answering questions pertaining to the 'why' when it comes to their innovation. 

I’m standing by the premise that answering the 'why' is much more important than just saying 'why not' and then building stuff. I'm standing by this premise unless of course someone out there can let me know 'why' I should change my premise.

You don't ask why, you don't get innovation. It's that simple.

Disagree? Let’s have a smackdown battle of thoughts.

posted on Monday, August 18, 2008 4:28:52 AM UTC by Rajiv Popat  #    Comments [0]
Posted on: Monday, July 7, 2008 by Rajiv Popat

That Cool Feature You Probably Aren't Going To Need.

When you’re working with 501 developers you’re faced with a huge number of problems and your chances of entering the infinite loop of failure are almost certain.

On the other hand however, working with enthusiastic young and budding developers doesn’t always guarantee success. Of the many mistakes that even young and enthusiastic developers often make, the 'Lets-Build-This-Cool-Feature' Syndrome is one of the most lethal ones.

If you’re reading this blog, chances are high that you are, more probably than not, passionate about software development. You have this itch to create software with cool features and user interface that would have people drooling over your software and clapping out loud when they see it.

   

You’re probably busting with ideas and features right now as you work on your product and believe me that’s a good thing. Not a lot of people in our world have this un-ending passion for software and computers; Having said that, the 'Lets-Build-This-Cool-Feature' syndrome can cause your project to fail just as fast as the 501 folks would have caused it to fail.

I love writing code and spend almost quite a few hours doing that. For the rest of the day, my job demands that I get involved with reviewing software products built by the organization and give ideas and direction to the product teams.

Recently while reviewing a system which is supposed to help organizations develop and maintain taxonomy of their skill-sets; I came across a small feature which allowed people to add every single page in this system to their social book-marking system. It was like an ‘add-to-your-favorite’ kind of thing.

My shocked reaction may have come as a surprise to the entire team as I criticized the feature’s existence in the system heavily and questioned the team on why the product needed that feature. 

The ‘Why’ was answered by a rather passionate software developer's argument which was on the lines of – ‘Why not?’

This post is about answering the ‘Why not’.

The Single Word Answer to the 'Why Not' is simple. It's called ‘You-Ain’t-Gonna-To-Need-It’; also referred to as ‘YAGNI’ in the software development world. Wikipedia defines YAGNI as:

In software engineering, YAGNI, short for 'You Ain't Gonna Need It', suggests to programmers that they should not add functionality until it is necessary. Ron Jeffries writes, "Always implement things when you actually need them, never when you just foresee that you need them."[1].

Simon Willison describes how he puts YAGNI to use in his blog:

You Ain't Gonna Need It states that you should always implement things when you actually need them, never when you just foresee that you need them. This is great for controlling feature creep; the moment one of us says “we might need that later” the other says “YAGNI” and we can move right along.

The folks at 37Signals are much more passionate about building features only when they are genuinely needed:

Each time you say yes to a feature, you're adopting a child. You have to take your baby through a whole chain of events (e.g. design, implementation, testing, etc.). And once that feature's out there, you're stuck with it. Just try to take a released feature away from customers and see how pissed off they get.

With products like Base-camp, Backpack-It and almost all their other products they seemed to have lived up to their words:

Make each feature work hard to be implemented. Make each feature prove itself and show that it's a survivor. It's like "Fight Club." You should only consider features if they're willing to stand on the porch for three days waiting to be let in.

That's why you start with no. Every new feature request that comes to us - or from us - meets a no. We listen but don't act. The initial response is "not now." If a request for a feature keeps coming back, that's when we know it's time to take a deeper look. Then, and only then, do we start considering the feature for real.

In fact, Ron Jeffries takes YAGNI to the next level. He proposes that developers should use YAGNI even while writing code:

You find that you need a getter for some instance variable. Fine, write it. Don’t write the setter because "we’re going to need it". Don’t write getters for other instance variables because "we’re going to need them".

Scott Hanselman has similar very interesting post on why every class you write shouldn’t be marked public. The post has a quote that explains what can be otherwise described as a You-Ain't-Gonna-Need-It practice:

Scotts [sic] philosophy and that of many people at Microsoft (and many component vendors - Infragistics being another great example), seems to be to mark everything as internal unless someone gives them a reason to make it public.

I do understand almost all of us who feel passionately about software development, feel this yearning desire to build that feature which will have our users drooling and clapping, but 'growing up'  as a developer, also means understanding that it’s equally important to resist the temptation of building cool features or writing more code, especially when the features or lines of code can't justify their own existence.

While asking yourself if you want to build that feature, write that piece of code, write a setter for that variable or mark a class as public, answering the 'why-you-need-to-do-it' becomes much more important than just blatantly asking ‘why not?’. Answering the ‘why not’ is easy: it's usually 'because you probably aren’t doing to need it'.

Unless you can answer the 'why' easily, that feature you’ve been thinking of building and have been very excited about is just another ‘cool feature you probably aren't going to need’.

posted on Monday, July 7, 2008 5:09:55 AM UTC by Rajiv Popat  #    Comments [3]
Posted on: Tuesday, June 3, 2008 by Rajiv Popat

Hey Mr. Jargon, You're Just Full Of Crap!

Let's pretend I started writing TacticSheet six years ago. If you would have walked up to me back then and asked for a quick explanation on how the login of TacticSheet works, I would have presented you with a document called 'module specifications for the login use-case' containing multiple diagrams, some of which, would have looked somewhat like:

But then I didn't start building TacticSheet six years ago. I didn't even think about it back then.  Methinks my not attempting to start with TacticSheet six years ago definitely had something to do with the diagram above. Humor me. I have a point to make. 

Six years have flown by, faster than I thought they would ever fly by. A lot has changed in ways I would have never thought it would change. Six years ago I encountered my first 'successful failure' which to a large extent, changed everything. Since then, I've come full circle. Today if you walked up to my office and asked me how TacticSheet authentication works, I would probably just take you to a white-board and draw something like this:

 

Six+ years and one colossal failure later I learnt my lesson which taught me how to use a white-board. I learnt that design isn't all about locking yourself in a cubical and writing fancy documents.  I learnt that Project Management isn't about building Gant Charts and then going around the office asking people what the status is. I learnt that If I was ever going to work with (I'd rather not use the word 'manage') a team of smart developers I would have to roll my sleeves and at-least try and write code which is somewhere close to the code the rest of the team was writing. More than all of this, I learnt the art of 'trying' to express myself using a language and tone that others could connect to and understand. An art that even the most veteran of all consultants in our field lack.

As a part of my job, I talk to so called software developers, programmers and consultants all around the world. I interview them, discuss their profession with them and more than anything else I observe them; a lot. If there’s one thing I can tell you about most of them, it’s this:

Most of them are full of crap.

Why?

Because they complicate things; Un-necessarily.

FTC, UTC, LDD, HDD, SRS (the list is really end-less but I think you get the point); Talk to a group typical consultants about their projects or what they are up to and it’s not un-common to come across at-least a few of these three letter acronyms within the first ten minutes of your conversation.

Most of them seem to light up when they use these. God-forbid, if you cannot connect FTC to Functional Test Case, or HDD to High Level Design Document, you would have given them a deep sadistic pleasure of being more knowledgeable than you are.

Turns out, I’m not the only one who has a problem with these crappy attempts to complicate perfectly simple things; like a test-case or a design document for-example.
Scott Berkun describes why he hates most software consultants:

I look at the English language as a good thing. Shakespeare did some good with it, didn’t he? Although he did invent some words here and there, I don’t think most of us need to create new words to get our points across - 200,000 is plenty to work with. In fact unless your new word enhances my understanding of what you’re trying to say instead of diminishing it, it’s hard not to see you as either a fool or a blowhard. You’re not making a new word or using obscure language to help me, you’re doing it to help you. If you look at how most consultant talk, you’d think they hated English, had a personal vendetta against it, as they seem to take such pride in burying clear thinking under layers of vacuous, disingenuous jargon.

With armies of consultant, clueless about craft of building software, complexity in the way they communicate is something that's bound to happen.

The infinite loop of failure often moves around a vicious eco-system. If consultants who are iterating in this loop are using excessive jargons it’s probably because the entire eco-system encourages them to do so. In his same article Scott Berkun describes how the eco-system encourages this crap:

Certainly (bad) consultants aren’t entirely to blame for what they do - some clients want the made up stuff, they want to believe in things they don’t understand, or they want to rely on a outsider simply so they can blame the outsider later on.

Do you, dear reader, use complicated acronyms and jargons when you talk to your clients or fellow developers? If you do, ask yourself if you are using them just to impress or intimidate the person you are talking to; or are you using them for a greater self esteem and feeling better about yourself? Either ways, whatever be your reason, if you are using too many jargons in your conversations, stop; stop using them right now. Stop before you are perceived as a consultant who is full of crap.

I have quite a few friends who happen to be doctors and family physicians. When it comes to picking my doctors or physicians I judge them by their ability to say ‘I don’t know’. When a doctor or a physician is talking to me about my health and what's gone wrong with it I expect that he takes time and explains it to me in a language I can understand; even if it's just minor stomach ache.

If he doesn’t know what’s wrong with me and decides to give me a treatment based on a gut feeling or instinct, that's ok too. Either ways,  I want to know and I want to be told in a language I understand.When I come across a doctor or a physician who lives in his ivory tower of medical-terms or jargons and uses them at every opportunity he gets, I turn around and run. I perceive this as a signal of incompetence and immaturity.

When you talk to intelligent clients, they are judging you; all the time. Just like we judge doctors and physicians. They’ll respect you and connect to you only if you can explain the most technical terms and concepts to them with simplicity; using a language they understand. Insult or intimidate them with your crap load of jargons and they'll be gone way before you know it.

It took my six years to develop a shamelessly-thick-skin and then put it to use in the real world. Now every time I hear a self-made-jargon or an acronym I'm not aware of, being used by anyone, I stop the discussion and ask the person using the jargon to explain it. I do it over and over every time a new acronym that I don't understand is used and I do it shamelessly.

At times, the person using the jargon feels highly irritated and after being interrupted a few times, stops using them. Other times, he draws a conclusion that I'm an alien with a third eye who is not good enough to be a part of the discussion and decides to ignore me completely and focus on other 'wiser' participants in the discussion who are as equally lost but would hardly ever admit it for the fear of lack of being intimidated.

I started this blog for developers like me. More specially put, .NET developers. When I analyze my traffic now-a-days it's easy to analyze that more than 50% of the regular readers of this blog are not .NET developers. Every now and then I'll get praises and criticisms about this blog. I love them both; but the praises that I've enjoyed the most are the ones, where people have told me that my blog is read and understood even by non-dot-net-developers including folks who are not technical.

Off-course, depending on the nature of the post it’s not always possible to cater to a completely non-technical audience, but I try my best even to make sense to a non-technical audience. Any complements on the lines of this blog making sense even to a non-technical audience are complements I love and treasure because they remind me that I'm not a Jargon freak scaring people away through the crappy technique of intimidation.

Next time you hear a consultant using self-invented-short-forms-and-acronyms and you are clueless about what he is trying to say, give Mr. Jargon a gentle reminder that there 200,000 words in the English language and if Mr. Jargon cannot say what he is trying to say in those 200,000 words, what he is trying to say is probably not worth listening to. Net-Net, either give him a gentle reminder about the vastness of the English language, or maybe, try using the Consultant's Jargon Generator, beat him at his own game of stupidity and then tell him how you did it. I prefer the former. It's much more polite.

If Mr. Jargon cannot simplify and explain what he is trying to say like he were explaining it to a teenager, he is probably just full of crap and probably isn't worth listening to; I don't care how many FTC's or HDD's he has written in his life. Seriously.

posted on Tuesday, June 3, 2008 3:21:54 PM UTC by Rajiv Popat  #    Comments [4]
Posted on: Tuesday, May 27, 2008 by Rajiv Popat

It's Not About Google. It's About You.

The Internet is quite literally littered with articles on how Google considers it's employees really important and how beautiful life is at the GoogolPlex. There are a huge number of articles out there describing how Google is very selective on who they pick and how Google offices around the world take care of their employees:

Folks at 37Signals are also particularly articulate and bold about expressing their opinionated approaches and techniques of how they focus on recruiting smart employees rather then huge number of bodies:

There's no need to get big early — or later. Even if you have access to 100 of the very best people, it's still a bad idea to try and hire them all at once. There's no way that you can immediately assimilate that many people into a coherent culture. You'll have training headaches, personality clashes, communication lapses, people going in different directions, and more.

Companies like Google and 37Signals have made it big, in completely different ways and yet somehow managed to retain the 'magic touch of being small'. These companies have emerged as companies which have achieved success in a distinctly different way. To add to that, they, much like anyone else who is successful, are particularly un-ashamed about flaunting their success and sharing nuggets of wisdom with  anyone who cares to learn how successful companies are built and run.

No doubt, the Internet is quite full of articles based on perceptions and ideas on how successful companies are built and run.

If you’re a round-peg-in-the-square-hole, these companies and how they function will continue to sound like a perfect validation of how you think and function. Agile, Scrum and philosophies like embracing the truth of software development and getting real will make perfect sense and a huge appeal to you when you read about these concepts and how these companies have had success with these methodologies.

On the other hand our industry also has companies that run huge body shops across the globe. Companies that have always been a known to be cultivate symbolic armies of consultants, bred through a well defined process and rapid growth measured purely by the number of 'resources' hired:

These are companies that genuinely and truly believe that a process oriented approach and processes like SEI CMM or RUP are an answer to how software is built. The fundamental principal these shops work on is that If you can somehow stuff fifty resources in a tiny room and make them follow a process you can get software built.

If you’re an I-have-earned-my-degree-from-best-college-and-I-wear-a-suite-to-office kind of individual, these companies and how they function will always sound like a perfect validation of your beliefs and how you get your projects done. Big Design up-front, RUP and SEI-CMM will make perfect sense and appeal to you when you read about these processes and how these companies has had success these processes.

Like it or not, the Internet will always be littered with articles from two kinds of companies. Companies which innovate and change the way software is built and companies which out-source and build software needing huge number of bodies and very little innovation. Given that you're constantly going to be bombarded with articles and success stories from both camps, how do you pick which camp you belong to? 

This is one question the guys at 37Signals solve rather easily when answering the question if their book is for you:

You realize the old rules don't apply anymore. Distribute your software on CD-ROMs every year? How 2002. Version numbers? Out the window. You need to build, launch, and tweak. Then rinse and repeat.

Or maybe you're not yet on board with agile development and business structures, but you're eager to learn more.

If this sounds like you, then this book is for you.

One of my first projects I was involved with as a young engineer was a implemented through a deadly blend of RUP and CMM. As much as I was learning the tricks of defeating the client and getting my Project UAT done successfully with the help of CYA documentation, there was something that constantly 'felt wrong'.  When I first read about Agile and Particularly scrum I was hooked. It 'felt' right.

Ideas like putting people before process, working with smaller teams which can sustain themselves, doing away with un-necessary documentation and bureaucracy and the like, clicked. It was a reconfirmation of what I always believed in and gave me enough reason do what I always wanted to do as a young engineer, which is: have fun and build software that, for a change, works. That is exactly what I'm doing even today. Every day of my life.

Did a book or a web-cast on scrum change my life and convince me to go the Agile route? Not Really. I think I was already sold to a particular way of building software way before I picked up my first book on Agile. The books on Agile and web-casts on scrum were an excellent an enabler, reconfirming my faith in what I already believed in.

After sending countless links to young and budding developers, and traditional managers around the world, I finally realized a simple fact of life: The whole CMM Vs. Agile thing and which one you pick for your project is usually deeply rooted in your personality, character and your past experiences including how and why you entered the business of building software. You've probably picked your methodology way before you put your first step in software development world and way before you even heard about these methodologies.

The confused ones, willing to learn and move will nudge easily. However, for a traditional manager who truly believes in the power of the Gantt-Chart, trying to nudge him over to the agile side is usually a waste of time and energy on everyone's part.

Yes, confirmation from someone like Google or 37Signals or anyone else who has made it work by trusting people over process helps, but in the end which methodology folks will follow will largely depend on their way of looking at things and character. Remember, it's not about Google, 37Signals or your software development process. It's more about your personality, beliefs and above all, yourself.

posted on Tuesday, May 27, 2008 7:53:40 AM UTC by Rajiv Popat  #    Comments [3]
Posted on: Monday, April 14, 2008 by Rajiv Popat

Write Some Code, Mr. Manager!

Michael Lopp's book Managing Humans has a classy introduction done with an elegant use of pictures. Besides it's elegant front cover and a classy promotional web-site, what I particularly like about the book is the keep-your-feet-on-the-ground tone filled with humility that resonates throughout the book as you read it.

For a book which is supposed to teach young and budding managers to how Manage Humans and not just develop your coding skills, Michael's advice to young managers, that they should continue coding even after becoming managers, comes as a pleasant surprise.

If you follow my advice and remove yourself from the code, then you are removing yourself from the act of creation. This act is why I don’t really sweat outsourcing. Automatons don’t build, they process. While good process can save a lot of money, it’s not going to bring anything new to the world.

With smaller teams doing more for less, removing yourself from the code strikes me as a bad career move. Even in a monstrous company laden with policy,process, and politics, you can’t forget how to develop software. And how to develop software is changing. Now. Right under your feet, this very second.

Michael, in his book, seems to address multiple concerns budding managers have when continuing to write code for a small part of the day after they get their first promotion to a managerial role. Of all these concerns, he addresses the concern that managers who write code end up confusing their team and make the team wonder if they are a managers on a developer, rather elegantly:

Good. I mean it. I’m happy you’re about to confuse your team by swimming in the developer pool. The simple fact is that well-defined roles in software development are fading. User interface guys are doing what can only be called development in JavaScript and CSS. Developers are learning more about interaction design. Everybody is talking to everybody else and they’re learning from each other’s mistakes, stealing each other’s code, and there is no reason that a manager shouldn’t be participating in this massive global cross-pollination information cluster-fuck.

As a part of my day job I interview countless budding-managers who stopped writing code at the very first opportunity they got. These are folks who have barely been promoted for less than a couple of years and they decided to quit coding the day they got that promotion letter; even before they made it through leading a couple of successful projects or proved themselves as a very good people person or a decently acceptable manager. Talk to them for a few minutes in an interview and invariably the same story evolves:

Fred was desperately looking for a promotion. Fred 'somehow' managed to get promoted. Fred stopped writing code and locked himself in an ivory tower from where he looked down upon all who write code. Needless to say that Fred also started believing that his job role demands that he goes around the office with a lot of serious looking printouts of documents in his hands, suggesting everyone follow the processes he is laying out, asking everyone what the status of their task is and periodically yelling at developers to make them work harder.

 

So, at the first opportunity Fred got, he quit coding. He left it for good! After all he had to grow in his life and in order to do that it was really important that he stopped writing code all-together, right?

Wrong.

Steve Yege's advice for folks who desperately want to quit coding at the first management opportunity that they get is rather strong and direct:

If you want to manage badly enough, then you will manage, badly enough. Hence, before you jump in, stop and think about why you want it. Are you tired of engineering, or were you perhaps never very good at it? If so, technical management isn't much of an escape, because your engineers will know, and they won't respect you.

Witting some code or participating and contributing actively in process of software development during the day, even if your organization expects you to just manage teams, has it's own set of advantages. Michael, in his book, advices managers on continuing to write code and having fun creating software even after they receive that promotion. Writing code and being actively involved with the project, Michael feels, can help managers communicate better with their teams:

I’m not wishing confusion and chaos on your team. I’m actually wishing better communication on it. My belief is that if you are building the product and touching the features, you’ll be closer to your team. But, more importantly, you’ll be closer to how software development is constantly changing in your organization.

Jeff Atwood questions how important writing code really is:

Am I really telling developers to stop writing code? No, not really. Developers are already good at writing code. It's why they became software developers in the first place. Writing reams of code just digs you deeper into an already deeply specialized skill. What I am proposing is that we spend less time coding and more time developing skills in other areas that complement our coding skills. Become a better writer. Become a better speaker. Improve your personal skills. Participate in the community. Try to spend some time talking to people instead of the compiler. That's how you distinguish yourself from your peers. And that's ultimately how you become a better software developer, too.

Of course, this isn't a zero-sum game. You can have it both ways. Ideally, you'd write code, and then write or talk about the code in a way that inspires and illuminates other people. But we don't have an infinite amount of time, either. If you have to choose between writing code and writing about code, remember which side of the equation is more important-- and balance accordingly.

As much as it might sound that Jeff gives more importance to abilities that complement coding besides writing code, even Jeff seems to think that all these activities combine are largely useless if you are not playing active part in the process of creation:

But I refuse to become a full-time blogger. I think that's a cop-out. If I look at the people I respect most in the industry, the people I view as role models-- Paul Graham, Joel Spolsky, Steve Yegge, Eric Sink, Rich Skrenta, Marc Andreesen, Wil Shipley, Douglas Crockford, Scott Guthrie-- they all have one thing in common. They're not just excellent writers and communicators. They build stuff, too. The world has enough vapid commentary blogs. I want to build stuff-- and talk about it.

Writing a little bit of code also acts as a good reality check on how good at building software you really are. I've often said that the confusion and turmoil in our profession makes writing software very similar to fighting a war. If you're going to learn the art of leading an army in a war why not learn it from some of the best warriors in history:

Alexander was very much war oriented and therefore did not put off his battles to marry and have children, even though this would leave the kingdom without a ruler in the event of his death. He was much more concerned with his fame than with what would happen to his empire should he be killed. As a general and leader Alexander was closely involved with his wars and his men. Unlike most generals or rulers he did not stay on the defensive side of his assault to ensure his safety but rather joined his men and led them on attacks.

Let's face it. While fighting a war things are bound to get ugly. If you're not prepared to go out there and take a few shots yourself do you really expect your team to follow you and help you through the difficult times?

Even if you don't write code that runs on production, at-least participate in some form of supportive activity in the project and own a task. If nothing else, write a few unit tests to help your team improve the quality of what they are building. If you're not supposed to code actively in your project, start a small open source project and continue to hone your coding skills there.

Bottom line: Do whatever it takes to make sure that you're speaking the same language as the rest of your development team and not mangementese.

If you're a budding manager who's just got his own team to lead (not manage), a brand new project to run and if you're wondering whether you should stop writing code completely and just focus on your managerial skills, here's my advice to you: don't even think about it.

Remember, how to develop software is changing. Now. Right under your feet, this very second. And it might be changing very silently and subtly but it's changing faster than most of us think. If you're going to lead really smart software development teams, not spending at-least a few minutes a day writing code and failing to learn how software development is changing and evolving can be the single most devastating thing for your career.

Sure, learn how to manage humans and how to write about code besides writing code. I've myself advised individuals to turn themselves into a one man army. But even as you learn these other skills, don't forget to dedicate a few minutes a day to the bits and bytes when you roll your sleeves and write better code than what you wrote yesterday. Remember, at the end of the day Gant charts and CMM won't get your projects done or make you successful. Your own competency, your team's competency and your and your team's collective knowledge of how software development is changing and evolving will.

Some of the best managers I've worked with are folks who have rolled their sleeves and helped me 'on the field' when I was fighting with learning a new technology at a client's office. They've joined me in the battlefield and fought side by side with me. Quite literally. Other's have gone out and taken care of doing requirement sessions with the clients and writing and formatting use-case documents when we were running short of business analysts.

Quite a few of them have owned modules of code while I've also seen a few of them relentlessly tweaking HTML or giving ideas on usability and end user experience of the applications. Yes, I've been perpetually confused about whether they are Managers, HTML writers, Business Analysts, Mentors or Developers; But none the less, I've enjoyed working with them as much as I enjoy working with a smart bunch of developers.

So you got your promotion and your business card now reads 'Project Manager', Eh? Good.

Now go ahead, open that IDE and write some code Mr. Manager. It's nothing to be ashamed of. On the contrary, it's something to feel proud about. Seriously.

posted on Monday, April 14, 2008 4:21:40 PM UTC by Rajiv Popat  #    Comments [0]
Posted on: Monday, April 7, 2008 by Rajiv Popat

Stop Being A Leecher. Participate. Contribute.

What's your favorite web-site?

Over the past couple of years I've asked this question to a countless number of people in presentations, meetings, seminars and in day-to-day-discussions. Most of them have been programmers and most of them have responded with an answer that shouldn't surprise you.

Google.

Technically speaking, Google is not a web-site. It's this thing, that makes other web-sites exist; but if you want to call it your favorite 'web-site' just because that's where you spend most of your online time, go ahead and call it your favorite web-site. Whatever makes you happy.

None the less, the fact of life is that Google is an awesome content-enabler. Being the kick-ass search engine that it is, If the content is out there, it crawls it, indexes it and makes it available to you when you need it.

Ok, that single sentence above is the soul and essence of this entire post. Seriously. Take a pause. Read the above sentence again. Slowly. Did you get it? Did you get the hidden punch word in that sentence? Let me clarify.

'If the content is out there'. Or should I say, if 'we' (the collective sum of all users who use Google and this thing called the Internet) 'choose' to put the content out there.

Of-course, like a lot of Internet users, you could continue to assume that 'someone else' will put the content there or Google will just get you the content even if it's not there as long as you continue to call it your favorite web-site; but then, in the long run, that won't work.

Here's how Wikipidea defines a leech:

In computing and specifically on the Internet, being a leech or leecher refers to the practice of benefiting, usually deliberately, from others' information or effort but not offering anything in return, or only token offerings in an attempt to avoid being called a leech. In economics this type of behavior is called "Free riding" and is associated with the Free rider problem.

Modern protocols and communities ban a leech from getting the benefits of the community once a leech is discovered. But Google and the Internet in general, are a lot more forgiving which is probably why a lot of us don't even feel guilty about not contributing to the wealth of content that's available online. We continue leeching away, day after day.

If you fall in this category of non contributors, may I suggest that you spend a just a tiny bit of your time to take a stock of relevant, useful and valuable content you've contributed online, that Google is indexing and making available to folks who need it?

No, I'm not talking about your Orkut or Facebook Profile which allows people to Google you by your full name or your blog where you primarily write about how much you love your dog, how much the world sucks and how much beer you had last weekend. Don't get me wrong. There's nothing wrong with writing about all of that. But that does not count as a valid contribution to your favorite search engine, the Internet or to the world in general.

In my previous post about being opinionated, someone commented that caring about others while earning your own bread and butter is difficult and not everyone is capable of expressing their opinion articulately even if they might be able to have their own opinions. I also got a few similar emails which essentially said the same thing. Here's what I have to say to all those reactions:

Bullshit.

No seriously, not being able to express your own opinions articulately in a blog post is completely fine and acceptable. But then, you can still contribute. Here are multiple ways of contributing wrapped up in a are-you-a-leecher-test. If you answer no to all of these questions, chances are, you probably are a leecher:

  1. Are you regularly spending some time in technical user-groups or forums asking intelligent questions or answering them?
  2. Are you writing a technical blog where you are sharing your findings and your ways of doing things with others?
  3. Do you own, work in, or contribute feature patches in an open source project?
  4. When you find a bug in an open source project that you are working with, do you report it elaborately, try to suggest a fix or maybe even send a patch with the fix?
  5. Do you write for code-project or any other technical web-sites?
  6. When you buy a new book or a new cell phone do you write and post your reviews to help others?
  7. When you read a blog post that moves you or you disagree with do you care to leave a comment that adds value to the ongoing discussion?

As much as I disagree with 'Shaun The Sheep' and his comment on my earlier post, here's my official reply to his comment:

I’m glad you have an opinion on how difficult it is to 'have an opinion and express it'. I'm really glad you are expressing your opinion loudly and fearlessly. I’m also really glad that you participate in discussions and have what it takes to leave a comment on a post that moves you or even on a post that you disagree with. Good to know that you’re contributing and not just leeching. That means that you're amongst the elite group of selected few. I genuinely and honestly hope you continue to contribute. Now go ahead, pat yourself on your back.

Scott Hanselman also invites 'lurkers' to join the on going conversation on his blog:

I feel like we've (that means me and you, Dear Reader) have a little community here. When you comment, I am happy because I feel more connected to the conversation as this blog is my 3rd place. I blog to be social, not to have a soapbox. I'm even happier when the comments are better and more substantive than the post itself. I would take half the traffic and twice the comments any day. If you're a "lurker," why not join the conversation?

Commenting on blogs, is just one way to participate and contribute. Keep an open mind and I'm sure you'll get countless opportunities to add to the wealth of information that's out there. You can add your thoughts and perspectives to the variety of discussions that are going on in the whole wide web. You'll be amazed at how quickly you can feel connected to individuals you have never personally met and communities you have never physically been a part. You'll also be amazed at the wide open holes where information is just not available out there or missing on the Internet.

To some of my regular readers, a few of my troubleshooting posts might sound out-of-context to the over all theme of this blog. However, I've seen countless individuals come to this site through a lot of these posts, simply because the information wasn't available as easily as you would think:

 

I've been amazed at the lack of information that Google has provided for problems that I've had in the past. Was it because Google was incapable of crawling and getting to this information or was it because this information just wasn't there? Allow me to Illustrate:

I could go on with countless examples from this site itself but that's not the point. The point I'm really trying to make is that the Internet is not this perfect treasure of information we usually think it is. There are missing holes which we, dear readers, can fill every-time we find them.

It's important that as we continue to 'Google' stuff and get some information or content for free, we also take a stock of how much value we have added to the whole online eco-system. Every time you see a conversation going on in a blog somewhere and you feel you can participate and add value, take some time and give in some effort to do so. Every time you have an answer to something you can't Google easily, document it and give Google a chance to index it. If you don't, the future of your favorite search engine and the Internet will not be as bright as it is today.

 

Jokes apart. Seriously, if you've written something (software, code, articles, posts, answers to questions in forum or anything else) that's free and has helped a few other individuals you've already joined an elite group of contributors in the online eco-system. Congratulations! If you haven't, may I suggest that you stop being a leecher? Start thinking of ways of participating and contributing. You'll be amazed at just how many people are listening and willing to participate with you.

To be honest, the world or the Internet won't really come to an end tomorrow morning if you don't contribute or participate. There are a lot of discussions happening out there and if you play the role of the shy loaner sitting in a corner, who has nothing to say, give or contribute in any small or large way, you are the only one who is going to lose out in the end.

I've already listed multiple forms of contribution in the are-you-a-leecher test above. If you are a leecher, pick one of them or just find your own form of contributing and start now! And by the way, for your own sake, stop saying you've got nothing to say or contribute. That's the single most lamest excuse I've heard for not contributing. 

Now go out there and write that post you've always thought you would write, start work on that open source project you were always thinking of working on or releasing, answer a few questions in a user group or do whatever it is that you are comfortable doing; but do 'something'.

The Internet brings the whole wide universe to your desktop. Don't just leech off it! Add to it, give it a whole new perspective and leave your mark upon it. Make a dent in the universe that sits behind your monitor; in whatever big or small way you can. I wish you luck.

posted on Monday, April 7, 2008 4:34:59 PM UTC by Rajiv Popat  #    Comments [7]
Posted on: Monday, March 31, 2008 by Rajiv Popat

CMM, RUP and Gantt Charts Don't Build Successful Software. Kick Ass Programmers do.

Legendary author Steve McConnell, in his book, Rapid Development - Taming Wild Software Schedules,  gives a lot of importance to the People factors in software development:

The first conclusion is that we now know with certainty that Peopleware issues have more impact on software productivity and software quality than any other factor. Since the late 1960s, study after study has found that the productivity of individual programmers with similar levels of experience does, indeed vary by a factor of at least 10 to 1.

When I was a young and budding engineer, I heard quite a few of my seniors and traditional managers be-little the activity of writing code as something 'anyone can do'.

A few of them, expressed their surprise at my desire to work with and hire smarter folks on the teams. They often remarked that if my design was detailed enough and if I had my documentation drilled down to the smallest detail of every class, anyone should be able to write the code and get the system built. 

Back then, for them, and a lot of huge software development body shops around the world, developers were quite literally 'resources' you could hire to write code.  

 

One resource was supposed to be very easily replaceable by any another as-and-when needed.

As much as the picture might seem funny, most body-shops around the world, even today, are blinded by the belief that if they have their CMM, RUP and Gant Charts in place, who writes the code does not matter much. Most developers today, are roaming the streets with the symbolic 'will code for some more food' sign in their hand as they hop from one job to another and most companies are picking up these developers off the road

Lack of respect for kick-ass programmers, Inability to differentiate the flock of sheep from the thinking brains, organizations believing that Gant charts, RUP, CMM and BDUF approaches and methodologies can make or break a project, not programmers and their competency, is in fact, to a large extent, responsible for brining the business of building software to the sorry state that it is in today.

Steve McConnell in his book uses analysis from NASA to place a tight slap on the face of this traditional thought process:

After 20 years of experimentation on live projects, researchers at NASA's Software Engineering Laboratory have concluded that technology is not the answer; the most effective practices are those that leverage the human potential of their developers.

Of-course you can get 'anyone' to somehow write some code and get something that looks like a system built; but if you don't have a self sustaining team of thick skinned programmers you are bound to fail infinitely. I am completely on Joel Spolsky's side when he says that primary cause for most failed projects are incompetent teams:

Even though a bad team of developers tends to be the No. 1 cause of software project failures, you'd never know it from reading official postmortems. In all fields, from software to logistics to customer service, people are too nice to talk about their co-workers’ lack of competence. You’ll never hear anyone say ‘the team was just not smart enough or talented enough to pull this off.’ Why hurt their feelings? The simple fact is that if the people on a given project team aren't very good at what they do, they're going to come into work every day and yet—behold!—the software won’t get created.

Quite obviously this describes why I had heard so many complains about the client changing the requirements, the design not being detailed enough and the use-cases not being elaborate enough, early on during my career as I worked on one of my first 'successful' grand failure. The simple fact of life was we as a team were incompetent and instead of fighting my incompetence I was being taught to hide behind a thick curtain of processes and defend it. Thankfully, I ended up seeking refuge in think-skinned shamelessness. Years later, I'm damn happy I did. 

Even today, when I go into a client's offices or multiple other organizations and see their team of developers complain about the requirements changing, about lack of process and about lack of documentation, I get my first hint of what's really wrong. Almost invariably, it's the team that needs more help at becoming competent, coping up with the changing requirements and shredding off excess baggage of stupid processes. 

Bruce Eckel has done quite a bit of these postmortems that Joel talks about and had the courage to explain the root cause of all software development related problems:

We are in a young business. Primitive, really - we don't know much about what works, and we keep thinking we've found the silver bullet that solves all problems. As a result, we go through these multi-year boom and bust cycles as new ideas come in, take off, exceed their grasp, then run out of steam. But some ideas seem to have staying power. For example, a lot of the ideas in agile methodologies seem to be making some real impacts in productivity and quality. This is because they focus more on the issues of people working together and less on technologies.

A man I've learned much from, Gerald Weinberg, wrote his first couple of books on the technology of programming. Then he switched, and wrote or coauthored 50 more on the process of programming, and he is most famous for saying "no matter what they tell you, it's always a people problem."

Jeff Atwood does not hesitate to go even as far as saying that whether your project will succeed or fail depends on whether you like your co-workers or not:

Let's say I was tasked with determining whether your software project will fail. With the responses to these three questions in hand, I can tell you with almost utter certainty whether your project will fail:

  1. How many lines of code will your team write?
  2. What kind of software are you building?
  3. Do you like your coworkers?

That last question isn't a joke. I'm not kidding. Do you like the company of your teammates on a personal level? Do you respect your teammates professionally? If you were starting at another company, would you invite your coworkers along? Do you have spirited team discussions or knock-down, drag-out, last man standing filibuster team arguments? Are there any people on your team you'd "vote off the island" if you could?

Steve Yege, is also all about developer competency and competency of teams much more than processes. He thinks even Agile is an overkill:

Most great software developers around the world don't use Agile. They just work hard, they stay lightweight, and they ship great stuff. Most developers still have no idea what Agile even is. Think of that!

Surprisingly, even the Agile Manifesto to a large extent agrees with Steve and puts people ahead of process and recognizes the importance of having a motivated team of talented programmers and giving them the best of tools:

Build projects around motivated individuals. Give them the environment and support they need, and trust them to get the job done -

Deploy all the tools, technologies and processes you like, even our agile processes, but in the end, it's people who make the difference between success and failure. We realize that however hard we work in coming up with process ideas, the best we can hope for is a second-order effect on a project. So it's important to maximize that first-order people factor.

For many people, trust is the hardest thing to give. Decisions must be made by the people who know the most about the situation. This means that managers must trust their staff to make the decisions about the things they're paid to know about.

These are in-fact, words of truth and wisdom. In all aspects of life, trust is in fact really the hardest thing to give. No wonder most body shops around the world find it really difficult to provide trust to their employees. No wonder we are spending countless man-years building support for law-suite in our documentation and trying to replace quality programmers with stupid processes and 'cheap resources'. No wonder traditional managers around the world, like to nurture beliefs that given 'x' number of 'resources', irrespective of who those resources are, they can get a system built in a finite pre-determined number of man-days. 

On a side note, if there is one term in software development and project management terminology I grossly dislike it's the word 'resources'. It seems to club all programmers in a very generic pool almost making it sound like programmers are 'things' or a flock of sheep. But we all know kick-ass programmers are way more than a flock of sheep.

Who you work with, to a large extent affects how successful your projects will be and ultimately how successful you as an individual will be. If you're a manager who was reading that big fat book on managing projects using CMM and RUP and hoping to hide behind the process curtain if your project fails, sorry to shatter your dreams, but you know what? That won't work. Not in the long run. Do this for a few months and I'm sure you'll cultivate a tendency to fail constantly and blame it on the lack of process. For a change, help yourself by reading a slightly different blend of books. It might help.

On the other hand, if you are a programmer who is a part of a self managing team that's shipping quality software; there's a high possibility that you'll never get to buying and reading that big fat book on CMM and RUP. Yes, you'll make big fat new mistakes in every new project. But you know what? You'll tend to learn from them and get better and successful project after project as long as you keep working on your shipping skills.

Realizing and accepting one simple fact sets a successful pragmatic leader apart from a worthless manager sitting in his ivory tower: CMM, RUP and Gantt Charts Don't Build Successful Software. Kick Ass Programmers do.

Also, while we are at it; can we please stop referring to programmers as 'resources'? It's too generalizing, makes it sound as if all developers are exactly similar commodities that can be swapped for each other and more than anything else, to kick-ass programmers who are passionate about what they do, It tends to sound a little intimidating and condescending. May I suggest referring to them as programmers, developers or team members?

posted on Monday, March 31, 2008 7:59:27 AM UTC by Rajiv Popat  #    Comments [1]