free html hit counter
 
 
 
Posted on: Thursday, March 01, 2012

Silent eyes staring at the monitor for hours doesn't make good Television.

Maybe that is why Television is littered with glamorous stories of success.

Maybe that is why all Steve Steve Jobs has to do is steal from Xerox.

Maybe that is why all Mark Zuckerberg has to do is steal an idea and diddle a friend.

Every time TV shows you success chances are, the true reasons behind the success story have been camouflaged and overshadowed by spicier distractions.

The story of silent people staring at computer screen for hours and typing away silently day after day for weeks, months or years, doesn't make a best selling novel or a movie that tops the charts or good television.

But it does make a successful business.

And sometimes, history.

posted on Thursday, March 01, 2012 7:50:52 PM UTC  #    Comments [0] Trackback
Posted on: Monday, February 27, 2012

When equals in talents and contributing capability get together they get down to business.

The question of doing elaborate agreements, putting things down on paper, getting signatures on the dotted lines, doesn't come up. No lies, no complicated contracts.

The entire focus is on building art, shipping stuff and at times, even changing the world. Not on writing CYA documents or haggling about who gets an extra five percent on profits.

Every time you hear excessive stress on agreements or documents even before you've started something gorgeous it is often a sign of insecurity.

Or an indication that one or more (or all) parties are incompetent.

I am not saying every agreement is a sign of incompetence but if you can connect on a shared cause that is larger than pettiness, you'll see magic.

People working for free to get the project live, people contributing in open source projects they like, entrepreneurs putting in personal money to keep the business alive, developers responding to support requests on forums.

Why?

Because all parties are competent. All parties are just as capable of making it on their own. All parties don't have insecurities about being diddled out of a deal.

Or maybe, its because everyone understands, that it isn't a deal that they are working on.

It's a dream.

And that's fundamentally different.

posted on Monday, February 27, 2012 5:46:01 PM UTC  #    Comments [0] Trackback
Posted on: Tuesday, November 15, 2011

Famous dialogs from Godfather, which is one of my all time favorite books and movies, form the foundations of business and management.

Take for instance this dialog for example spoken by the Drug Mafia, Sollozzo:

''I don't like violence, Tom. I'm a businessman. Blood is expensive.''

Taking the crime aspect of it out of the statement, the point, is a compelling one: when you grow, you give up stuff.

The aspect of giving stuff up as you grow holds true in virtually anything you do, particularly management and leadership.

Grow as a leader and you end up giving up stuff like:

  1. Drama (No shouting or public intimidation even if you are on the right side of the situation).
  2. Power (No use of power to make them them work late or to do that classic "push").
  3. Politics (No bitching. No whining).
  4. Insecurities (No information hoarding. No blind copied emails, no blind forwards, no keeping records of chat conversations and then forwarding them to irrelevant people. No randomly including new people in email trails to embarrass the ones who started it.)

The list of stuff you need to give up in order to lead with conviction is long but the point is short and simple:

If you want to lead you need to give up on your pettiness and believe in a cause that's larger than you.

I am not talking morals, ethics, emotional maturity or general goodness here.

What I am talking about is simple *economics* of leadership.

Take the godfather dialog for instance, translate it to the context of leadership and it will quiet literally translate to:

''We don't like pettiness. Pettiness is expensive.''

Like it or not, if your organization or team wants to indulge in meaningful leadership people need to drop their pettiness.

And you know it has to start with you.

posted on Tuesday, November 15, 2011 9:04:08 PM UTC  #    Comments [0] Trackback
Posted on: Thursday, October 20, 2011

Ted Dziuba's post on the pain associated with cloud based virtualization and how we continue to live with the pain even after Amazon service degradation bludgeons Reddit to death every few weeks is a must read for anyone who has hosted anything on cloud based virtual servers.

Ted talks about the general issue of promises being made around cloud based services and virtualization. He explains:

Amazon EC2 has a stated service level agreement of 99.95% uptime, yearly. As of right now, EC2's uptime is 99.23%, well below the SLA. Since computer programmers like to take a pathologically literal interpretation of the law and contracts, they usually don't understand the reality of such matters.

"But, but, EC2 is violating their SLA! That can't happen!"
"It just did."
"But, but...Segmentation Fault (core dumped)"

The trouble with SLAs is that shit happens is not yet in the vernacular of modern jurisprudence. You should never try to compare hosts based on SLA, compare them based on how they respond to downtime, because it will happen everywhere you go, without fail. For example, the machine that is serving you this web page is a physical box hosted by SoftLayer at a data center in Seattle. Last week, I had about an hour worth of downtime because of some networking problems in their data center. Whatever, like I said, shit happens. What I'm really looking for is communication. I logged a ticket with support, and in six minutes they updated me about the situation, how widespread it was, and an ETA on the fix. The tech also asked if there was anything else he could do for me. They restored connectivity quickly, but did not keep me in the dark about what was going on.

Try that with Amazon. There's a thread on the AWS forum where some genius decided to host safety critical software on EC2, and can't get his data up. The thread was posted on Friday, it's now Saturday, and with Sunday coming afterward, I'm pretty sure that nobody whose safety depends on EC2 is looking' forward to the weekend. Now, maybe it's a troll, but not even a "we're working on it" reply?

The post has three highlights that every developer should be aware of before they deploy on a cloud based Virtual Machine:

  1. SLA's are totally meaningless.
  2. Databases aren't designed for magical logical writes. They are built under the assumption that there is an atomic way to commit data to a physical disk.
  3. Virtualization has it's uses and the only sensible criteria where you should use cloud based virtualization (in Ted's words) is, "if the machine eats shit, nothing of value will be lost".

Go read the post, even if you're just a blogger who doesn't have a million readers and are running your tiny little blog off an EC2 instance.

You need to read the post because what you know usually doesn't kill you. Having realistic expectations of downtime and data loss, doing sufficient backups, developing the ability to move to a different server and the ability to change your DNS host record at the snap of a finger doesn't hurt one bit.

Finished reading the post?

Good. Now go ahead use EC2 if meets your needs. I do it too.

As long as you're aware of the pain involved and as long as you have a switch to flip when the pain gets out of hand, we're good.

posted on Thursday, October 20, 2011 5:27:24 PM UTC  #    Comments [0] Trackback
Posted on: Wednesday, October 19, 2011

There is always an unfair side of things that happen in life.

"I was not given sufficient resources!"

"I was not given sufficient time!"

"I didn't have the money to fund an idea that I had!"

"I was born in the wrong country!"

"The economy crashed in the wrong time!"

"The markets are going through a bad recession!"

Look back and you might see how unfair life has been to you, your business, your career or your organization.

What's amusing however, is that "unfair", is often an opportunity to do something that you wouldn't have done otherwise.

An opportunity for larger than life solutions and stories to come into existence.

Of course when you see things that way, everything changes.

Suddenly, there are no excuses and nothing to bitch about.

Now what?

posted on Wednesday, October 19, 2011 6:56:14 AM UTC  #    Comments [0] Trackback
Posted on: Friday, September 30, 2011

We are creatures of acceptance. It is why we smile at people on the road. It is why we make friend, connect to our colleagues at work and build stuff.

Like it or not, acceptance is probably one of our fundamental needs. It is as real as food, water, survival and reproduction.

There are two different ways of seeking acceptance though.

Compliance is when a large group (the society, relatives, an organization, a body of professionals, customers) tells you what they need from you. You sacrifice parts of your personality, your gut, your desires, your vision and you give them exactly what they want. In return the group grants you acceptance. Only as long as you continue to comply.

Standing out is another way of seeking acceptance. Standing out is saying, "Sorry! I don't have what you want from me. But look what I've got here!" And then wowing them with your talents, your personality, your gut, your desires, your vision, your way of doing it, your approach to solving a problem or your product.

In the short term, standing out attracts more rejections. Standing out is scary and lonely. In the short term it also seems risky and expensive. But in the long run, the kind of acceptance that you get by standing out is very different from the kind you get by compliance.

Standing out gets you acceptance from people who genuinely respond to your weirdness. Standing out gets you acceptance from people who share your core values. Standing out connects you to people who see your stuff and say "we totally get it! Give us more of just that!".

Standing out brings you in touch with the best of friends, the best of family, the best of colleagues, the best of customers.

Put simply, standing out brings you face to face with, your people

Your initial groups may not be large, but in the long run, the encouragement and the support you get from them makes standing out worth so much more than the price you pay for it.

The returns of course, aren't instant. It takes some time and patience and commitment and work to find genuine acceptance but if that is what you are seeking as an individual or as an organization, there is no reason to settle for less.

posted on Friday, September 30, 2011 7:33:57 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, September 18, 2011

Every programmer goes through a part of his life when he is at the most enthusiastic phase of his career.

You know exactly what I'm talking about. It's the "Of course we will work weekends even if we don't need to" phase. Typically happens in the first two years of their career for most programmers.

This is the time when they impress their bosses, bag promotions, score hikes and sometimes even develop deeper roots.

Then they invariably tend to get tired of trying to impress their managers.

Or they just realize that they have a life.

Or they go through phases in their personal life which start demanding more attention.

I've seen managers change opinions of individuals when this happens.

"She was amazing when she joined but she has totally lost that spark now. She's never going to be as good as she used to be".

When you say you are working with people who are incompetent what you often mean is you are working with highly competent people having bad days and instead of trying to help them you've given up on them.

When you've seen someone peak their career with your own eyes, you know exactly what they are capable of doing.

When you say they are incapable of reaching that peak again, you are not putting a hard limit on their capabilities. You're putting a hard limit on your leadership style instead.

Just a little something to think about.

posted on Sunday, September 18, 2011 8:48:53 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, September 11, 2011

My YouTube videos on Entity Framework have resulted in more heart warming comments than anything that I have ever done online. Even more than this blog.

For me the videos and the response they received were a solid validation about some things that I've always talked about.

  1. Social media (if you must call it that, I hate that term) isn't about broadcasting what you had for lunch or how depressed you are; because at the end of the day nobody cares about you.
  2. Social media is about providing serious service to the best of your ability. Service that has the potential of touching someone's life by helping them with a problem, teaching them something, entertaining them or inspiring them.
  3. Services that add genuine value aren't produced by someone tweeting about how sad they are. Genuine services that add value are built by slogging at something.
  4. Focus on building amazing stuff and stop worrying about your subscribers or audience. If you build it, they will come.

With everyone asking for a part 4 of the video I have gone ahead and uploaded that on you-tube as well.

(The volume on these videos is a little low so you might have to use headphone and crank up your volume to a high level).

Some weeks ago I said that I was going to talk less and ship more. While I continue to strive to do that I wish you just the same. Every tweet, every post, every facebook status update, every you tube video that you publish is your chance to indulge in the act of adding value and ultimately changing the world.

Publish small. Publish consistently. Publish with others in mind. Publish the best of you even when you are publishing for fun. Publish responsibly.

I wish you good luck.

posted on Sunday, September 11, 2011 9:38:34 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, September 04, 2011

Jason Fried describes usage of small yet powerful products built by 37Signals in Fortune 500 companies.

He explains how 37Signals with it's stack is starting to sneak in on the fortune 500 organizations:

We’ve always been about the Fortune 5,000,000 – the small businesses of the world. The mom and pops, the freelancers, the small shops, and the small businesses with fewer than 10 people are our bread and butter.

However, recently we’ve been seeing more emails and signups from people who work at bigger companies and organizations. Lots of governmental agencies are showing up on our customer radar, too.

So about a week ago we dug into the data and discovered some interesting stats:

Basecamp is being used at…

  1. 35 of the Fortune 50
  2. 68 of the Fortune 100
  3. 321 of the Fortune 500

Highrise is being used at…

  1. 23 of the Fortune 50
  2. 41 of the Fortune 100
  3. 127 of the Fortune 500

Remember, we don’t have any salespeople here, so just about all of these signups are self-service/self-discovery or through word of mouth referrals.

We often hear from folks inside these companies. They’re beyond frustrated with the software/solutions they’re supposed to use. So they turn to our products because they just plain work. Sometimes they expense them, but often it seems a team or department head just pays out of their own pocket. The cost is insignificant compared to the productivity they receive in return.

We salute these insurgents!

While from a 37Signals perspective, the data seems to suggest that they're sneaking into the Fortune 500's, my interpretation of this data is that the fortune 500's are sneaking in on organizations like 37Signals and their products in an attempt to find out more about being effective with less. With companies running out of cash, VC's being super careful about funding, organizations trying to reduce cost and products or projects running out of free money, spending millions of dollars on projects and products is going to continue to get really difficult even for the biggest players out there. If the software industry was a party this far, with the changes in economy, the party is coming to an end. You can see that as a bad thing or a good thing.

Bad because it is going to get increasingly difficult to sell products worth millions. Sales cycles are going to get that much more complex and the fortune 500s are going to be that much more paranoid about spending millions and millions of dollars on your offering.

Good because the tools of guerilla entrepreneurship are out there for anyone who cares to use them. Use them wisely to serve the fortune five million. When these fortune five million flock to you, so will the fortune five hundred.

The take away is simple, build with passion and ethics. Build to serve and add value. Don't worry about the fortune 500 and focus on your craft because if you do it well, they might eventually sneak up on you.

posted on Sunday, September 04, 2011 9:22:08 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, August 28, 2011

Tribal Leadership By Dave Logan, John King and Halee Fischer-Wright is an insight into some of the best cultures out there and how these cultures are formed over time.

It is also a study of evolution of the mind of a typical tribal leader and the transformation a product or a project into a cause or a calling.

The book breaks any culture into fundamentally five stages:

Stage #1: Undermining: The behavior often seen in street gangs where the members of the team are united by a negative thought (usually, "Life sucks") and are in alienated relationships with everyone outside of the team to an extent where they even see the rest of the world as opposition or competition. Inter team competition for power also exists within the team.

Stage #2: Apathetic Victim: After outgrowing stage one, the team starts seeing that life in general does not suck. The focus in this stage slowly moves from "Life sucks" to "my life sucks" resulting in a realization that things can be improved with time and effort. People in this stage often continue to see their own team and the world as competition.

Stage #3: Usually happens when a person fights the phase of getting bullied by his boss and masters a skill thereby becoming productive. In this stage as the person becomes effective he shifts from "my life sucks" to "I'm great (and they are not)" approach of thinking. If you find yourself taking credit for your teams work or bossing people around, or even "pushing" or bullying them to get more work done out of them you are in this stage. If you find yourself criticizing your team members you are in this stage. You are still competing with people in your team and see them as a threat to your progress and growth.

Stage #4: Is a stage of Tribal Pride and happens when you've played the stage 3 game for a long time, have won and have had a series of epiphanies which have given you the realization that stage three doesn't scale. You've also realized that the unrelenting quest of power and competition is holding you back from making a larger impact or spreading your cause. In this stage your focus slowly shifts from "I'm great" to "we're great". Your teams are self sufficient and information is flowing smoothly within your team. You are no longer competing with your own team and have moved to competing with other organizations.

Stage #5: Is a point of time in your life where you finally get over the concept of competing with others and bump into innocent wonderment. When a medicine company stops competing with other medicine companies and starts competing with diseases. A stage where the entire company is driven by a cause that is larger than life. In this stage your focus slowly shits from "we're great" to "life is great!". You work because you experience the wonderment of a baby.

The division of organizations today more or less looks like this:

What the book does not explicitly state but makes very evident if you read between the lines is that all of your work life is a journey from "life sucks" to "life is great". What is rather tragic if you notice the graph above, is that most organizations and leaders are stuck in the "I'm great" stage. Only about 2% of the organizations and individuals manage to experience true wonderment of a toddler or a baby.

The biggest barrier to reaching wonderment is getting stuck at stage 3 where you are constantly busy portraying how amazing you are. Managers controlling who sends out emails and to whom, leaders hording information because they believe information is power, team leads constantly criticizing their own teams and teams constantly stepping on each others toes for their next promotion.

Stage 3 is important because it makes your stronger, but once you have lived it, your goal should be to grow out of it and move on to stage 4 and eventually to stage 5 where you experience true wonderment in work. A stage where are making a dent in your universe and the universe of people around you.

Which stage of leadership do you stand in?

Before you answer that question however, keep in mind that one of the most prominent features of stage 3 leaders is that they think of themselves as being on stage 4.

Go get the book (or download the free Audio book) and do yourself a favor by reading it. You might find yourself nodding your head in approval. You might even find yourself thinking about the times when you were fighting for growth and power. You might find yourself reflecting on how stupid you were. That or you might have to stand face to face with your deepest insecurities and admit you are a level 3 leader. Either ways, it is time for some serious soul searching if you want to eventually want to live the life of honest wonderment.

posted on Sunday, August 28, 2011 8:42:17 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, August 21, 2011

The book, Delivering Happiness by Zappos CEO, Tony Shieh is moving on more fronts than one for anyone who has ever tried to work on building a team, a product, a business or an organization. The book is an insight into Tony's mind and his core values which continue to drive Zappos towards success.

But what is even more fascinating about the book is the openness with which it addresses and describes the fears of the early entrepreneurs or anyone who has ever tried to walk a different path.

Tony tells the tale of his quitting Oracle to chase a dream of starting his own organization. The story is fascinating because it provides a chilling account of the brutal reality of walking a different path and at the same time reassuring because of the way it ends. Tony tells the story with a remarkable blend of facts and emotions:

As it turned out, the adventure we were waiting for to happen to us didn't end up happening on its own. We ended up sitting around in our apartment, occasionally doing some Web design work, and going out every once in a while to try to drum up some more sales.

By the end of the first week, it dawned on me that neither of us was actually passionate about doing Web design work. We loved  the idea of owning and running our own business, but the reality ended up being a lot less fun than the fantasy.

My parents were not exactly thrilled that I’d quit my job at Oracle without a real plan for what to do next. When I told my dad that Sanjay and I were planning on running a Web design business, he told me that it didn’t really sound like that could ever become a big-enough business to be meaningful.  And now, one week into it, both Sanjay and I were starting to wonder if we’d made the right decision to leave Oracle. The next few weeks were tough and somewhat depressing. We started to spend most of our time just surfing the Web to combat the boredom and to keep ourselves entertained.

Watching Sanjay go into the coat closet to nap there in the middle of the day was only sort of funny the first time. We were starting to get a bit stir-crazy.

Luckily, we both had enough savings from the jobs we had in college that we didn’t need to worry about whether we would be able to pay the rent for the rest of the year. We didn’t know what we wanted to do, but we had learned what we didn’t want to do. We didn’t want to work for Oracle. We didn’t want to do any more Web design work. We didn’t want to make any more sales calls. And we didn’t want to be bored out of our minds. So we spent our days and nights trying to figure out the next great Internet business idea, but we really couldn’t come up with anything that sounded good.

One weekend, out of sheer boredom, we decided to do some computer programming to test out an idea for something we initially called the Internet Link Exchange (ILE), which we eventually renamed to just LinkExchange.

What Tony and Sanjay had stumbled upon out of sheer boredom, would later be acquired by Microsoft for 265 million dollars. On one hand the book describes the Zappos values and culture and on the other it also has stories which form  a constant roller costar ride of up's and down's in Tony's life where on multiple occasions Zappos was inches away from getting wound down because of lack of finances. From overcoming his fears of failure to selling his assets to keep Zappos afloat, the book is not just an insight into Tony's mind but and insight into why entrepreneurs and developers build organizations and products.

More often than not, artists and builders don't work on building stuff just for the profits associated with building stuff. They build stuff because they have an unstoppable itch that they have to scratch. The itch of delivering happiness.

posted on Sunday, August 21, 2011 8:59:15 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, August 14, 2011

The television teaches you stereotypes of fun. The television teaches you that entertainment is junk that gets thrown at you by media companies which you learn how to enjoy over time.

Television teaches you to pick from a couple of hundred channels and then just hope that your channel is playing something you are truly interested in. If not, television teaches you to settle for what you get.

Television is junk food for your mind.

Television is about learning to enjoy wandering generality instead aiming for of a meaningful specific.

Go on. Keep the batteries just twenty seconds away from immediate reach and tweak your brain to seek other constructive meaningful forms of entertainment.

Why?

Because Television, quiet literally, is one of the biggest metaphors out there today that actually represents "the box" and your job is to think outside it.

posted on Sunday, August 14, 2011 7:36:36 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, August 07, 2011

With iPhone, blackberry, android and phone 7 one dollar applications are changing the way businesses did business.

It is easier than ever to be a guerilla business. You are suddenly depending on low costs and high volumes to keep you going.

In this market, what happens when we download your four dollar application (a little over a cup of coffee) and run into trouble.

When we walk into a coffee joint, pay four dollars for a cup of coffee and end up not liking it, we twitch our eye brows and forget the bad experience with a couple of passing comments.

But what happens when as users, we expect you to support us for a product that is priced at the range of a cup of coffee and doesn't do what we expected it to do?

This is when deep down inside, we really don't expect you to wow us with quick responses. But then this is also your chance to do just that. After all even the best coffee shops are the ones that listen.

If you are going to be the next software development coffee shop around the block, be the one with a friendly guy who greets you with a smile and listens when you don't like his (or her) coffee.

We've come full circle and the rules of making your customers happy have not changed all that much.

Are you building the next one dollar application? That is no excuse for lousy customer support. There was never a reason to not listen, even when all you were running was a coffee shop around the block.

We are calling your bluff.

Now go, surprise us.

posted on Sunday, August 07, 2011 8:11:36 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, July 31, 2011

Who's driving the innovation in your organization? How many products or projects are on the ideas of individual engineers?

I'm not talking about allowing programmers to introduce minor features in the product. I am talking about full blown products here which take sizable time and organizational support to build. Engineers building full blown applications like teams of artists painting amazing pictures based on their own visualization.

There are two benefits to letting your programmers drive innovation in your organization.

  1. They have built in bullshit busters in their heads and can sense what will sell and what wont.
  2. They tend to be much more intrinsically motivated when they are working on their own ideas.

Go jot down the list of products that your organization is offering. How many of these product ideas came from "management" Vs. how many of them emerged out of "engineering" teams?

If you are wondering why your engineers aren't creating products that kick some serious butt, or why your products miss that final "wow factor" your answer might lie in the fact that your engineers aren't intrinsically motivated.

When you see engineers as cogs who build ideas that others think of and occasionally make a few changes here and there, that is exactly how your engineers work.

When you see engineers as artists, they will paint awesome pictures that make a dent in the universe.

What do you see your engineers as?

Just a little something to think about.

posted on Sunday, July 31, 2011 9:46:21 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, July 24, 2011

After countless days of slogging J's team ships the build. In a few minutes of sending the email out they receive this response from their manager:

"The release notes had lots of typos. I had to fix those before sending the build out to the client. We need to be careful about running a spell-check before sending out project documentation."

When your team slogs for days shipping a build and all you can see are typos in the release notes you my friend are acting like a fully qualified asshole.

Here's a free advice if you want to get better at working with geeks: Open Microsoft word, fix the damn typos, don't bitch about them, thank the team for their hard work and move on.

Most managers cannot resist the temptation of whining about small mistakes which they can easily fix themselves in no time.

Reasons why most managers say they "have to" whine:

  1. People need to know about these mistakes so that they don't make them the next time.
  2. People need to be trained so that they don't always depend on the manager to do last minute fixes.

Reasons why most managers really whine:

  1. Managers are inherently good at advertising work. That is a huge part of what they do for a living. When it's their own work, expect the advertisement to be louder than ever.
  2. Most managers have a complex about not being productive enough OR not contributing enough. "I was able to find an issue and fix it! MYSELF! I finally showed those pesky developers that even I can contribute!" – this opportunity is often too tempting for most managers to let go.

Success breeds success and while it is OK to point out mistakes objectively, when you give out the vibe that says "you have failed me but that’s okay, I fixed it anyway" on every small mistake your team makes, you are diminishing their chances of success in the long run.

Acknowledge success, stop discouraging people by focusing on their mistakes and start motivating them by focusing on their success.  Even if you had to fix their mistakes or provide cover fire to a team worthy of it, in most cases, they really don’t need to know about it. So stop bitching and do a little bit of clean up yourself.

Just saying.

posted on Sunday, July 24, 2011 8:21:09 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, July 17, 2011

"I am looking forward to join a Multinational with a larger employee strength and more structured process".

When 'R' says this in an interview, she hasn't even bothered to glean through our website to know that we don't believe in large teams and our process is lighter than most BDUF shops.

That makes our organization a misfit for her.

Since interview is a two way process where candidates should reject the organizations that don't fit their needs, would she like to end the interview immediately and reject our organization?

When asked this question, she reacts as if we just dropped a dead rat on the table and asked her to clean up the stinking carcass. Clearly, the interview isn't going well for her.

After some more probing a switch turns somewhere and she flips into a totally honest mode.

You can feel it. She stops lying and getting stuck. Now she describes her real reason for looking for a job.

A higher paycheck.

During the course of the interview we figure out that she is in fact underpaid and her reasons for an expectation for a higher salary are absolutely valid.

I am guessing that what had happened here was that she was 'mentored' and told to stay away from mentioning salary as a reason for quitting because that is a cliché.

When interviewing the only two rules that often work are honesty and openness.

In situations like the one 'R' was in, staying away from Cliché's is also a cliché.

If you genuinely believe that you are underpaid and if that is your sole reason for changing jobs, having the ability to stand up for it with honesty and openness doesn't make you sound bad. Lying or trying to make up reasons does.

When you are honest and open, you showcase yourself in an as-is condition.

If you can carry your true self without being ashamed or trying to hide who you are and what moves you, your chances of getting selected in a mature organization are that much higher. If you get rejected for who you are or something that you truly believe in, your chances of finding another organization where your core values are aligned with the organization's core values are that much higher.

Don't bitch in an interview. Don't whine. Don't cry. Don't keep constantly complaining.

At the same time If you are genuinely underpaid and you truly and deeply believe that you deserve a respectable salary, don't try to sugar coat the situation with random made up reasons for quitting which people tell you will 'sound good' during an interview.

Salary being the only reason for leaving is a scar on your face, but then depending on how you carry yourself, scars can also look good.

posted on Sunday, July 17, 2011 7:26:33 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, July 10, 2011

The nitpicking saga between J (real name withheld for obvious reasons) and his team lead had been on for months. Every small mistake J was making was being highlighted and all his contribution were not even being discussed.

J had been working late nights for a few weeks at his workplace.  On the last week of his project J having nothing on his plate decides to call it an early day and heads home at around 8:00 in evening.

The next day his technical lead escalates the issue of J not being proactive about his work. Leaving early when you are on a critical project is unacceptable.

Unable to understand what is going on, J tries to patch things up by having an open candid conversation with his team lead who isn't in office for the entire day.

At around 10:00 in the evening J sees his lead on IM and summons up enough courage to send him a message asking him if he was mad at J and if there is anything J could do to improve a sour professional relationship between them.

And the response from his team lead?

It goes like this: "Are you sending this message on a high? Are you drunk!?"

As J narrates this incident to me over a casual conversation some highlights emerge:

  1. In J's organization open candid one on one conversations are so rare and unheard of that nobody believes that is what you are trying to do even if you start an open conversation with your manager.
  2. In J's organization cases of IM flames by drunk employees to their managers are so common that most team leads see precisely that even when you are trying to have a perfectly healthy discussion that can bridge gaps.

Makes you wonder if the cases of drunk IM flaming that J's organization is so concerned about are really cases of drunk IM flaming or  just perfectly sane employees trying to summon up enough courage to have perfectly sane conversations over IM?

Wow! Talk about invisible gorillas!

posted on Sunday, July 10, 2011 10:20:38 AM UTC  #    Comments [0] Trackback
Posted on: Sunday, July 03, 2011

When you come face to face with monkeys in their natural habitat most animal experts will give you one advice. Do *not* smile at them.

Monkeys (and most other animals) interpret the display of teeth as an act of aggression.

Showing teeth is way of scaring the enemy before a monkey attacks.

Smile at a monkey and he will show you his teeth back. Keep smiling and you are instigating the monkey to strike.

Human beings on the other hand use smiles to connect to others and to make each other feel good.

Even though we share some behavior patterns with primates our reasons for smiling are very different than there. A simple lesson that most managers it seems need to be taught explicitly.

"No, No, No, No, there is nothing I can do about it. You need to finish this in the given timeline." - how many times have you seen your manager give that response with a stupid grin on his face.

Management Advice: This is not a time to be smiling.

The least you can offer as a manager in times like this is empathy. An inappropriate grin in situations like these is an indication that you still see a grin as an act of aggression or intimidation.

And no, developers don't like working with monkeys.

When you are leading teams, your smiles, your body language, your tone and a whole lot of other aspects are being judged implicitly and automatically by the people you work with.

So, if you are wondering why no one tells your about their quitting plans or why no one ever invites you to team parties, maybe that is because you give us that stupid grin when you should be empathizing with your developers.

Just saying.

posted on Sunday, July 03, 2011 9:50:49 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, June 26, 2011

He is detail oriented. He takes care of every single little detail while writing his code. He sees slightest of deviations between the design and the implementation. He is the kick ass alpha geek in the team.

Attention to detail is a major  plus in his professional life and that is a GOOD thing, till the time he starts leading a team as a technical manager.

Then before you know it, he is knit picking on how many days people in his team should be taking time off. Why do you need eight days for a vacation?

He is estimating how many man hours an engineer should take to get a task done because he himself could have done it in a day.

The same attention to detail that makes you an amazing engineer usually ends up making you an amazing asshole when you start managing people.

There are two lessons to learn from this. 1) Before you promote someone and give him a team to work with, measure their ability to detach themselves from the level of detail that they should not be bothered about. 2) When you are working as a technical manager most of the time your ability to trust others, empathize with their problems, helping them out when they are stuck and your ability to provide intrinsic motivation which makes people want to excel and do the right thing is much more important than your attention to every single insignificant piece of information floating around in your universe.

I'm not saying switching attention to detail is essentially always a bad thing. When you are a geek attention to detail comes naturally to you. But when you are managing teams sometimes "actively forgetting" that an Engineer said he was going to check in his code today but ended up taking one extra day to do an awesome job, is also equally important.

Just saying.

posted on Sunday, June 26, 2011 9:41:57 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, June 19, 2011

As programmers we spend countless hours getting thrilled by tweaking small things which have huge impact on the applications we build. You want to run the same application, with the same hardware and load, 10x faster? Put a kick ass programmer on the problem and give him all the time in the world. Chances are that he will come up with better code that takes lesser memory, lesser processing cycles and runs blazing fast. And he would have done it by tweaking small things here and there. Tweaking things to make them better is fine grained in our brain as a programmers. We cannot resist the temptation of tweaking things when we know that they are going to have a huge impact on the overall product.

Practitioners of positive psychology do just  the same kind of tweaking but with your brain which is why I find books on positive psychology hugely fascinating. Shawn Achor in his book the Happiness Advantage talks about understanding the tweaking the human mind to cultivate new good habits and to turn your resolutions of changes into success stories rather than stories of failures with a tragic end.

Shawn's premise is two fold. 1) That we are creatures of habit and habits are how our brains are wired to work. 2) we have limited amount of will power in our brain. He explains the first premise that we as human beings are bundles of habit:

In my mind, though, the greatest contribution William James made to the field of psychology is one that was a full century ahead of his time. Humans, James said, are biologically prone to habit, and it is because we are “mere bundles of habits” that we are able to automatically perform many of our daily tasks—from brushing our teeth first thing in the morning to setting the alarm before climbing into bed at night. It is precisely because habits are so automatic that we rarely stop and think about the enormous role they play in shaping our behavior, and in fact our lives.

After all, if we had to make a conscious choice about every little thing we did all day, we would likely be overwhelmed by breakfast. Take this morning as an example: I am guessing that you didn't wake up, walk into the bathroom, look quizzically into the mirror, and think to yourself, "Should I put on clothes today?" You didn’t have to debate the pros and cons.

You didn’t have to call on your reserves of will power. You just did it the same way you probably combed your hair, gulped your coffee, locked your front door, and so on. And, excepting the exhibitionists in the reading public, you did not have to remind yourself all day to keep these clothes on. It was not a struggle. It didn't deplete your reserves of energy or brainpower. It was second nature, automatic, a habit.

None of this seems particularly groundbreaking to us today. But what William James concluded was indeed crucial to our understanding of behavioral change. Given our natural tendency to act out of habit, James surmised, couldn’t the key to sustaining positive change be to turn each desired action into a habit, so that it would come automatically, without much effort, thought, or choice? As the Father of Modern Psychology so shrewdly advised, if we want to create lasting change, we should “make our nervous system our ally instead of our enemy.” Habits are like financial capital forming one today is an investment that will automatically give out returns for years to come.

Shawn also goes on to explains how our brain uses our practice and habits to form neural pathways which ultimately make us really good at an activity:

This is also how we become skilled at an activity with practice. For instance, the first time you try to juggle, the neural pathways involved are unused, and so the message travels slowly. The more time you spend juggling, the more these pathways get reinforced, so that on the eighth day of practice, the electrical currents are firing at a much more rapid pace. This is when you’ll notice that juggling comes easier, requires less concentration, and that you can do it faster. Eventually, you can be listening to music, chewing gum, and having a conversation with someone else, all while those three oranges are flying through the air. Juggling has become automatic, a habit, cemented in your brain by a solid new network of neural pathways.

Armed with this new knowledge Shawn sets out to form a new habit of playing Guitar every day and encounters a humongous failure.

I decided to take up the guitar once again, since I already owned one and knew that I enjoyed playing it. Because common wisdom has long proposed that it takes 21 days to make a habit, I decided to make a spreadsheet with 21 columns, tape it to my wall, and check off each day I played. By the end of the three weeks, I felt confident that (a) I would have a grid full of 21 check marks, (b) daily guitar playing would have become an automatic, established part of my life, (c) my playing would improve, and (d) I would be happier for it.

Three weeks later, I pulled the grid down in disgust. Staring up at four check marks followed by a whole lot of empty boxes was more discouragement and embarrassment than I needed. I had failed my own experiment, and worse, I was no closer to telling potential dates that I was a musician. Worse still, I was shocked, depressed even, at how quick I had been to give up. A positive psychologist should be better at following his own advice!  (Of course, the feelings of failure only deepen when you realize you’re now a depressed positive psychologist.) The guitar was sitting in the closet, a mere 20 seconds away, but I couldn't make myself take it out and play it. What had gone wrong? It turns out that the telling words here are make myself . Without realizing it, I had been fighting the wrong battle one I was bound to lose unless I changed my strategy.

This failure of course leads Shawn to a second realization that we as human beings have limited will power with us.

The point is that whether it’s a strict diet, a New Year ’s resolution, or an attempt at daily guitar practice, the reason so many of us have trouble sustaining change is because we try to rely on willpower. We think we can go from 0 to 60 in an instant,  changing or overturning ingrained life habits through the sheer force of will.

In one of many studies on the subject of willpower, Baumeister and his colleagues invited college students into their lab, instructing them not to eat anything for at least three hours prior to the experiment. Then he split them into three groups.

Group 1 was given a plate of chocolate chip cookies, which they were told not to eat, as well as a healthy plate of radishes which they were welcome to eat to their heart’s content. Group 2 was presented with the same two plates of cookies and radishes, but they were told they could eat off whichever plate they liked. Group 3 was given no food at all. After enduring these situations for a significant length of time, the three groups were then given a set of “simple” geometric puzzles to solve.

Note the quotes around simple. In truth, this was another one of psychology’s favorite tools: the unsolvable puzzle. As I learned the hard way through my Help the Elderly experience, psychology researchers love using impossible games to see how long participants will persevere at a task.

In this case, individuals in Groups 2 and 3 long outlasted those in Group 1, who quickly threw up their hands in defeat. Why? Because the students who had to use every ounce of their willpower to avoid eating the enticing chocolate chip cookies didn't have the willpower or mental energy left to struggle with a complex puzzle—even though avoiding cookies and persisting on a puzzle are seemingly completely unrelated.

The point of these experiments was to show that no matter how unrelated the tasks were, they all seemed to be tapping the same fuel source. As the researchers wrote, “many widely different forms of self-control draw on a common resource, or self-control strength, which is quite limited and hence can be depleted readily.” Put another way, our willpower weakens the more we use it.

Armed with this new knowledge of how we are creatures of habits and  how our will power weakens with time Shawn now decides to reduce the activation energy it takes to start something and experiments with his own mind to see how it reacts:

I thought back to that initial experiment. I had kept my guitar tucked away in the closet, out of sight and out of reach. It wasn’t far out of the way, of course (my apartment isn’t that big), but just those 20 seconds of extra effort it took to walk to the closet and pull out the guitar had proved to be a major deterrent. I had tried to overcome this barrier with willpower, but after only four days, my reserves were completely dried up. If I couldn’t use self-control to ingrain the habit, at least not for an extended period, I now wondered: What i f I could eliminate the amount of activation energy it took to get started?

Clearly, it was time for another experiment. I took the guitar out of the closet, bought a $2 guitar stand, and set it up in the middle of my living room. Nothing had changed except that now instead of being 20 seconds away, the guitar was in immediate reach. Three weeks later, I looked up at a habit grid with 21 proud check marks.

This is a profound discovery for anyone who has ever made a new years resolution and broken it in days. Anyone who has been on a diet regiment or anyone who has ever promised himself that he was going to get more effective starting next week but the next week never came.

The book has pages full of interesting advice on how you can reduce choices that bog you down and how you can make preemptive decisions way  in advance by changing defaults.

Planning on learning how to play an instrument? Just reduce the activation energy by having the instrument handy.

Planning on going to the gym every morning? Sleep in your gym clothes to reduce the activation energy of heading out the next morning.

Planning on quitting television? Take the guitar experiment described above. Flip it by taking the remote batteries out and keeping them in a closet twenty seconds away.

Planning on being more productive at work? Close your mail client and hide it's shortcut inside 4 levels of folders such that it takes you multiple clients to activate it.

The basic premise that Shawn works with is that we are creatures of habits with limited will power. So if you are trying to form a habit don't just rely on your will power. Use your brains creatively to reduce the activation energy to do something and once you do it for sometime it will automatically become a habit forming new neural pathways in your brain that will not even require any will power to keep doing it. So if you're often faced with a blank wall on how to start your day, why not just put the visual studio shortcut on your startup list and have your computer boot to open a project you should be starting your day with?

Once you have done that why not making starting anything else that much more difficult.

Do it long enough and then distractions like Facebook and Twitter would suddenly stop being distractions. They will eventually become tools of forming connections that you use wisely during limiting times and not addictively.

The experiments and the insights that Shawn provided in this book are huge. The real question you need to answer is, how are you going to use these insights in your life to become a better programmer and a better human being.

Go tweak your life and program yourself to pick up some good habits. I wish you good luck.

posted on Sunday, June 19, 2011 7:53:53 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, June 12, 2011

(And Why Most Programmers Don't Start Something New)

If you've landed with a safe job the excuses for not blogging or not starting a side project are numerous.

No one is going to read what I write so why blog? No one cares about what I build so why build? I don't get enough opportunities in my organization so I am out of shape. And the best of them all, I am just too busy to start anything.

The real answer as to why you don't start initiatives outside of your work life however, may be hidden in the experiment on dogs that Martin Seligman, now the father of positive psychology observed in his years as a graduate student. Shawn Achor talks about this experiment in a rather intriguing fashion in his book The Happiness Advantage. He explains:

To understand the psychology of failure and success in the modern business world, we need to step back briefly to the tail end of the Age of Aquarius. In the 1960s, Martin Seligman was not yet the founding father of positive psychology. He was only a lowly graduate student, studying the opposite of happiness in his university's laboratory.

Older researchers in Seligman's lab were doing some experiments with dogs, pairing noises, like a bell, with small shocks to see how the dogs would eventually react to the bell alone. Then after this conditioning was complete, the researchers would put each dog in a “shuttlebox,” a large box with two compartments, separated by a low wall. In one compartment, the dogs would get shocked, but on the other side they would be safe from shocks, and it was easy to jump over the wall.

The researchers predicted that once the dogs heard the bell, they would immediately jump into the safe half of the box so they could avoid the shock they knew would follow.

But that's not at all what happened. As Seligman now tells the story, he remembers walking into the lab one day and overhearing the older researchers complaining. "It' s the dogs," they lamented. "The dogs won't do anything. Something’ s wrong with them."

Before the experiment started, the dogs had been able to jump over the barriers just fine, but this time they were just lying there. While the researchers contemplated what seemed to be a failed experiment, Seligman realized the value of what they had just stumbled upon: They had accidentally taught the dogs to be helpless.

Earlier, the dogs had learned that once the bell rang, a shock was sure to follow, no matter what. So, now, in this new situation, they didn't try jumping to the safe half of the box because they believed there was nothing they could do to avoid the shock. Just like the workers at the Johannesburg construction company, they essentially figured, "why bother?"

A follow up experiment by Seligman talks about how this idea of learned helpless translates to offices and work environment of today. Shawn explains:

The fact is that in our modern, often overstressed business world, cubicles are the new shuttleboxes, and workers the new dogs. In fact, one study shows just how closely we humans resemble our canine counterparts.

Researchers took two groups of people into a room, turned on a loud noise, and then told them to figure out how to turn it off by pressing buttons on a panel. The first group tried every combination of buttons, but nothing worked to stop the noise. (Another example of devious psychologists at work!)

The second group, acting as a control, was given a panel of buttons that did successfully turn off the noise. Then both groups were given the same second task: They were put in a new room, the equivalent of a shuttlebox, and were once again treated to an obnoxious noise.

This time, both groups could easily stop the noise by simply moving a hand from one side to the other, just like the dogs could easily move to the other side of the box. The control group quickly figured this out and stopped the blare.

But the group that had first been exposed to a noise they couldn't stop now just let their hands lay there , not even bothering to move them or try to make the noise stop.

As one of the researchers said, "It was as if they’d learned they were helpless to turn off noise, so they didn't even try, even though everything else the time and place, all that had changed. They carried that noise-helplessness right through to the new experiment."

These experiments educate us that each one of us is vulnerable to learned helplessness. Understanding it, is the first step to avoiding it, both in your personal and professional life. 

So the next time you think of working on changing the culture within your organization, or starting a blog or taking up a side project during the weekend, or starting that product that you always wanted to start and there is a voice in your head which starts talking about those excuses or telling you how helpless, non-talented, busy or tied up you are, remember the helpless dogs.

Maybe (and I am just saying maybe) the real reason why you are not starting is that deep down inside you probably know that you're going to fail. The voice full of doubt is just your way of telling yourself, "why bother?".

Are you really prepared to fail early fail often or are you just letting your learned helplessness get the best of you? Just a little something to think about.

posted on Sunday, June 12, 2011 8:10:59 PM UTC  #    Comments [2] Trackback
Posted on: Sunday, June 05, 2011

PC and Mac arguments have existed since the beginning of the software development world. Zealots have spent countless decades arguing about who will rule the world, the PC or the Mac. Jokes about Windows and Mac have also existed for a long time. Videos of both Windows crashes and Mac crashes have been out there for years.

With a strong community of Zealots on both ends of the spectrum you're often left to wonder what the relationship between Bill Gates and Steve Jobs would be like. Arch enemies wanting to get each others organization destroyed like you see in movies? Not really.

In a series of videos on youtube (links provided at the end of the post) you see both Bill Gates and Steve Jobs on the same stage sharing an interview. The amazing thing about the videos is that they provide a deep insight the pragmatism that both these leaders of two rival organizations share.

The even more amazing thing about the videos is that you can see a strong unspoken respect for each other that both these individuals share. For example when asked to talk on one thing in Bill Gates that Steve Jobs admires Steve has this to say:

Bill built the first software company in the industry. I think he built a software company before anybody in our industry knew what a software company was, except for these guys and that was huge. That was really huge. And the business model they ended up pursuing turned out to be the one that worked really well for the industry.

Building a company is really hard and it requires your greatest persuasive abilities to hire the best people you can and keep them at your company and keep them working doing the best work of their lives and Bill's been able to stay with it for all these years.

Gates on the other hand has deep rooted respect for the contributions Steve Jobs has made to the industry. He explains:

Steve gave a speech once which is one of my favorites where he talked about, in a certain sense we build the products that we want to use ourselves so he is really pursued that with incredible taste and elegance that has had a huge impact on the industry and his ability to always come around and figure out where that next bet should be has been phenomenal. You know, Apple literally was failing when Steve went back and re-infused the innovation and the risk taking that have been phenomenal. So the industry has benefitted immensely from his work. We've both been lucky to be a part of it but I'd say he has contributed as much as anyone.

If you listen closely enough the interview is full of pragmatic moves these leaders and their organizations have taken in spite of their age old rivalry.

For example Jobs tells the story of how Apple seeks help from Microsoft in their early days.

Jobs interrupts Bill Gates in a fit of excitement and the words, "Let me tell this story!" and goes on to tell it in his classic story teller style:

Waz, my partner, the guy I started out with Steve Wozniak, brilliant brilliant guy. He writes this basic that is like the best basic on the planet. It does stuff that no other basic has ever done. You don't have to run it to find your error messages, it finds it for you when you type in stuff. It's perfect in every way. Except for one thing which is that it is just fixed point. It is not floating point. And so we're getting a lot of  input that people want this basic to be floating point and we're begging Waz, Please Please make this floating point and he never does it. And so Microsoft had this very popular floating point basic that we ended up going to them and saying "help".

To which Bill Gates adds:

It was thirty one thousand dollars for the floating point basic and I flew out to Apple; I spent two days there getting the cassettes. The Cassette tapes were the main way people stored things in those days. That was fun but I think the most fun is later when we worked together. The team that was assembled to do the Macintosh was a very committed team and there was an equivalent team on our side that got totally focused on this activity. And we really bet our future on the Macintosh being successful and then hopefully graphic interface in general being successful. First and foremost the thing that would popularize that would be the Macintosh. And we were working together and the schedules were uncertain, the quality was uncertain. And so we had made this bet that the paradigm shift would be graphics interface and particularly the Macintosh would make that happen.

The video shows how objectively and closely the two companies and their leaders worked to shape the industry and make it what it is today. When asked about what both would like to learn from each others Bill Gates is quick to respond and say "I'd give a lot to have Steve's taste". What Bill Gates is referring to is this video of a young Steve Jobs floating on YouTube where Jobs is seen ranting recklessly on Microsoft and why they have no taste in his early adamant days. The audience roars into a laughter at Bills Gates joke on Steve Jobs to which Gates adds:

(I'd give a lot to have Steve's taste) No, this is not a joke at all.... I think in terms of intuitive taste of both people and products. I mean we sat on Mac product reviews where there were questions about software choices, how things would be done that I viewed as an engineering question and that's just how my mind works and I would see Steve make the decision based on his sense of people and product that is even hard for me to explain. The way he does things is just different. And you know, I think it is magical.

The videos are an inspirational insight into a rich rivalry which is not just about brutal fights but also about helping each other in the times of trouble and making the most pragmatic decisions beneficial for the industry.

Steve Jobs for example tells his story of seeking help from Microsoft during his comeback where he  also talks about how descriptive and stupid the whole Apple is superior in everything or the whole Apple Vs Microsoft mindset is:

You know, Apple was in very serious trouble and what was really clear was that if the game was a zero some game where for Apple to win Microsoft had to loose then Apple was going to loose.

A lot of people's head were in that place at Apple and even in the customer base because Apple had invented a lot of this stuff and Microsoft was being successful and Apple wasn't and there was jealousy and there were just a lot of reasons for it that don't matter.

But the net result of it was that there were too many people at Apple and the Apple ecosystem playing the game of 'For Apple to win Microsoft has to loose' and it was clear that you didn't have to play that game. Because Apple wasn't going to be Microsoft. Apple didn't have to beat Microsoft. Apple had to remember who Apple was, because it had forgotten who Apple was. And so for me it was pretty essential to break that paradigm. And it was also important that Microsoft was the biggest software developer outside of Apple developing for the Mac.

So it was just crazy, what was happening in that time and apple was very weak and so I called Bill (Gates) up and we tried to patch things up.

The relationship between the Mac development team at Microsoft and Apple is a great relationship. It's one of our best developer relationships.

Then there are excellent displays of pragmatism on both sides. For example, Microsoft ordering Mac processors for their XBox 360 and Steve Jobs being realistic about the Apple market share. He explains:

We don't have a belief that the Mac is going to take 80% of the PC market. We become really happy when our market share goes up a point. And we love that. We work real hard at it.

By the time the interview ends both these Stalwarts come out sounding as not just rivals with deep respect for each others but friends who have fought just as many battles together as they have fought with each other.

The video is a good watch not just once but every time you find yourself bitching about either Windows or Macintosh. The videos act as a gentle reminder that real people who do real work and solve hard problems have equal level of respect for other people who do the same irrespective of the path they take.

On the other hand, those who do nothing, bitch or become Zealots and stupid fan boys who fail to see the downsides of the company or person they follow and continuously bitch about the other side.

So go out there, pick a platform you love working on. I don't care if you pick a Windows or a Mac. Just stop bitching about how bad the other side is, stop comparing the two and get down to doing some real work. Jokes or random criticism about the other platform are just not as funny as they used to be once. Besides, we are getting bored of these anyways. I am just saying.

And just in case you want to see the videos back to back here are the links:

Part 1 | Part 2 | Part 3 | Part 4 | Part 5 | Part 6 | Part 7 | Part 8 | Part 9 | Part 10 | Part 11.

posted on Sunday, June 05, 2011 6:16:30 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, May 21, 2011

Elite's documentary on YouTube (part 1 and part 2) is an inspirational look into the history of the video game industry and the history of one game that changed the world. Well, at-least the world of video games. Elite was a spark that set the world of video games on fire and sent it on a mind blowing accelerated evolutionary trip. 

 

If you ever played Pac-Man you were pretty much aware of what to expect from all other video games in the early eighties.

Every video game had the basic set of expectations. David Braben, the co-creator of Elite explains what these expectations were and expresses his frustrations with these rules:

There was an expectation that for example, a game would take 10 minutes to play through. There was an expectation that it would have three lives. There was an expectation that it would have a score. And all of these things had almost become written in stone; which is utterly ridiculous.

The founders of Elite challenged every expectation and dared to question the status quo. They decided  to question the premise on which big guys like Atari worked. David explains this in his interview:

I was very excited about 3d graphics even before I had a computer. Because I thought it can't be that hard. You know, as an arrogant teenager might do. But the received wisdom of that time was that you couldn't do it on a home computer.

We were possibly the first people to do what would now be called a big game. A game where the player has to put a lot of commitment into playing it as well as we to writing it.

But changing the world and making a dent in any universe isn't easy. It is a constant struggle against rules and constraints.

A measly 18k of usable memory on the BBC Micro meant that the programming duo would have to make custom changes to earn an additional 4k of usable memory to squeeze entire multi dimensional virtual universes into it.

Having limited usable memory meant that they would have to revert to innovative techniques like Fibonacci Formula to draw the universes and the movement of objects in these universes instead of storing these pieces in memory.

Lack of tools meant they the programming duo would have to draw the objects on graph paper and type in the numbers.

No error checking meant that they would have to debug the code line-by-line.

EMI's rejection letter to back them up based on the grounds that they were breaking every conventional rule meant that they would have to move to Acorn.

Running out of time meant squeezing in last minute changes like introducing a radar system two weeks before the release date.

For Acorn; the company that backed up the programming duo; backing a game that was changing the world of gaming meant that they would have to change their production; marketing; packaging and even their launch techniques.

The story has a happy ending with 150,000 copies of elite sold in UK itself; an incredible one copy for every BBC Micro that existed in the UK. Elite was the First Non-US game to not just get into the billboard charts but get to number one on it. Elite's story is a textbook example of a success story with lessons ranging from programming, marketing, venture funding, vision, leadership, dedication and success.

Here are the links to both parts of the documentary:

  1. Part 1.
  2. Part 2.

The videos are a must watch for anyone who is the process of building or marketing anything innovative. Elite was a game that inspired thousands of programmers to join the gaming industry and placed Britain on the map of game producing nations. It was the game that changed every rule of how games were built and what games were supposed to do. It changed the basics of how games were marketed and released. It might even be appropriate to say that it was a game that changed the world of gaming. To say the least Elite was an incredible game with many incredible lessons that will continue to inspire programmers for ages to come.

posted on Saturday, May 21, 2011 1:41:41 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, May 15, 2011

(Left Justification Vs. Justify Alignment & Facts About Text Justification Every Programmer And Designer Should Know)

When you look at the world from the eyes of programmer who cares about text alignment on the web, his own documents, his website and his applications, the whole of the human species can be broken down into these groups:

And If you don't care about your text-alignment all I can tell you is that you should. The basics are fairly straight forward and knowing them can make your output (blog posts, applications, web sites and articles) that much more sexier. How you align your text on your web pages and your blog has a bigger impact on your readers than you can think. So close your IDE's for sometime and invest just a small part of a couple of your days in reading a few posts on how text alignment works. This one is on using justified alignment in your articles, blog posts, applications and websites.

The idea for this post started when I sat down to revamp the design of this blog and was faced with a Hamlet like question that just held me by my collar and would not let go. The question was on this line:

To justify align or not; that is the question.

Turns out; that most information you can find on forums where this question has been asked is subjective. Someone comes in and says, "Yeah! You should justify everything. It's sooo freaking cool!" and then someone else responds with, "No Dude! Justification sucks!". There is very little objective data available out there and the information that is out there is spread across umpteen number of disconnected information sources like Wikipedia, hidden research papers and cryptic paid articles.   

The attempt here is to give you the basics about justification of text using one consolidated post so that you can state researches, experiments, facts and sources in meetings which are organized to decide if you should left align your text or justify align it and then you can end up sounding like a genius or a rock star or an alpha geek or a design guru! Well, not exactly, but then you can still use this information to improve your website, application, blog or other documents.

So read on.

Ready? Let's start with the basics first. The Kids Stuff. The stuff everyone knows and then we can build on that. So let's assume you are one of those guys (or girls) who doesn't give a rat's ass about justification and you don't even know that the two basic kinds of justifications that you can have are Left Justification and Justified Align. Here are their examples:

The left justification is also called the "Ragged Right" because the right end of each line doesn't align with the line above and under it. Put simply the right margin (where the lines end) is ragged. On the other hand if you look at the justified text example above the left and the right margins are perfect aligned. In documents or paragraphs that are justified aligned each line begins and ends at the exact same spot on the horizontal axis.

Designers dig justification because justification makes your articles look professional. Justification has had an aesthetic appeal to it and has been used in professional newspapers and magazines for years.

This is stuff you probably already know.

The process of justification looks fairly simple on the surface of it but if you scratch the surface and move a little deeper there are quiet a few moving parts which give it the sex appeal it has in the publishing world. Justification mostly  plays with spacing between words and between characters to align both margins.

You could spend hours studying Wikipedia links on the topic to see how it works or we can just do a quick typography 101 course right here to cover the basic concepts we need to move forward.

I am going to assume that you're a lazy dude who wants too be spoon fed in simple English so instead of linking to ten lengthy Wikipedia articles on typography we're going to do a quick Typography 101 digression right here and talk about the basic stuff that you need to know about typography in the context of text alignment. Then we will start talking about the intricacies of text justification. So; on to a quick typography 101 course.

Digital Typography 101 and the Stuff You Need To Understand Before Moving Ahead.

The world of digital typography primarily contains two kinds of fonts. Mono-space fonts and Proportional fonts. The Wikipedia article on the topic is here but the basic premise, in the context of justification, is that mono-spaced fonts give the same amount of space to each character in the font where else proportional fonts give each character in the font just the space it needs and no more. Here's a picture from Wikipedia that explains the concept:

See how the pink and blue boxes (which represent space each character takes) are of the same size in case of Mono-spaced character but their sizes vary in case of proportional characters? That's the basic difference between these two font types. Now a days, unless you're coding on your IDE or using the terminal window chances are that you are using proportional fonts because they just tend to look sexier than mono-space fonts and everyone seems to be moving over to proportional fonts. Proportional fonts and Mono-space fonts are the first piece of the puzzle that you need to understand in order to appreciate how the justification process truly works. Serif fonts and Sans Serif fonts are the other piece so let's talk about those.

The world of digital typography also has two basic kinds of fonts that you need to know about. The serifs and the sans serifs. Serifs are tiny strokes that you give to the loose ends of each letter to make them look sexier.

As you can see from the picture that I borrowed from Wikipedia, Serif fonts have these strokes which are shown in Red, Sans Serifs do not have these strokes. An easy way to remember this is the fact that "Sans" in French means "without" so Sans Serifs practically means without the serifs or without those sexy strokes at the end of each letter.

Back To Justification

Ok, so it's time to end that long typography 101 digression and get back to justification. Now that you are a little smarter and you know what monospaced and proportional fonts are and what Serifs are and what Sans Serif fonts are lets go deeper into some of the tricks that are used to increase the spacing between words and characters to get evenly aligned margins in justified documents.

Tracking And Kerning Algorithms

In justified text the application that gives you the justification feature needs to align the left and the right margins. In order to do that in some cases the application needs to increase the space between words and characters of a line to make the lines look broader than they already are and in some cases it needs to squeeze the spaces between the words and the characters to make the lines narrower than what they would be otherwise. The lines which are stretched to occupy more space than they would normally occupy are called loose lines and the lines which are squeezed to occupy less space than they would normally occupy are called tight lines.

Two techniques that the justification process uses heavily to create these loose lines and tight lines in order to align the margins are Tracking and Kerning. Tracking involves adding even volume of space between each character of a word to create a loose word or to create a loose line. Because Tracking only involves adding equal space between words it works on both Mono-spaced and Proportional fonts.

Kerning on the other hand increases and decreases space between proportional fonts based on multiple factors. This picture (again, from Wikipedia) illustrates the difference between Kerning and Tracking.

Kerning works on proportional fonts and it also uses a host of factors like whether a font has Serifs or not to bring the fonts closer to each other. Here's another picture from Wikipedia that explains this concept:

Notice how the serif's are brought over each other to decrease the spacing between two letters in the above picture. Of course you cannot have kerning on mono-spaced fonts because each charter has a fixed space it occupies. You can increase the space between words by adding extra empty characters (i.e. tracking) but with mono spaced you cannot do things like move a character juuuust a little bit to the left to align it's serif with it's previous fonts. Because mono spaced fonts give exactly the equal amount of space to each character funky arrangements of letters like that to make the overall output look sexier is just not allowed. That's why kerning only works on proportional fonts.

You can read the entire article on kerning but the point in this context, is that most browsers and word processors use their auto kerning algorithms to increase or reduce spaces between proportional fonts when you turn the justification of a paragraph to on. And justification in one word processor or browser may not be exactly same as justification in another word processor.

Ken Adams for example is a firm believer that the kerning algorithms of Microsoft Word suck and that you should never use justify align in Microsoft Word documents.

Long story short, the look of your justified text is going to be just as effective as the tracking and kerning algorithms of word processor, the browser or the reader where the user is going to read the content. That of course is the beginning of all the problems associated with justified text. Justification can create another problem which is often made worse by bad kerning and tracking implementations. The problem is spaces which align and stack right over each other. This problem is called "Rivers" by typographers.

Rivers

Another issue that digital Kerning and Tracking often produce is the problem of Rivers. When you increase space between all the words to align both sides of the margins the spaces in the middle of the words can often tend to align creating long stretches of white areas which make it difficult to read the entire paragraph. These white stretches are what are called Rivers in typography.

The above diagram shows some rivers in a word document with just a couple of paragraphs that I used earlier in the post to illustrate the difference between left aligned and justified aligned text. The rivers are marked in yellow. They get much worse when you are doing complex documents. Rivers makes reading documents and content that much harder especially for people with dyslexia. Rivers can be avoided by a typographic technique called Hyphenation.

Color And Hyphenators

The fundamental reason why most people are tempted to use the justification setting in their word processor when writing documents or in their CSS when blogging or writing HTML pages is because they have been seen books and magazines that have been justified. The tight look and the amazing visual appeal of justification in these books and magazines makes developers and budding designers believe that justification looks good just by it's inherent nature.

What people often forget is that most typographers who are responsible for publishing magazines and books don't just give attention to outline of the rectangle space which holds the content but they also pay a great deal of attention to the fonts and the evenness of space within the rectangle. In the world of typography this is called the color. Typographers go to great lengths to maintain the color of the document. One of the tricks they commonly use is referred to as Hyphenation. In fact H&J (Hyphenation and Justification) is the technique used while type setting most books and magazines.

In his excellent article on the topic of Justification and Hyphenation Richard Fink describes the process of hyphenation  using the example below:

Notice how the lines in the above paragraph could have been too tight or too loose to create rivers and how words have been broken up using hyphenation to avoid the problem.

Hyphenation is good when it is used in the print media but in most word processors and browsers hyphenation tends to have it's own set of problems. Most latest browsers out there support soft hyphenation. With soft hyphenation you give the browser a permission to insert a hyphen if the kerning, the size of the page, the content and the layout is going to result in lines which are too loose or too tight. Put simply, the browse has the permission to break a word with hyphens if the situation demands that the hyphenation be inserted.

The way to hard code this is using "­" HTML tag or using "&#173" HTML tag in the right place. So if you wanted to allow the browser to break the word "equal" after "e" you would write it as "e&#173qual".

Of course anticipating and hard coding every word for hyphenation is not the most practical of solutions so folks have been coming out word press plug-ins and Java-Script libraries for auto inserting the hyphens.

When you automatically insert hyphens to align your margins and to maintain high typographic color in the page you start running into issues pertaining to copy / paste. The hyphens (even soft ones) have their Unicode characters and when you copy content from a website that uses auto hyphenation script chances are that you might end up copying the hyphens along with the content. Similarly when you are searching for words which have been auto hyphenated you are left on your browser's ability to understand the soft hyphens and ignore them during the searches.

Richard's article on the topic is an excellent resource on Hyphenators and the hyphenation tools and scripts that are out there. If you haven't clicked the link already, you should. Once there spend some time there understanding hyphenation.

Richard highlights some of the annoyances with hyphenators and ends his article on an optimistic note:

The solutions to these annoyances lie squarely with browser makers. High-res displays like the iPhone Retina, convenient e-reading devices like the iPad, and web fonts have brought a new focus on web typography. Hyphenation and justification is an important and time honored technique. Hopefully the information here will help make it an option for onscreen reading sooner, rather than later.

These tragic reality of life right now is that that even though H&J (Hyphenate and Justify) is a time tested technique in the publishing world, most devices and browsers are yet to fully catch up with seamless automatic hyphenation support.

The basic esthetic appeal of justification attracts many designers and web content writers to it, but given the current set of problems is the esthetic aspect of justification even worth chasing? This question was answers by a set of very interesting surveys.

How The Human Mind Perceives Justified Text

Based on most research that has been conducted so far, even though justified text does have esthetic value it is not the most reader friendly alignments out there. The British Journal of Visual Impairment (PDF link) (Accessibility assistance for visually-impaired people in digital texts) covers a list of surveys which provide more specifics:

Harrison was unconvinced that larger spaces between letters, words and lines increased legibility (Harrison, 1980, cited in Davies, 1989). However, according to Gaster and Clark (1995), increased leading, or white space between lines of type, makes a document more readable for people with low vision. According to Arditi (1999a), spacing between lines of text should be at least 25 to 30 per cent of the point size. This is because many people with partial sight have difficulty finding the beginning of the next line while reading.

Additionally, letters that are too close together are difficult for partially-sighted readers (Gaster and Clark, 1995), especially those with central visual field  defects. Spacing needs to be wide between both letters and words (Arditi, 1999a; Gaster and Clark, 1995). Harrison thought that the most important
factor for children’s books was the unjustified line (i.e. the printer has not varied the space between the words to produce a straight margin down the righthand side of the page) (Harrison, 1980, cited in Davies, 1989). Unjustified text may be easier for poorer readers to understand because the uneven eye movements created in justified text can interrupt reading (Muncer et al., 1986).

David R. Thompson, a PHD student at the University of Texas at Austin and the president of SENSS Publications and Seminars, Inc, conducted another survey with 40 undergraduate students where these students read 12 text samples from randomized reading tests. The tests involved different simulations of magazine pages in four column formats. One of the conditions in the survey was the comparison between flush left and ragged right justifications. David describes the results on his tests in his paper (PDF Link):

In a justified (even left and right margins) format, the eye "knows" through repetition, how far it must travel to perceive a line of print. Thus, the justified format may minimize pauses in eye motion following backward eye movements, regressions, within a line of print (Bayle, 1942; Rayner & Pollatsek, 1989). This suggests that the longer the look, the longer the processing time (McConkie 1989).

By extension, flush left / ragged right margins may force the reader to process each line's end point and re-evaluate the distance of each sweep (Rayner & Pollatsek, 1989). These assessment strategies may require "extra" time to process information presented with flush left / ragged right margins (Glass & Holyoak, 1986).

The Graphic elements Model predicts that an increase in the amount of mental effort required for visual and spatial analysis of textual cues will result in enhanced memory for information derived from that input.

This by all means is an interesting result. Even if you were able to avoid all the inherent problems of justification, like issues with kerning algorithms and the river effect, justification might give faster reading speed on text but then you might end up with lower recall of the content. Put very simply your readers might be able to glance through your content very quickly but they might end up remembering less of your content than they would if it had a ragged right margin.

The "Improving Validity of Large-scale Tests: Universal Design and Student Performance" report by National Center on Educational Outcomes sums some of the above and a whole lot of other researches that have been done in this area. The observations are simple:

Staggered right margins are easier to see and scan than uniform or block style right justified margins (Arditi, 1999; Grise et al., 1982; Menlove & Hammond, 1998).

Justified text is more difficult to read than unjustified text – especially for poor readers (Gregory & Poulton, 1970; Zachrisson, 1965).

Justified text is also more disruptive for good readers (Muncer, Gorman, Gorman, & Bibel, 1986).

A flush left/ragged right margin is the most effective format for text memory. (Thompson, 1991).

Unjustified text may be easier for poorer readers to understand because the uneven eye movements created in justified text can interrupt reading (Gregory & Poulton, 1970; Hartley, 1985; Muncer, Gorman, Gorman, & Bibel, 1986; Schriver, 1997).

Justified lines require the distances between words to be varied. In very narrow columns, not only are there extra wide spaces between words, but also between letters within the words (Gregory & Poulton, 1970).

With all it's inherent complexities and problems both technical and comprehensive; text that is justified aligned continues to be something most digital publishers are so attached to that they cannot let go. People who love justified text are all around us. If I can honestly confess here, I am one of them. Which is why this blog was justified aligned for years. There is something to be said about the beauty of justified text and the science of it.

Having said that once you understand the problems and realities associated with content that is digitally justified using HTML and word processors; and the impact it has on readability and recall of your content, given the choice between ragged right and justified text, chances are that you would lean towards a simple ragged right alignment.

Stating that you should never use justified text might be an overkill but before you do use justification, understand how justification works, understand the problems associated with it and use it wisely. Of course, the folks who are justification zealots would tell you that if it's not justified it just doesn't look right, but as of now, if it's on the web and if it's justified, it probably just doesn't read right.

And it's not about how you do justification. It's about how justification works, the issues that surround it and the state of current technologies built to handle it. As of this writing, in most cases today, as far as online content is concerned, justification seems to be esthetic value in lieu of easy readability. Of course justification gives your text a professional looks but this is the online world, and if it is professional you should probably be working on changing it anyways.

posted on Sunday, May 15, 2011 9:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, May 08, 2011

Blogs are cool. Blogs can be awesome. Blogs allow you to participate in this amazing thing we otherwise refer to as the internet. The content from Blogs feeds Google, keeps it alive and helps it grow.

From a personal aspect; blogs are important because blogs allow you to continue jabbing and help you hone your writing talents; and we all know how important writing talents are; even if no-one reads what you write.

Seek blogging advice from anyone who has blogged for more than ten posts and the advice you’re going to get is: pick a schedule and live by that schedule.

It is the single best advice anyone can give a young and budding blogger.

It works; till the time it doesn’t work and then you need to tweak it.

Think about this advice in terms of plain old mathematics. It’s like this; you become a better writer by reading more and writing more and given that you are reading as much as the other person; if you are cranking out four articles a week your chances of getting better at the craft of writing are four times more than someone who cranks out one article a week. Right!?

Well, the statement is moooostly right.... for you.... if.... you are starting out a blog or want to get into the flow of writing consistently. A regular stream of blog posts on a well-established schedule gets you in the flow for writing.

Besides it makes life simple for the Google crawler and your readers because they know exactly how much content to expect from your blog and when to expect it.

It forces you to show up even on the most depressing of days.

Like I said, the advice of writing regular blog post works.

At-least till the time it works.

And then comes a point of time in your life when the advice stops working and you need to tweak your schedule.

Here are some reasons why you might end up tweaking your publishing schedule:

  1. You’ve done enough jabbing for a couple of years and now you want to move into deliberate practice of writing by producing articles, books or relatively longer essays which will need your concentrated effort for a week, sometimes more than a week, sometimes a month and sometimes even multiple months before you can publish them out to the world. Posting four posts every week might not be possible here.
  2. You’ve done enough writing about code and now you’re going to be writing even more awesome code or doing something life changing. A classic example of this being Jeff Atwood who is the primary proponent of the “one step success” for your blog which was blogging regularly. Jeff started Stack overflow (now called Stack exchange) and slowed down publishing posts on his own blog.

Like I said, the advice works and it has it's own benefits while it works.

Then you reach a point in your life when you realize that just jabbing is not taking you to the next level in practicing your craft. You realize that just doing a given number of posts a week isn't enough deliberate practice of your craft.

When you have that realization it is time for you to slow down and focus on what is most important to you.

I’ve been blogging about three posts a week for months now. I've been contemplating the idea of longer articles on topics I feel strongly about, working on the book I said I would be working on, trying out some serious humor and doing some serious bullshit busting.

With those intentions in mind I am going to relax my publishing schedule down from three posts a week to sometimes two and sometimes even just one post a week.  On any given day the writing I do is probably going to increase. The frequency of publishing however might slow down a little in the weeks to come.

What that means that while the quantity of the posts might go down the quality of the posts that you see here might shoot up.

These posts will be edited much more meticulously. Some of them might be long enough to warrant turning them in articles that you can download in PDF or Kindle formats. You might also continue to get a full blown eBook or Kindle book every few months.

In the fitness world they say that nobody ever gets stronger by doing the same exercise again and again.

In the world of neuroscience they say that nobody gets smarter by solving the same kind of math problems again and again.

Continuously publishing three posts a week was a commitment I made to myself for months and it was a commitment that taught me a lot of things. It has now become a part of my life.

Having said that however, I feel I have grown out of and it is now time to master other aspects of writing. Even if that means reducing the number of posts I publish every week.

Long story short, the blogging frequency of this blog ‘might’ go down from three posts a week to two and sometimes even one a week. But I will hopefully continue to show up without fail. Every week! Consistently. And with lesser number of posts and more effort the content is expected to get better.

Expect to see posts with more content, more research, more fun and more takeaways. Expect to see PDF or Kindle versions of articles and occasionally also expect to see some eBooks once or twice each year.

Now, if you are a young and budding blogger seeking advice on how you can become a better blogger, here’s my advice:

  1. Pick a schedule that you are comfortable with and stick to it!
  2. And Do NOT change your schedule frequently.

More often than not any temptation to change the schedule is out of hidden laziness and your lizard brain playing tricks with you so be very careful before you decide to change yours. And when you do reduce your frequency; make sure you double your efforts.

That by the way is EXACTLY what I intend on doing on this blog; so do keep reading.

posted on Sunday, May 08, 2011 8:29:27 PM UTC  #    Comments [0] Trackback
Posted on: Thursday, May 05, 2011

There is something to be said about saying something you believe in without feeling the need to defend it or argue for it. Controversial arguments are generally very interesting and hardly ever productive.

Most online flame wars (through email, facebook comments, twitter comments, blog comments etc.) work on the premise that person posting the last response wins. In most online flame wars, your decision of not replying is often considered synonymous to your not having a reply.

The online heckler often expects you to shout back to quiet him down. Once you do that, you have started a controversial argument and it doesn’t matter what the logical outcome of the controversial argument is, the heckler wins.

All a heckler needs is a lot of free time and the persistence to keep replying.

You cannot win this game if you play it by it's conventional premise.

But you have an option of not playing the game to begin with; or taking a decision of not replying even when you have a reply; or quitting the arguments in the middle even when you’re not the person with the last response.

Just say what you truly believe in. If that triggers an argument; make your points. Once you’ve made your points (or voluntarily chosen not to make them) leave the topic and the argument. Say something else. A brand new post. A brand new thought. A brand new idea.

The hecklers can continue heckling about what you said. They will eventually get tired and stop when they realize that you’ve already moved on to something else. After all, In the long run the hecklers and the critics just don’t matter as much as you think they do.

posted on Thursday, May 05, 2011 9:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, May 01, 2011

Hiring young and budding teams that can kick some serious ass has always been one of my life long passions; something I consider much more important than any process out there.

If you don't screen and pick people like the life of  your organization depends on it, you won't have an organization soon.

Jarka on the Project Management site of stack exchange has a question on "The most effective attractors and motivators for young highly skilled people".

My answer there pretty much condenses a lot of what I have talked about on this blog as far as hiring is concerned, in eight simple bullet points.

You can read the answer here.

If you are a young and budding entrepreneur or a budding manager these eight points should give you a head start at hiring and building teams that can kick some serious ass.

Here's wishing you good luck with attracting and motivating teams that kick some serious ass.

posted on Sunday, May 01, 2011 7:52:03 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, April 30, 2011

Every airline is like the other. Same ticketing, same announcements, similar good looking cheesy air hostesses and stewards who are busy smiling and getting you stuff you ultimately end up paying for.

The aviation industry is also the only industry that has your complete attention when you are flying.

Why not make most of that attention?

Why not build systems that allow people in the same plane to connect to each other?

Why not allow them to play video games on a network? You know who you are playing with by their seat numbers.

Why not have a separate channel with a live stream of the cockpit with someone from the crew providing explanations on the basics of what the pilots are doing which you can listen to on your head phones?

Why not have an on plane chat room where you can connect to crew members and passengers?

Why not let your cabin crew engage with customers, talk to them and collect first hand feedback about what they liked and disliked?

They say that you meet some of the most interesting people when you fly. 

Most airlines go out of their way to avoid that.

Procedures? Security? Safety? Cost? None of the ideas I talked about are expensive. None of these pose any threats.

Except of course a threat to the convention of what airlines companies are supposed to do: which is to take you from one place to another and treat you like very expensive and fragile cargo.

And that is exactly why most flights are boring; even for someone like me who enjoys flying.

posted on Saturday, April 30, 2011 9:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Thursday, April 28, 2011

The world of software development today is very different than what it was when we started programming. Back in those days if you asked a question like this one the so called Java experts would grill you, nail you and crucify you publicly on the forum. Those were the days of the purist.

Then; Microsoft happened.

Languages like GW Basic allowed the existence of the hobbyist programmers who would then move on to more serious languages like C / C++ master those and move on to MFC or Win32 API on VC++.

That; or these programmers would pick simpler and much more productive languages like Visual Basic.

Both paths that would later converge to a .NET language which would hugely just be a matter of preference, C# or Visual Basic.NET. Back then however most purist found it inconvincible that any business worth their salt would run a Microsoft Stack on their production servers. 

The purist of course; were wrong.

When you're a geek grinning at how stupid Visual Basic is or passing comments like "Oh but Ruby on Rails doesn't scale!" or when you are busy reminding someone on a forum how stupid his question was, what you often forget is that the survival and the success of languages (both human and programming) depends on the adaption they receive. It is eventually the community behind a language that builds or breaks a language. Something that a huge part of the Java community completely missed out on in the old days.

The Java community and the other communities of purists decided to keep the bar of entry high and look down on all who were not born with an out-of-the-box IQ that met their standards of intelligence.

The hobbyist programmers in those days were pretty much expected to forego their self respects and keep getting booted from forum to forum before they found the answers to the simplest of questions that someone could have helped them in ten minutes or they were expected to move to a simpler language with a vibrant community of similar hobbyist programmers where no question was stupid.

Back in those languages like Visual Basic which were easy to learn, easy to pick up, fun to work on and fairly productive created a whole community of hobbyist programmers who were smart, passionate about their art and were willing to go that extra mile to build successful applications. Yes these languages may have been responsible for creating programmers who cannot program but they also created passionate communities of programmers who would make big and small dents in the world of software development. What these programmers lacked in talent they made up in intensity.

Needless to say that these programmers and communities reciprocated back. As of now, the Microsoft developer communities are by far the richest, strongest, loudest and most fun loving communities out there.

Languages that evolve survive. While the purists were busy grinning about the fact that Microsoft was copying ideas from Java, the java language, which was hardly changing in years except for introduction of new API's in their JDK (there were hardly any changes to the core of the language itself), was running out of ideas to copy from. Microsoft of course was moving over to languages like Ruby to introduce ideas like Closures and Lambda expression right into the core of their own languages.

The idea was simple: keep your languages simple and do everything you could for your developer communities and to make their lives productive. In the process, if the purist shouted, bitched and whined, so be it.

This is not a Java Vs. C# blog post and I have no intentions of starting a never ending discussion controlled by Zealotry here but if you are a programmer one important lesson to take away from this rift is that you have a responsibility towards the language of choice that you use to make a living. Remember, the success (or even the existence) of the language you use in the long run depends on the community of programmers that program in it. And you are a part of that community. So go on and talk passionately about the language of your choice; make you tube videos on new features; blog about new tools around your development platform.

Stop being the anal purist who has no respect for starters. Stop giving us that stupid grins about how Linux is more reliable than windows; how Java is faster than C#; or how J2EE scales better than RoR because thanks to the ignorance and the arrogance of the purists, none of those statements are remotely true in most real life scenarios anymore.

The purists are dead. Long live the purists. Just don't end up being one of them.

Move over to a pragmatic side, try your level best to learn and respect all languages and when you see someone trying hard but asking questions which seem way too simple or even slightly stupid to you, treat the person with empathy.

That would be the biggest favor you as a developer would be extending to your developer community and the platform that you work on. The days of the technology purist are over so try practicing a little bit of humility the next time you are in a forum answering questions.

posted on Thursday, April 28, 2011 9:30:00 PM UTC  #    Comments [1] Trackback
Posted on: Sunday, April 24, 2011

Kole McRae of Office Buddha, talks about getting rid of 15 blogs that he owned:

Four months ago, I had 15 blogs. I had blogs about net neutrality, writing tips, technology news, and more. They were all things I was passionate about and loved writing them but one day I deleted them all.

All but one.

I didn’t back them up. I didn’t think twice about it. I simply clicked Delete and never thought about them again. Each one had an audience. Some of them even brought in a little money. But none of that mattered.

That day I discovered a simple truth about myself—a truth that expands to absolutely everyone. The idea was simple, which is kind of the beauty of it.

The idea that Kole is talking about works on these basic premises:

  1. The less you spread yourself the better you work - you have less time for each additional task that you take up, so focus on one thing and do it well. Dedication to a single cause is often better than many.
  2. Do one thing at a time - work on only one thing at a time and focus all your energies on that single thing. Once it meets your definition of complete move on to trying other things if you must. But keep the number of projects running on any given time to the lowest number possible.

Of course, the idea isn't just limited to your blogs or your side projects. Most young startups and mid-sized companies make this mistake. Go on and take a look at how many open projects your organization has right now.  Are you truly developing a Niche as an organization or jumping from one branch to another like a drunk monkey? More often than not, doing one thing and doing it really well will not kill you or your organization. The psychic weight of trying to do too many things at once and the desire to multitask both as an individual and an organization will.

How many products or projects do you have running in your organization? How many initiatives do you have running in your personal life? Maybe it's time to get rid of some of them and focus on the ones you really love working on. Deleting something, dropping something, stopping something or even putting something you started, on an indefinite hold is a really hard thing to do. It involves closing doors; something which we as human beings are not hardwired to do. But then, it's your only shot at being really good at something.

Go on. Pick a few stale projects in your work life or a few initiatives in your personal life and shut them down. You'll feel better and chances are you'll end up being much more happier and much more productive in the long run. I wish you good luck.

posted on Sunday, April 24, 2011 8:01:06 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, April 23, 2011

agameofinches

Al Pacino's Inspirational Speech from Any Given Sunday about the game of football and the game of life, is a life changer.

You know when you get old in life things get taken from you. That's, that's part of life. But, you only learn that when you start losing stuff. You find out that life is just a game of inches.

So is football. Because in either game life or football the margin for error is so small. I mean one half step too late or to early you don't quite make it. One half second too slow or too fast and you don't quite catch it.

The inches we need are everywhere around us.

They are in ever break of the game every minute, every second.

On this team, we fight for that inch On this team, we tear ourselves, and everyone around us to pieces for that inch. We CLAW with our finger nails for that inch. Cause we know when we add up all those inches that's going to make the FUCKING difference between WINNING and LOSING between LIVING and DYING.

I'll tell you this in any fight it is the guy who is willing to die  who is going to win that inch. And I know if I am going to have any life anymore it is because, I am still willing to fight, and die for that inch because that is what LIVING is. The six inches in front of your face.

Joel's take on building commercial software in similar:

Commercial software—the kind you sell to other people—is a game of inches.

Every day you make a tiny bit of progress. You make one thing just a smidgen better. You make the alarm clock default to 7:00am instead of 12:00 midnight. A tiny improvement that will barely benefit anyone. One inch.

There are thousands and tens of thousands of these tiny things.

It takes a mindset of constant criticism to find them. You have to reshape your mind until you're finding fault with everything. Your significant others go nuts. Your family wants to kill you. When you're walking to work and you see a driver do something stupid, it takes all your willpower to resist going up to the driver and explaining to him why he nearly killed that poor child in the wheelchair.

And as you fix more and more of these little details, as you polish and shape and shine and craft the little corners of your product, something magical happens. The inches add up to feet, the feet add up to yards, and the yards add up to miles. And you ship a truly great product. The kind of product that feels great, that works intuitively, that blows people away.

Michael Lopp calls writing a game of inches too:

Writing is a game of inches. No author I know sits down every morning in their home office and steadily produces three pages a day. I’m sure they’re out there, but these annoyingly efficient and profitable authors aren’t doing this on the side. They’re doing this because they’ve written enough to make it a career.

While the idea of writing books for a living is appealing, my impression is that if I stopped being a software engineering manager, my voice would quickly become an echo of how things used to be rather than how they are. Thanks, no.

You have time. In fact, you have lots of time. There will be weekends where all you will find is a paragraph. There will be a week where all of your progress will circle around finding precisely the right title for chapter 12.

In writing a book, you’re going to find all sorts of interesting ways to mentally beat yourself up. You’re going to consider new tools and different writing schedules. You’ll discover that inspiration can be encouraged, but never created. You’re going to find constructive ways to procrastinate and your friends are going to stop talking to you because all you talk about is that damned book.

You move an inch ahead when you decide to stop whining about how your job doesn't give you enough opportunities and you write just a few additional functions of code on your side project.

You move an inch ahead when you decide to skip that movie and write that blog post that you always wanted to write.

You move an inch ahead when you switch off the television and spend that one extra hour adding a couple of paragraphs to that book you are writing.

You move an inch ahead when you logout of online chat, facebook and twitter and read a book on how to get better at your craft.

You move an inch ahead when you decide to open the IDE and refractor just a little bit of code,  or open the word processor and edit a chapter of your book, on a depressing day where you thought you were not going to be able to do anything.

You move an inch when you reach out for a tiny tool that lets you practice your craft when you're in a meeting or in commute.

The inches are all around you and in the long run they are going to add up.

The hard question that you need to ask yourself is, have you given up to the television, the facebook, the twitter, and the countless excuses about your not making it or are you willing to work your ass off for those inches?

Just a little something to think about.

posted on Saturday, April 23, 2011 9:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, April 22, 2011

Of all the MBA's I've worked with I respect a handful of them and find the rest of the majority hugely amusing. If you've ever sat there and wondered what it is that those business schools out there really do to suck empathy and common sense out of people, you are in good company.

DilbertMBAFunnyStrip.jpg

David Heinemeier Hansson at 37ignals and the writer of RoR goes expresses his thoughts on MBA students gives wise advice to young and budding MBA students at Stanford:

Before you can even get started I think the most important thing for you to realize is that you have to unlearn your MBA. And I am treating MBA here as a sort of a general grab bag for business school management theories. I spent three years and Copenhagen business school and I would probably say that according to my estimations 96.7 percent of the time was completely wasted. It has NOTHING to do with what I actually do today and it has NO impact on what I actually work with everyday.

In fact, I came out slightly damaged. I came out with a head that had been soaking in management theory for three years and it was actually a little off. It was not very well suited for the real world of just building a product, pleasing customers and making profits as a business because that's really not what you learn and you have to just sort of readjust and recalibrate when you come out of school to that reality.

Nobody cares about a 20 page report on five forces. It just doesn't matter. There is none of your customers that's going to think, "Oh well did you do your five forces for this setup? No? Alright then we're not going to buy your product. So all of these tools that you've learnt are only for you. They are not going to impress anybody else when you start your own business. And what you learn is, when you are starting your own business.... and all businesses start small.... is that none of it is relevant.

The context of the talk resolves around fundamental flaw of business schools which are all about teaching students everything that is big and clunky. Big words, big reports and big documents, big plans, big clients, big projects, big teams.

When these students end up starting a business which has to start small or joining a small yet innovative organization they invariably find themselves fumble and going round and round in circles too proud to admit that they are fumbling.

David's advice is sound: before you start your own business, do yourself a favor and unlearn your MBA.

But then the real question you have to ask yourself is, do you see yourself running a small yet effective organization that makes a dent in the universe or do you see yourself working for the big blue?

If your answer is the former and if years of business school management theories often make you delusional and dysfunctional when it comes to running a small kickass profitable organization, why enroll to begin with?

Just a little something to think about.

posted on Friday, April 22, 2011 1:47:23 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, April 16, 2011

Software development is all about glamour. The smiling faces of Bill Gates and Steve Jobs bring countless programmers (both good and bad) to the field of software development. The same smiles of successful entrepreneurs have also inspired movies like the Social Network and Pirates of the Silicon Valley.

Every startup story that tells you how a young kid made a million dollars adds spice to the equation.

Glamour is a two sided sword because on one hand it motivates the competent and helps them continue practicing the craft of building software without quitting on the other hand it attracts programmers who cannot program to the software development world.

Any glamour based industry, Hollywood, Music Albums, Writing or Software development has an inherent problem. In these Industry it is easy to overlook the amount of effort that goes behind a success story.

In each one of these industries it is easy to be charmed by smiling faces of startup CEOs, actors, authors, Entrepreneurs and not look at the pain, the hard work, the risk and the mental turmoil those faces went through.

"All we need is an idea! Let's look for a Venture Capitalist! Let's find an Angel Investor! Let's spend time on Twitter and facebook all day long!"

And then when things don't work out blame it all on bad luck, not having the first mover advantage, lack of the vision on the part of the investor or worse.... on your development team.

Perfect recipes for failure. All of them.

The stories of colossal fuckups aren't new in the software development world but we don't hear them as attentively as we watch movies like The Social Network or Pirates of the Silicon Valley.

Your only chance of survival. The only one you have, is that you realize how the quest for glamour, acceptance, attention and power destroys lives. Lower your expectations. Focus on doing something that you love doing and please stop worrying about the outcomes of large scale adaption and success.

Separate out the cash part from the sex part, find pleasure in practicing the art with cheap tools and stop dreaming about being the next Mark Zugerberg.

No you're not going to make the next facebook. No amount of bullshitting and power points presentations will help you become a millionaire. Yes they don't give a shit about you and your product and yes, you are going to be the only user on your product, service, tool or blog for a very long time.

The sooner you realize that and the sooner you drop your expectations, open the IDE and start working on something you love the happier you will be.

I'm sorry I am breaking your cute little dreams, but I hope you realize that shattering them into tiny bits is your only chance at materializing them.

Here is wishing you good luck.

posted on Saturday, April 16, 2011 9:30:00 PM UTC  #    Comments [1] Trackback
Posted on: Wednesday, April 13, 2011

Windows live writer is a classic example of an awesome software hidden inside bad packaging that yells "influenced by marketing weasels" in every screen of its website and installer.

I relate to stories and in this case I am assuming the story runs like this:

  1. Someone at Microsoft has an idea about building an offline blog writer with preview feature.
  2. Microsoft manages to get a team of amazingly talented designers and developers who start working on the product.
  3. This team ships the first version of their product and gets a lot of appreciation from their user base.
  4. The marketing weasels at Microsoft wake up and decide to take charge so they ask the team to "tweak" the installer slightly.

As of this writing, the installer of live writer is bundled with a zillion other crappy pieces of software that you are never going to use. More than half the time the installer executable posted on the site is broken and getting live writer installed (especially if you have a bad internet connection) is a nightmare.

Enter Zoundry Raven.

Zoundry Raven is free, open source and has a feature which has been a primary selling point of windows live writer for all these months.

After you've gone through a basic wizard and have configured your blog account, you can ask this application to download your blog template which it can then use to give you a preview option which in turn allows you to see how your post will look after it is published without having to actually publish the post.

Zoundry Raven is not totally clean either and has some minor annoyances. For example:

  1. You have to manually turn on spelling checks when you start using the software. This is just a one time annoyance which makes sense since it needs to download the dictionary for your language. But then why don't the Zoundry guys just ship the English dictionary with the installer? That one beats the heck out of me.
  2. You have to click the spell check button once after you are done writing each post since there is no auto spell check like Live writer or word, but once you get used to the habit of doing clicking the spell check button once before you post is not as bad as it sounds when you hear it for the first time.
  3. You have to go into tools / preferences / affiliate links and turn the "Don't mess with my links" option to stop Zoundry guys from changing your amazon links to use their referral id and earn money from those links. A slightly shady way to make money I would think, primary because the installer did not seem to ask me if I want Zoundry Raven to change my link. A quick advice to the Zoundry guys: Either ask me upfront or turn off this feature by default.
  4. Zoundry Raven has a slightly longer startup time compared to live writer but given the fact that you are not going to be opening it up as frequently as notepad the slightly longer startup time does not have a major impact on your decisions to use this nice little application.

On the plus side, Zoundry Raven has the option of running as a portable application and carrying your profile (along with your posts) on a portable drive or moving them from one machine to another is rather easy.

Put simply, Zoundry Raven is a decently good alternative to Windows Live Writers (and a particularly easy option to get away from Live Writers slimy installer).

For me windows live writer is a classic example of how an amazing product team and an amazing product can loose adaption just by letting the marketing weasels control even a small aspect of the product (in this case the installation wizard). The strategy of bundling some of your lousiest products with some of your best products and hoping that your customers will start using the lousy ones because they need the good ones desperately almost never works in a free world. The people who claim that this approach worked for windows and internet explorer often forget that the internet explorer and windows bundle worked because both of these were amazing products and they complemented each other. Put simply, bundling lousy products with good ones don't help in adaption of your lousy products.

The best that these marketing gimmicks do is take away your existing users and your credibility as a company.

How many marketing weasels exist in your organization? How much power have you given them? Just a little something to think about. If you don't think about it, your competition will.

This post is written using Zoundry Raven and I am liking it.

I will continue to switch between Live writer and Zoundry Raven. As of now, I like what I see as far as Zoundry Raven is concerned.

posted on Wednesday, April 13, 2011 4:40:14 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, April 10, 2011

Assuming that you are like most people what do you think are the things that you will find most frustrating when you sit down to reflect about your life on your death bed.

I know the thought is slightly morbid, but humor me. Go on. Think about it.

What are you going to be sorry or sad or angry or depressed about when you are on your death bed?

No, it's not going to be your failures.

If you are a decently good human being, it's probably not going to be all the things you did.

Chances are, that you are going to be the most angry about the things that you wanted to do but did *not* do.

That opportunity to implement an idea that you chickened out of.

That opportunity to make friends that you missed out on.

That opportunity to make a difference in your life and the life of your loved ones that you did not work on.

That friend you did not make, that terrain you did not trek, that mountain you did not climb, that business you did not start....

All because you were too scared of playing hard and failing.

Of course you have limited resources, limited time, limited opportunities, limited talent, limited courage but if you can build a life where you can truly say you genuinely tried your level best, you will not just die happily but actually live happily and be much more effective as a person than you currently are.

Of course you might have a larger list of failures, but you will have no "could haves", "would haves", "should haves" in your life.

So the question to ask yourself every night is, did you give that personal or professional opportunity your level best? The answer has to be deeply honest.

And if the answer is yes, you are going to have a good nights sleep.... even if you failed.

At least, it will be one less thing to worry about when you are alive and one less thing to whine about when you are dying.

posted on Sunday, April 10, 2011 3:03:00 AM UTC  #    Comments [0] Trackback
Posted on: Saturday, April 09, 2011

This less than eight minute video from Jason Garfield has everything you need to learn juggling with three balls. It has:

  1. Education.
  2. Information.
  3. Humor.
  4. Inspiration.

Go look at the video. Click the link and go through it before you continue reading. I'll wait. Honest.

Back? Now of each one of you that saw the video we are going to have two groups of people, the ones who learn how to juggle three balls in the next one month and the ones who watch the video (maybe even try once), realize how hard juggling is and then get on with their life.

Juggling, pretty much like cycling, roller skating, ice skating, dancing, clicking good pictures or any hobby involving a serious skill for that matter has one attribute. It is incredibly frustrating when you start with it so it's easy to quit and find something simpler to do.

But if you keep working hard, it slowly becomes.... fun

The process of picking up hobbies of this sort has a name. It's called playing hard.

People who play hard at fun often play hard at work.

Besides, if you aren't playing hard, are you even playing? Or hiding from failures and spending your leisure time sheltering your fears and doing things which are safe and boring?

Are you just responding to friends on facebook or surfing channels on television aimlessly? Or are you playing hard and having rich meaningful fun? Just a little something to think about.

posted on Saturday, April 09, 2011 9:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, April 08, 2011

The best of managers often manage by building self sustaining teams.

The best of managers often manage by building self sustaining cultures which attract the best of the best and repel the whiners away.

The best of managers often manage by weaving stories which are true and remarkable and which spread within the corridors of the organization and nudge people to do the remarkable.

If there is one thing that is common in the best of the managers it is that their management styles are all about.... managing by not managing.

How do you manage your team, organization, project or product?

Just a little something to think about.

posted on Friday, April 08, 2011 9:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, April 03, 2011

Choosing Between Nothingness or Attempting To Change Lives.

"Nothing" is just about the riskiest thing you can do today.

Lack of resources or opportunities is not the biggest of your problems. Your personal fears are.

Everyone knows this. But most of us spend most of our time doing nothing and being afraid.

There is a funny sitcom you bump into while aimlessly surfing channels. That's nothingness.

A funny discussion on facebook. That's nothingness.

Tweeting about where you ate yesterday and how you hang out with friends. Nothingness.

A long phone conversation on politics with a friend. Some more of serious nothingness.

Why don't you drop nothingness and work on something meaningful that has a "potential" of changing lives? Maybe you do not do that because:

  1. Your lizard brain is afraid of failing?
  2. Your lizard brain is afraid of succeeding and things around you changing too rapidly?
  3. You are just way too comfortable doing nothing and your lizard brain doesn't want to give up that comfort?
  4. Nothingness gives you a temporary high and your fears allow you to feel sorry about yourself?

Failing, being made fun of, being doubted, being questioned, being criticized and being called a looser are all better than letting your fears get the best of you, hiding behind discussions, meaningless conversations on facebook and doing.... nothing.

Is facebook, television, conversations and endless arguments a back door for your fears or a hiding place for your lizard brain?

Be honest to yourself when you answer that question and if the answer is yes, try to drop these and work on something meaningful.

Next weekend you're going to have a choice between doing something meaningful and  aimlessly surfing your television.

Which one are you going to pick?

Just a little something to think about.

posted on Sunday, April 03, 2011 6:00:03 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, April 02, 2011

A Configuration For Getting In The Flow.

Is there a set of songs that you love listing to when you are coding?

Is there a particular corner of your home that triggers ideas when you sit down to write in that corner?

Is there a setting or a set of configurations in your life where all your depressions, anxieties, questions and fears are put aside?

A setting where you can focus on practicing your art?

If you answered no, why are you not working on creating these settings? Picking a soft song and listening to it every time you are distracted while coding. Picking a tiny corner of your home and moving there every time you want to write. Picking a small weapon and switching back to it every time you are unable to focus.

If you answered yes, what are you doing to increase the recurrence of these settings in your life.

After all, productivity often brings happiness. Why not work on building settings and configurations in your life that make you productive especially when you are distracted, depressed, scared or confused?

Just a little something to think about.

posted on Saturday, April 02, 2011 9:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, April 01, 2011

What's Your Contingency Plan?

Just a little something to think about from the trenches on the Cricket World Cup 2011 that India Just won.

What's your plan for the day when your star performer is unable to perform (falls sick, is not in the form, if going through a bad time or for any other reason)?

Build contingency into your project plans? Include buffer time into your project plans? Consider everyone a resource and do generic planning? Start Feeling insecure of your own team? Look for another hero?

That's what most managers and captains do.

Genuine managers and captains know that none of this is not contingency planning.

Having a team where every individual in your team can and often does morph into a star performer is usually your only human contingency plan.

If you don't have that all the other contingency that you provide for is just random documentation and a truck load of bullshit.

posted on Friday, April 01, 2011 9:30:00 AM UTC  #    Comments [0] Trackback
Posted on: Sunday, March 27, 2011

You know what a stale product is, right? We've all worked on them. Every product company has a portfolio of products where some products click and some gather dust on a beta build waiting for the first set of users to show up.

Even Microsoft had the classic Microsoft Bob. There is nothing wrong with having stale products started within your organization. Ideas have to be implemented before you can test their validity.

Having said that, your ability to identify a stale product early on, defines your awesomeness as an organization or a software development team.

Here are some rather simple guidelines which might help you figure out if the product you are working on a stale product or it needs more effort.

You know you are working on or dealing with a stale product when:

  1. None of the best people in your organization want to work on the product.
  2. When every potential client you show the product to says, "looks good" but doesn't sign up or really use the product everyday.
  3. When more than two really capable marketing guys who have sold other products in the past are unable get any customers for the product.
  4. When you have been working on a problem without any real user feedback for more than a couple of years.
  5. When you try eating your own dog food but other departments within your own organization find the dog food too yucky to eat or too hard to digest.
  6. When you find the team building more and more features in the product to impress the management or the marketing department instead of building features your customers will genuinely need.
  7. When you see managers discussing technology instead of what the product should do. "Search is going to be hot. Let's see if we can integrate lucent with this product".
  8. When you find your business analyst building fictional requirements based on common sense mixed with their fetish. "Let's integrate the advertising module with the time and expense module to keep a track of the time spent on advertising. Yeah! That's going to be so fu@#king cool! I bet no one out there has anything like that! That's what we should do in the next version."
  9. When your development team moves to auto pilot or hibernation and stops asking why they are building the features they are building.
  10. When the marketing department starts telling the development team that adding this one User Interface enhancement before next week will help them land their first customer. i.e. When you are continuously doing Demo Driven Development Cycles.
  11. When one quick sniff at the product tells you that it is rotting and stinking beyond repair and everyone is just busy ignoring the problems instead of getting down in the sewages and cleaning up the mess.

Anytime you start seeing more than half of the above in a single product, you are probably working on a stale product. You are better off quitting or surrendering. Quitting is not such a bad thing after all.

How do you spot dead projects in your organization?

How do you convince your management to move these projects to the graveyard?

Just a little something to think about and discuss.

posted on Sunday, March 27, 2011 7:07:07 PM UTC  #    Comments [0] Trackback
Posted on: Friday, March 25, 2011

Random Thoughts On Policies:

Someone 's downloading movies.... lets block the internet!

Someone 's coming in late and leaving early.... lets punch timecards!

Someone 's taking a CAB instead of a subway.... let's do a travel policy document!

Someone 's wearing T-Shirts instead of ties.... a policy on dress code!

The folks at 37 Signals have this to say about policies in their book Rework:

Don't scar on the first cut. The second something goes wrong, the natural tendency is to create a policy. "Someone's wearing shorts!? We need a dress code!" No, you don't. You just need to tell John not to wear shorts again. Policies are organizational scar tissue. They are codified overreactions to situations that are unlikely to happen again. They are collective punishment for the misdeeds of an individual. This is how bureaucracies are born. No one sets out to create a bureaucracy. They sneak up on companies slowly. They are created one policy--one scar--at a time. So don't scar on the first cut. Don't create a policy because one person did something wrong once. Policies are only meant for situations that come up over and over again.

The classic story of most policies is the same:

  1. Someone does something stupid.
  2. The organization over reacts and writes an equally stupid policy.

It's a classic two way street for turning intrinsic motivation into hard core ruthless professionalism.

It's like paying your mother in law for a gorgeous dinner and a surprise party she planned for you.

Between steps one and two are all other innocent clueless employees wondering what the f@#ck just happened and scrambling for information.

Every time you find yourself making a policy, your management and  recruitment teams have failed pathetically and hired a bunch of moronic sheep who need herding instead of hiring engineers.

That or your organization just doesn't know how to talk to people and communicate problems openly, candidly and act strongly in certain situations.

Either ways, it's a problem that no policy can solve in long run.

Most of your policies aren't going to fix anything. They're two way streets for stupidities involving a couple of stupid employees and equally stupid organizational reactions.

Replace every single rule or policy in your organization with an intrinsic social norm which appeals to the goodness of your people and you'll have an organization that changes the world.  And if you can't appeal to their goodness, why are they still working in your organization?

Just a little something to think about.

posted on Friday, March 25, 2011 7:18:09 PM UTC  #    Comments [1] Trackback
Posted on: Sunday, March 20, 2011

A fat obese middle aged American guy munching on his packet of potato chips and commenting on that pass in the soccer match.

A skinny under weight Indian munching on his packet of lays and describing how the batsman should have played the shot in the cricket match.

Both would probably collapse on field if asked to play just a single complete match of soccer with their kids.

Everyone loves sports. Everyone loves commenting on sports. Playing the sport, is a completely different ball game all together.

Talking like an expert is so much more easier than, "doing" something, even if the doing only involves just meeting the basic standards of a novice.

People love giving expert comments on everything that they see.

If you are a builder or a story teller, your job is to play the game, be a starter, learn the basics and then get better at it.

Can you do that? No? Then shut up and enjoy the game. And  stop giving us your expert opinions on everything.

Now, translate this analogy to managing teams, the advice you give them on how easy a task is, how much time something should take and the volume of code you yourself write. Get on the field. Hit a few shots. Score a few goals.

If not, stop scoring fouls and stop giving your expert opinions. Seriously.

posted on Sunday, March 20, 2011 7:33:52 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, March 19, 2011

Agility In Your Tools.

Your tools are a reflection of your passion for your art. The world conspires against you when you sit down to write a book.

The universe morphs into a perfect tool of distraction when you sit down to write code for your next side project.

You get a thousand random thoughts when you sit down to focus on one and write a blog post.

Or... You are just having one bad day after another.

Agility in your tools will keep you moving.

Cartoonist Hugh MacLeod draws behind business cards. The medium sets him free to practice his art anywhere. Everywhere. Scott Hanselman talks about the power of the Netbooks. Something I talked about as well. It is all about picking the right weapons and then becoming one with your weapons.

This post was written on my blackberry on a bad depressing day with a wet running nose, a dehydrated body and a tired mind. Some others are written on my phone when I am moving and feel inspired.

The point is that the world will not exactly mould itself to give you the best  possible environment to practice your art. Introduce agility in your tools so that you can continue jabbing and utilizing small windows of time to practice your art.

When you are in a guerilla warfare tanks and fighter planes are not effective.

Pick tools that let you practice your art, anywhere. Everywhere. And then use these tools, ruthlessly, to fight your own lizard brain.

I wish you good luck.

posted on Saturday, March 19, 2011 9:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, March 18, 2011

If you are a kick ass programmer, you're probably  working in one of the two modes:

  1. Working for your manager mode.
  2. Working for your product mode.

The difference seems trivial at the first glance. You are getting stuff done, right?

In the short run this hardly matters as long as your motivation factors are intrinsic (you're not working for a twenty percent hike, a promotion etc.).

In the long run however, working to get a pat on the back from your bosses often means that you are not giving your best to your project.

You want to show your manager you're working late hours so you work late hours.

You want to show your manager that you take all support requests even if they aren't critical so you rush to close  a non critical support ticket in the middle of the night.

And you're constantly worried about what your manager thinks about you.

In working long hours you are often not your productive best, in taking every single support ticket in the middle of the night you are just firefighting and not innovating enough, in worrying about what your manager thinks about you, you aren't saying no or expressing your opinions strongly and candidly enough.

To make things worse, you are probably burning out and very soon you are going to be sick of it.

Impressing your manager will not fuel your career for long term.

A larger purpose or cause, meaning, a quest for perfection, continuous improvement or even the relentless desire to ship something remarkable to your users or the world might be a way better long term fuel for motivation.

Now stop impressing your boss by saying yes to everything, working like a cog and slogging late nights just because you want to show your bosses how hard you worked. It's going to wear you out in the long run.

Put simply stop working for your manager and start working for your product and your organization.

Chances are you will be much more happier, much more innovative, much more creative and.... even much more productive.

posted on Friday, March 18, 2011 6:14:45 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, March 13, 2011

This writing is free form and non-structured. If you feel offended after reading this post, that's just ‘cause you have no sense of humor or the article is about you.... and you my friend.... are a chump!

If you find yourself laughing along for most of the article but you disagree to some parts of it, that's probably because you are basically a productive human being but you've been spending too much time with people who are the central point of this article. You know.... the chumps!

Calling bullshit when I see it is my idea of humor. It's a little dark. A little over the top.  And just about the only advice I can give you is don't take it too seriously.

You have been sufficiently warned. Continue reading at your own risk or close your browser window and leave now!

[This line is intentionally left blank.…to give you some think time to decide if you want to continue].

Still there?

Good!

Let's talk about Social Media.

But before we get to the social media bit, lets talk about the dudes who talk about Social Media with a straight face and claim to be "Social Media Experts".

I don't like the name Social Media Experts so for the purposes of this post we are going to give these folks a cute name.... the "Social Media Dudes" or SMDs. Or if you are like me and you like to keep things simple you can just call them... The Chumps!

In this article I am going to use these names interchangeably.

Most Self Proclaimed Social Media Experts = Social Media Dudes = SMDs = Chumps.

Got it? Clear? Sure? No Questions? Good! Let's move on.

Now that we have given a name to the SMDs, let start by talking about "Social Media".

I. What Is Social Media

"First There Was Print Media"

That's how the Chumps go about explaining Social Media when they talk about it. Most explanations about Social Media are on this line:

"Once upon a time there was the Print Media! Then there was Revolution and then came Online Media! And then there was the time for Revolution 2.0 and some really smart dude somewhere farted the term "Social Media" straight out of his B-hind and there was world peace…. And.... And now Social Media is there to Rule the world!"

It's a pretty compelling story. Especially if you are having a bad day and your mind is vulnerable to stupid memes and thought viruses. That's how all bad ideas that survive (including terrorism) spread. People are having bad days and they are confused, they listen to horse poop and before you know it they are doing stupid things like blowing themselves up. The "Social Media" virus is no different, albeit the story is compelling. You have to give them that.

Print Media > Online Media > Social Media.

That's the story Boy! Got that?

The only problem with this story is that I have been living on this same planet as most SMDs (a few of them are truly out of this world) and as far as I can say, there has never been such a thing as "Print Media".  Nope! Never! Ever! Not on this planet!

There were things which we read. You know, books and that stuff. But we didn't take all of them an club them into a stupid bucket called the Print Media.

I mean I am sure that some smart dude somewhere farted that term out of his B-hind too and then realized that no one cared about it and enough people twitched their noses and looked at him with knitted eye brows which embarrassed the shit out of this dude and he stopped using the term Print Media all together and the world was saved from an idea epidemic.  So yes, the concept of "Print Media" might have existed for a brief period of time.

But in the larger scheme of things as far as most of us were concerned, it wasn't even significant to be noticed by most people on this planet and therefore it is safe to assume that such a tern as Print Media never existed.

I'll tell you what did exist and still does and will continue to exist (at least for a very long time).

Since the renaissance and the invention of the printing press, we had News Papers and Magazines and Journals. Since then, a News Paper was a News Paper, a magazine was a magazine and a journal was… well… a journal! There was no such term as the "Print Media".  Nada! Zip! Nothing at all! Honest! I've been alive for more than 29 years! I've never heard the term "Print Media" to describe a freaking newspaper. Not until the SMDs started showing up on Twitter. Then suddenly I started hearing it everywhere and then it spread like a virus.

Now every time someone asks me "Hey Pops! What are you reading!" I feel the immediate urge to respond with "Oh! Nothing! Just Some Print Media!"

Every time a SMD says "First there was Print Media" with a straight face, he is just full of shit.

Oh and while we are at it, let's also talk about the "Online Media" and "Web 2.0" (though I suspect that is a completely different breed of chumps who deserve a blog post unto themselves, but let's give them just a little bit of love for now. Why should they feel completely left out and ignored? That's so not fair!).

Given that I am starting to feel bad about having to bash everyone today and being so blunt and direct and loud and realistic about things, let's get Tim Berners Lee to do the honors:

When asked if it's fair to say that the difference between the two might be fairly described as "Web 1.0 is about connecting computers, while Web 2.0 is about connecting people," Berners-Lee replied, "Totally not. Web 1.0 was all about connecting people. It was an interactive space, and I think Web 2.0 is of course a piece of jargon, nobody even knows what it means. If Web 2.0 for you is blogs and wikis, then that is people to people. But that was what the Web was supposed to be all along. And in fact, you know, this 'Web 2.0,' it means using the standards which have been produced by all these people working on Web 1.0." He's big on blogs and wikis, and has nothing but good things to say about AJAX, but Berners-Lee faults the term "Web 2.0" for lacking any coherent meaning.

Read between the lines?

What the founder of the world wide web is telling you, is that the Online Media Dudes (OMDs) and the Web 2.0 media dudes (OMDs 2.0) are…. Chumps too!

During the short span of time in which software development as we know it, has existed, there have been a truckload of jargons that have been farted out by a truckload of guys. Some dissipated into thin air. Others like these ones stuck around and continue to stink.

Pretty much like "Print Media", there is no "Online Media" or "Web 2.0" or "Social Media" that is going to change the world.

Of course, there were, and still are, websites, chat rooms, search engines and web applications (like forums, blogs etc.). A website was and still is a website, a chat room was and still is a chat room, a search engine was and still is a search engine, a forum was and still is a forum, a blog was a and still is a…. I think you get the idea!

The SMD's, OMDs and OMDs 2.0 were and still are all bullshitting!

And you are eating their bullshit (gobbling it up) especially if you use words like The Print Media, The Online Media, The Social Media and Web 2.0 with a straight face and claim to be an expert at this game.

We've done a bit of rambling on till now. Lets start getting to the specifics of my criticisms of "Social Media" and where Chumps are taking it.

II. Where Is The F@#king Value?

Somewhere in the mid 1940's there was a really smart lady called Ayn Rand who wrote a book about Architects called The Fountainhead where she used the term the "Second Handers". The chapter where the hero of the novel talks about this idea was a long rant, pretty much like this blog post, but I'll save you the trouble of reading over a thousand pages and cut it down for you.

Second Handers are parasites. People, who mutilate, violate, steal, twist and take credit for the innovators hard work.

The whole "Social Media" movement and the poop that you see getting posted about Social Media is a "second hander movement".

Seriously! Think about it. What do most Social Media Dudes out there really do? They get on a Social Media website and talk about how cool Social Media is. It's information about information. Forget the part about building systems or tools. These guys aren't even building data.

Geeks like me refer to this as Metadata!

No one is producing anything valuable or concrete here.

Folks are:

Blogging about Blogging.

Tweeting about Tweeting.

Blogging about Tweeting.

Tweeting about Blogging.

Posting Questions like "Is Facebook Hotter than Quora?" on…. Quora!

I've got a question that you ought to ask on Social Media: Where is the f@#king value-add happening? What are you building again? What is the percentage of people using the "Social Media" that are doing any "real work" and producing genuine value with it?

And No, Random Meta data or noise and tools to handle that same Metadata or noise effectively so that you can produce more metadata and more noise is not genuine value!

We had a name for this before we started calling it Social Media. We called it "Small Talk". All of us did it. But we were aware of the dangers of overdoing it. Then we had the tools to take it online so we started doing it online which was all fine and dandy. Then someone came in and said it was the "Social Media" and doing more of it can make you rich or help you get laid and suddenly the dam walls gave in and then there was…. REVOLUTION!

Now we have everyone trying to create a revolution by talking about how bad that restaurant down the corner is. That's how we are going to have revolution. Not by putting in the hours and building stuff that's genuinely meaningful, helpful, valuable and touches lives.

Yeah. Right!

III. Word Of Mouth

"Dude! Social Media is Hot! I know which movie I should not watch and which brand of Toilet Paper to use ‘cause my friend tweeted about it!"

Ok we can't beat you at that. So I am going to tell you a little story instead. Back in our school days we had a dorky little guy who loved whining. We're going to call this guy Freddy. Freddy loved to whine about everything. Freddy loved soap operas. Freddy loved the Charmin Ultra Strong toilet papers and he absolutely hated his cell phone company ‘cause those guys were mean to him and they deducted his balance ‘cause he paid the bills late and Freddy had a dog and Freddy loved…. (YAAAAWWWN! Yeah. I know).

Now get a million Fredies on Twitter and ask them to bitch their hearts out and you can be rest assured that you are going to find thousands of tweets by thousands of Freddies when you are searching for the #toiletpaper hashtag on twitter desperately hoping you would find advice on which toilet paper to buy on Twitter. Or let's just say that you are already following Freddy and when he tweets about the Charmin Ultra Strong toilet paper being uber cool you just get that Tweet and you become that much smarter about…. Toilet Papers.

(Side Note: Knowing which toilet paper Freddy likes in a 140 character blurps isn't really directly correlated to your level of knowledge on Toilet Papers, but let's give that leeway to Freddy and the Social Media Dudes for now and let's assume for the time being that 140 character blurps on Toilet paper are really making you the smartest Toilet Paper expert in town).

What this means is that you would have to follow a million Fredies and hear about Toilet Paper all the time to effectively utilize word of mouth online. Or you could just Google for Toilet Paper Brands and land here and read the 14 ratings and 13 reviews on….. You guessed it… The Charmin Ultra Strong! Exactly what Freddy was going to recommend!

I don't know about you but I prefer the later, but maybe that's just ‘cause I am not a chump!  

You know what's word of mouth? True Mavenship is word of mouth. People like Seth Godin, Scott Hanselman, Scott Berkun, Jeff Atwood, Malcolm Gladwell (the list is really endless) do this. I've talked about this before and it involves developing a specialization, honing a talent, working at it, paying your dues, giving in the 10,000 hours, adding genuine value before people start respecting you and listening to you.

That's true communication and connection and word of mouth. Of course no one worth following on Twitter seems to be making a big deal about how "Social Media is going to bring a revolution and how it is going to change the world".

They are all busy adding value and earning your respect. They are busy doing hard work, while the chumps throw Metadata on your face and tweet away to glory.

IV. Everything Is Connected.

This was something someone who might prefer to stay unnamed said over a phone conversation. "You know, if I give you a map and plot two points on it and ask you to connect those two points with a line, how hard would it be to connect those two points? If you want to connect things, everything is connected."

That Toilet Paper Review site that I mentioned above, I can see a zillion SMDs shouting at the top of their voices saying "Pops! No Fair! That Toilet Paper site is Social Media!"

Yeah. Right.

Everything with a comment field and a rating hyperlink is Social Media. I've given you the map with lots of points on it. Just keep drawing the f@#king lines and together we can change the world! We love you! Chumps!

The only genuine threat with drawing these lines is that when you blow your stupidities out of proportion, some famous publishing house picks up your poop, publishes it and before you know it Enterprises are talking about building the next Toilet Paper Social Media 4.0 website using Web 8.0 with a like button and planning on minting millions by building their toilet paper iPhone application and giving it out for free. And then these enterprises go out there and invest a zillion dollars on the iPhone application and a Toilet Paper Service only to find out that while a lot of Freddies were tweeting about Toilet Papers they weren't really passionate enough to yank out a ten dollar monthly subscription to find out more about Toilet Papers. And then you have failed startups and people lose jobs. Nasty things happen.

Congratulations Chumps! You just f@#ked an entire organization and wiped it out of existence by producing Metadata. Or let's just say it was the Organization that blew themselves up. That's what nasty thought memes do when you allow them to spread.

Everything is in fact connected. Let's draw more lines.

Everything is Social Media! Yeah! Right!

Remember the terrorism bit we talked about when we started this post? Yeah. That's what really bad memes do when you allow them to spread.

V.  No Silver Bullets.

I realize that I've been rambling on for about eight pages and it's time I start tying the loose ends and making my points. Every time anyone produces a technology that has the potential of making an impact, we have "Second Handers" who want to jump on the bandwagon and the only contribution they have to offer is a sick and twisted name, lousy noisy publicity and random mutilation of the idea. That's how silver bullets come into existence.

Google produced a grid of computers which formed a truly scalable infrastructure. Amazon gave out a part of their infrastructure for a small fee. The Chumps and the second handers called it Cloud Computing and convoluted the whole idea by making way too much premature noise about it. Folks worked hard on building Ajax frameworks and the second handers were coin the term Web 2.0 and confuse the crap out of everyone to a point where anything with big fonts and lesser page refreshes was Web 2.0. Genuine builders work on deep innovations which have long term impact. Chumps create random premature silver bullets out of these innovations. 

The problem with silver bullets is that they are poison for the confused mind. Most geeks are safe. They have bullshit busters pre built in their heads. These bullshit busters help them steer clear from that automated code generation tool that is going to boost their productivity 10x and make them 10 times more sexually desirable. As geeks we listen to this crap and dodge this crap 10 times a day. So when we hear about Social Media we go "Bleh! Whatever!" and then we forget it and we get on with our lives. Yes, we have our Twitter accounts and our Facebook friends but we know where to draw our lines and how far to take this shit.

But Geeks don't run enterprises and fortune 5000's. Enterprises are run by management teams which desperately want a silver bullet. Every time you post some poop on how Social Media is hot and how it is going to change the world, you run the risk of some innocent reporter with an overused bugged bullshit buster picking it up and running it on an online publication which is read by thousands of people. Most people are going to boo that report and your post. They are going to leave nasty comments on your blog post and then get on with their lives assuming that the reporter was just having a bad day and ended up putting some really bad content out there. But really bad publicity is also publicity and that's going to get you on Reddit and even more popular publications.

And then you are going to have an innocent Vice President of a Toilet Paper Company with really weak bullshit busters, who truly believes in the authenticity of these publications along with the content they put out and doesn't understand that authorship doesn't always equal authority. This Vice President is going to glance through that article, run right past the comments and the booing (we often run past invisible gorillas and often make the lamest of mistakes) and is going to decide to invest in creating a social presence for his toilet paper company and hire more Chumps to help him do that.

The vicious circle is complete. Supply of horse poop now meets demand of horse poop and we have a freaking market! Repeat that a few thousand times and you have an economy. It's really that simple. And then suddenly you are left with all this horse poop and you don't know what to do with it.That by the way is exactly where we are right now. We have an entire economy of Second Handers Tweeting, Blogging and Producing Metadata that solves no problem and just creates noise.

Repeat the same cycle for long enough and you're going to create a colossal f@#king disaster. The kind where companies wind up and people lose their jobs. Even worse is the kind of disaster where every genuine idea and effort capable of having a long term impact is mutilated and taken over, twisted and relabeled by a bunch of chumps or second handers before it can have any impact.

VI. Call to Action

If you are in the business building communication tools that build on Facebook or Twitter, here is your opportunity at not being a chump. Try to inspire people, build genuine content on a variety of topics, build stuff (applications, tools) which reduce this noise, boo at bullshit when you see it and make sure your boo's are loud enough to be heard. After all you are in the Social Media business with a million followers. You can be loud!

Start out by helping people spot the signals within the noise, educate people; and please…. please stop producing random meta data, using words like REVOLUTION and for your own sake stop building stupid presentations like these ones. If you do, we are just going to have to call bullshit on you.

If you are a geek with bullshit busters that can pick up crap like this, buzzers that start sounding when you hear bullshit, noses that start twitching when you smell someone farting utter crap, or eyebrows that knit when you hear a lousy idea, going "Bleh! Whatever!" and moving on with your life, is no longer the right approach. Show your perspective to everyone else. Educate people. Help them develop better bullshit busters in their own heads.

Help them realize that there is no silver bullet out there that is going to change the world and trying to look for one that is going to just change their world in a very strange nasty way.

Put simply, use your Social Media skills to blow the Social Media out of people's mind. There is no Social Media. You have blogs, and applets and web applications and websites and people talking to each other and small talk and.... Chumps. Lots of them.

As long as you can see that clearly, we are good.

Now go to Twitter or Facebook and spend a couple of hours there and then when you are entertained, have built a community, have talked to friends, taken your customer's feedback, talked to  them or done whatever it is that you were trying to do there get back to doing some real work.

Try to go slow on the metadata production. Stop being a chump and please.... please build something meaningful. Something insightful. Something inspiring. Something that solves a real problem that you have. Something that helps people discover new information that transforms them or changes their lives. Something that helps people become more effective or makes them better human beings.

Oh and by the way, if you bump into some Social Media Dudes tell them I said Hi! Tell them to follow me on Twitter and we can send each other tweets. I am on twitter when I have nothing else to do. I think of it as a video game where I poke random strangers and they poke me back and I would love to poke a few chumps and be poked back if it gets me a higher follower count and more mussel power. Social Media is going to change the world! Let there be world Peace!

posted on Sunday, March 13, 2011 6:07:18 PM UTC  #    Comments [2] Trackback
Posted on: Saturday, March 12, 2011

Have you noticed the serious faces when you travel in a subway?  Or the faces people have when they wait at the airport?

Or The serious mask your manager wears when talking to you?

Or The serious face your organization puts on when publishing an announcement on their corporate website?

You believe that others won't take you seriously if you don't put on a serious face.

Ironically, your serious face is a wall that prevents us (your team, your employees, your users and your clients) from connecting to you.

It stops us from getting to know you and If we don't know you enough to care about you, your blog, your product or your organization how do you expect us to take you seriously?

When it comes to your organization:

If it looks corporate change it and it looks serious spice it up.

And that is when things becomes remarkable people start giving you some..... serious attention.

posted on Saturday, March 12, 2011 9:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, March 04, 2011

Most Creative endeavors are insane. They are also unreasonable and lonely endeavors.

Most people who start out on them stop when they discover that are toiling alone on an effort no one else is interested in. They hear the "we are not interested" loud and clear.

And then they quit. The reason? Because they want to stay connected.

If you want to understand our innate desire to  keep connected, try watching a movie, eating in a restaurant, going out on a vacation or going on a log run without having any other human being accompany you.

Uncomfortable?

That right there is the fear of being alone.

This fear is one of the major reasons why you are afraid of silence (even when it is productive) and why you love noise.

This same fear stops you from going on movies that you really want to watch but none of your friends want to, or eat at places where your friends do not want to eat, or go on adventurous vacations where your family cannot go with you.

The same fear of being alone, stops you from implementing brand new ideas and working on those ideas, month after month, even if no one uses your application or reads your blog.

Understanding this fear is the first step towards conquering it.

Changing your lifestyle to stop worrying about others is the next step.

What do you want to do this weekend? Go running? Play a sport? Go on a long walk? Catch a very different kind of a movie or drama?

Everyone around you seems busy, tired, too lazy to get out of the home or just not interested in that activity?

Why not do it anyway?

And the same holds true for the applications that you always wanted to build.

posted on Friday, March 04, 2011 7:33:39 AM UTC  #    Comments [0] Trackback
Posted on: Thursday, March 03, 2011

Most artists (even aspiring ones) have more bad days than good ones. Between the two days when your system is rolled live and when your blog post tops reddit there are going to be a whole lot of days which are going to be awfully silent.

On some of these days, you are going to have fights with friends, breakups, failures, depressing thoughts, self loathing, doubts about what you are doing, doubts about your life, physical sickness, invitations to parties you do not want to attend but end up attending, meetings, chores and hours when you find it practically impossible to focus on what you truly love doing.

All artists (programmers, painters, writers, singers....) go through these days.

Most kickass artists even admit going through these days openly.

The big difference, between artist who builds stuff and a whiner who whines is that on these days an artist starts working on what he loves doing to come out of the depressing thoughts. A whiner uses these days as an excuse to stop working on something that he loves working on and crawls into depressing thoughts.

An artist opens the IDE even on a bad day. A whiner closes his open IDE as soon as he encounters a bad day.

True artists show up. Even if its just for an hour every day.

True artists know that if they worry about the bad days, the silent days, the depressing days or the shitty days, they are never going to be able to ship, because there are just too many of these days.

Bedsides, everyone has bad days.

Stop using these days as an excuse to surrender control to your lizard brain.

We are calling your bluff.

Now come out of that hibernation get back to doing what you love doing and start shipping.

I dare you.

posted on Thursday, March 03, 2011 12:38:56 PM UTC  #    Comments [0] Trackback
Posted on: Tuesday, March 01, 2011

After being hired as a visual basic programmer, the early part of my career, for a year or so, involved doing multiple odd jobs besides programming . Ranging from managing servers, installing updates, configuring exchange server, working on database administration and last, but not the least formatting documents.

What this meant was that this was my training time for playing a one man army if the need existed in my future projects.

What this also meant was that on any given time I was reporting to and working with more than half a dozen project managers and their egos. Everyone had a high priority work item for me. Everyone was offended if their high priority work item wasn't addressed before the other manager's high priority work item.

It was multitasking at it's height. I was juggling five tasks and five egos simultaneously on any given day. Missing a task was acceptable, missing to attend to or honor a manager's ego was not. I remember for example, forgetting to place a comma in the right place while updating the content on the content management server and having that issue bite me back in the form of a nasty email from one of my managers. This manager of mine went the extra mile at embarrassing me by copying multiple people in the team.

I suspect the issue had more to do with me not paying enough attention to that manager's commands than it had to do with me missing out the comma. I had spent more time fixing a server that had gone down than I had updating the content in the Content Management Server. Something that this manager had probably taken a note of and then taken care of by writing this email.

The height of it was me getting called into the office of another one of my managers. This gentleman was offended because I had filed just two hours a day of my work time to his project and the rest of the time had been filed to other projects. After my desperately trying to explain to this gentleman that all the work had been done in the two hours that I filed, I was ordered to immediately redo all my time sheets and file eight hours a day to his project. By the end of the month, I was filling timesheets which basically said that I was working twenty four hours a day. Nobody cared.

Multiple clients were billed for my work, each seeing just the hours that I filed to their projects. No one, neither the HR, nor the management noticed anything peculiar about someone working twenty four hours a day. Or maybe they did and I started receiving pats on my back for being a hard working employee. Working for twelve to sixteen hours and filing twenty four was my first realization that the number of hours you put in your work means nothing. Your effectiveness means everything.

I've talked about this topic before. Scott Berkun touches this topic while talking about managers who are never around. He explains:

Everyone in the tech-sector goes through a phase early in their career where they're proud of their hours. At software and consulting companies everywhere, circles of 20 something friends debate, over drinks each night, who's put in crazier hours – "I worked 70 hours last week", "70? I worked 70 hours in 3 days." "3 days? I worked 70 hours this morning, before breakfast." And on it goes.

It's a kind of dumb male pride in size of things, rather than quality or, god forbid, actual happiness. To work 70 hours is a statement of work, not of progress. For every idiot working 70 hours there's a smarter, wiser man who's doing the same amount of work in 50 because he's paying more attention to results than the clock. I'd rather be, and rather hire, that man.

Sadly enough, years ago, for me this realization did not come from watching this super efficient man that Scott talks about or learning from him, but from working with managers who deeply believed in measuring efficiency by looking at your timesheets and seeing how many hours you spent on their projects. More hours, it was believed, was better than less. Back in those times, for me, working smart and doing work which could be filed as, and billed as, twenty four hours of work, in twelve was not a just philosophical thought. It was practical necessity more than anything else. There were two reasons for this.

The first was that after a few months of putting in twelve to sixteen hours a day I had started burning out.

The second was a much more real and practical reason. I was in college back then, and my graduation exams had started nearing. To make things worse, I had also taken up a few vendor certifications which had to be completed. Spending twelve to sixteen hours a day at work meant that I would be able to do none of these items nicely. I had to figure out a way to get enough time to study.

The realization that I could work twelve to sixteen hours a day and file timesheets which showed twenty four hours of work and have these timesheets get approved was a profound one. I had found a hole in the system. A rather scary hole but one that would be used and exploited to its limits. The realization meant that excelling in this organization was all about:

  1. Working smart.
  2. Pretending that you were working really hard.

Automated word macros that format a huge part of the documents were setup. Automated scripts were set up for odd jobs that I had been assigned to do. Every single work item that was repeatable had been taken and scripted to a level where my manual intervention would be minimum. Very soon I was working for four to six hours a day and filing timesheets for twenty four. A good 50% of this four to six hours went in juggling with people's egos. The rest of it was real work. For the other hours I would sit quietly at my desk, a book or a PDF open and I would study. Most people passing by assumed I was working really hard.

The creepiest twist to the tale of events came when I took a study leave for my final graduation exams. By this time everyone believed that the tasks I was doing were worth about twelve to sixteen man hours a day and so they went ahead and assigned another person on the project.  While I was on a leave two rather strange incidents happened.

The first was that the person who had been assigned to the project had complained that he was overworked and that he was not being able to finish his daily assignments. He ran into a lot of arguments in turn building up some friction between all of these project managers, which was fun to watch when I came back.

The second strange incident was a call I received from one of my managers, "Hey, thanks for working from home while you are on leave, but you know, we are assigning someone else to this project and you do not have to work from home when you are on a leave", he had said.

What had happened, I assumed was that one of those scripts that was supposed to have automated some of my work had kicked in, completed the job and had sent out an email that the task had been completed from my email account. For a few days, I contemplated telling him about the scripts to improve the overall efficiency of the team but then, that would have shattered my image as a hard worker who was putting in sixteen hours a day and was also working from home. So I decided to stay put, shut up and just shut down the script scheduler till the time my study leave was over, letting the substitute bitch about how overworked he was and allowing him to continue doing most of these tasks manually.

These series of events taught me two very important lessons:

  1. Recognize results people produce (quality of work, art, happiness, the culture they create, innovation) not the brute force effort without any returns that idiots put in their work. Any idiot can pretend that he is working really hard. It takes a kickass team to be effective and produce working software. 
  2. Don't try to squeeze out every minute of someone's free time. If someone is working smart and getting more work done in less time, don't make it your responsibility and your sole mission in life to keep the guy busy with more work. Efficient guys, find out work for themselves and they get down to doing it, even if you are not after them. Get out of their way and Leave them alone.

Do these two long enough and what you start seeing is sheer magic. People develop trust in you. They start sharing their ways of working smart, their shortcuts, their innovation and their approaches with the rest of the team and the organization in turn making everyone more efficient. Once the tables are turned and male egos revolve around how efficiently you can do your work, the man hour discussion pretty much moves out of the picture. That is when you start building a culture that revolves around sound time management, innovative working techniques, efficiency and results.

If you can't build that culture, most of your organizational efficiency is in isolated corners of your office corridors and you probably don't know anything about it.

What is rather ironic is that my first lessons of time management and efficiency came from an environment that was designed to screw any engineer working in that environment and turn that engineer into an automaton executing programmed directions for sixteen hours a day.

But then, you learn most of your management lessons in the strangest of circumstances and by hacking the weirdest of work environments.

posted on Tuesday, March 01, 2011 3:21:14 PM UTC  #    Comments [0] Trackback
Posted on: Friday, February 25, 2011

Most organizations have ways of keeping their employees motivated.

Most organizational motivation looks like this.

If you cannot drop your carrots and your sticks, we won't drink your cool aid.

If your inspiration is backed by an "Or Else", a written rule, a CYA document or a silent subtle threat, it's not inspiration.

The "Or Else" triggers the lizard brain to finish tasks but it won't result in getting people to ship art.

The results are likely to be mediocre and boring.

If you want to build and ship genuine art, take away the "Or Else" part.

What you have left is a remarkable culture with a tribe of motivated artists.

posted on Friday, February 25, 2011 3:50:17 AM UTC  #    Comments [0] Trackback
Posted on: Thursday, February 24, 2011

Birds chirping in the trees told the early men everything was fine.

Back then, silence was usually a sign of trouble. A fear signal for your brain.

Even today. Silence scares the crap out of us. Most people get uncomfortable with any period of silence. You walk up to your colleague's desk. Crack jokes. Pick up the phone and call your friends. Get on twitter. Respond to facebook comments. Your birds are singing and you feel safe.

What you forget however, is that today, silence is often hugely productive.

I am not saying that cracking jokes with colleagues, calling a couple of friends, tweeting or spending time on facebook are a bad thing to do. But if you are doing them just because you are scared of productive silence that surrounds you, then all you are doing is generating noise. For yourself and rest of the world.

You are breaking the silence that was making (or could have made) you productive. There is nothing safe about that. In fact, in the long run, that is exactly what you should be truly afraid of.

True, silence is scary. But if you genuinely want to hear the birds sing in the long run, learn to embrace silence and make the most out of it.

posted on Thursday, February 24, 2011 3:14:54 AM UTC  #    Comments [0] Trackback
Posted on: Wednesday, February 23, 2011

You want to build an interesting product. Start by building an interesting personality.

You want to build a different sort of an organization. Start by living a different lifestyle.

You want the smartest of minds and mavens to help you market your product for free. Start by listening to them. Stop using funny words like "social media", "web 2.0", viral marketing and most importantly, stop insulting their intelligence.

Random buzz words, power point slides and paid advertising won't come to your rescue when you are dealing with smart people.

When we use your product, or read what you write we can see through you, your effort on the product, your mind, your life, your character and your personality.

The real question is, can "you" see us seeing that or do you think we are idiots?

Most businesses, product managers, marketers,  PR guys and social media experts think its the later.

The others, are successful.

posted on Wednesday, February 23, 2011 9:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, February 19, 2011

Doing anything is risky. Doing nothing is riskier.

 

Roll the dice.

Take a chance.

The downside is you might fail. The upside is you get smarter and stronger...

even if you fail.

posted on Saturday, February 19, 2011 6:02:25 PM UTC  #    Comments [0] Trackback
Posted on: Friday, February 18, 2011

Why is every occasion in your life just like everyone else's?

Why do you celebrate your birthdays in the similar restaurants as everyone else?

Why do most parties you invite us to follow the same predictable patterns?

Why are most of your conversations the same when we meet for the first time or every time?

Why do you strive so desperately... to fit in?

Most of the times you fit in and settle for boring safe mediocrity because you have the fear of the "different" letting you down.

The irony of it is, its the mediocrity that almost always let's you down.

Your desire to "fit in" is why you throw boring parties, engage in boring conversations, build boring applications and above all lead a boring life.

Do you really want to continue trying to fit it or embrace the different? If your answer is the later, start by not being afraid of the different when you see it.

After all, different is a way of life and once you embrace it, different shows up in just about anything you do.

posted on Friday, February 18, 2011 5:28:59 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, February 13, 2011

Most HR, PR, Managers and organizations like to pretend they know how they can recruit and drive the best of the employees.

The fact is, that a whole lot of it is just luck.

Most managers and organizations around the world, get lucky....

And then they blow it.

A fully functional team is shipping kick ass version after version... yes, but they aren't updating the low level design documents, or punching their time cards.

Someone high up in the pecking order feels like scratching an itch and scratches it.

Tweaks are tried, policies are made, rules are created and before you know it, you are trying to fix something that is not even broken.

And then all you can do is read articles on how to hire the best and bitch about why its difficult to retain the best of the best.

All I can tell you is that you are just wasting your time.

posted on Sunday, February 13, 2011 10:40:55 AM UTC  #    Comments [0] Trackback
Posted on: Friday, February 11, 2011

You really want fit in and gain acceptance from the most people around you.

Simultaneously you really want to show them how wrong they had been all along.

The thing with the seeking acceptance is you almost never prove anyone wrong while seeking acceptance (and you don't get much acceptance either).

The thing with proving them wrong is that you have a strong possibility of gaining lot of acceptance after you have proved them completely wrong.

Here is the really ironic part:

If there is a voice of a misfit disagreeing with the crowd and a conformist struggling to fit in within you, your best chance at gaining acceptance in the long run is listening to the misfit.

posted on Friday, February 11, 2011 7:58:01 PM UTC  #    Comments [1] Trackback
Posted on: Wednesday, February 09, 2011

I have nothing to say... I am really busy... I don't believe in writing... I don't have the time.

Lame lies people tell themselves (and others) about why they cannot don't want to write.

In order to write you need to:

  1. Accept and face the deepest of your fears.
    (you have a boring product, a boring life, a boring personality, an abnormally powerful lizard brain, problems you are too scared to accept).  
  2. Overcome these fears and find your own voice.

These are the two real reasons why most people do not want to write.

Of course, these are also two very important reasons why you should write...

Even if no one reads your blog.

posted on Wednesday, February 09, 2011 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, February 06, 2011

"Be Reasonable. Be Practical. Grow up. Be Professional" -- this or just another form of this advice is what you probably received when your teachers and acquaintances wanted you to stop playing around and tow the line.

Seth Godin's recent blog post, is a slap on the face of people who want you to toe the line and act "reasonably":

It's unreasonable to get out of bed on a snow day, when school has been cancelled, and turn the downtime into six hours of work on an extra credit physics lab.

It's unreasonable to launch a technology product that jumps the development curve by nine months, bringing the next generation out much earlier than more reasonable competitors.

It's unreasonable for a trucking company to answer the phone on the first ring.

It's unreasonable to start a new company without the reassurance venture money can bring.

It's unreasonable to expect a doctor's office to have a pleasant and helpful front desk staff.

It's unreasonable to walk away from a good gig in today's economy, even if you want to do something brave and original.

It's unreasonable for teachers to expect that we can enable disadvantaged inner city kids to do well in high school.

It's unreasonable to treat your colleagues and competitors with respect given the pressure you're under.

It's unreasonable to expect that anyone but a great woman, someone with both drive and advantages, could do anything important in a world where the deck is stacked against ordinary folks.

It's unreasonable to devote years of your life making a product that most people will never appreciate.

Fortunately, the world is filled with unreasonable people. Unfortunately, you need to compete with them.

Fortunately, being unreasonable is not as hard as it used to be. Fortunately you can be a guerilla entrepreneur where you practice the unreasonable, experience the sex part of your development life and let your day job handle the reasonable realities and the cash part.

That or become a part of or build an organization where being unreasonable, is totally reasonable.

If you are one lucky son of a gun, you can end up doing both too.

Either way, you have no excuses for towing the line and living by the rulebook.

I wish you good luck.

posted on Sunday, February 06, 2011 6:15:59 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, February 05, 2011

Most engineers who are passionate about what they do love programming and yet only a few venture out of ship anything outside of their work life.

Extrinsic Motivation is probably not a problem here.

The bigger problem is developing a critical mass where you can see something take shape.

Fitness experts will tell you that there are really two states in which a human being can exist. Sedentary and moving. The biggest challenge you face when working on fitness is moving from sedentary state to the moving state.

Once there, you will probably get addicted to working out and you will not need extrinsic motivation to hit the workout room.

Most of what you do at work, is driven by deadlines, fear, consequences and pats on your back.

Unless you have tasted the joy of owning and working on a small side project, you are in, what I call the sedentary state of the software development world. If you really want to experience the state where you are moving and loving every bit of it, get out of that couch and push yourself to build something.

You don't need years to build something huge. Just ship the first sprint.

Build just enough to have a critical mass of something which has a life of its own and an ability to morph into something gorgeous. What I can tell you, is that you wont need this blog or any extrinsic motivation to keep you working on to it.

You will look forward to your weekends, fantasize about working on your project, squeeze out hours during late night, tweak and optimize your life and even get more productive at your real job.

Shipping the first build, publishing the first few blog posts, doing the first few workout sessions, reading the first few books. The first few attempts at anything that is worth doing, are going to be pathetic, tiresome, depressing and sometimes even downright frustrating.

All I can say is, Keep jabbing.

You might not become the best boxer out there, but you might find out what you truly and genuinely love doing.

posted on Saturday, February 05, 2011 9:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, February 04, 2011

You have the venture funding covered.

You have an exit strategy.

You don't mind getting sold to a Google or an Amazon. In fact you have already thought about it.

Here is the bad news: Your venture is going to fail.

You are going to wait for your first million users to show up, and they wont.

You are going to wait for your first five, million dollar clients to show up, and they won't either.

You are going to wait there hoping a Google or an Amazon buys you and Google or Amazon is not going to give a shit about your product.

And that is not because you are a looser who could not start an organization or take it to a successful completion. That is just because you are playing a game where you are the rules are designed to help you loose.

When your organization is lean enough to survive on just ten hours a weekend, a tiny desk in a tiny corner of your home and less than three digit dollar amounts for hosting charges, you are on to something.

That is when you suddenly, you don't need your first million users to show up within a year or your first five million dollar clients to show up, or Google and Amazon to drool over your product and buy it.

Now suddenly, you are working on something that is gorgeous and has a life of it's own.

And the most amazing part of it, is the realization that you don't want an Amazon or a Google to buy you.

You have an organization, that can survive without a whole lot of users, without a lot of clients and without any venture capitalist and that my friend, is a gorgeous thing.

You are what I call, a Guerilla Entrepreneur, working for an organization that does not need a whole lot of capital or external confirmation to stay afloat.

I cannot tell you if you will be sold to a Google or not, I cannot tell you if a million users will show up or not, I cannot tell you if you will bump into the first five of your million dollar clients.

I don't know enough about that part. I haven't played that game yet and I have no intentions of playing it in my life because it is designed to make you lose. I can't tell you anything about that game. I'm sorry.

What I can tell you however, is that you will be happy, because every weekend, month after month, you will get to work on something you really love working on. And that in itself it a gorgeous feeling to have. Anyone who has experienced that feeling hardly ever talks about an exit strategy.

If you do, chances are, that you just don't get it.

posted on Friday, February 04, 2011 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, January 30, 2011

Most programmers who love the craft of building software and are deeply passionate about it seem to find strange avenues or third places to channel their creativity.

Most of them are also faced with a life long contradiction Hugh MacLeod explains rather articulately through a cartoon drawn behind a business card.

He refers to the contradiction between shipping genuine art and paying the bills as the Sex and Cash theory in his book Ignore Everybody. Hugh explains:

The creative person basically has two kinds of jobs: One is the sexy, creative kind. Second is the kind that pays the bills. Sometimes the task at hand covers both bases, but not often. This tense duality will always play center stage. It will never be transcended.

A good example is Phil, a New York photographer friend of mine. He does really wild stuff for the small, hipster magazines— it pays virtually nothing, but it allows him to build his portfolio. Then he’ll leverage that to go off and shoot some retail catalogues for a while. Nothing too exciting, but it pays the bills.

Another example is somebody like Martin Amis, the bestselling British author. He writes "serious" novels, but also supplements his income by writing the occasional newspaper article for the London papers, or making the occasional television appearance (novel royalties are generally pathetic—even rock stars like Amis aren't immune).

Or actors. One year John Travolta will be in an ultrahip flick like Pulp Fiction ("Sex"), another he’ll be in some forgettable, big-budget thriller like Broken Arrow ("Cash").

Or painters. You spend one month painting blue pictures because that’s the color the celebrity collectors are buying this season ("Cash"), you spend the next month painting red pictures because secretly you despise the color blue and love the color red ("Sex").

Or geeks. You spend your weekdays writing code for a faceless corporation ("Cash"), then you spend your evenings and weekends writing anarchic, weird computer games to amuse your techie friends ("Sex").

This tense duality will always play center stage. It will never be transcended.

And nobody is immune. Not the struggling waiter, nor the movie star.

As soon as you accept this, I mean really accept this, for some reason your career starts moving ahead faster. I don't know why this happens. It's the people who refuse to cleave their lives this way—who just want to start Day One by quitting their current crappy day job and moving straight on over to bestselling author—well, they never make it.

Anyway, it's called "The Sex & Cash Theory." Keep it under your pillow.

Sound advice for both young programmers as well as veterans who have spent years depending on their organization for every ounce of creativity that they are allowed to demonstrate. I know you probably know the part of your career that is connected to the cash part, do you really know the sources of the sex part?

If not, now is a time where you start separating the two and focusing on both of them fairly seriously. The sex part of your career needs just as much attention as the cash part. Start giving it the serious attention it deserves.

I wish you good luck.

posted on Sunday, January 30, 2011 11:10:41 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, January 29, 2011

Talking is an art. A long candid talk can clear things up within a team.

Talking is also an addiction.

Like in every art, the trick with talking is knowing when to stop.

Are you talking because you are connecting to someone, clearing confusions, spreading your thoughts, sharing an idea or doing something productive?

Or are you rambling on and on because it feels good and it lets you get away without having to take up scary challenges or take up efforts where you might fail?

If your ideas are compelling they do not require very lengthy conversations. (One of the reasons why TED talks are really short).

If your ideas are not compelling all the talking in the world will not cause them to spread.

And the talking will keep you from working on them and actually making them strong enough.

Keep a casual eye on each conversation you have and when you feel you are dragging on and on merely because you are afraid of ending an conversation.

Every time you find yourself doing this, you are not talking, you are probably moping.

Stop it. Move to some real work and get productive.

You might actually feel better. Seriously.

posted on Saturday, January 29, 2011 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, January 28, 2011

In one of my earlier posts I talked about not worrying about a name for your product till you ship the first sprint.

Last Saturday we shipped a fully functional private beta for a free online hobby project of ours.

One way to think about what the application does, is think of it as a third place for book lovers and book readers. It's designed to help you share what you are reading, bump into people who are reading similar stuff and then have meaningful conversations with them.

(We believe that discussions around books tend to be much more engaging than using "Social Media" and "Web 3.0" to tell the world when was the last time you used the bathroom).

With the first sprint under a private beta, we have about a month to name the website before it starts boarding more people.

If you are a book lover interested in beta testing the application we would love to hear from you on the email address rajiv AT thousandtyone.com but the primary place where we need your help right now is the naming.

Got any suggestions for an awesome name? Email me at rajiv AT thousandtyone.com or by clicking the Mail image link on the left of this blog post.

Got any links or pointers on naming products? How about an awesome book on naming products? You can use the comment field below.

Naming is a part of the celebration of shipping and I would love it if you can join in this little celebration of ours.

You have been officially invited. Seriously.

Start by helping us name the website.

posted on Friday, January 28, 2011 4:09:00 AM UTC  #    Comments [0] Trackback
Posted on: Sunday, January 23, 2011

A couple of months ago we started working on a little project of ours in our free time. It was mostly a weekend thing. Not connected with my professional work or my organization. Just a little fun service you can use for free.

On Saturday this little website of ours went live.

We have decided to keep this site in a private beta for a month and not tell you much about it. Not because it is a secret (I know ideas are a dime a dozen), but because we would rather have you try out the application when it is out rather than us talking about it.

This series of posts is not about the service or what it does. It's about the things I learnt from building this side project and one of our biggest realization as we worked during the weekends was about excuses people (me included) give about why they do not start side projects during weekends.

Honestly, there is no reason not to.

Hosting infrastructure and tools are cheap. They are cheaper than you can think.

Anyone who says that he is not building or implementing an idea because he does not have sufficient resources is bullshitting. It is that simple.

Hosting accounts that are good enough to get a full blown implementation going can be less than fifty dollars a month. Yes, I know. Its ridiculous. Yes I know you probably might not scale with that infrastructure but scaling it is not your biggest problem when you are getting started, getting people to give a shit about your blog or application is.

With the plethora of open source tools out there, the Microsoft Bizspark program and the base installations that most hosting providers are giving out now a days, if you go out looking for a venture capitalist to fund your idea there is something fundamentally wrong with your approach.

If you need venture capitalists, it probably means you are not lean enough or it probably means you are not embracing constraints.  

With the productivity that most development environments and databases provide you now a days, if you cannot build a small implementation of an idea or a hobby, without quitting your day job or making a big deal about it, there is something fundamentally wrong with the way you manage your weekends.

With every passing day, the reasons for not implementing your idea into a concrete working application, are diminishing.

Reasons like No Funding, No Resources, No Time, No Venture Capitalists are probably not the things that are holding you back. Laziness, Fear of Failing (or succeeding), Bad Time management and your lizard brain are.

(Honest confession: At least these were the things that were holding me back from pursuing and completing this project).

Ok, now that I have confessed, I am calling your bluff. Accept it. With lesser and lesser reasons to hide behind, chances are that you are going to get your butt off that couch, fire up that IDE and work on something that fascinates you.

A couple of months ago, we called our own bluff, got our own butt off the couch and if there is one thing I can tell you after launching a private beta for this system, it is that, if you have an idea lingering in your head, you are doing yourself a disservice by not implementing it.

Shipping a hobby feels good.

Go on. Start this weekend. I wish you good luck.

posted on Sunday, January 23, 2011 9:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, January 22, 2011

Besides programming, writing and reading are my life long passions.

Are you having a baby?

I cant wait to plug this book to you.

Trying to become better at software development?

Try starting with this one.

Want to understand how your brain works?

Why not start with this one.

In a whole lot of conversation I have with my colleagues, acquaintances or even friends, I tend to quote from books. That is what book lovers do.

Books are a means to draw inspiration, ideas, fun and above all, they provide a means to glean into another book reader's mind and connect to a real person. I continue to be amused by just how many conversations you can have with random strangers over a book at a local bookstore.

Most of those discussions are way deeper than using "Social Media" and "Web 3.0" to basically announce that you are now going to go to the bathroom.

If you aren't reading books, you should.

If you find reading difficult you should consider listening to audio books.

Either ways, if you aren't reading or listening to a couple of books every months, you are doing yourself a disservice.

Go on.

Take a walk to a local book store or grab a copy of something you would like to read from Amazon or Audible and start reading. Its fun. Seriously.

posted on Saturday, January 22, 2011 9:32:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, January 16, 2011

You need your own mountain.

A set of challenges arranged in a coherent never-ending stream with constant sequential milestones where you can celebrate your doneness.

Each challenge focused around deliberate practice.

Unless you happen to be working for an organization that has a steady revenue stream through search and encourages your research project to stay alive for a year, deliberate practice, when you are constantly shipping is hard.

Spending a week on tuning your Ajax calls using JQuery instead of the ASP.NET update panel, when there is no concrete Return On Investment, is deliberate practice.

It is also hard to propose in a management meeting.

But you still need to learn how to do those Ajax calls and use them seamlessly in your application. Which is why you need your own mountains to climb. And you need to climb them, every week. Even if you climb just a few inches every week.

If you keep at if, after a while, the inches you climb might just start adding up.

The mountain can be a long running side project. A constant stream of training sessions you plan on taking. Or a series of technical articles you plan on writing. What ever it is, pick something which involves a series of coherently arranged never-ending challenges and constant sequential milestones.

So, what's your mountain?

If you haven't found one yet, might I suggest that you keep your eyes open and start climbing it as soon as you find it.

I wish you good luck.

posted on Sunday, January 16, 2011 6:54:05 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, January 15, 2011

If you are somewhat naturally inclined a few years of mucking around in a field can make you decently good at it. Good enough a get a job and start making a living out of it. That's exactly how far mucking around will typically take you.

From that point on you have two options:

  1. Keep looping: where you keep writing the same CRUD screens for seventy years and keep making a living out of it.
  2. Move to the next level one step at a time with Deliberate Practice.

Deliberate Practice is where you meticulously and carefully examine every aspect of what you do and what the best people in your field of work do.

For authors deliberate practice involves not just writing, but reading the works of other authors who happen to be better than them. For musicians, it involves listening to the music of other musicians. For software programmers it involves reading code and learning from other Alpha Geeks and kickass programmers around the world.

But deliberate practice doesn't end at meticulous observation. It involves stepping out of practice using your comfort zone and moving to practice using your learning zone.

A classic example of this would be, spending a week to figure out how to tube, tweak and improve your JQuery based Ajax calls to make them faster. Deliberate practice is hard work. Deliberate practice is painful. Deliberate practice is scary because the first step is a silent acceptance of how little you know.

Deliberate Practice, or lack of it thereof,  might also be the reason behind why most programmers cannot program.

What did you do today? Complete your tasks the entire day? Or did you indulge in the act of deliberate practice using your learning mode for at least a couple of hours? Yes we know deliberate practice is hard and painful but that anything that is wroth doing, is. Go on. Keep a few hours a day aside for deliberate practice of your craft.

I wish you good luck.

posted on Saturday, January 15, 2011 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, January 14, 2011

If you have done this even once, you know that if you are planning on working on an idea that you have, you are going to have to work without the crowd.

There are two reasons for this:

  1. The crowd doesn't get the idea. Its going to think your idea is too lame or too impractical or already taken
  2. The crowd doesn't care.

Both of these are good things.

The first is good because it allows you to build your idea exactly as you see it. As more people join, the vision dilutes. You are way better off working on the first version yourself or just a couple of really close friends who totally understand your vision or people who have similar core philosophies and values.

The second is good because it allows you to work in stealth mode, build something really small and release it to a closed inner circle of acquaintances who do care. This is good news because if you fail or build something that none of your users like, you have just disappointed a really small group who are willing to give you a second chance. You can choose to bury your failure, learn from it, move on, fix it, tune it, work it up and add more people really slowly.

Releasing a product live till you are done with a couple of complete sprints is almost never a good idea. If you are going to release a product live, do it when you are pretty darn confident the product has enough meat for people to love it, because otherwise they are just not going to care and that is not such a bad thing after all. Go on, ship something to your inner circle first and then slowly and steadily, surprise everyone else with a kickass product.

You don't need a big bang release date and press releases. Start with a slow and steady release instead.

I wish you good luck.

posted on Friday, January 14, 2011 5:33:18 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, January 09, 2011

Hugh MacLeod's book Ignore Everybody, is a classic collection of well written articles and hugely funny cartoons:

One of the most interesting parts of the book is Hugh's explanation on power and the people who crave it. He explains:

Power is never given. Power is taken.

People who are "ready” give off a different vibe from people who aren't. Animals can smell fear. And the lack thereof.

THE MINUTE YOU BECOME READY IS THE MINUTE you stop dreaming. Suddenly it's no longer about "becoming". Suddenly it's about "doing".

You don't get the dream job because you walk into the editor's office for the first time and go, "Hi, I would really love to be a sportswriter one day, please".

You get the job because you walk into the editor's office and go, "Hi, I'm the best frickin' sportswriter on the planet." And somehow the editor can tell you aren't lying, either.

You didn't go in there, asking the editor to give you power.  You went in there and politely informed the editor that you already have the power. That's what being "ready" means. That's what "taking power" means.

A rather interesting read for anyone who has ever craved for, asked for or haggled for a promotion. You know the kind I'm talking about here. The kind that graduates from a MBA school and expects nothing less than a private cabin and a team they can boss around.

You cannot be expecting the world to give you power just because you want it.

After all, anyone who wants power should not be given power, for obvious reasons.

Now go focus on the taking up more responsibilities and adding a little bit of passion to everything you do.

Stop worrying about the power bit. Seriously.

posted on Sunday, January 09, 2011 10:45:25 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, January 08, 2011

When it comes to personal life and parenting, making someone you truly love wait, to teach him or her ability to delay gratification and self discipline, can be a good thing.

When it comes to business however, how long you make me wait has a inverse correlation to how much you care about me.

Please wait, our customer care executive will attend you shortly, is translated as: we have more customers than we can possibly care about and you are just one of them so talk to a machine instead.

When a restaurant makes you wait for a table or makes you wait after taking your order it sends a similar message. We have more customers than we can handle so wait in queue and stop bothering us.

When your website makes your visitors wait, its even worse.

We know its hard. We know sometimes the message isn't intended but we are all busy and if you make us wait, we are just going to assume you don't care and go somewhere else.

The best you can do is speed things up for us. Hire more trained executives like zappos does and have a human being answer the phone. Allow people to book a table in your restaurant over their mobile devices and give them a time to arrive at. Tune your website to work faster or buy more processing horse power. If financial constraints prevent any of those, the least you can do is explain it with true empathy, say sorry, mean it and work your ass out to fix it as soon as you can.

Relationships are a two way street and treating your customers like replaceable parts of your profit making machine is stupid.

Please don't make me wait, because I won't anyway. If you do I might but only as long as I can find a different option.

I am just saying.

posted on Saturday, January 08, 2011 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, January 07, 2011

Do you love what you do?

What if you were forced to take a couple of weeks of off time each year. Not a vacation where you go somewhere. Just random couple of weeks of time off.

A few rules apply:

  1. You cannot work on anything connected to your organization.
  2. You cannot be talking, emailing or getting in-touch with people at work.

You get up in the morning, no emails, no fires, no colleagues, no tasks. Just silence.

Most people who claim to love what they do would freak out if this was done to them. If you are one of them, chances are that you do not truly love what you do. You just love your job. That or your job is just keeping you busy.

People who love what they do hardly have time for insecurities and freaking out. Most of them have activities other than work that allow them to workout their creative mussels. This is why countless kickass programmers spend their time blogging, coding on open source projects, launching free products and answering questions on free forums.

These folks would be just as happy if you brought them out of their work environment and gave them a month long unplanned time off.

Others will freak out and resort to nothingness.

Which of these two groups do you belong to?

When you have nothing to do, what is it that you usually do?

Just a little something to think about.

posted on Friday, January 07, 2011 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, January 02, 2011

There is an attack of cheap Chinese and Indian smart phones with cool features in the Indian cell phone markets.

Every cell phone shop is littered with tongs on these. Every television channel seems to be running advertisements featuring some of these phones.

Even when Indian and Chinese cell phone companies try to woo customers with the lowest of prices and more features, any Indian who wants a smart phone eventually buys a Nokia or a BlackBerry.

Why are the Chinese or Indian cell phone companies with better pricing and more features failing this badly?

One reason is quality but the bigger reason is the lack of a story.

If you buy a simple cheaper model of Nokia that is not a smart phone, your story is that you are not interested in smart phones. You just need something that lets you talk. You are just not into smart phones and that is a perfectly acceptable story you can tell your friends and colleagues at work.

If you buy a Nokia or a BlackBerry your story is that you love smart phones and you have a good smart phone.

When you buy similar features sluggishly stitched together by a Chinese or an Indian brand your story is, you love smart phones but you cannot afford a good smart phone.

The result?

Even in the Indian market, which is hugely sensitive to the price advantage, no one seems to like this story.

You almost never win product battles by throwing in features hastily stitched together and then by competing with just price.

The Wallmart model is starting to work less and less with every passing day, even when it comes to selling your product in India where people are super sensitive to price.

If your product is not backed by a concrete story that make people feel good about buying or using your product, no one cares about your product. It is that simple.

What story does your product tell?

Just a little something to think about, if you work on a product or are planning on working on one.

posted on Sunday, January 02, 2011 5:23:20 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, January 01, 2011

"If no one monitors their work timing and the quality of their work closely enough why will they take their work seriously?"

An acquaintance asks when I am talking about the team I work with, our no policing work culture.

If you want to build great teams ask the right questions.

Why will they take their work seriously, is a wrong question. Why won't they, is the right question.

When you ask the wrong questions you get policies. When you ask the right ones, it becomes easier to trust people and you get innovative life styles with kick ass work cultures.

Before you ask a question, ask yourself if you are asking the right question.

Pick your questions carefully, for they decide your lifestyle and the answers that you eventually find.

posted on Saturday, January 01, 2011 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, December 31, 2010

There are times where we (the collective we, involving anyone who has ever been associated with the world of software development) silently enter the unspoken agreement of leaving a few things unsaid. These are what I like to call white lies.

Hope is often the root cause of most white lies.

The developer checks-in the code, hoping that if there is a bug someone from QA will catch it and report it.

The tester rushes through the test cases and then does no ad-hoc testing, hoping that the developer would have written decent code.

The manager provides a push, hoping that if there is an issue the team will let him know.

The team provides a hushed up feedback sugar coated with a truck load of mitigated speech, hoping that the manager will read between the lines.

Hope driven white lies where everyone knows they are fu@#ked but no one says so are dangerous, because 1) you're lying 2) you are paving the path to a perfect text book example of a disaster caused by too many small things going wrong in the right sequence and order.

Irrespective of who you are, a developer, a tester, a graphic designer, a business analyst or a manager, this week, stat by calling bullshit on quite lies. Stop hoping and start doing what you do with passion, conviction and a strong spine.

I wish you good luck.

posted on Friday, December 31, 2010 8:30:00 PM UTC  #    Comments [3] Trackback
Posted on: Sunday, December 26, 2010

If creative endeavors involve so many unknowns and problems why doesn't everyone seek refuge in the known and the safe?

Why make your weekends miserable by working on a side project?

Why spend a huge part of your organization's revenue on research?

Why leave the comfort of a safe job and work for a startup?

Why contribute towards an open source project?

Why spend hours every weekend putting down your thoughts into concrete words and then publishing them out? 

The answer really boils down to two things. One is because of the way all creative brains are wired. You cannot help but get attached to these creative endeavors. If you are basically creative at heart, tasks seem boring and challenges are fun.

The other, which I believe is a bigger reason, is that creative people, are constantly looking to surprise you and then be, right!

You cannot write a book on how the brain works and make it interesting enough for masses to like it?

Economics cannot be interesting?

No one is going to pay fifty bucks a month for a project management tool which is nothing more than a simple task list or pay you for a system which lets them manage their contacts?

"Ok, now watch us!", The creative minds want to say.

If creative minds break rules it is because there is a naughty neuron in their brain which sees how lame the rules are. That neuron wants to bend the rules, twist them, break them, shatter them into pieces and then have you accept that it was right.

Acceptance is the gift you are giving the creative person when when you buy a book, when you pay fifty bucks for a darn good task list, when you tweet a URL to a blog post or a product on twitter, when you comment on a blog post, when you blog about a product or when you share the idea of a creative mind and help it spread.

This week, start by being an artist who gives the gift of his work to an audience and by being an audience who gives acceptance back to the artists it likes. And yes, I said an artist and an audience not an artist or an audience. Because you cannot be really good at one without being good at the other.

As always, I wish you good luck.

posted on Sunday, December 26, 2010 10:46:04 PM UTC  #    Comments [2] Trackback
Posted on: Saturday, December 25, 2010

Creativity, quite literally probably means the art of  building things, or services or thoughts that have not been thought of before. When you are trying to be creative, you are in unchartered territories because, umm, well, the territory hasn't been chartered before. This means that you have no clue about what works and what does not. You are what doing what Nassim Nicholas Taleb describes in his book as, looking for the black swan.

The problem with being in this unchartered territory also means that you are going to be spending most of your time being, lost, clueless and failing. A process that can be rather psychologically taxing. If you are in the business that involves constant long term creativity, social gatherings around friends and acquaintances or discussions around what you do, or how successful you are, given the mainstream definition of success, can be rather painful.

Nassim Nicholas Taleb describes this Artist's Dilemma in his book the Black Sawn rather articulately. He explains:

Every morning you leave your cramped apartment in Manhattan's East Village to go to your laboratory at the Rockefeller University in the East Sixties. You return in the late evening, and people in your social network ask you if you had a good day, just to be polite. At the laboratory, people are more tactful. Of course you did not have a good day; you found nothing. You are not a watch repairman. Your finding nothing is very valuable, since it is part of the process of discovery—hey, you know where not to look. Other researchers, knowing your results, would avoid trying your special experiment, provided a journal is thoughtful enough to consider your "found nothing" as information and publish it.

Meanwhile your brother-in-law is a salesman for a Wall Street firm, and keeps getting large commissions—large and steady commissions. "He is doing very well," you hear, particularly from your father-in-law, with a small pensive nanosecond of silence after the utterance—which makes you realize that he just made a comparison. It was involuntary, but he made one.

Holidays can be terrible. You run into your brother-in-law at family reunions and, invariably, detect unmistakable signs of frustration on the  part of your wife, who, briefly, fears that she married a loser, before remembering the logic of your profession. But she has to fight her first impulse. Her sister will not stop talking about their renovations, their new wallpaper. Your wife will be a little more silent than usual on the drive home. This sulking will be made slightly worse because the car you are driving is rented, since you cannot afford to garage a car in Manhattan. What should you do? Move to Australia and thereby make family reunions less frequent, or switch brothers-in-laws by marrying someone with a less "successful" brother? Or should you dress like a hippie and become defiant? That may work for an artist, but not so easily for a scientist or a businessman. You are trapped.

He also goes on to explain the risks associated with creativity, the artist's dilemma and the toll constant, small failures take on you. He explains:

Many people labor in life under the impression that they are doing something right, yet they may not show solid results for a long time. They need a capacity for continuously adjourned gratification to survive a steady diet of peer cruelty without becoming demoralized. They look like idiots to their cousins, they look like idiots to their peers, they need courage to continue. No confirmation comes to them, no validation, no fawning students, no Nobel, no Shnobel. "How was your year?" brings them a small but containable spasm of pain deep inside, since almost all of their years will seem wasted to someone looking at their life from the outside.

Then bang, the lumpy event comes that brings the grand vindication. Or it may never come. Believe me, it is tough to deal with the social consequences of the appearance of continuous failure. We are social animals; hell is other people.

Nasim is attending to the same problem Elizabeth Gilbert tried to attack in her TED talk on why do artists go through a lot of torment. Nasim's take on the solution is rather interesting. He calls these creative actives where the results and outcomes are unpredictable and non-linier Back-Swan-Dependent activities or activities that depend on spotting what he calls "the black swan" and advices:

We are local animals, interested in our immediate neighborhood—even if people far away consider us total idiots. Those homo sapiens are abstract and remote and we do not care about them because we do not run into them in elevators or make eye contact with them. Our shallowness can sometimes work for us.

It may be a banality that we need others for many things, but we need  them far more than we realize, particularly for dignity and respect. Indeed, we have very few historical records of people who have achieved anything extraordinary without such peer validation—but we have the freedom to choose our peers.

If we look at the history of ideas, we see schools of thought occasionally forming, producing unusual work unpopular outside the school. You hear about the Stoics, the Academic Skeptics, the Cynics, the Pyrrhonian Skeptics, the Essenes, the Surrealists, the Dadaists,  the anarchists, the hippies, the fundamentalists. A school allows someone with unusual ideas with the remote possibility of a payoff to find company and create a microcosm insulated from others. The members of the group can be ostracized together—which is better than being ostracized alone.

If you engage in a Black Swan-dependent activity, it is better to be part of a group.

A rather innovative form of shielding yourself from moral discouragement which anyone who has tried to do anything unconventional with his life, or a part of his life, picks up rather instinctively.

Now you know, why, if you are one of my far off acquaintances who bumps into me and announces to me in all his glory, how successful you have been with your life and ask me what it is that I do, I might hold a straight face and tell you, "Who me? I'm just studying law. I never quite got to doing anything yet".  It's not personal. It's not meant to be an insult to you or my attempt at hiding specifics of my profession from you. It's a small joke. A prank. A way of shielding myself from your way of evaluating success and happiness.

This is also the primary reasons why I also ask companies to hire people not just by talent or capability, but by matching overall thoughts and beliefs. If you are an organization who believes in looking for black swans or doing any activity which is remotely black swan dependent, hiring people who form a like minded group and nudge each other to continue even when you are encountering constant short term failure and frustrations each day is hugely important.

That is your only chance at spending the ten thousand hours on something and crossing the dip without breaking down both emotionally and psychologically. Go on, build or join a community other black swan spotters and surround yourself with them. That way, you can focus on your work without being taxed for it, emotionally and psychologically.

I wish you good luck.

posted on Saturday, December 25, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, December 24, 2010

A few friends and I have been working on a little free service which will allow a few like minded people to connect on a completely different level. I'm not going to talk about the service yet. Not because it's a secret. Actually, it's not. My idea is probably out there. Besides, Ideas are a dime a dozen and you should continue building your product even if your idea is taken. I am not going to talk about the service yet because we have no plans of making it public till March. We expect to be in private Beta by end of January.

What I want to do however, is share a few life lessons that I picked up while working on this product and that is what this series of posts is all about.

General User Applications And Services: A Completely Different Form Of Workout.

The folks at 37Signals have wise advice for young startups and individuals on their way to building their first product. The advice: Build a product that is Half, Not Half Assed.

With this in mind, once you start looking at every single enterprise project that you have worked on in the past, you realize that most of them have been half assed in one way or the other. No, seriously.  I have gone so far as saying that most consulting companies use "enterprise software" as an excuse for being lame and boring. Others just bitch about Enterprise Applications.

What's your top most priority when you are working on your project?

Sticking to the specifications? Getting to a feature complete state by the deadline? Completing a successful UAT? None of these needs will push you or your business to spend countless hours so that you can reduce the number of post backs on your page and provide your end user with an enjoyable experience. None of these needs are going to nudge you or your business to build a simple sexy likable lovable user interface. Every single feature that can make a product kick-ass is going to be move to the "Nice to have" list in some meeting somewhere and eventually never ever get built.

Lets face it, unless you work with hugely passionate clients, your enterprise clients probably pay for features not for how a product "feels". Unless your business is a Google or a 37Signals, your business is probably going to evaluate you on how quickly you delivered stuff which was "good enough" for the client to pay for. If you are a consulting house, the general standard of this "good enough" is going to be even lower and is going to be measured by purely economic factors and matrices.

Once you step out of the world of enterprise and start building for the general audience, you are likely to discover that the demands and expectations from your applications are going to be very different than the kinds of demands or expectations you are used to.  All the Visio you know it utterly useless in this world. Your ability to think in terms of use-cases and actors can give your product a quick premature setback. Even some of your design patterns will dig you a big fat hole on a cheap hosting account. You might discover that the world is suddenly judging your work on the strangest of factors that you did not even think were important.

And even though this world of general user applications and services is hugely different, brutal and unforgiving,, I would encourage every developer out there to spend at least a couple of hours every weekend, to weave a small remarkable story and release it out there. Because, that is your only way to find out how messed up your priorities had been all along and how mediocre the world of enterprise development is.

In the fitness world they have a theory. As you continue working out, your body starts getting used to the exercises you do regularly and their impact on your mussels start diminishing over time. Fitness experts around the world will tell you that doing the same exercise every day is stupid. No one ever gets smarter by solving the same math problem every day and no one gets leaner or stronger by doing the same exercise every day. Every now and then your mussels need a sudden shock of a new exercise. That's how they grow stronger. That's how you get out of your fitness plateau.

A few years into enterprise development and if you are a smart developer you are going to realize that you are doing the same exercise every day when it comes to your professional life. You are just building CRUD screens and completing tasks.

You cannot expect clients and businesses to change overnight. But what you can do is shock your mind with a completely brutal and unforgiving world of end user applications and services where people will love you if you get your priorities and work right or give you a cold shoulder of ignorance if you don't.  Either way, you would have shocked your mind and made it stronger, even if you just do it a few hours every week.

What are you doing this weekend? How about starting a small application or service for us and letting us try it out for free when you are done for a few months? Huh? Huh? Huh? Try it! It will not make you an accidental millionaire but it will make you a way better programmer than you already are.

I wish you good luck.

posted on Friday, December 24, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, December 19, 2010

With software disasters, what you say when you are talking is HUGELY important towards deciding if your team will survive the disaster. Remember that phone call from your manager that I advised you to pick up in part 2 of this series of posts? Chances are that as soon as you pickup the phone he would want to know the root cause of the disaster. Put simply, the what happened part of the story.

Things You Should Not Be Talking About.

Before you pick up the phone there is one hugely important thing that I want you to do. I want you to tell yourself that no matter how ugly it gets (and things are going to get a ugly from here) you are not going to act like a Jerk.

Remember the famous "These Fish have manners. These Fish... have manners." speech from Jerry Maguire? What you need to do, is think of yourself as the fish. No seriously! Think of yourself as the fish in the tank. With the disaster in place the resources in the tank are going to be limited. But you cannot be bumping into other fishes or stamping on them. If you hurt them and they bleed its just going to make the water stink for everyone else in the tank. You have manners and bitching and whining in times like these are off limits.

That part is common sense, but it seems most young and budding engineers and MBA's fresh out of college do not seem to understand the part well enough, so I thought I'd put it down as a gentle reminder. Now, having said that the No Whining rule is pretty much common sense in disaster scenarios there is another kind of discussion that you need to be specially careful about avoiding.

"Oh I told the Business Analyst we shouldn't allow Cascade Delete! That right there could have prevented the delete from happening because every single user in the system had profile data associated with themselves."

Yeah! You were right all along. So why not blame the dolt who was not. There is nothing more your lizard brain wants to do right now, but again, that is not manners.

The moment you say the lines above, you are as good as crashed. Done. Finish. Game Over. You might as well shout at the client and tell him to FU@#CK  OFF. That way when this client is gone you can go looking for another client and hopefully work together using the same team to build a better project, but once you start the blame game it's over. Not just for this project, but for every single project that you are going to work on together as a team. You have lost the essential trust that forms the magic sauce of functional teams.

You have announced that either you team is not cover fire worthy or you are not going to provide any cover fire. In-fact you are going to turn around and fire at them when your ass is on the line.

So while it is perfectly fine, be a part of a few meetings and discussions which resolve around the disaster, but make sure that every single discussion revolves around what caused issue and how to fix things. The Who caused the issue discussions are completely off-limits, specially in difficult situations. They are a perfect recipe for unrecoverable and hugely political spiral nose dives.

And if you are a manager, who genuinely, truly and honestly wants the project to recover from a disaster there are things that you can do to help people steer clear from these discussion, which brings us to the topic for the next post.

Read On.

posted on Sunday, December 19, 2010 10:48:37 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, December 18, 2010

If you have not read the first part of the post, you might want to go through it here to understand the context of this post. Just in case you are too lazy to read it we are going to give you a little bit of a background right in this very post.

You know the disaster I talked about in the first part of this series of posts. Lets assume it has happened. You are staring at the blank database tables which were probably deleted using a SQL injection attack or a developer who was working on production but thought he was working on a development box. You are staring at the blank tables and a one month old backup which you are not even sure will restore. Your manager is calling you. Your phone is ringing. You know you have to pick it up right now. People will start freaking out if you don't.

Now, If you have been a developer for a good part of your life and you still write code, I am assuming that you are going to cringe when you see your manager's name on your phone display on a time like this. "This is NOT the time to be talking"  - the programmer deep down inside who wants to fix things as quickly as possible is going to tell you. There are customers out there not being able to login. You need a plan that will get you out of this mess, Not Another Meeting about what happened and why, Not Right Now! And you are going to think of disconnecting the phone.  Here is an advice: Don't. Want to know why? Read On.

You Need To Say... Something (And Say It With Confidence).

The basic management deal with disasters is that there are going to be Meetings. Lots of them. Like it or not, you are just going to have to deal with the fact that you are going to have some explaining to do. You are going to be doing a lot of talking and that is going to make things worse for you while you are trying to stay focused on fixing things and putting mechanisms in place that will not let the disaster happen again. But this is something you are going to have to get used to. Really Fast. Because all of a sudden, the amount and the quality of talking that you do, is going to mean the difference between survival and a fetal crash.

It's like you were on a dark stage thinking you were just doing the maintenance work... like cleaning up the stage. Then the next second, before you knew it, the spotlight was turned on and there you were in front of a thousand faces, staring at you, expecting you to say something. Expecting you to... perform! Give them a show! As a typical programmer who doesn't see the point of meetings and talking this is going to be a difficult time. But you still need to talk.

As far as talking is concerned here is one time when you need to do one thing and do it really well:

Things To Do #1: Attend all the meetings (at least the important ones): It's like this, your manager, unless he is downright sinister, which I am assuming he is not, is calling you for a reason. You see, as you sit there staring at the blank database and seeing a month old backup, the parallel thread in your brain calculating the damage, your manager who was working at a five thousand feet level, has no clue about what is wrong. With all the support calls and the client calls going to his cell phone, he is probably freaked out. He wants to do his version of damage calculations, using word documents and excel files, map them up with your SLA, see how bad things are. He wants to then work on a PowerPoint which he will need to present to some of your most important clients in a meeting next week. He just needs to know what you already know merely by looking at the database and the logs. It's not personal, but right now, you are his only source of information and that right there is why he wants to talk even in a time like this.

The second reason why a lot of managers go into the Hyperactive-Talk-Mode and sometimes even Micro-Management mode in disasters is because they are paranoid and they lack tools to measure how bad things really are.  It's almost like - "Look, you said things are fine! I trusted you! Now look what happened!" - Again, it's not personal. He means no harm. Its just a normal, natural, lizard brain reaction that you need to understand, respect and address. And the only way you are going to address it, is by being in these meetings, by being honest, by being completely open and by answering ALL his questions with a level of confidence.

If you want to learn how to do that, learn it from the best of the doctors out there. One of them also happens to be a friend. Working on a very minor operation involving my teeth, my doctor suddenly looks at his partner, who is also a doctor and goes "Oops!". I freak out. He smiles. "Don't worry, I slipped a little. We do it all the time. We just don't say it. It's not serious". He laughs. His partner laughs back. And then they gets back to work. That's the kind of insight you get when you are working with kickass doctors. Even when they are being brutally honest. They are able to 1, tell you the truth and 2, tell you with confidence that they know what they are doing and that it's going to be fine (or at-least they are going to try their level best to make it fine).

Another important thing here is because you are going to have too many of these meetings it is HUGELY important that you keep them as short as you possibly and politely can. Convey your message, explain things, give people the confidence that they need and are expecting from you and then get out of the meetings, as quickly as you can. Think of the meetings as the announcements the crew is making as your plane is losing altitude or when your flight is experiencing bad weather.  No announcements mean panic, but announcements are not the only thing the crew needs to be doing. There is a whole lot of additional work that goes on behind the scene. While you need to make sure that while you attend all important meetings and keep people informed about things it is also important that you leave enough time for these other things.

The phone call is where most engineers and software developers go wrong. This is no time to talk! - their brain tells them and they focus on fixing the problem by not picking up the phone, or even worse, doing something stupid like lying about how bad things are. This is where most developers go downright wrong and make the disaster worse.

Where most managers go wrong, is plain old insecurity because of lack of information. Imagine, you are on a plane which is going through turbulent weather and you are buzzing the attendant every five minutes to ask for a personal update on how things are. It sounds stupid, doesn't it? Yet that's what most managers tend to do when they find themselves in the middle of a disaster.

The key in any given disaster, is understanding that you are going to have to do a little bit of talking and explaining. Just how much of it you do is going to decide if you survive the disaster or blow it up completely. Also, it's not just how much talking you do that is important, it's also what you talk about, that is equally important, which creates a seamless transition to the next post.

Read On.

posted on Saturday, December 18, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, December 17, 2010

Software Disaster Virgins.

When it comes to programming, they say that you are a virgin till the time you have seen at least one nasty COLLOSAL F@#CKUP.  I'm not talking about "Oh we are really sorry about the 15 minute downtime last evening" kind of a f@#ckup here. I am talking about the f@#ckups which have the potential of costing you your jobs, your project and at times even winding up your organization.

A DISASTER! That's what I'm talking about. That's what this series of posts is about.

Now, the thing with these software disasters is that they are not exactly out there looking for you. Most developers are going to see just one or two of these in their entire lifespan and if you are a consultant let's face it, you are going to sense this disaster coming, upload your resume on a job portal, send out a few mail blasts, run to find a new job and as soon as you do, never look back.

Let's face it, most programmers haven't seen even one of these f@#ckups in their entire life. Which is why when they bump into one, they are so utterly confused and lost that they either blank out or do something stupid like try and blame it all on the other programmer who also happens to be one of their best buddies. Most managers it seems have also not seen these f@#ckups either and my theory on why they have not seen these disasters is because their resumes are usually the first to hit the job portals when things begin to heat up. Talk about leadership... managers are notoriously famous for leading from the front when it comes to scrambling away like rats when things start going wrong.

For all those of you little boys and girls out there who have not yet lost their developer virginity, I thought I'd give you a list of things to not do, a list of things to do and most importantly a quick guide to the various mindsets that you will need to decipher and deal with if you find yourself in the middle of a software disaster. Now, if you are one of those who go running to a job portal or a placement consultant at the first sign of trouble (I interview about a dozen of these every couple of months) this article is not for you. For you, we have job portals like this one.

However, if you are someone who understands that surviving it makes you a better developer, a better manager, a much nicer person, creates long term memories and fundamentally changes the way you see your team, your work and your work life, sit back, relax and read on. There is going to be way too much information so make sure you are awake and are drawing your own conclusions because all I have for you today is just some random thoughts and you are going to have to do the hard work of gathering them in a coherent stream and making sense out of these thoughts yourself.

So, things you should know, things you should do and things you should not do during a software disaster. Before we get to that bit however, its important you understand a typical software disaster really well, primarily because when you understand what you are dealing with, you automatically tend to get better at dealing with it. Lets talk about the disaster itself and how it typically shows up. Ready? Let's begin!

Discectomy Of A Software Disaster.

It typically shows up as a simple support phone call. Usually during the evening. You are sipping your coffee, playing low music and in the flow when the phone rings. You don't want to get it. You ignore it. A couple of minutes later a simple support email drops in your inbox. Some user is not being able to login to your application. "He's probably forgotten his password or something", you tell yourself. You are about to brush it aside, when you blink. Something tells you there is something wrong. You decide to take a look. You try to login with a test user. No luck. Maybe it's just bad configuration which has locked everyone out. The problem, has your attention now. You take a look. Everything on the configuration seems fine. You hit the database server. A quick select from the User table on your production database. Then you sit there for a few minutes, wondering what just happened there, watching the screen with zero rows and a blank user table.

F@#CK! - is all you can say or think of.

It takes you about 15 seconds to realize what just happened here. The data is gone. Zip! Just like that. No users in the user table. A tiny little parallel thread spawns up in your head. You are using that thread to think about your argument with your business analyst where you were telling him that administrators should not be allowed to delete a user if the data for the users exist, but he insisted on deleting all data of a user when a user is deleted. You are wonder, maybe (just maybe) you argument would have prevented this. Another parallel thread. This one is thinking about the day when your DBA added that Cascade Delete option after telling your Business Analyst that he wasn't happy doing it and that he was strictly recommending that it not be done. But it was done and everyone had celebrated the release of a new version with all requirements met.

The Backup! The primary thread in your brain shouts out loud. Your daily automated incremental backups and the log backups you run every two hours. The sheer effort the team had put into the backup strategy is going to pay off now.

You snap out of your panic mode, try to shut down all other parallel threads in your brain and focus but you can't. You are calculating the damage. Even with the backup you are going to loose a couple of hours of data. You are going to say sorry to your user, maybe send an email. It's going to be fine. Thoughts like this one racing through your head as you log into the database backup server. A fifteen minute restore operation is going to set everything back to normal, if only you can find the incremental backup for today... you scroll through the files... to find the latest incremental backup... which is... about a couple of MONTHS OLD!

Turns out your automated backup process ran out of disk space a couple of months ago. It would have sent you an email notification when that happened but the IT guys changed the IP address of the email server without bothering to tell anyone and the DBA didn't change the SMTP configuration in the automated backup job, so the email code had been sitting there quietly, logging stuff on your Event Manager when  you were expecting an email if the backup didn't happen.

F@#ck - is all you want to say now, but you lack the words or the processing power in your brain to say that out loud. The primary thread in your brain is fumbling for alternative options of recovery. Its trying to think of an answer... frantically.

The parallel threads in your brain are all busy doing damage calculations now.  What you do not know is that this is just the beginning of it. From this point on Murphy's Law is going to kick in. Colloquially speaking, from this point on everything that can go wrong... will.

The phone rings again. You glance at your phone's display. It's your manager calling. You realize that he had called a few minutes ago when you blissfully ignored his call because you were in the flow. He is probably getting countless calls from your users by now. You want to focus on fixing the problem. You do not want to pick up the phone. But you know you have to... and you do.

The Disaster that can change you forever has begun.

I have witnessed a few of these in my life and have at-least been a part of more than one of these myself. During my consulting days I have also played the firefighter who people hired to clean up their shit when these disasters occurred. If there is one thing I have learned by observing all of these disasters, it is that all of them (Every single one of them) have one thing in common: They are like airplane crashes.

Airplane disasters, the ones which cost lives and millions of dollars, are typically not just a result of pilot's error. If you have spent any time reading up airplane disasters what you will learn is that most of them are caused by a series of small events. Some company somewhere manufacturing spares decides to work on the brink of the lowest quality allowed by safety standards, some purchase officer who wants to maximize profit orders these parts, some maintenance officer doesn't inspect the parts seriously enough between flights, one of the latches gives, the pilot panics, someone uses mitigated speech while communicating with the control tower... the list of things that go wrong in any given incident is almost endless. At any given point there are at-least eight or nine things which are wrong, none of which single handedly would have been capable of causing a disaster but collectively they do. That right there is how airplane disasters work... Software disasters (if you have been reading my description of the software disaster above) are no different.

A manager thinks that he can push the programmers, programmers think they can work on the brink of quality and get away with it, QA thinks it's OK to work under the assumption that the programmer must have done some basic sanity testing. Your backups fail, configurations change... add a few more tiny mishaps into the picture and one small broken window turns into a torn down warehouse or a bashed up car over time, slowly and steadily. By the time you find out, the disaster has already happened. A young college kid, just for the kick of it, just snaked up on you, did a quick SQL injection attack and wiped out all your users. You are now heading towards the ground on your first spiral dive and you have no clue about how bad things can get from here.

While airplane disasters can be attributed to a series of small things going wrong in precise order and time, and it is almost never caused by any mistake from a single individual, a pilot's way of reacting to the disaster means the difference between crashing or recovering. Inexperienced pilots either choke or panic. The ones who have seen a spiral dive before, do not choke or panic, tend to survive.

Do you think you can survive a disaster of this sort? Do you think your organization can? Do you think your team can? The answer really depends on how closely you know these disasters, what to do in them, what not to do in them and above all, how well  you understand how these disasters work and how people react when they are in these disasters, which brings us to our first item on the checklist. Stuff you should do when you find yourself in the middle of the disaster... a perfect topic for the next post.

Stay tuned.

posted on Friday, December 17, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, December 12, 2010

Here is a classic (and rather stupid) Project Management question that you are bound to stumble upon if you are interviewing for the role of a project manager. The question: You have a very important deliverable on Monday. You suddenly realize on Friday that a huge task is still not done. You have a developer who is supposed to complete that task. However he seems to be having some family problems. What will you do? Will you make him stay late or come on weekends and finish the task or will you ask the management to delay the deadline?

An acquaintance who was recently asked this question snickers funnily as he describes how he "smartly" reacted to the question, told the interviewer that he will ask the developer to stay late and have him finish the problem. The interviewer as it turns out was VERY pleased with the answer and this acquaintance was offered a job after the interview ended. "I just reacted smartly, gave an shrewd response and made the idiot happy", the acquaintance of mine laughs as he tells his story of getting selected in this organization.

I could do a long rant on why this question is a hugely stupid question to ask in an interview. The question assumes that you can either be nice or productive. It assumes that there are no other developers who can pitch in and contribute. It assumes that you cannot code yourself and pitch in. It assumes a whole lot of other things. Like I said, it is a stupid question and I could do an entire post on criticizing it but instead, I thought I'd rather do the jerk conducting the interview a favor and talk about something that he was doing right during the interview.

Surprised? No Seriously! The Jerk was ACTUALLY doing something right! Honest! Want to know what it was? Grab a bag of pop corn and read on.

Interviews are complicated. They are also a completely outdated, funny and ineffective way of finding out if someone is productive or effective. Of course you can ask the person how delegates and lambda expressions work in C# and ask him to show you a real example of why you would need a delegate. That tells you if he knows his shit. It tells you that he is smart. But then most kickass companies need two things in the developers they are hiring. The developer being smart is just one of those two things. His being smart does not mean a thing till the developer Gets things done.

Smart and Get things done - Joel Spolsky wrote a book on it. Marissa Mayer, also believes it. Even Steve Yegge also believes it in his own different Kinda-Sorta-way.  

Most attempts to find both of these aspects in three two hour interviews are futile, funny and down right stupid. You can't do it. All you can do is do some basic sanity checks on your candidate, filter out the hundred other stupid candidates that fail the sanity test and hope that the one you hire works out because he knows how delegates work in c# and is able to show some signs of basic ethics and goodness during the interview. But you have no idea of his effectiveness what so ever. Stop fooling yourself!

Now, for a second, lets assume, that you were to magically find a perfect interview process which lets you measure how effective the person is can be at his work. So now you rejoice about your new found interview process, go to a bar, get drunk, eat chocolates, call your family (or do whatever it is that you do to celebrate success) and get ready to reap the rewards of this process the next day. You now have a well defined process to find out candidates who are smart and who are capable of getting things done. You are now going to have a 100% success rate at hiring amazing guys in your organization!

And then you hire your first candidate using this newly found process. And he is really smart. And he can pull new algorithms out of his ass and throw them at you every five minutes. And he is really effective. And he can get an entire million dollar project done in like a... month. And all he wants is average compensation. You celebrate! The process works!

But then on the very first week of his work you see that this new hire of yours is not effective at all. Actually, he is smart. Really Smart. He can also be really effective. But he is just not feeling it. You know, you are into building really simple, clean interfaces and simple applications that people love and this guy loves building complex enterprise applications with a zillion options and features. He thinks you are a stupid little software development shop that is not doing any serious work. You are just an insignificant 37Signals who doesn't even exist in front of an IBM which is what he wants to build software for or do a job at.

Your so-called full proof interviewing mechanism failed because it did not consider a hugely important thing most interviewers fail to consider while interviewing folks. Time to bring in the third thing into the equation.

Beliefs.

Now, let's go back to where we started off with. This is where the Jerk interviewing my acquaintance was doing something right. By asking the famous project management interview question "will you make your team member work late when he is having some serious family issues or will you ask us to delay the deadline", this Jerk was making two points: 1. That he believed in being a Jerk. 2. That he was only looking to hire others who believed in being a jerk.

Nah! I am not talking about cloning yourself here. But if the Jerk knew that his organization was built on prickdom, he probably did not have any use for a nice guy who was willing to pitch in, help, contribute, participate, innovate, ship remarkable stuff... YAAAAWN!  He was looking for a Jerk, to control a bunch of Jerks who had also gone through similar rounds of interviews and were a perfect fit to the culture of his organization.

In being smart and hacking this interview, this acquaintance of mine, violated a basic rule. He basically told the interviewer that he was a Jerk when he was not. But then, I digress. That is not the point here. The point here is that the Jerk was doing something right. He was guarding his beliefs. He was making it very clear that you are only allowed to be a part of the organization if you were a bonafide asshole.

I am not saying that you have to be a Jerk. Neither am I saying that you have to hire Jerks. But you still need to learn the concept of protecting your beliefs just like the Jerk was protecting his beliefs. And that effectively means, that if you believe in the power of small and employees being smart individuals who when left alone do the right thing, then you should NOT be hiring anyone who is into managing your employees with a Gantt Chart.

Heck! Maybe you should be asking the same question (even though It's stupid) and kicking people right off your doorstep if they say they'll make someone who is going through a problematic time in his family, stay back all weekend to fix a stupid bug. I'm just saying.

The fundamental problem here is that most managers do not do that. Most managers even find it difficult to stand for their own believes. "Let's focus on innovation", the Vice President of engineering in your organization shouts and then the next day he adds, "Oh and by the way, can we ship these three features and seventeen reports for the road show next week?"

When this well meaning, good hearted vice president sets out to conduct interviews, how much importance do you think he is going to give to his beliefs? Enough to reject someone who does not TOTALLY believe in what he himself and the organization believes in. "He has a really good education. He comes from a different background, but he seemed smart and he is willing to learn, so I think he should be able to pick up our culture", ever heard that? That's the kind of bullshit you hear the vice presidents saying all the time.

So, protecting your beliefs is really important. But what is more important than that is having your belief's. Apple has a belief. 37Signals has a belief. And so does IBM. Even if these are completely contradicting beliefs. For example, compare what a 37Signals believes in with what an IBM believes in. But both of them protect their beliefs and guard them passionately.

The lousiest organizations are the mediocre organizations that believe in nothing and oscillate from one thought process to another depending on the market trends and what is profitable. The lousiest managers are the ones who have no opinions and are not willing to take sides.

When you are running an organization without a belief, all you are doing is hiring based on technical knowhow and some basic character evaluation. Prepare to land up with some serious conflict of interests within your employees, within teams, within divisions and within every single individual in your organization. And then when you see people bitching around and getting all political, don't complain.

After all, one of your Vice Presidents is busy drooling over 37Signals, the other wants to get your organization CMM certified and the third one doesn't even care to take a stand. He is busy oscillating between both every other week, because he is totally confused about which one gets him more business and which one gets him more productivity. And your employees are watching these Titans fight and wondering what the hell are they doing.

Maybe this sounds like an Exaggeration, but the point is, unless you have a single belief which is larger than life that governs your organization, unless you have a closed Tribe of people where the one mandatory criteria for joining the Tribe is believing in what the rest of the tribe believes in from the bottom of your heart, you are just going to keep going round and round in circles, fighting, bitching and arguing with each other every time you need to take a decision and most of your kick ass developers are going to be utterly confused about your direction, your progress and your end goal.

So the next time you conduct the interview, build a few questions that test the beliefs of the candidates and kick them out if their beliefs do not align with the beliefs you are looking for. If you can't think of any other question, start with the infamous "will you ask your team member to work on weekends when he is having a family issue" question. Instead of giving him only two choices leave the question open ended and see what he would do in that situation. See if the candidate's answer is similar (in belief and approach) to what you might have done in the situation. I know It's a stupid and a common question to evaluate belief, but then but something is better than nothing.

I'm just saying.

posted on Sunday, December 12, 2010 11:28:16 PM UTC  #    Comments [0] Trackback
Posted on: Friday, December 10, 2010

The post is slightly long winded. You might want to grab a pop corn, sit back and relax as you read through this one. We are going to talk about about a horribly wrong management approach that a LOT of managers out there seem to be using even today despite of it's obvious disadvantages.

I could just tell you what the management approach is but I thought I'd take you all the way to India and introduce you to how Indian parenting worked when we were young, how we grew up and what civilized, educated parents in India are starting to learn about the human mind that the MBA graduates with their fancy courses in Resource Management just do not understand.

Ready? Let's start.

Unlike a few other countries out there, in India slapping your kids is perfectly acceptable and allowed under the law. This means that Indian parents are set loose and are free to slap their kids to discipline them every time their kids are found creating a ruckus. With upbringing of the kids mostly considered a social responsibility of the family where the government or law enforcement has very little involvement you would think that most Indian kids get slapped all the time.

The reality of it however, is very different. More and more civilized, educated parents of the Indian middle class family are starting to realize that even though you are "technically" allowed to, slapping you kid more even a couple of times in his enter lifetime is a stupid thing to do. All you do with beating is create rowdy goons and hoodlums.

This was not always the case however.

When we were young, casually slapping your kid to quite him down was considered pretty normal. Our neighbors for instance (who for the purposes of this post, we will refer to as 'The Fredsons') had no problem in slapping their kid once in a while when the kid was acting like a brat. Little Fredson played with us and as youngsters it was not an uncommon site for us to see Mr. Fredson come out and give his son a mild slap every time we hit someone's glass window with a ball and shattered it into pieces while playing. The game of Cricket would end instantly, Little Fredson would be slapped smack on his cheeks, though not very hard. He would cry for a few minutes, our parents would call us to our homes and that would be the end of the game (for that day).

Even in those times my parents took a slightly different approach of "talking" with me and my brother when we made stupid demands or acted rowdy. Instead of traditional slapping we received perfectly rational explanations on why we were not supposed to be doing whatever it is that we were doing. It would be a perfectly legitimate grown up discussion. Explanations were provided. Logic was used extensively. If we lost the argument, we obeyed, if we won, we had our way. It was that simple. Heck! It was a meritocracy where your ability to present your side of the story and use logic could actually let you get away with stuff that other kids our age did not even dream of getting away with.

Even back then, my parents understood a fundamental rule of parenting that most Indian parents did not understand. Slapping your kid has two aspects to it that stops your kid from doing the same thing again. The psychological aspect of it, which is to say, the kid feels really bad about having disappointed his parents. This aspect is really powerful. If you are a kid who loves his parent, their slapping you tells you beyond doubt that you have let them down. Then there is the physical aspect. Slapping can hurt, one, your body and two, your ego. It is this pain that is supposed to prevent a kid from doing the same thing again.

The problem with slapping your kid however, is that once you have done it a couple of time, the psychological impact of it wears out. Here is why this happens. You see, we (human beings) calibrate ourselves depending on the world around us. As human beings we are not very good at seeing ourselves as pathetic creatures who keep hurting others all the time. Our self esteems are much higher than we think they are. If you were the kid who was getting slapped, the first time you were slapped you would feel really bad psychologically. You just let your parents down.

The next time it happens, it feels just as bad. The third time it happens you begin tuning yourself. If it happens a little more frequently, your perspective starts changing and your mind tells you, "Bullshit! They seem to see a problem with everything I do. You know what? Maybe there is something wrong with them. Maybe they are just being too hard on me". There. The psychological aspect that was supposed to make you feel bad and stop you from doing the same thing again is gone. After all, there is something wrong with them. It's their fault. 

With the psychological aspect of it now gone, the physical aspect of it kicks in. This is the part where Aristotle often held an opinion that fear is synonymous to lack of habit. Scared of going on a battle? He asked. Fight a few battles, get used to the idea of being in a battle field, survive the battles, get habituated to the warfronts and your mind will stop getting all scared and worked up when you find yourself on the battle field. It is the best way to overcome your fear of public speaking if you ask me, but I digress. The point is, this is yet another example of the human brain tuning itself to the situation.

Once the psychological aspect of the beating has been thrown out of the picture, your getting habituated to the physical aspect of beating is just a matter of time and that just means your parents have to now increase the intensity of the beating to keep you from creating a ruckus again. Slaps have to get tighter. Grounding durations have to increase. And if your parents are to do that, chances are that you are going to tune yourself to the new intensity pretty soon. Your mind is going to get habituated to it. It's a vicious cycle capable of tarring relationships and creating goons or hoodlums out of perfectly smart kids.

With me so far? Good! Now let's get to the point.

Remember Little Fredson? Or the other kids who did get beaten up all the time. Let's replace them with your development team, the parents with the classical managers and the slapping with the classical "push" that the mangers apply on their team to make them work hard. You know, the classic, calling them in a meeting, putting them on spot or being "strict" with them to make them "work harder"? The push where you are constantly creating artifical deadlines, having three meetings a day and running around with Gantt Charts in your hand. Yeah! That push.

The problem with that push is that, just like beating up the kids to discipline them, there are the exactly two elements (the psychological aspect and the fear aspect) that are at play here. Your engineers (assuming that they are decent human beings and good programmers) want to do the right thing. Once you have applied the "push" on them a couple of times and used the carrot-or-stick to motivate them, you have tarred their psychological desire to do the right thing. Put simply, you have destroyed their intrinsic motivation and have replaced it with extrinsic motivation. You have turned perfectly smart human beings into animals who think with their lizard brain.

With this intrinsic motivation and the psychological element of doing the right thing, out of the picture, the only thing that is going to make them work hard next time is a "harder push". It's a vicious cycle capable of tarring relationships in a team and creating goons and hoodlums out perfectly smart, kickass ethical programmers which is EXACTLY similar to beating up your kids to discipline them.

With me so far? If you are a fresh pass out from one of those business schools you are knitting your eyebrows already. "It's easy for you to say Pops! You probably work in an organization where everyone around you tries to be reasonable with each other. We have to make our programmers ship. What do you suggest we do? Pamper them?", you ask.

Well, do exactly what my parents did while bringing us up. The approach was somewhat unconventional at that time but it worked. Actually, it did not just work, it did magic in our relationship and even today I feel just as comfortable in sharing most of my problems both in my personal and professional life with my parents. When they started these conversations, they moved from being parents to being peers. They became friends. And I didn't exactly drop out of school, become a goon or a thug. So I am going to assume that the approach they used worked and try to tweak it for you so that you can use it in your workplace. Ready? There are two simple steps involved here:

Step One: Listen

Ok, back to the basics. Step one is listening. Most managers (me included) don't know how to do this. That does not mean you stop trying. When someone approaches you with a problem, there is a devil in your mind saying, "I don't care about this microscopic shit he is talking about. All I care about is the ship date. It's just a effing database configuration! Surely they can figure out how to speed up the application, If I can just push them to...".

BAD MANAGER!!!

You developer is telling you something. Like I said, LISTEN.

Yeah, I know that devil is speaking in your head right now as you try to think of arguments and how this does not apply to your team and how your programmers are lazy scumbags who want to take you for a ride and you are thinking about those examples where Jack just took a leave three weeks before the ship day... and... and... and... he did not even pick up the phone when you called... you are thinking about your arguments. You are NOT listening to what I am telling you. You are NOT listening! And that means you probably do NOT listen to your developers when they come to you expecting help. See what I mean?

Stop Talking. Now! Start Listening.

Step Two: Talk With Empathy And Trust.

Empathy. Steve Yegge thinks that this the only thing you need to be a good manager. I think Steve Yegge is not just an awesome writer but he is also one hundred percent right. Your developers will bend over their back to rescue you out of a situation if you are open, candid, honest to them and are asking for help as a friend or a candid colleague.

"We are trying to expand the organization and get a bigger office by the end of this year, which is why we need new clients to sign up. Three of them have asked for a feature. I know you said it was going to take three months and I am going to try my level best to talk to them and see if we can make them wait for three months but if they do not budge and insist on getting it faster what do you think is a good estimate to give him? Also what are the features that you think we need to drop if we are to do it in a couple of months?"

See? That wasn't hard. The key here is, saying it with empathy. Add a little bit of genuine trust in your developer's judgment when he gives you a list of ALL those other features that you will have to drop. Don't argue with him telling how all those features are also important. Congratulations! You now have a programmer who is going to give you the best possible timeline without putting your project in danger, without going into hibernation, without writing F@#CK YOU Code and without shipping crap.

Do you really trust him? Are you just taking him for a ride? Is this a genuine urgency? Have you genuinely tried you level best to make sure that the urgency did not happen before you asked for help? Are you going to try your level best to see to it that this situation does not happen again?

Your developer is looking at you as you talk and these are the questions he is asking. He is going to be looking at everything you say very closely. Here is another advice: Don't try to fake empathy. Its like this: You'll get caught. How? Because you interviewed a hundred candidates and hired that smartest F@#cking candidate that you could find. You can't just expect him to isolate his intelligence to that time of the day when he is coding and leave it outside your office door when he enters your office. That's why, silly!

The Point

If you were lost in the digressions of the post and made no sense out of it what so ever, I feel your pain so I am going to make it simple for you and sum it all up. Striking similarities exist between good parenting and good management. If you want to learn good management, go watch a couple that has raised kids who respect them, love them, consider them to be friends and have not turned into goons, thugs or hoodlums. You will find ingredients of decently good management are all there.

Oh and every time you try to "push" your developers to work harder, might I remind you, that all you are doing is slapping your kid. I don't care how mild the slap is, you are adapting to a life style where your slaps are going to have to become tighter, your relationship with your team is eventually going to get tarred and you are going to turn perfectly responsible, ethical, smart working programmers into goons, thugs and lying scumbags who just do not give a damn. I'm just saying.

I wish I could give you a perfect recipe for teaching you how you can hire the best programmers out there or a perfect recipe for how you can stop being paranoid or how you can learn to trust human beings in general and your team in particular, but I can't. Teaching anyone how to trust someone else is hard. I suggest you start by unlearning everything about managing resources that you learnt in your stupid MBA course, throwing out your Gantt Charts, giving up the idea that you can control anything (leave aside the idea of controlling other human beings) and like I said, start practicing how to listen.

Yeah, that might get you started on the right track, but then it's a long way ahead and you are going to have to walk a few miles everyday. Oh and the journey does not have a exact well defined destination so if you are one of those managers hoping to find the end somewhere in the next three months and land with a team that has complete trust in you, super human output and unthinkable productivity, don't even bother to start. You are just going to wear yourself out.

On the other hand, if you see this as a life long journey and are willing to walk on this path of listening, caring about and trusting your team, for the rest of your life, you might go a long way, get a lot done and earn a few friends along the way. As always, all I can do is wish you good luck.

posted on Friday, December 10, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, December 05, 2010

There is a restaurant in my neighborhood that has been around since 1922. They serve the most delicious Indian food you could possibly get. When I want to pick up some food to-go that is my default destination.

When I am with my office colleagues or people who I do not know really well however, I might choose a different place with a brighter ambiance.

The restaurant owners don't worry as much about opening an Italian restaurant in the same block where there is another Italian restaurant because they know that there are so many things that sets each restaurant apart from the other one.

The dishes you serve. The chefs you hire. The ambiance you create. Your menu. Your price. Your secret ingredients.

Even the kind of people who eat (or hang out) at your restaurant can be a deciding factor into who else eats there.

Every single factor complements every other one to decide who walks into your restaurant on a Sunday evening.

And invariably, each restaurant that stays around finds it's own niche and enough customers to keep going, within the couple of years of it's inception.

Software programmers, it seems, are different than restaurant owners.

We obsess about if our idea has already been built. And if we stumble upon someone who is doing something even remotely close to our idea we quit building stuff. We bitch and moan about all ideas having been taken. "Anything worth building has been already built", you say. "I had a great idea once, but there were already two huge companies out there doing exactly what I had thought of".

That's like saying that there is already an Italian restaurant round the corner and that means there is no room for my restaurant, even if I can serve the most delicious, thin crust crispy pizzas and build an ambiance where young college students will love spending evenings. So what if the other Italian restaurant does deep dish pizzas and caters to families.

When you think of building something, the only essential question you need to ask yourself is not if someone else is already working on the problem. The only essential question you need to ask yourself is, can you see the problem from a completely different perspective.

Can you add a little bit of you, to your solution?

The user interface, the feel, the number of clicks, the features (and even the non features), the people who hang out on your website, the niche, people who build your website, how your website feels. Just like the restaurant business, there are way too many factors that complement way too many other factors, which will decide who logs on to your site on a Friday evening. Can you tweak just one or two factors really hard to make your website stand out.

If you can, you should think of serving us your delicious crispy fresh software or service.

You don't need everyone. Just a few of us will keep your site (and your organization) going.

Go on. Start something, even if someone else is already doing it.

If you do it well, if you do it differently and if you keep doing it with consistency, we will come and we will keep coming.

I wish you good luck.

posted on Sunday, December 05, 2010 11:41:27 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, December 04, 2010

Building CRUD screens is a task.

Shaping a brand new idea into existence is a challenge.

Forwarding emails is a task. Mentoring a team that is capable of flocking and liking each other ... a challenge.

Checking the status of your project with your team is a task. Inspiring your team to move things and to avoid mitigated speech is a challenge.

Writing Module Specifications is a task. Making requirements interesting enough to get people to give a shit about them is a challenge.

Attending meetings is a task. Applying an innovative solution to fix the problem you were going to discuss in the meeting is a challenge.

Your organization, almost invariably, will give you tasks. That is what organizations do. Organizations do that because that is what they are really good at doing.

Your only (of course, I mean "only") hope for survival is taking on challenges not tasks.

If you are stuck with nothing bust tasks learning the art of morphing those tasks into challenges is a crucial ingredient for your survival.

The tasks you do will define your job role and your paycheck.

The challenges you undertake will define you.

How much of your day job is made up of tasks? How much of it is challenges? How much of it is tasks with hidden challenges vs. how much of it is tasks you can outsource to the cogs in the Indian body shops? There is a task on your task list right now. There is probably a hidden challenge in it right if you look under the hood.

The real question is, can you see it... are you man enough to pounce on it.... or are you just going to focus on getting the task completed so that you can move on the next task?

Just a little something to think about.

posted on Saturday, December 04, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, December 03, 2010

The moment you have an idea for an application, if you're like most people, you get really excited about what the product will be called. As you fancy a world where the product exists and people love it, you tell yourself, "Hmm, I wonder what a good name for the product will be".

Now, for those of us who have tried to name anything, from a baby to a website, we know that naming is hard.

"I wonder if this one is taken", you think of a name and before you know it you are spending your mental cycles in thinking a happening name and giving in one futile attempt after another only to find that all those names that you can think of are taken.

Then you get lucky and get a domain name, but then the twitter account for that name is taken.

"Those pathetic twitter squatters! I mean he is not using this account. I wonder if I can email him and ask him if he would be willing to sell the account to me.", you tell yourself.

See where you are going with this? Again, if (and I am just saying if) you are like most people, you are going to run thought loops in your brain, think of dozens of hot happening name for your product and wear yourself out before you even write a single line of code.

Naming a product you do not have is just about one of the stupidest things you can do. Ok, wait, actually there is one thing even more stupider than that. You know what that is? Naming a company that you do not have.

No, Seriously. How difficult is it to stick a logo with a sexy name on your template file once your product is built? How difficult is it to register a company after you have your first customer willing to pay you for your work?

If you spend days thinking about the name of the product, before you even write a single line of code you are a dreamer.

Wake up kid.

Write the damn product first. The pleasure of naming a product is supposed to be a reward for nearing the shipping of your product and you, are nowhere close to shipping your product yet. So snap out of it, open that IDE and start working. Let's see if you can build something which is even worthy of being named.

Oh and by the way, now that you have the IDE open, I wish you good luck.

posted on Friday, December 03, 2010 11:10:35 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, November 28, 2010

When you hired Fred he was one of the few fairly productive employees you could lay your hands on.

There were a few minor glitches during the interview but then he seemed technically competent.

His demands were simple and very legitimate:

  1. Some autonomy and ownership over his own work.
  2. Good work with the latest technologies and frameworks out there.
  3. A pay package that does not insult his capabilities.

A couple of years in the organization and you can see clearly that the cost of keeping Fred happy and satisfied is increasing steadily. Fred now just wants to work with the European clients because he has never visited Europe and is expecting a nice little business trip there. All of a sudden he cares little about the technology this European client is using or the autonomy that he has in his work. His primary focus is a big extravagant business trip to Europe.

You Cringe.

Fred in the last couple of years has morphed from someone who was highly innovative and driven by intrinsic motivation into someone who is high maintenance, low productivity and highly calculative about extrinsic factors. 

Once the barrier for being low maintenance is broken, it is a slippery slope down the hill. Fred suddenly feels that he is underpaid and overworked. Autonomy and quality of work mean nothing for him. Oh and by the way,  Fred also expects a promotion in this year's appraisal, even though he did not do a lot of 'real work' this year.

He is a borderline case of venting his frustrations on the employees and the organization.

Like it or not, when these symptoms show up, chances are, that you are going to lose Fred.

And then one fine morning Fred knocks on your cubical to talk about his resignation.

Your instant impulse? To offer him a raise. Match the offer that he is getting in his new organization.

After all he was once a productive member of your team.

My advice: Don't even think about it.

You lost Fred, the day his productivity curve started going down. In fact, you lost Fred, the day he stopped working for intrinsic motivation and starting whining like a baby for that European trip.

You can either take my word for it or you can try and match Fred's salary. If you went the later route, chances are that within six months to a year, you are going to see Fred knocking at your cubical, wanting to talk about his resignation again, this time with a higher offer letter.

Instead of trying to get Fred to stay, you are much better off letting him move on and letting someone else in his team take up his responsibilities, even if Fred is your alpha geek.

As scary as it seems sometimes new faces and thoughts are good for your organization. Stop your negations with Fred, let someone else in the team take up his responsibility and  let life get back to normal. Or you can go hire but if you choose to do that, do it like your professional life depends on it.

Either way, I wish you good luck.

Oh and if you are sitting there negotiating with Fred you are just wasting your time and energy.

posted on Sunday, November 28, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, November 27, 2010

You have gathered for a meeting. This one is not the casual sitting around the fire, chatting about the meaning of life and discussing the movie at the theatre in the next block, meeting.

This is serious business. You know it. Your boss knows it. His boss knows it too. They are all there. Pumped up. There to take a decision about the features that we will need to build in the next one month to wipe out the competition or maybe to pick a framework for your next project.

"So, do you think we can ship by end of this month?"

"Which framework do you think we should build this using?"

"How many more people do we need to get this done by the end of the month?"

Yeah. I know. Its tempting.

"Gee Boss, I think we should build this using Dot Net Nuke and hire about three interns and a senior engineer on the team."

Bad move.

Shut up!

When you are in a meeting your job, as a manager, leader or whatever it is that you call yourself or see yourself as, is to avoid decisions from being taken over a single meeting. Classical business analysts and managers will tell you that this is because you need to protect the team from your upper management. That explanation is almost always bullshit. Your team does not need protection from the upper management.

If your upper management is getting you on a meeting and asking you these questions chances are that you are one lucky son of a gun who has landed with a really strong senior management team who cares enough to ask you what you need.

That doesn't mean that you have to give them an answer right away though. Like I said, Shut up. You need some think time on the time your team is going to take working on this. You need to see if Dot Net Nuke really fits what you are trying to build, or will you just end up building yet another Frankenstein.

Overall organizational decisions taken in a single meeting are equally risky. So Fred miss utilized the corporate credit card. You are in a meeting discussing the problem. Someone three levels above you hastily panics. "So, do you think we need to stop the corporate credit cards for everyone? Are they really needed?" - Again, temptation to give your instant opinions. This is one isolated incident. Maybe it needs an overall organization policy change. Maybe it does not.

Whatever it is, the only thing that I can tell you is that you do not need to decide the solution over that meeting.

Breathe. What you need to do in this situation is protect yourself and your management from one of the biggest threats of the software development world: Panic.

When you are in a meeting, the pressure to take the right decision is  immense. Chances are that you are not going to be able to Blink well in this scenario. The solution, the right solution to the problem is most likely to show up tomorrow morning, in the shower.

When you answer in a meeting, your management listens to you and decides to move in a particular direction, all of it happening during that one meeting, you block the possibility of the best solution showing, in the shower the next day.

As tempted as you might be to open your mouth during that meeting, shut up. Sleep over the problem. Give it some soak time. Chances are that the solution you have the next morning will be much better than the solution you have during the meeting .

When it doubt, choose silence over spontaneous reactions in meetings. You are not going to make the best of the decisions in a meeting when you are surrounded by people and have precisely a couple of minutes to react and take a decision. Go on. Defer your decisions. Ask for soak time. Most of your important decisions deserve at least a night long think time and what you need to do, is learn how to ask for it. Blatantly and clearly.

I wish you good luck.

posted on Saturday, November 27, 2010 8:30:00 PM UTC  #    Comments [3] Trackback
Posted on: Friday, November 26, 2010

Neuroscientist around the globe now believe that human beings can be classified into two primary groups when it comes to their sleeping habits and productivity. Some of us are much more effective during the day while others are much more effective at night struggling to get up every morning.

The whole idea of having a common work time where everyone does a nine to six is really counter productive as per this theory, but that is not what this post is all about.

One of the building blocks of the theory that some people are much more effective during the early morning while others are much more productive during the late night dates back to the days where our ancestors were living in the woods and were gatherers.

It is believed that during that rather large number of years of evolution, the human race had figured out how to collaborate better for survival. Each tribe was comprised of typically two kinds of human beings. There was a group that was responsible for getting up early and gathering food for the tribe. Then there was the group that was responsible for staying up late and guarding the tribe against attacks from wild animals.

Years of evolution, morphed the neural pathways of these two groups in such a way that the first group was much more attentive and functional during early mornings, while the other group was much more attentive and functional during late nights. This theory, received a lot of attention in a book called Brain Rules  by John Medina

Once you start comparing the modern day world with it's roots from the prehistoric era when our ancestors were barely getting down the tree and lighting fire,  behaviors or individuals and how the human race might have morphed start making a lot of sense.

Take for instance the classic act of gathering in meeting rooms, sitting around a table and talking at length for hours about what is wrong and how we (the collective we) should fix it. The meeting room is typically filled with two kinds of people:

The First Kind: The young and enthusiastic developer, who is clearly not very comfortable there. He is fidgeting in the chair, looking at his watch to see the time, wondering when the meeting is going to get over, thinking about the memory leak in his code and how he is going to fix it and talking occasionally only when asked a specific question.

The Second Kind: The manager from the best management school in town, who is contributing actively to the discussion. Asking a lot of questions. Dragging the meeting longer, is in no hurry to end the meeting and in all probabilities is going to go and watch you tube videos after the meeting.    

Your meeting is a Bonfire from the Pre Historic Era.

No. Seriously. Dive back into the depths of time. Our ancestors lighted up pieces of wood every night and gathered around it too feel the warmth of the fire. The fire was a symbol of safety. If you were a tribe from those days, who do you think would have liked the idea of spending an entire day and night around that fire?

The gatherers had stuff to do in the morning. They had to catch enough sleep, get up and get out there to get as much food for the tribe as possible. The guarders had stuff to do during the night. They had to catch enough sleep during the day, get their spears sharpened and be on the lookout for wild animals during the night. It was the sick and the old, that loved the fire the most and liked the idea of sitting around these fires for most of their time.

Nothing really changes all that much in the formation of the human brain in just a few hundred years. The fundamentals still remain the same. Look around you and you will discover that the people who enjoy the meetings the most are either incompetent, out of shape, out of touch or not very productive. They are not bad human beings.

They are just the 'sick' and the 'old'' of the software development world. The meeting to them is pretty much the bonfire. It is symbolic to safety, because they can almost never introduce a bug while in a meeting. It is symbol of warmth because nobody every shouts at each other in a meeting. It gives them a sense of belonging because they can now contribute (anyone can give ideas) without having to work really hard for it.

The meeting is their only way to stay connected to the tribe and get a share of the food and protection by the gatherers and the guarders.

The point of this post, was to remind you that if (and I am just saying if) you start enjoying your meetings, you are not gathering food and neither are you guarding the tribe against wild animals.  You are just squatting around the warm and cozy fire expecting your share of free food. Contribute. Do some real work. Even if it is small. The least you can do is, stop enjoying those meetings and stop dragging the rest of the tribe into it.

Go on. Say no to those meetings.

I wish you good luck.

posted on Friday, November 26, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, November 21, 2010

Most organizations seem to have an itch for logging timecards of employees. What time did they enter the workplace? When did they leave? Did they spend nine hours at work? Policing is stupid. Number of hours you spend at work have no direct correlation with your productivity.

If you are starting an organization and have an unending itch for logging something, start out by logging the number of hours everyone in your organization spends on meetings.

Nine programmers gather for a 'quick discussion' which blows from a five minute discussion to a one hour meeting is nine man hours wasted.

Being in a meeting is worse than not being in office. When you are not at your workplace there is a possibility you are working from somewhere else. When you are out having fun, your chances of coming back fresh and putting in more productive hours are high.

When you are in a meeting, we know for sure, you are not working and you are getting drained out.

Of all the things that most typical organizations log or care about (time spent in office, processor cycles, dress code), most things do not have any direct correlation with developer productivity.

Number of hours spent in meetings per day is one Metric however, which does have a strong direct correlation to productivity.

If you are not actively measuring and logging this metric your organization is a classic case of an ostrich burying its neck in the sand.

If you are logging this metric, chances are that the three hundred unproductive man hours that you spent on meetings last month are going to make you lose some sleep, specially when the reports are in your face and that is a good thing. Now its time to do something about it.

That something is not another meeting on how you can reduce your meeting time.

Can a ten minute detailed email do what an hour long meeting would have taken? Can you use screen capturing utilities to do videos to give to the clients instead of getting the entire team to demo a new feature to them? Are there any better ways to capture and pass information than people being hustled into meeting rooms. Ask the difficult questions that you avoided for months or even years.

If you can spend three hours to do a video and avoid a one hour meeting, you should. Videos typically just require one person to create them. Videos aren't intrusive. Videos are permanent and reusable. You are much better better off investing the three hours, rather than inviting ten people in a meeting, interrupting their flow and blowing up the talk time of your organization to ten hours.

Meetings are not just toxic. Meetings are emotionally stressful. Meetings interrupt flow.

So here is a golden rule for your startup: Log your meetings. See how man hours you drain into sitting in meeting rooms and talking and then rage your very own organizational war against meetings.

I wish you good luck.

posted on Sunday, November 21, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, November 20, 2010

You. Yes, you. You can get fired too.

Years ago, this was one realization that dawned on me during a rather strange project.

I was a talented young engineer, minding my own business, learning, growing and staying as far away from office politics as I possibly could. My chances of getting fired were fairly tiny.

Then suddenly, on a fine Monday morning that I found myself in a meeting room with two other programmers and a rather strange project manager, drawing a line on a white board and pasting yellow post-it notes on it left and right. We had been assigned to a nine month project, which the client wanted done in three months.

The timelines that this guy was pasting the board were not making any sense. He was using intimidation left and right to make us say yes to his timelines. We sat there nodding, telling ourselves: how bad can this be. we will work late nights. we will make it work.

If this was now, I would have just said no. On further intimidation, chances are that I would have gotten up, said "screw you" politely with a broad smile on my face and left the meeting.

When you are young the idea of giving up seems insulting. You think of yourself as a super hero ready to rip off your shirt, jump out of the window, fly and rescue the sexy young girl stuck with the evil guy. Besides the fear of getting fired from your first job is pretty much like being rejected or dumped by your one of your first stupid crushes.

Three months later we were struggling with the project. This same manager was grabbing us by our collars and making us ship. The client was throwing their tantrums and we, like any other software development team, in a typical consulting shop, were trying our best to hurry up, ship shit, run away to the next project and not look back.

At the end of third month,  when a particular memory leak error refused to go and the application kept crashing left and right, the realization dawned on us. We realized that we might be fired if we cannot ship this thing on time. It took me another three months and a lot of good luck to overcome the fear, make up my mind to stick around, clean up the shit, ship a decently acceptable version and get rewarded the best programmer award in my organization.

The award did not mean a thing and even today I preferred to refer to this project as the biggest successful failure in my professional life till date. Even today the certificate hangs on a dark wall of a small room in my home, reminds me, every time I look at it, that:

  1. Your organization typically cares much less about the integrity of your work than you do.
  2. Your organization typically does not care about differentiating your true successes from colossal f@#kups and failures in your professional life.
  3. You can get certificates and recognition by shipping crap, if you just meet the timelines your manager wants you to meet.

But of all the things that the certificate reminds me, the most important thing that it reminds me is this: If your organization expects you to do the undoable, you are already F@#CKED. You are better off, showing some spine, saying you cannot do it and getting fired right now rather than waiting for things to get messy and then getting fired like a spineless, gutless dolt.

Don't compromise with your integrity and lower the basic standards of what you ship. If you are going to get fired, at least get over your insecurities and get fired for the right reasons.

I wish you good luck.

posted on Saturday, November 20, 2010 8:30:00 PM UTC  #    Comments [1] Trackback
Posted on: Friday, November 19, 2010

Fred is overworked, underpaid and frustrated. He carries his grievances, miseries and frustrations, both personal and professional, with him to work. Ask him to work on something more than the scope of his official business card and Fred gives you a look that makes you feel sorry you asked.

Fred also has a lot of complaints from life in general and his organization in particular. He is out there to make you, the customer or his colleague, pay for it. 

They are not paying him what he deserves. They are making him slog. They are not professional enough. It is all their fault.

My advice to Fred is to stop. Stop whining like a baby and think. You only have three options:

  1. Quit your job and go find a new one.
  2. Start something on your own.
  3. (And if you cannot do one and two) Shut up, stop whining and leave your frustrations at home when you come to work.

Every workplace is going to have their share of problems. Yours has its problems too. Big deal. Whining is almost never the solution to any problem. Two people gossiping about the problems in their organization but neither one of them having the spinal cord strong enough to do something about these problems, is just a waste of their time and a toxic thing for the overall culture of the entire organization.

Making your organization, customer or manager pay for it by scoring fouls is even worse.

Venting frustrations is a part of whining. It is not particularly difficult to do. In fact, it is really easy to do. It is also the stupidest things that you can do. You are much better off writing a constructive email, bringing up the problem with the right people, dropping your mitigated speech, saying how bad things are openly  and taking the hit for it.

When you work for an organization and you do not like it, there are only two things that you can do, you can change your organization or you can change your organization, either way, going to work with a frowning face and a truck load of frustration so that you can vent those out on your managers, colleagues and customers is the stupidest harmful thing that you can do to your own career and character. Stop knitting your eyebrows now.

Stop. Smile. Say cheese. Now go to work.

I wish you good luck.

posted on Friday, November 19, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, November 14, 2010

I hate rules. Having said that, I also find the idea of "Rules which break all rules" fairly interesting.

So you have thought about leading your own team? Leading an organization? Or starting something on your own?

Close your eyes and imagine that I am handing you your dream organization. Giving it to you. Just like that. What I want you to do instead, is give me a detailed Rulebook of things that you will absolutely do and not do in your organization.

Well not the 'rules' per say but the overall guiding principals.

Things that will become the foundational building block for your organization.

A couple of days ago I asked this question on Twitter:

Scott Berkun one of my favorite mavens on the subject of innovation, responded to the question with a rather interesting tweet.

His interesting response:

@thousandtyone *only* hire people 1) who love to work 2) who like/trust each other 3) who are self-aware 4) have a sense of humor

The response is particularly interesting because even though I have always enjoyed working with folks who have a sense of humor and have always been a little uncomfortable around people who take themselves way too seriously, I never quite saw it as a criteria for hiring individuals.

Sometimes you need someone else to pin it down in exact words for you to realize how strongly you believe in an idea.

A new idea was born.

A collection of really small posts highlighting things that matter to me (and hopefully you) when building your own team or your very own small organization.

It's the organizational rulebook for a kickass environment.

If you had a startup and were to write down a few rules for a kickass environment which rules would you pick?

Time to compile a few of these that come to mind and any others you might think of in a series of post.

Go on. Click the comment link, send me an email or send me tweet at @thousandtyone and contribute.

posted on Sunday, November 14, 2010 10:45:04 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, November 13, 2010

Three guys building what they love and being profitable at it is a story; five thousand bodies building yet another enterprise software is a factory.

One guy selling a million copies of a one dollar iPhone application is a story; an enterprise bidding for yet another million dollar contract, is just a marketing gimmick.

One funny two minute video on YouTube is a hilarious story; one hour of regular television sitcom is grunt work in the life of a production house.

We don't want to hear about you rambling about yet another enterprise, yet another deal or yet another production house.

We don't want to hear about the big guys again. We know how BIG works.

Big is starting to get really boring.

A small blog post with a brand new thought, a tiny code snippet that makes you a better developer, a small open source utility that simplifies your life, a small you tube video inspires you, teaches you or makes you smile... these are all small stories you can weave.

I am too busy to work on it. I am not big enough to do it. I am not smart enough to do it.

BULLSHIT! Lame. Excuses.

None of these excuses work when it comes to these small stories.

They don't take a lot of effort. They don't take millions of dollars. They don't even demand that you quit your day job. Just a little bit of consistency.

We know you can weave them. Everyone can.

The only real question left for you to answer is, will you?

Go start something really small and celebrate your doneness.

I dare you.

posted on Saturday, November 13, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, November 12, 2010

When we landed in her organization as external consultants responsible for reviewing a project, Jane had a business card said that she was responsible for all IT purchases in her organization.Vendor evaluation, comparison and negotiations for every piece of hardware, laptop, server, cable or wiring that her organization purchased.

Buying a book that someone in her team needs, was a completely different thing though.

There was a systematic approval process involved which she had to go through.

The fairly convoluted process involved in taking her team on a quick lunch is even worse than buying a book that they need. Every time her purchase request for a book was rejected her organization silently signaled to her that they did not trust her judgments.

This was not a typical Fred mucking around with code. Someone who wants and needs to be monitored and questioned on every step.

This was not a typical robot.

This was a person with a job role that demanded that she took judgment calls and yet we sat in meetings where her own managers rejected some of her best judgment calls for all the stupid reasons.

The outcome? Detachment.

She had been given two promotions in the last two years. Clearly they knew what she was capable of delivering. And yet there was continuous reluctance in yielding just enough freedom that would let her do her job remarkably.

A promotion is the act of telling someone you trust their judgment with bigger stuff.

Getting out of their way is the act of actually trusting their judgments.

Most kickass builders, story tellers or movers will not judge you by what you tell them, they will judge you by what you actually do.

Trusting someone's judgment calls and getting out of their way so that they can take independent decisions, succeed, fail, learn and grow is one of the best gifts you can give someone.

Are you giving this gift to your team by trusting their judgments?

Just a little something to think about.

posted on Friday, November 12, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, November 07, 2010

How does the data of a project that is hugely successful differ from the data of a failed project? Actually, it is not very different. Most projects are slightly late. Most projects are slightly over budget. Most projects have variances. What sets a successful project apart from a failing one is the story that surrounds these projects.

Even though I did not know how to name it back then, one of the most valuable lessons I learnt as a young and budding developer, was that we become the stories we tell ourselves. That and there was a breed of people who really kicked ass at the art of story-telling.

Besides builders who build stuff, the people who weave remarkable stories are hugely important to the success of any software (or for that matter any) project. In this chapter of the book I introduce you to the special breed of people I call story tellers.

You can get the chapter from here.

posted on Sunday, November 07, 2010 8:44:35 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, November 06, 2010

The guy who used to score A+ at all his exams in high school bumps into you at a shopping mall and wants to "catch up" with you. He wants to know where you are working. You answer.  You tell him that It is a small startup based out of the valley. He wants to know how many employees your organization employs and cringes at any number less than a thousand. It does not come as a surprise to you though.

You already knew that you had just bumped into a lousy moron who was going to judge your success based on your organizations success and your organizations success based on it's head body count. You knew it the moment you saw this gentleman and your mind raced back to gather recollections of your high school days and your interactions with him.

The mentality is mostly a reminiscent of the individuals upbringing. You instantly dive into a flashback. This fine man in front of me is a classic example of a family and a school that succeeded in turning a perfectly smart child into a lousy moron.

When we (me and my brother) were young, grades and marks were not a huge deal in the family. Of course we were expected to fair well, but our parents did not lower their perception of our intelligence or treat us any differently if we scored a "B" instead of an A+.

Life for this acquaintance of mine, was hugely different though. He had a family which evaluated his intelligence based on his grade. The guy had fierce pressure of topping each test, merely to leave his interactions with his family and their perception of his intelligence un-tempered.

As much as I could never connect to him, I did feel sorry for the guy back then.

He was a classic example of someone who "fits it" and expects everyone in the classroom "fit in". Someone who has all the answers but does not learn how to question what the book says. Someone who never lands in trouble to save a classmate from a prank they pulled together.

When you use lousy numbers with no real correlation to success, to measure and judge not just yourself but everyone you meet, you develop a narrowed vision of reality. You become this acquaintance of mine.

You start hiring employees based on their scores in their IQ test. You start taking certifications  seriously, you let designations define your own net worth in your every own eyes and worst of all you start turning your own kids, who are awesome at the art of exploring, failing and learning into idiots who know how to cheat the system and score even higher numbers than you did.

If you are a programmer my advice to you is seek the most innovative organization that you can find out there, even if it has just three people working for it.

If you are a responsible for hiring my advice is stop recruiting people based on their IQ tests and most importantly, if you are a parent, my serious advice to you is, stop evaluating your child by his grades and stop judging him. Stop it. Now.

Observe what your child loves doing and nudge him to do more of it. If all goes well, you might have kid who grows up to be someone who is happy doing what he does not go around comparing his grades, number of employees in his organization or other random numbers with numbers of other random people that he bumps into at shopping malls, to feed his insecurity. Seriously.

posted on Saturday, November 06, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, November 05, 2010

One of my favorite Ted Dziuba post is the one where he advices everyone in the software business and managers in particular to stop using the word "we" and other enterprise words when talking about tasks and responsibilities.

In his classic, loud and highly opinionated way, Ted explains:

Yesterday, I spearheaded a new movement at the office. I stopped using the word "we", and started to say what I really meant to say.  For example, instead of "We should fix that bug", I say, "You should fix that bug", and good God is it satisfying.

There are a couple of motivations for this. Firstly, one of the key things I've learned being a for-pay writer is to show some conviction. Secondly, the passive discussions about defects and delegation and responsibility really started to irritate me. Why not just tell it like it is?

When I worked at Google, I picked up on a really annoying trend in the software industry (or maybe just in Silicon Valley) that I call "fuck-you with a smile".  You never want to outright blame somebody or something, rather, it's best to state the existence of an issue and then ask "the team" to fix it.  We should really move that icon ten pixels to the left. We definitely need to fix that concurrency bug. We should probably have that all done before lunch.

Well then, Mr. Manager, you had better get cracking, because I've got some YouTube videos to watch.

I can see a whole breed of managers knitting their eye brows at the whole approach, but if there is one thing I can tell you after working at countless client offices and observing countless other organizations, it is that it is often the organizations that focus on individuals, the virtues of selfishness and create win-win situations, that are the most fun to work at.

These are also typically the environments which create the best of the teams which are closely bound because every individual understands clearly that their best interest is in complementing the efforts of others, flocking well without bumping into others and giving in their best, because their best earns them the best of appreciation.

An environment where every single achievement of yours is masked under the banner of "the team" often tells the story of an insecure manager spending all his time making sure no particular individual gets more than a certain share of credit.

Every time you plan on using the word "we", the least you can do is make sure that you at-least pick a considerable part of the task you are delegating and actually do it YOURSELF. The "Lets work on this" approach works wonders if you genuinely mean it but if you cannot take up a sizable part of the work, shut up and use "you" or "you guys" instead of "we" because YOU Mr. Manager, are not going to do any real work on this assignment.

The whole idea of only using the word "we" when I am actively contributing in solving a problem is something I may not have always adhered to in the past but it is also something that every single one of us I need to be careful about, specially while working with a team of kick-ass developers.

You want the best to give in their best and add the most value, not assign every task to the mediocre larger "we" or the black hole called "The Team" where everyone is responsible for talking about it but no one responsible for actually doing it.

Stop hiding behind the collective curtain of "we".

Pick up a sizable chunk of the work in the overall task and then by all means use the word "WE", but don't use "WE" to make yourself "somehow" involved in the work that you have not done. If you want credit and involvement, earn it. Go take up a sizable task now and ship.

If you cannot do that, consider shutting up and letting those who are  driving, get the due credit for their work. If you need "them" to work on something, while you wait for them to complete and play online poker or attend meetings in the meantime, the least you can do is be honest about it and say it with conviction. Seriously.

posted on Friday, November 05, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, October 31, 2010

Builders and Story tellers have their own set of problems.

One of the biggest ones is that if you are an amazing builder or an amazing story teller, chances are that you are an artist.

You get ideas in the shower that are so strong that they hold you by your collar and do not let you go till you put them within the curly braces of code functions or on the light grey pages of a notebook or a word document.

You get fragments of inspiration.

You get headaches with multiple threads of ideas running in your brain at night as you try to sleep.

You thrive at creativity but your problem is that you cannot fill your tax forms without mistakes.

Your problem is that you can get an entire system built but sometimes you blank out and forget what it is that Jack in your team is supposed to be working on.

Dam! You said you will put that down in that excel sheet. You said you were going to get better at tracking.

Newsflash: You are just wasting your time trying to become someone you are not. You are a builder. Not a mover. There is a difference between the two.

Every project requires builders.

Every project requires story tellers.

What every project also requires are movers.

A mover is an otherwise quite tester who walks up to the developers desk and casually reminds him what he needs to work on for today without brining a truck load of process in the middle. His business card or title does not entitle him to remind developers what they need to work on.

But he does it anyway, because creating movement is a part of his nature.

Strangely enough, Instead of resisting or saying no, the builder, listens to him because he knows the mover is not bossing around. He is just helping by being himself.

A mover is an otherwise silent document formatter, who points out the critical features the team has been missing for the last three sprints and that you, the project manager have completely forgotten about.

When Jack says he is done and is about to sign off, the mover jumps out of nowhere and reminds him with a smile that there was a bug that he had said he would close but never did.

A mover notices the slightest of broken windows.

A mover is not in your face. A mover is not irritating. A mover is NOT a manager. A mover does not go around with Gantt Charts and detailed project plans. Yet, a mover is ten times more efficient than a dozen managers running around with their Gantt charts.

Being a mover, means that you "have to" be moving. You have to be in a team that is moving. You sense movement. If your team is slowing down you are the first one to sense it. If your team is moving at a dangerous velocity you notice that too.  But you don't freak out. You don't whine asking others to speed up or slow down. You silently and quietly create an environment where more thrust is applied or thrust is reduced.

I don't consider myself to be a very good mover. I am nowhere closed to being organized. I don't remember stuff. But every time I work in a project that has a team size of more than one, there is always a mover involved. My current project at work for example has multiple movers.

Almost every given day I am nudged by a mover or two reminding me about the stuff that I had promised I would do and I did not do. The movers understand that my bosses called and wanted me to work on an urgent document during the weekend.

But then the movers are relentless. The movers will also be at my desk Monday morning, just casually chatting about what they did during the weekend and then just as they are leaving, reminding me that if I am free I can take up that bug that I said I would fix before the urgent document came up.

If you give me the slightest of hints about taking the movers out of my project and I will fight fiercely to keep them in my project, because while the builders are building stuff and the story tellers are weaving stories, the movers are watching the speedometer, the broken windows and the loose ends, rushing to remind you with a smile that you missed that final stroke of brush in your painting.

Have you identified at least one mover in your project? If you haven't, chances are that your project is fumbling right now as you read this, even if you have both, builders and storytellers working on your project. Go find a mover. Then give him the liberty of being himself and let him build some movement with a gentle nudge every time he sees your speedometer fall, your window break or your painting finish without that final touch up.

I wish you good luck.

posted on Sunday, October 31, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, October 30, 2010

He bitches a lot. The whiner in your team, I mean. The classic whiner feeds on gossip. He feeds on creating confusion through communication. A whiner usually whines because whining and bitching is easier to do than shipping something.

The classical management folks and people from HR will give you intelligent sounding advice. Talk to him, they will say. Counsel him. Have a discussion with him.

BULLSHIT.

Then there is other breed that will panic at the whining and bitching. Fire him NOW, this bunch of managers will tell you.

More BULLSHIT.

Unless the whiner is a political scumbag, there in a whiner in all of us. The whiner whines because he is lazy. Because whining is easy. He whines because YOUR culture tells him that he can get away without shipping if he whines.

If you want to genuinely help a whiner and your organization, here is the golden advice:

Get him to ship something. Anything.

I don't care how small it is. I don't care how insignificant it is. I don't care if he ships crap. Make him ship. Consistently.

The same advice works for almost anything in life. Small incremental steps. If you have never run before, running just hundred meters will find you panting like a wild dog. They key is to do it. The key is to keep doing it. Then do it more.

Shipping is hard. Shipping means growing out of your comfort zone. Shipping means you take your ass off that couch, stop bitching and actually add value. Shipping, is also addictive. Shipping adds to a sense of well being and once you start becoming good at it shipping is fun.

Get your whiner to work. Get them to ship something. Anything. Leave no room for lame excuses, moaning or bitching. Make it clear to your whiner that you mean business. Chances are that they will either get so uncomfortable that they will leave or they will slowly and steadily become effective at what they do and have much less time for whining.

Repeat the process.

Do it till the whiner has either quit or till you have a fully productive employee who does not have time to whine any more.

Of course, there is a little bit of a whiner rooted deep down in all of us and if you have not been steadly shipping for some time now, the same recipe works for fixing that whiner within yourself too. Try it.

I wish you good luck.

posted on Saturday, October 30, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, October 29, 2010

The internet is littered with articles and blog posts by project managers on how they spoke the truth about their project timelines slipping, how their clients loved them for it and how they lived happily ever after.

I have had my share of those stories and I would love to share them with you, but that would be BORING.

I could tell you that honesty is the best policy, but that would be way too CONVENTIONAL.

The reason why you should choose to be honest in your communication and deals is not because honesty always leads to a happy short-term ending. Honesty is not a commodity that you try to market when hell breaks lose and expect to sell it every time. If you think of honesty as a commodity, chances are that you will find it really hard to market.

Honesty is not a last resort escape route.

Its a way of life.

Its your attitude.

Its who you are.

Honesty begins by being honest towards your work. If you have given your hundred percent, being honest when disaster strikes is not a very difficult decision. It's the gnawing guilt of not giving in your best that makes honest communication so much more difficult when the hell breaks loose.

Your honesty test began when you were doing your job when the sky was blue and when the birds were chirping, not when the sky started falling.

What were you doing when the storm of panic had not started? Working to the best of your abilities? Honestly?

Honest communication is not usually very hard if you were. If you know you were not, then honesty becomes that much more harder. You find yourself playing with excuses, jargons and your fingers by pointing them at others.

I have played the blame game before.

Writing about it and admitting it, even years after it happened, was much more difficult than most people think it is but the whole point of writing about it was that it was a lifestyle change. A transition that happened over a period of years, is still happening and hopefully will continue to happen throughout the lifetime.

The good thing about some of these experiences though, is once you have been through just one of them and burnt yourself, the decision of being honest towards your work becomes a hardcoded part of your lifestyle; and once that happens, the decision of being honest in your communication, even when the sky is falling is a no brainer.

If you were a programmer did you write the best of the code you could? Fought to the best of your abilities to avoid crappy decisions?

If you were leading a team, did you do the best leading, keeping an eye on the project without getting in the way and the best mentoring that you possibly could?

If you were a marketer were you honest to your client when telling him about your product features?

Go on. The next time the devil knocks on your shoulders nudging you to take that shortcut in your daily work life, give him a cold shoulder. Being brutally honest, when the hell breaks lose will be that much more easier if you know deep down inside that you were honest all through and that you did the best you could.

I wish you good luck.

posted on Friday, October 29, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, October 24, 2010

When was the last time your team actively decided not to ship a feature that was done?

When was the last time you had a fully complete post sitting on your hard disk but you told yourself it was not good enough and decided to delete it?

There are times when you watch a lousy movie and you wonder why the production department even bothered releasing it?

As creative individuals we like working on stuff.

Stopping often becomes hard for three primary reasons:

One: The more effort you put into stuff the more attached you become with the stuff you are working on. This attachment creates blind spots and an inability to judge the output of your efforts objectively.

Two: When the creative endeavors have financial aspects involved realizing that you need to stop becomes even more difficult. Yes the movie is lousy, but if we release it at-least we make something out of it. Yes the product is lousy, but even if we release it at a reduced price we stand to earn something out of it. Lets just give it out for free and try to get some users.

Three: When creative endeavors occupy a lot of your time, stopping them, becomes an ego issue. Stopping now is just going to mean the world is going to know about it and think you were an idiot to continue for this long. If the product, the blog post or the endeavor was your idea to begin with, the ego at stake is even higher when it comes to stopping.

Gears are switched. You move to an auto pilot mode where you are doing nothing but building mediocre features on an already mediocre framework. Version after version of the product are rolled out. Every mediocre blog post on your disk is published. Every boring movie is released.

Before you know it, its not just your product, your blog or your movie. You are boring. You are mediocre. You are lame. We do not care about you any more. You are that guy with a boring blog, that director who makes boring movies or that software body shop that hires cheap cogs and builds lousy products.

If you have a product that you are deeply passionate about and believe in, don't worry be crappy works, but if you are working on auto pilot and just not feeling it, shipping stuff that is boring, makes you boring.

Stop. Give up shamelessly. Hit the Delete button. Now.

posted on Sunday, October 24, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, October 23, 2010

Fred took rounds on the office corridors during the evenings to take a feel of who was busy versus who was reading an online newspaper or playing a video game. If you happened to have anything other than work running on your screen when this gentleman took his rounds every evening, the least you could expect is an email with a list of tasks that you need to immediately start working on. The most you could expect was a taunting sarcastic remark.

I see a young and budding manager somewhere knitting his eyebrows , folding his hands and taking a defensive stance already. Somewhere, in some corner of the world, there is a young and budding manager reading this, talking to himself and saying this: What is this idiot talking about now? I mean resource management and utilization is all about making sure that your resources are utilized at an optimum level. Isn't it? Huh? Huh? Huh?

Actually, you know what, if you have heard this 'resource utilization' line or if you were that young and budding manager who was thinking this, chances are that you have picked it up from one of the two places. One is through your underpaid teacher at a B-Grade management school. The other is through your previous manager who you looked up to.

Now here is the newsflash: Chances are also high that your underpaid management teacher never actually managed a single live project in his entire life. And as far as that previous manager that you looked up to is concerned, well he might just have been a regular old jerk who was managed by other jerks when he was young which is where he picked up the thought process without questioning it.

When you take a team of kick ass programmers and put them on a kick ass project, you form a self sustaining eco-system. Assuming that you have hired correctly, if you leave a bunch of builders free for sometime, good things happen.

Every programmer has "TODOs" in their code comments. Things that they tell themselves they will come back to later. Every designer has design changes that he would like to refractor if he had more time. These are exactly the things which differentiate a remarkable product from a lousy mediocre one. When you leave a kickass team alone chances are they get sick and tired of reading the news in about and hour.

Then they often tend to come back to these changes and they tend to start working on them. Silently. Quietly.

If you have a product that has been running for more than a year now and a passionate team that loves working on the product, try telling them nothing to do for a couple of weeks and see how they react. Chances are that they might either give you a product with a stronger, faster and much more stable foundation or they might come out with features and really small changes that might pleasantly surprise you.

Stop those stupid status meetings. Stop monitoring every hour of your programmers. Stop giving them new assignments as soon as the last assignment on their list is marked as done. If you have hired the right guys and have left them alone, chances are that they are working on stuff that needs attention. Stuff that you might not even be aware of. Stuff that might usually come back to bite you two years from now. If they are free, they won't sit quietly for long.

If you have the right people, they will be much more worried than you are about having nothing to do.

Now go cancel that status meeting. See how it goes.

I wish you good luck.

posted on Saturday, October 23, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, October 22, 2010

In this video on BigThink Jason Fried the cofounder of 37Signals talks about interruptions at work.

The video is excellent when it comes to dealing with interruptions and finding out what is wrong with a typical office workspace today. 37Signals by far have been one of the most vocal when it comes to calling out on bullshit of other firms and they are often heard because they are successful.

I have quoted 37Signal so extensively that I have often been accused of being a 37Signals fan-boy.

To be honest, I am one.

The problem with blind fanboyism however is that you often tend to see everything positive about the organization and lose the objectivity to see mistakes the organization is making.

The recent video on 37Signals new office space however, is disappointing, particularly if you take the fan boy cap off and analyze their office objectively.

To begin with the video shows the entire team in a meeting or a conference. I am sure this is a rare occurrence at 37SIgnals but definitely not the right time to be shooting the video specially when you take strong stands on how toxic meetings are. What is actually even more disappointing is that their office seems more like a typical cubical farms with open workspaces designed for interruptions.

When  you are an organization as small as 37Signals who believes in not interrupting your developers and letting them get in the flow, why build classic cubical farms where interruptions are a part of the design?

Why not learn from FogCreek office tour video which seems to suggest that they are putting their money where there mouth is by giving every developer most items on the programmers bill of rights?

I'm just saying.

Okay, enough critical commenting. I am going to wear my fan boy cap again.

By the way, did you read rework? If you did not it is definitely worth a read. Go buy a copy now. #Grins.

posted on Friday, October 22, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, October 17, 2010

Venture Capitalist have been using this technique for years now. There are a few out there who browse through countless PowerPoint presentations and every minute detail of your business model. Others however are more interested in knowing you as a person and every question they ask revolve around judging you as an individual.

As someone who has been given funding offers without any presentations, ideas or even asking for them, the aspects that some venture capitalist use to fund you, confused me, till I learnt first hand from a venture capitalist, that he was not interested in funding an idea. He was interested in funding the people who he thought were right people.

As an organization however, when you hire employees the equation seems to change dramatically and rather abruptly. We are suddenly concerned if a person knows what a Factory or a Facade is. We are so obsessed with skillets that we tend to forget that is it not the skill set you are hiring. It is the person.

Is the candidate smart? Is he upright? Is he honest? Will he go out of the way to help others? How is he going to handle setbacks? Is he a paycheck programmer?

Hiring a "good" human being should be on the top of your list when hiring.

Everything else is secondary.

Of course, the competence, the kickass programming skill-sets and years spent slogging on code helps, but if you are not spending enough time and energy evaluating the basic personality elements of a person, you are just hiring skill-sets, not people.

What would you rather hire? Three years of .NET or a helpful, enthusiastic programmer with kickass programming skills who happens to be really good at .NET?

The choice is yours. Just like the Venture Capitalists who prefer to fund "good people" over "good ideas" I prefer to hire good human beings with a smart mind over hiring a resume or a skill-set.

Ok, I am done with the post.

You can go ahead and call me stupid or impractical now or you can munch on this thought next time you go to take someone's interview.

I wish you good luck.

posted on Sunday, October 17, 2010 9:13:00 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, October 16, 2010

As a consultant I’ve been on-boarded into multiple organizations during my career. The best on-boarding is not when the HR takes you around the office on your first day showing you toys like Gyms and swimming pools. The best on boarding is when the HR shows you how the organization you are going to work for is going to empower you as an employee.

A beautiful tool for empowerment was a capped corporate credit card which we were handed on the day we joined work. File office expenses directly to this card and you do not have to worry about getting them reimbursed. This is what I call Hassel free empowerment that comes with a lot of responsibility.

Another beautiful empowerment tool was cell phones. Of course you carried your own cell phones to work, but when we joined we were handed a cell phone that was directly billed to the company.  “You can use these to make any phone calls” – we were told.

Of course it meant work related phone calls but that part wasn’t stated explicitly which made it all the more empowering.

Work from home. Casual dress code accepted widely within the organization. Open internet access.

This was one organization that was serious about empowering employees.

Look around you. How many of your office facilities are nice toys to have versus how many empower you? Having a gym is one thing. Letting your employees take an hour off during the afternoon if they want to and work out is another.

When you are surrounded by policies you can smell that. When you are empowered you can feel the empowerment. Toys are nice to have, but if you do not have empowerment in your workplace the toys mean nothing.

Don’t just give your teams and employees toys to flirt and show off.

Empower them.

I wish you good luck.

posted on Saturday, October 16, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, October 15, 2010

Small Talk For Geeks

"Am I in the call?" - that is the question someone I knew first asked when he dialed into a conference call with a client of ours. This guy was a geek and like most geeks he lacked the fundamentals of starting a discussion that revolved around small talk.

"Ok, Is there anything else we want to discuss or should we end the call?" - was a question I saw another geek ask smack in the middle of a conference call where folks were discussing the weather in and around California.

Awkward moments.

Sounds of chirping.

Most geeks around the world are notoriously famous for not going with the flow when it comes to discussions leading to an impression that geeks don't give a shit about anything other than programming or code.

The geek on the the other hand is not evil. He expects that sooner or later, as a few awkward minutes pass by, the discussion will steer towards code, design or what he does. That is when he expects to jump in and connect.

This of course, invariably never happens. After you have blurted a few awkward remarks and have created a few silent moments in your first few meetings you have invariably drawn a wall that will keep your clients, your managers or the suits away from you. This is not personal. They just think you are an arrogant pompous jerk.

You made yourself look like a freak.

The beauty of being a geek however, is that you are blessed with a strange way of looking at things from a systemic problem solving perspective. Think of small talk as a problem you need to solve. Don't try to fumble with the problem as a standard human being who sucks at small talk. Do it as a full time geek dissecting the problem with the intent of debugging it. Typically, solving this problem involves three fundamental steps.

First is content. The second is practice. The third is application of that practice.

Content is usually the easiest to part to figure out. This is where what you already know comes into play. Follow the right guys on Twitter and glance through just a dozen tweets a day. Subscribe to a few RSS channels. You have enough information to start discussion on the typical hot news small talk topics.

The second is practice. This is where it gets interesting. This is what close acquaintances are for. This is where daily meetings and status calls become good. These are your own managers. People you know. People you can fail in front of. People you are comfortable with. Of course you don't have to tell them you are using them to practice small talk. 

I'd say it takes anything between a hundred to three hundred hours of discussion before you will suddenly realize that you can talk for hours about things you know nothing about. This is when you will be able to steer the discussion flawlessly and let the other person speak, by just adding "oh really?", "that's interesting", "I did not know that".

You are not just making the other person comfortable but you are doing something which is very important in the system of conversation.

You are now gathering content from discussions.

The same content that will be thrown at your clients and others when you move to the application phase of training.

The application of this practice is rather interesting. If you have spent some basic time and effort in gathering content and have a couple of hundred hours of practice behind you, small talk should no longer sound like small talk. It should seem and feel like a discussion. The geek within you still knows you are wasting your time with quite a few of these discussions, but he has learnt how to hack it. He knows how to hate it without making it evident that you actually hate it.

Chances are that by now you have actually started liking some parts of it. Chances are that you are now explaining parts of the system to your managers and your clients in simple, precise, direct terms that help them understand things. What is interesting is that they are listening to you now. Chances are that they see you as a smart individual with innovative ideas and not the freak who gets on a call and asks when it is going to end.

Then when you suddenly learn something new from these discussions and realize that your clients and managers are just as smart as you are, only in a different way, you have taken your first step at bridging the gap between clients, management and those pesky developers.

Congratulations.

Now the only thing you need to be careful of is that you don't get carried away with it and that you do not overdo it.

posted on Friday, October 15, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, October 10, 2010

One of the things that I absolutely like doing every time I am at an organization, even if I am just visiting it, is getting a guided tour of the organization.

I have talked about my guided tour of Infosys, getting a bad vibe from it and then the bad vibe getting confirmed by a software programmer who joined and quit the organization within three weeks in my earlier post.

A simple tour or sometimes even a blog post or a video of the office tour says a lot about the culture of the organization. There are a lot of these posts and videos out there. Consider for example:

  1. The Fog Creek Office Tour Video on Channel 9.
  2. A simple blog post by Jeff Atwood which describes a typical office at Vertigo Software.
  3. A video tour of 37Signals and Google

The videos will clearly not tell you everything about the organization but there are general indications that are fairly easy to extract out of these videos.

Watch these videos closely enough, read the posts in detail. Chances are that you will be able to draw your own conclusions and facts about these organizations, not just what the tour guide is trying to show you. That is what a quick five minute office tour video can do. An in person office tour says much more.

Malcolm Gladwell explains this approach of extracting information from the environment where people work or live rather articulately in his book, Blink.

He explains:

Imagine that you are considering me for a job. You’ve seen my résumé and think I have the necessary credentials. But you want to know whether I am the right fit for your organization. Am I a hard worker? Am I honest? Am I open to new ideas? In order to answer those questions about my personality, your boss gives you two options. The first is to meet with me twice a week for a year - to have lunch or dinner or go to a movie with me - to the point where you become one of my closest friends. (Your boss is quite demanding.) The second option is to drop by my house when I’m not there and spend half an hour or so looking around. Which would you choose?

The seemingly obvious answer is that you should take the first option: the thick slice. The more time you spend with me and the more information you gather, the better off you are. Right? I hope by now that you are at least a little bit skeptical of that approach. Sure enough, as the psychologist Samuel Gosling has shown, judging people’s personalities is a really good example of how surprisingly effective thin-slicing can be.

Malcolm shows compelling research that sometimes observing the mere environment in which a person functions or lives tells much more about the person than spending time with the individual in person. He explains:

On balance, then, the strangers ended up doing a much better job. What this suggests is that it is quite possible for people who have never met us and who have spent only twenty minutes thinking about us to come to a better understanding of who we are than people who have known us for years.

Forget the endless “getting to know” meetings and lunches, then. If you want to get a good idea of whether I’d make a good employee, drop by my house one day and take a look around.

Peeking into the bed rooms of people you are about to hire might not be very practical advice, but if you are a developer who cares about joining the right organization, one thing you should definitely consider doing is asking your interviewer to take you for a quick office tour before you accept the offer.

Oh and yes, while you are on the tour, pay little attention to what the tour guide is showing you. Keep in mind the cultural questions that are important to you and watch closely for signals you can pick up to answer those questions.

Is the work environment generally quite?

Do the people seem happy?

How much innovation and thought process has gone in building the office?

How much of the budget has really gone in getting the important stuff like developer offices, laptops and rooms where people work right compared to the fluff?

The answers are out there and sometimes a simple office tour will give you enough information to make the right decision on whether you should accept an offer or continue looking. If you are planning on joining an organization, go on, take a tour of the workplace before you accept an offer.

I wish you good luck.

posted on Sunday, October 10, 2010 8:30:00 PM UTC  #    Comments [2] Trackback
Posted on: Saturday, October 09, 2010

Earlier when I announced my thousandtyone youtube channel I provided a link to a page that would allow the readers of this blog and the subscribers of the channel to add topics on which they want me to do videos and vote topics up or down.

The Web based system that I had used for this was Slinkset.

But then, within a couple of weeks my ADHD kicked in and I forgot the password that I had signed up with.

That should be a simple problem, right?

Having thought that, I set out to look for a forgot password link, only to find out that there was no forgot password link on the Slinkset login page. Slinkset does not seem to believe that their users will forget their passwords.

Instantly I set out to look for a support email or a contact us page on their website, only to realize that they had none.

Slinkset is an useful idea rather well implemented, but there are two major problems that I see with it.

One is the fact that the company does not seem to have a face or a personality behind it. No information on their whereabouts, no contact information, no support links and no support emails from their home page. The second is lack of basic user functionality like forgot password.

When we talk about YAGNI, Less is right and Under doing your competition by building less what becomes profoundly important is that we look at every feature we choose to skip as closely as the features we choose to build.

Skipping features is fine. Letting your customers remind you that features are important is fine too, but if you are a young and budding startup with only a handful of customers, it is also wise to see to it that you build the basic set of features and an application where you customers can function without hitting roadblocks all the time and then at-least provide them a means to reach out to you and provide you their feedback if they are stuck.

On a side note, apparently after quite a bit of Googling it turns out that Slinkset does have a help system where you can ask for help and the password reset issue is mentioned there. You can reset your password here. Makes you wonder why Slinkset chooses to make life difficult for their users when opening up their reset password functionality and making it discoverable is as easy as providing this link somewhere on their login page.

Also makes you wonder why their help is not linked from their home page.

Go figure.

Either ways, when all you are building is an application which is one page with one niche functionality, the packing, help, support, usability and discoverability make all the difference between an awesome product that you stick to or a product that you try just once.

For now, I like Slinkset and I am going to allow them to be crappy when it comes to discoverability and continue using them. I think you should too. Go try them out and see if you like them too.

posted on Saturday, October 09, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, October 08, 2010

Knowing The Geek Within And Learning How His (or Her) Mind Learns.

As a geek who has ADHD I am intrigued by the idea of observing the learning process rather closely and hacking the heck out of it.

As someone who had major trouble focusing on a book end to end I realized that my attention span shoots up when I am listening to audio books. This might seem like a tiny little realization to some of you guys out there but for the geek within me this was huge. It was a discovery of a hack that allowed me to break inherent limitations of my mind and push beyond them that intrigued me the most.

This meant that I could grab an audio book out there and be done with it in just a few days.

Heck! I could even turn a text document or a PDF into an audio book.

The same approach even made proof reading for this blog much more easier.

As someone who had strong feelings his entire school life, particularly classrooms or lousy teachers sounding like experts and as someone who recently quit his French classes half way through, classrooms are also one of those approaches to learning that often do not tend to work well for most geeks and yet they exist. A concept Khan Academy has managed to hack the heck out of.

Are you really learning when you attend a training session?

Are you really asking a question based out of genuine curiosity or are you just trying to impress the trainer or other participants?

Do endless arguments on Forums and Blog Post teach you something or are you just better off marking a thread #EOYBD and resisting the temptation to respond once it reaches a point where you realize you have not much to learn out of it?

Are you learning the most when you are talking or are you learning the most in your quite time when you are in a disconnected mode?

Are you learning better with the technical books out there or does more information and spice mixed with technical content helps you understand and recall information faster?

I don't have all the answers here.

What matters however is, are you giving enough time, attention and effort to learning how you learn best?

If not, why not start now?

Chances are that the geek within you that spends hours tuning that database might love tuning the heck out of your mind and figuring out new approaches to learning that might help you move beyond your inherent limitations.

Each mind is different and you will need to figure out what stimulates, excites, motivates, captivates and keeps your mind hooked. Start by understanding the basic rules, learning some basic hacks and then overtime figure out your own hacks, tweaks or workarounds to enhance your learning process and add fun to it.

I wish you good luck.

posted on Friday, October 08, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Monday, October 04, 2010

An acquaintance who recently moved from a small but innovative software development firm over to Infosys tells the story of how the organization runs. He starts the discussion by talking about the plush green and well maintained campus of Infosys.

Something even I have talked about before.

Then he moves to the overall process and some of the facts that emerge during the discussions are chilling to their core. Here are some highlights of the discussion to give you a quick idea of the process that powers Infosys.

Nine hour workdays

Infosys demands that every employee spend at-least nine hours a day in the company campus. The electronic cards record your in time and out time every time you swipe them. This person forgets swiping out his card on a day and gets an email from his project manager letting him know that this behavior is unacceptable and that he needs to pay special attention to these details moving forward.

Talk about working less.

Ties Two Day A Week

Infosys demands that all their employees wear ties in the office complex two days a week. They take this rule rather seriously. So much so that the security guards at the main gate have been instructed not to let anyone in without a tie on the specified days.

Talk about wearing what makes you comfortable.

Compulsory Internal Exams

Infosys demands that employees clear at-least two internal functional exams with a minimum of sixty percent marks. Your failing to do that prevents you from getting a promotion after three years. Promotions cannot be obtained just by giving kickass performance at your project.

Passing the exams is critical. If you do not study for these exams like young college going students and do not clear them your chances of climbing to the next level after three years of service are slim.

These exams are not Microsoft or Oracle vendor certifications and are internal Infosys exams which have no meaning outside of Infosys.

Monitoring Your CPU utilization

Infosys is working on a new system which will monitor CPU utilization of every developer to see how actively they are using their machines. Something that they believe will be a better indicator of if the developers are really working. Just spending time in the office premises apparently, is not enough. They need you to be slamming those keys at the keyboard and utilizing that CPU firing builds.

Internet Access Depends on Your Level

Internet access depends on your job designation and level. Level 300 and below for example are not given internet access around the clock. They just get internet for a couple of hours a day. Senior levels still have personal email sites like gmail blocked. If you are an engineer who is working at or under level 300 and are heavily dependent on Google for your work, you are basically screwed.

Selection Criteria And Client Interviews

Infosys still spends heavy amount of importance on school and college marks even while recruiting candidates with over five years of work experience. They also conduct regular client interviews where their engineers are expected to answer questions that their overseas clients ask them over telephonic interviews.

A huge number of Infosys engineers (in the case of this acquaintance this number was eight out of every ten) fail these interviews miserably because there is a huge disconnect between how much they scored in college versus what their clients expect them to know.

Not to mention of course that over the course of time these candidates figure out means to clear these interviews by collecting questions from folks who were interviewed before them and maintaining their own question banks.

Angry Employees

Even though this was not directly mentioned by the acquaintance after this discussion I set out to find the truth about the level of employee satisfaction and apparently stumbled upon countless examples of the employees venting out their frustrations and anger openly in the comments section of wall street journal blog and the Times of India blog.

All of these articles and the passion with which the comments were posted seemed to suggest that Infosys was not keeping the best of their employees happy either.

Automatons And The Programmers Bill Of Rights

Of course the point of this post is not to thrash Infosys per say. It is by far one of the best consulting body shops India has to offer. Having said that, the state of affair of most software consulting shops in India and around the world is tragic.

Maybe it becomes so hard to find programmers who cannot program because most huge organizations around the world aren't looking for programmers. They are looking for and breeding automatons who punch their time cards, wear ties to office thrice every week, clear three exams every year, learn up answers for client interviews and score high in their high school and college.

If you are a young and budding entrepreneur, Infosys and the similar breed of companies provide a perfect template of practices which you should put down in your "not to do" list.

As you grow your organization, do you also give in to the temptation of hiring and herding flock of sheep who obey your rules or do you have the courage for remaining small in spirit even when your organizational size grows slowly and steadily? If you are reading this and run an organization, remember this, you cannot "Out-Infosys" at being Infosys, setting rules and hiring automatons. If that is all you do chances are that an Infosys somewhere will outbid your business.

What you can do is be small, cater to a niche and hire smart human beings who have talent, individuality, their own opinions and the spine to say no when asked to wear a tie five days a week. Hire the best that you can get. Hire like the life of your organization depends on it. Once you have done that, try sticking to and honoring the programmers bill of rights instead.

I wish you good luck.

posted on Monday, October 04, 2010 12:14:36 AM UTC  #    Comments [4] Trackback
Posted on: Saturday, October 02, 2010

There is nothing that pisses your technically savvy and intelligent customers off more than pictures of random men and women in suits grinning away to glory on corporate websites of enterprises around the world.

Stock Photos by their very nature indicate that there is something seriously f@#kuped up within the corridors of your organization.

The sexiest of voices hired to do voice overlays on product videos tell your customers that either the product is built by a bunch of engineers who did not care enough to make a product video themselves or the product is so weak that it needs a sex appeal of a cute voice to cover up its flaws.

Are you hiring smart builders who are also doubling up as wordsmiths?

Are you hiring smart story tellers who can weave such a compelling story that people get gripped and watch the video even if the background does not contain a cute female voice?

Are you building a culture that is so strong that random photographs taken on any given day can be things you can put up on your website?

You do not need stock pictures, sexy voices, men in suits with cheesy smiles or even a corporate look on your corporate website.

Make a remarkable product.

Be Yourself.

Its a lesson all of us learn multiple times in multiple walks of life.

This time, remember it and start living it. You might be pleasantly surprised.

Now go rebrand your website to reflect your true personal or organizational character.

I dare you.

posted on Saturday, October 02, 2010 8:30:00 PM UTC  #    Comments [2] Trackback
Posted on: Friday, October 01, 2010

The Microsoft SQL Server 2005 pricing model is transparent, online and in your face for you to decide if the product fits your pockets.

MySQL on the other hand seems like a "call us to find the price" operation when you first Google for its pricing.

The kind I prefer referring to as the Mafia Ransom Pricing Model.

Even though MySQL is in reality not a "call us for pricing" operation I cringe every time I see marketing guys show their famous "call us for pricing" move.

Pricing is hard. Pricing takes a lot of experimenting. You can never price your product to please everyone.

But that does not mean that you run away from the problem all together, hoping that your potential customers will call you every time they want to know the price of your product and then they will spend countless hours haggling with you.

The "call us for pricing" approach tells your customers that you have no clue about what your product should be priced at.  It also tells the customers that you are going to charge each customer differently not on the value your product provides but on how much the customer is willing to pay or a host of bizarre factors.

Consider this line on MySQL pricing page for instance:

With MySQL Enterprise Unlimited, companies with up to 1000 employees can deploy an unlimited number of MySQL Enterprise Servers, with full 24x7 production support for a fixed price of $40,000. You also get unlimited 24x7 access to MySQL Enterprise Monitor.

It does not take a rocket scientist to catch a bad vibe about the pricing model if you are somewhere in the nine hundred employee ball park and are looking to hire more people. What happens when you cross a thousand employees? You call up folks at MySQL and haggle with them?

Ever wondered what the correlation is between which database your project uses and how many employees your organization has? None.

To understand this concept of "no correlation" between what you charge for your product and what the pricing depends on, lets start by assuming that we had an awesome word processor that you were interested in buying. We started off with the "call us for pricing" tagline on our website. Now lets assume that out of the hundred customers that saw the website and the ninety seven who never came back, you fall in the range of three customers who did.

Let's also assume that you actually picked up the phone and decided to give us a call. On the call, we told you, that what we charge you for the product is going to depend on what kind of documents you choose to write with our word processor.

If you write a blog post that no-one reads, we would give you the word processor for fifteen dollars a license but if you were to do the sales deed of your home on it, the price of the word processor would shoot up to five percent of the deed price.

Picking important factors which have strong concrete correlation to how you price your product is also important. Pricing a database license based on the number of users or processers is perfectly fine but pricing it on the number of employees in my organization is as messed up as pricing a word processor based on what I plan to do with it.

MySQL does seem to have a well defined pricing page too and this post by no means is an attempt to thrash MySQL. The point of this post however is to convey the central idea which is this:

Every time I see a product website with well defined versions and price tags attached to these versions, I make a decision based on if it fits my pockets and needs. Every time I see a "call us for pricing" tag on the pricing page of a product, I cringe. I almost never call. But then again, maybe that is just because I am a geek. Pricing is a hard problem but that does not mean you avoid it. Putting a "call us for pricing" callout on your website is not an answer.

Now go figure out your product plans, prices and publish them on your product website.

I wish you good luck.

posted on Friday, October 01, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, September 26, 2010

Of the first few times I recall being addressed to as a geek or a nerd, one was during my high-school days. It was meant to be a slightly derogatory remark passed in a setting which shook me up for a couple of days.

Fast forward a few years. I am called a geek again.

This time I smile inwardly and take it as a genuine complement.

Somewhere between the two remarks a lot of things changed but fortunately the Geek within survived these years. Most of him remaining unchanged.

Somewhere between these two remarks, I was also fortunate enough to bump into dozens of other geeks who had not just survived, but thrived. Flourished. Made small and big dents in their universe and had told the world around them in a loud and clear tone that they were there to exist. On their own terms. Without changing. Their weirdness, their stupidity and insanity turning into their primary survival and growth technique.

As I observed these Geeks not just survive but actually thrive and create a ruckus in their world, one of the things that absolutely fascinated me was the mind of these geeks and how it usually works. There was a pattern emerging somewhere. There was something about their mind.

It was weird. Insane. Wired strangely. And yet, it was rather fascinating.

The more I observed these minds, the more convinced I became that there is a lot to learn from these minds.

We are not talking about the Pseudo-Geek mindset here. The kind whose resume you see floating in Job portals around the world. We are not talking about the kind who can calculate their monthly take-away to the precision of decimal points after tax deductions when they look at the offer letter for their new gig. That is the race of dangerous programmers who often cannot program or professionals who will cheat and rob you at the first opportunity that they get.

What we are talking about is the mind that figures out the intricacies of an encryption algorithm and implements it but cannot get itself to care about calculating his monthly takeaway or submitting his reimbursement forms on time.

We are talking about the mind that spends hours focusing on understanding the universe and everything in it from the viewpoint of a system and the personality that tries countless ways to tweak the rules, hack them, break them or work around them. We are talking about the kind that loves doing this.

Now, if you are a genuine Geek, chances are that you have not tried understanding your brain or your thought patterns, with even one tenth the effort that you put in your last project. Of course you might have gone in and grabbed a copy of Being Geek but then do you take a pause every now and then to dissect and analyze situations where you react differently than a perfectly normal-sane-practical-human-being? No? Hardly Ever? Thought so.

This series of posts is my attempt at doing that. It is my attempt at answering how a Geek thinks. How he works. How he reacts. How he sees things. It is an attempt at understanding the minds that have fascinated me ever since I first realized that I might not be as awesome as them, but I can connect to them and understand what makes them tick.

If you are one of them stay tuned for more on the topic as this series of posts unfolds itself. If you happen to work with Geeks or Nerds and were never quite able to figure them out these articles might help you get a deeper insight into the minds of Geeks and Nerds. Stay tuned for a series of posts where we attempt to understand the minds of the genuine geek that might be sitting right across your cubical or maybe even inside you.

posted on Sunday, September 26, 2010 8:30:00 PM UTC  #    Comments [2] Trackback
Posted on: Saturday, September 25, 2010

This classic hugely inspirational scene from Glengarry Glen Ross has been one of my most favorite when it comes to getting things done.

Having said that, I am not so sure that this is a scene young and budding software marketers or sales guys should be watching though.

Coming from a consulting background I have been a part of countless sales calls and meetings. After watching countless sales deals that fizz out, if there is one thing that I have learnt about selling stuff it is that, If you want to sell badly enough, you will sell badly. If you try hard selling, selling will become hard.

Recent discussions with someone at work reveled a fascinating story on selling his used car. This person had been thinking of selling his car for a long time.

Somewhere during this time, his friend lands up with a broken car and since this car is sitting unused in his garage, he decides to help his friend and let him use it for a dew days.

"A few days later, this friend of mine comes to me and makes me an offer for the car", this person explains. "I told him that German cars need a lot of maintenance after a few years and if he wants a cheaper used car, he should be going in for a Japanese car, but he kept insisting on wanting to buy my car".

"I guess the one thing I learnt about selling and the whole try before you buy model is that you have to have genuine interest in helping someone when you let him 'try' your product. You cannot be thinking about selling when you are helping.", the person concludes his learning from the story.

The point? If your 'try' part is focused on moving your customer to the 'buy' part you will almost never sell. If your 'try' part is focused on helping the customer and letting him discover for himself if he genuinely loves your product to come back to you and buy it, chances are that you won't sell to everyone, but chances are also high that you will hit a niche of people who will really "want" your product.

Don't try to sell to everyone. Don't try to sell anyhow. Don't try to sell all the time.

If the "Always be closing" model is not working for you, the best you can do is move to an "Always be helping" mindset and then when you see someone who genuinely wants your product, give them the line that is dotted and chances are, they will sign on it happily.

I wish you good luck.

posted on Saturday, September 25, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, September 24, 2010

When you are the kickass rock star alpha geek of your team churning out code by the minute and getting things done, you love being in the flow. Then slowly, as more and more people in your team realize you can help and as you accept one promotion after another, somewhere it becomes fairly obvious that if someone in your team is stuck he is supposed to walk up to your desk and cause an interruption often without asking if it is okay to interrupt.

The first few years of this 'helping mode' are fun. You are busy helping everyone. You don't really care if you are not churning out a lot of a real work yourself. Time moves on. Fast forward a couple of years. You have managed to stay deeply connected with code, but on an average you just find a couple of hours of non interrupted work in a day. There are days when the builder within you asks you the question: 'What did you do today?'.

You know the answer to the question instantly.

The answer freaks you out.

There are two knee jerk reactions possible in this scenario.

If you were the geek who always loved code, you are going to go back and assign the most complicated module to yourself, lock yourself in that cubical for days f@#king up your responsibilities as a manager and those emails from your clients are going to sit in your inbox unanswered.

If you are the guy who was never quite good at coding you are going to take it upon yourself to walk up to every developer you can find and ask them the status three times a day. You are going to answer every single email in your inbox and watch your experience as a developer go down the drain as you morph from a capable alpha geek to someone who just answers emails and talks.

Both of these knee jerk reactions are small steps towards big problems.

What you need to do is take a pause. Breathe. Let the question soak in. Reflect.

What did you really do today?

You helped Jack by taking his rather long winded function and using an API that would do the same work in half the lines of code. You researched the API. You tried a quick POC on it with Jack. Of course, it was his work but it was your job to keep him moving forward.

Then you spent time responding to emails and building a story around your product so that the clients don't just look at the data.

You picked a bug or two. Fixed those. Did a scrum. Thought about a couple of new features.

And in the process of these you answered about a dozen questions on a feature, on a decision that had to be made or a problem someone was facing. You have done enough by doing nothing concrete which you can sign off as your work.

If there is a geek within you, he is never going to see any of the above as real work so yes you do need a couple of hours a day when you are logged out where you work on keeping your sword sharp and churning out some real code.

Having said that, the sooner you get used to the idea that at some point of time in your life, you will have to stop adding items to the list of things you personally did, stop showing this list to your bosses and start spending a decently big part of your day mentoring, teaching and guiding others, even though this does not really qualify as 'real work' according to the geek that you still are, the better off you will be.

Go on. Strike a balance between teaching, inspiring and doing.

I wish you good luck.

posted on Friday, September 24, 2010 8:30:00 PM UTC  #    Comments [3] Trackback
Posted on: Saturday, September 18, 2010

Project Plans and Gantt Charts have floated around in office corridors since Project Managers have existed in the business of software development.

The thing with folks who run around with these documents and knock on your cubicle three times a day, is not they they are bad human beings.

If they could have helped the developer who is running late at meeting his dead-line they would.

But most of them stopped programming at the first opportunity they found.

Typically here is how a developer manager conversation that I often overhear runs:

Manager: "We are running really late. Do you know what is wrong? Why are we taking so much time?"

Developer: "Not sure. I mean it is pretty straight forward but this nested query keeps timing out for no particular reason. I mean this is a simple cursor that takes the data from a table, throws it in a temporary table and then filters out the data we do not need. We have done similar queries in the past and they all run just fine."

Manager: "How much more time do you think we will need?"

Developer: I'm not sure.

Manager: Can we try to do this by the weekend? Its really important.

Developer: Hmm... okay... I will try my best.

Manager: Thanks. I will go ahead and update the status report.

Can you see what is happening here?

First, none of the parties are at fault here. They are just speaking a different language. The developer is clearly seeking help. He wants someone to sit down and take a look at the nested query. The manager would have loved to help, but he cannot. As much as he would love to help, he knows as much about cursors and queries as the developer knows about the Gantt Charts.

Usually in these cases, the manager also misses an important queue: that the developer is seeking help.

The manager switches to the Gantt Chart mode and talks about how much more time the developer would need.

After a while the developer gets the rules of the game and he stops discussing technical issues with his manager. They try to talk the language of the Gantt Chart, except of course, there is only one problem: Developers suck at speaking that language, specially when it involves saying no.

A disconnect begins.

Very soon, the performance of a developer who was otherwise thriving, takes a steep hard nosedive.

The post is not about criticizing managers or developers. I also don't have a recipe for success here. The only advice I can leave you with, if you are managing a team of developers, is, look for slightest of signs when your developers need help and when you notice that they need help, help them. If you cannot help them because you are not technical enough don't hesitate walking up to anyone in the organization who can genuinely help and ask for it.

Until you do that, chances are, that the nested queries will not automatically speed up by the end of the week.

posted on Saturday, September 18, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, September 17, 2010

The story of NewsTilt and why the young startup nosedived its way into failure and eventually shut down sends a chill down your spine as you read it.

As you read the post which describes one of the founder's view of why the organization failed, you start reading between the lines and you start finding dark gaps which give you a glimpse into what the real reason for NewsTilt's failing might have been. Embedded between the lines of the posts you find chilling comments passed with an innocent, matter of fact tone which make them all the more scary. For example, Paul (one of the founders of News Tilt) explains:

Since we needed to build so quickly, as soon as we got some money we wanted to hire another technical person. Nathan had a friend he wanted to hire, who was exactly the kind of great programmer he could work well with. However, it took some convincing to get him to try working on a news website, and he wasn’t sure he’d stick with it. We were sure we’d be able to convince him to stay, and we even waited two weeks for him to move to work with us.

Unfortunately, we were never able to excite him about the project, and we quickly realized he was never going to be intrinsically motivated the way we need for a first employee. There was a point when I was over in Cambridge with Nathan and the other developer, and I noticed that the developer wasn’t working on a Sunday. Now, we aren’t the kind of people who think our employees owe us 90 hours a week, but startups need that kind of work ethic from very early employees–exactly the reason that intrinsic motivation is so important. If your first employee doesn’t love what you do, doesn’t wake up each morning dying to work on HIS product, you have likely chosen poorly, and that’s exactly what we did.

As you skim through the article you begin to understand that the problem with NewsTilt wasn't any of the reasons mentioned in the post. The problem with NewsTilt probably was the fact that the founder believed that by jumping into an unknown domain and hiring idiots who work ninety hours week can make you a shitload of money. Take for instance this quote from the post:

Somewhat surprisingly, the journalists we picked were too good. We made a big deal of only hiring the “best journalists”, something we spent a great deal of time getting right. We had a guy with a Pulitzer, one with an Emmy, and overall a great deal of talent writing for us [3].

In hindsight, this may have been a big mistake. The kind of writer we actually needed was one that was hungry to succeed. Someone who would write five pieces a day, and who wanted nothing more than to be a big-time journalist. We needed a young Perez Hilton or Michael Arrington, people who wrote for 18 hours a day in order to make their names.

Instead, we got journalists who were already successful in their day jobs, and who already had families and other commitments.

Not to mention of course that these journalists were working for free. If this post does one thing, it bring out NewsTilt as a company which expected everyone, their employees and their journalists, to sacrifice their personal life and give in eighteen hours a day behind an idea and a domain that the founders themselves did not know anything about.

Paul explains why his idea was great and that Google could have made it work:

Google could have made this work. I believe that if Google applied the same model they could probably succeed. They have the tech ability, they have the traffic, and they already have a massive news property. They also have have a big problem with whiny news organization, and an elegant solution would be to kill them off by enfranchising their journalists to be their own bosses.

Of course Google could have made it work. But then again, Google is okay with giving twenty percent personal time from their normal five day work weeks to their developers, leave aside expecting them to work Sundays. Besides, Google is also not pointing fingers at their developers for not working weekends when their products fail. Not to mention that most successful developers work less and say no to meaningless slogging.

Let's face it. NewsTilt probably failed because of a lousy founder who wanted people to stop having a life and work ninety hours a week for an idea that he himself did not know deeply.

The entire post runs into pages and by the time you are done with reading it you realize that Paul could have done a way better job with the post by just saying  "I fu@#ked up. I am sorry". It would have been way better than whining about the developer not working weekends and the journalists having families. But then again, saying "I fu@#ked up" is hard.

Besides, realizing how bad you are at something requires the same skills that you need to become good at that thing.

Paul as a founder has a terrible blind spot that most readers of that post can see rather easily.

Go on. Read the chilling story of NewsTilt and it's failure and as you read it be sure to read between the lines and learn exactly the kind of attitude you should avoid while leading an organization, startup, business or even your small team at work. That and when you make mistakes, stop pointing fingers at others and accept the fact that it was you who fu@#ked up. After all, it is always your fault. Seriously.

posted on Friday, September 17, 2010 8:30:00 PM UTC  #    Comments [1] Trackback
Posted on: Sunday, September 12, 2010

The topic of a recent discussion that I got into revolved around what made 37Signals, 37Signals to begin with.

Was it their life style?

Was it their methodology?

Was it the fact that they were small?

Was it their book, Getting Real?

The opinion that emerged out of the discussion was that the answer was none of these. What made 37Signal, 37Signals is that they contributed true value in the form of Ruby On Rails, then Basecamp and then truckload of other products.

Ideas are a dime a dozen. Anyone can start a blog and talk at length about how amazing product management should be done.

Of course, anyone does not include the millions of 501 programmers, who cannot even program or muster enough motivation to lurk at a blog or own a book on programming, leave aside writing one, but well, anyone with enough motivation, some basic writing skills and some imagination can talk about software development and do blog posts on wisdom gained from doing years of software development.

If you do not have years of experience in software development, you can talk about social media and pull numbers straight out of your ass and impress people. Or better still, you can just quote numbers others have pulled out of their ass and act smart and knowledgeable.

If even that does not do it for you, talking about Entrepreneurship and how you will run your company when you start it up might do the trick.

Preaching, is easy.

Don't get me wrong. Sharing of ideas and experiences is what this blog has been about since its inception and we need some inspiration and sharing of ideas from time to time. It keeps our creative spirits alive. But too much inspiration can be addictive.

When you find yourself taking shots of inspiration morning, afternoon and evening. When you find yourself seated in meetings about entrepreneurship once every week, you know that you are just talking. Participating in a discussion, even at a world wide scale is good but do too much of it and you get a little sick and tired of it. There are times, when after years of blogging, you look back at your blog and you question if the value that you have added is adequate.

Yes you contributed a few innovative ideas, you sparked a few interesting discussions and you rocked on Reddit a couple of times but are ideas, thoughts and discussions all you can contribute? What about real value? What about a real product? What about discussing real code?

Somewhere months ago I asked myself this question and started Code Persona, my little corner where I document my development experiences. The site of course did not take off primarily because of lack of content.

Within weeks of starting the website it was rather evident that I might be decently acceptable at writing code (who needs talent when you have intensity) my ADHD makes it nearly impossible for me to write technical posts on the web much like I find it difficult to be reading from a physical book all the time.

But recently the desire to add genuine, concrete, value has been driving me nuts. In short, I have done enough of preaching and while I love sharing ideas here, which I will continue to do as frequently as I have been doing, I also really want to get out there and discuss something concrete. Like, say, code for example.

Without going into specifics, lets just say that it was simple divine intervention, that prompted me to grab a microphone and headset that had been sitting on my desk only to get used occasionally for boring conference calls, to start recording a series of videos on Microsoft Entity Framework.

The thousandtyone youtube channel was born.

This is 'not' going to be about thoughts on management, this is not going to be about discussion on process and hopefully this is not going to be about countless arguments on what is right and what is wrong.

This is going to be the IDE and code. We start with a series of videos on Entity Framework and from there every week we will dive into anything and everything that seems interesting. I spend a good part of my day breathing, writing, reading, eating, drinking and thinking about code. It is high time I start contributing something through it.

Like I said, the first series of about five to six videos is going to begin with Entity Framework but from there, we are going to jump into anything that seems interesting. Object Orientation, Inversion of Control, Test Driven Development. If it seems interesting, we might end up doing a quick fifteen minute video on it. If the video does not cover everything that had to be said on the topic, expect the video to turn into a series of videos.

Also expect to see a video series on Getting Started With Programming. I know quite a few business analysts, testers and managers who can benefit from that. Besides, the real motive behind that series is going to be teaching my young eight year old nephew how to write code.

The YouTube format of fifteen minute videos works perfectly for someone with ADHD like me. Besides you can chose to skip the videos, rewind them if you do not understand them or play them at triple speed if you believe we are moving along too slow.

Long story short, here is the thousandtyone youtube channel. We are going to write code on the record mode, we are going to learn how to write better code, we are going to teach you how to write better code and we are going to do that rather often. Hopefully, every week.

Code Persona will get updated every time a video gets published on the channel so if you are subscribed to it, you should get notified every time a new video hits the thousandtyone youtube channel.

Basically, it's like this. I spent all these years talking about good programmers and good programming. Here is your opportunity to see me writing code and tell me how much I suck at it. You are not going to miss that opportunity, are you? #Grins.

Go ahead, hit the channel, take a look at the first video and subscribe to it if you are interested in being a part of it.

posted on Sunday, September 12, 2010 11:18:55 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, September 11, 2010

What is your role in your organization?

What are you responsible for?

I know you are confused about your existence in your organization.

I know your designation means nothing.

But if you are a kickass programmer these are probably not the things that bother you as much as random stupid unpredictability in your work life.

Lets jump into the depths of time and bring from the ages that have rolled behind, the gist of what pissed off the best of the programmers at Multiplitaxion Inc. It was movement. Unpredictable, completely irrational and sometimes hugely irritating movement.

As a programmer you spent months working on a project. Putting in sweat and blood on the project and getting attached to it, only to be told one fine morning that you are now going to have an idiotic moron leading the project and you are expected to report to him.

Then there were historic moments where some of the most kickass programmers walked into office only to find out that they were expected to move to a different project all together and start their knowledge transfer effective the very same day.

As programmers we spend multiple hours a day talking to the compiler, where we expect the same consistent, coherent results for the same code written over and over again. We look for systems even when we are connecting to other human beings. The best of your geeks are afraid of unpredictability specially the kind that has 'stupidity' written all over it.

As a manager it is your responsibility that you reduce the element of unpredictability that gets thrown in your team's way to a minimum and if there is unpredictability it is positive unpredictability that challenges them and helps them grow stronger neurons. If you cannot do that the least you can do is be open about the changes in your organization and have no secrets. Transmit information openly.

If you must move them to a different project, do you have a genuine cause for doing that? Are you explaining your thoughts and your rational to them before you move them or are you basically passing orders from the ivory towers of management?

It takes years of solid teamwork, multiple streaks of good luck and a lot of stars have to align before you become a part of a project that is awesome, that rocks and that has the potential of making a dent in the universe of a small group of people or an industry.

All it takes to ruin that is a couple of stupid random unpredictable decisions that you impose on your team without discussing things with them, without listening to them and without giving them a chance to react.

There are multiple awesome projects that might be running in your team right now. A couple of programmers are spending their night time to work on aspects of your project that might take your project to the next level. The real question is, are you going to listen or are you just going to take random decisions and move people around like pawns on a chessboard?

Choose wisely, because your choice ultimately decides the future of your team and your projects.

posted on Saturday, September 11, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, September 10, 2010

Back in the days at Multiplitaxion Inc, Fred tends to throw random ad-hoc work on our plates every time he sees us passing by the corridors of the office.

More often than once we find ourselves gathered in the cafeteria discussing what it is that Fred himself does.

Michael Lopp explains this rather articulately in his book, Managing Humans. He explains:

“What, exactly, do you do?”

Slack.
Jawed.
Amazement.

This question is coming from someone I trust. A trusted employee who has been working in my group at the startup for years. This guy always tells me the straight dope and now he’s asking me what I do with my day because he honestly does not know.

My first reaction to this question is the wrong one. I want to leap over the table, grab my friend by the shoulders, shake him, and yell, “While you were uselessly staring at that one bug this morning, I was keeping this organization moving, pal.” My second reaction is to take a deep breath, so I do.

This basic what-do-you-do disconnect between employees and managers is at the heart of why folks don’t trust their managers or find them to be evil.

But the real problem here isn't the fact that Fred is incapable of answering the what it is that you do here question.

The most evil of managers are not the ones who cannot answer that question. In fact, the stupidest of managers are also not the ones who do not have much work on any given day. Most developers are used to both these kinds. Add a little bit of empathy to their characters and these two kinds are not really all that dangerous after all.

In fact, they might be adding secret ingredients to your project and your organization, quietly and subtly.

These are not the kinds that typically do the most damage.

The ones who do the most damage to your project, work and your team are the ones who don't have any work and to add to that, don't have a life either.

This is the breed that goes around the office with a printout of a project plan, the breed that buzzes the development team three times a day, the breed that organizes meetings that run hours and the breed that pulls out the stupidest of ideas or features straight out of their ass and then insist that they get implemented even when no one really needs them.

So, if you are a manager, the next time you walk up to someone's desk with a project plan in your hand and ask him the status of his module for the third time in that day because you don't have any other meetings to attend, remember that while you might not have anything to do, others in your team might be busy doing some real work.

Don't have work?

The least you can do is stop inventing random work for others and get a life.

Find a video game, play Farmville, take your son out, spend some quality time with your family, go home and stop bothering your team. Consider working less, even if you think you are supposed to 'drive and manage' the team. Seriously.

posted on Friday, September 10, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, September 05, 2010

We have all seen these emails. Emails from your Vice President where he wants a certain Fred to look at your project and provide “inputs”.

You know the famous architecture team story by Joel Spolsky.

That kind of inputs.

Before you know it, "consultants" with terrible blind spots who are awesome at playing the jargon game and who have zero knowhow about the domain, zero understanding of your team dynamics and zero expertise in the technical space are meddling in every decision your team is taking.

Well not exactly those consultants, but if you have been through an architecture review meeting with external consultants you know exactly what I am talking about here.

Every small change is questioned and discussed in meetings that no productive programmer would want to attend in the first place but then you suddenly find yourself in these meetings spending hours defending the most common sense driven decisions you took.

You know your car is going round and round in circles. You are not getting anywhere. The fact that you are going around in circles is common sense. You have too many drivers fighting to take control of the driving wheel.

Obviously, you are not moving ahead. Obviously, throwing in more drivers is not going to solve the problem. Obviously, you need to pick a single driver to drive your project. Obviously, you need to check his track record closely before you pick him. Obviously, you need to learn how to trust him. But then again, obviously, obvious is not so obvious, especially when it comes to big organizations that are trying to pretend to be even bigger than they really are.

If you run a team or an organization, remember that every time you get more than one driver at the wheel you run the risk of getting nowhere. So the next time you invite those external consultants to review a project that is moving just fine or fu@#k up a department that is moving along smoothly, think twice.

Here is my humble word of advice from the forefronts of software development: Pick a single capable trust worthy driver. It doesn’t matter who you pick, as long as the person is competent and trust worthy.

Then move to the back seat and let the person you picked drive without bothering him.

You may not get to your exact destination. You might get just a little closer to it. But then at least it is better than moving round and round in circles.

I wish you good luck.

posted on Sunday, September 05, 2010 9:25:20 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, September 04, 2010

Do you want to really see the worst of software that exists on the surface of planet earth? A few funny examples aside, chances are, that you are not going to find it online. If you are looking for some genuine gems of stupidity, lack of vision, bad design or just down right stupid implementations,  go look at the applications that power the intranet of some of the so called big enterprises or the fortune five thousand.

Khoi Vinh takes the famous analogy of duck typing: "If it looks like a duck, swims like a duck, and quacks like a duck, then it probably is a duck" and turns it into a rather interesting satire on enterprise software. He calls it: "If It Looks Like a Cow, Swims Like a Dolphin and Quacks Like a Duck, It Must Be Enterprise Software"

Khoi also provides his logic on why he believes enterprise software stinks even after the countless dollars that are poured into the efforts of building these applications. He explains:

This is partly because enterprise software rarely gets critiqued the way even a US$30 piece of shareware will. It doesn’t benefit from the rigor of a wide and varied base of users, many of whom will freely offer merciless feedback, goading and demanding it to be better with each new release.

Shielded away from the bright scrutiny of the consumer marketplace and beholden only to a relatively small coterie of information technology managers who are concerned primarily with stability, security and the continual justification of their jobs and staffs, enterprise software answers to few actual users.

Given that hothouse environment, it’s only natural that the result is often very strange.

Of course, most people who take the buying decisions in the enterprise world are going to have blind spots but If you are a programmer with basic ethics and self respect who happens to build software for the enterprise, the first question you need to ask yourself is this:

How do you take the same software, shred off the elements of complexity out of it, stop bitching about performance and add a touch of genuine magic, simplicity, genuinely kickass speed and interactivity to your applications.

Google Apps does it with its paid offering. They take the simple, easy to use, light weight applications designed for end users, tested by millions of live real life users and offer it to the enterprise with added features, more space and a premium price.

If you look into the approach it is rather simple and straight forward. You build for the end consumer. Then once you have enough people using it for free, you let enterprises adapt it and pay for it. You stop bitching about performance and you actually build fast applications. You focus on simplicity, ease of use, easy adaption and you build with the purest of intent.

As rework the famous book by the guys at 37Signals describes, the suits at enterprises that make the buying decisions and sign off paychecks don't wake up in morning wishing they had more slower, sloppier or complicated applications.

So if you are a developer or a technical manager, stop using the fact that you build an enterprise application as an excuse for slapping together random text boxes, drop down lists and option buttons, frameworks, building weird things and calling them enterprise applications. Continue to master the art of simplification. Even your enterprise users will love you for it. After all, working on Enterprise software is not an excuse for building software that sucks. Seriously.

posted on Saturday, September 04, 2010 8:30:00 PM UTC  #    Comments [2] Trackback
Posted on: Friday, September 03, 2010

You there; if you are reading this you probably have something you can teach us; something you can build or maybe a story to tell. Some insightful content, some meaningful software or a product that can change our lives in the tiniest of ways, maybe just for a couple of days.

Maybe you can make us smile. Maybe you can make us laugh. Maybe you can make us take a pause from our routine, mediocre, mundane lives and nudge us to think. Maybe you can give us a tool or a utility that you were working on last week.

The real question is, are you giving us any of that? 

If not, why?

You are afraid of failing. Aren’t you?

Actually, you are shit scared.

You already know that the 'I don't have time' is the lamest of excuses you have given yourself for years, haven't you? 'I want it to be really good before I release it' - that is a lame excuse too.

Of course you want to spend time and sign stuff you put online. Put finishing touches to it. Polish it. Make it the best you can. All you need is a little bit of time. Newsflash – you are never going to have that ‘little bit of time’.

Remember, you don’t have to be the best to have an audience. You don’t even need an audience. Just being loud, being opinionated and adding a little bit of genuine value with an intent that is pure and clean, is all we, you readers, followers, subscribers, audience (or whatever it is that you want to call us) expect from you.

Show us what you’ve got. We don’t want you to polish it for hours. We don’t want a formal website with professionally done videos surrounding it. We don’t want marketing weasels selling us crap. We don’t want impotent words or formal introductions of your product.

Show us a little bit of yourself through your product, service or whatever it is that you have to offer.

Make it Raw. Unedited. Real.

Even if it is as raw, unedited and real as the videos from Khan Academy.

Salman Kahn from Khan Academy explains this rather articulately in his video on the topic.

Normally, I would have quoted from the video, but this one is fairly inspirational and I would rather than you take the twenty minutes and see the video for yourself

The takeaway from all of this?

If your intent is pure and you are adding value, we will listen. And if you continue doing it long enough, consistently we might even spread the word for you.

Now go give us something meaningful, cute, smart, sexy, funny, or simple and informative.

Give us a little bit of you.

The you that moo's and the you that is purple.

I wish you good luck.

posted on Friday, September 03, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, August 29, 2010

I have blogged out the importance of consistency time and again.

Kickass builders and story tellers keep jabbing.

The metaphor is that of running or working out. If you are not consistently shipping, you are not in growing.

Having said that, every single one of us, go through bouts of nothingness and depressions where we are just not in the zone. Seth Godin describes the problem and the solution in a rather articulate and concise way in his post on the topic. He explains:

Some days, even the best dentist doesn't feel like being a dentist.

And a lifeguard might not feel like being a lifeguard.

Fortunately, they have appointments, commitments and jobs. They have to show up. They have to start doing the work. And most of the time, this jump start is sufficient to get them over the hump, and then they go back to being in the zone and doing their best work.

Momentum is incredibly useful to someone who has to overcome fear, dig in deep and ship.

Momentum gives you a reason to overcome your fear and do your art, because there are outside forces and obligations that keep you moving. Without them, you'd probably stumble and fall.

Slowly exercising your creative mussels and growing out of your comfort area is a simple way to get started. You can even use you insecurity to nudge you on the path. At times a counter which humiliates you in public might do the trick.  On other occasions a simple turn of switch in your brain or being shaken up by an idea might work too.

The tools are numerous. Pick a few that you are most comfortable with and use them. What ever it is that you do, always remember that nature designed us to become lion lunch the moment we became sedentary and that implementation hasn't been redesigned yet.

So keep the momentum going, even if it is just one step you are taking each day.

Oh and yes, a lot of talking is not a step forward. Do something real. Work on something concrete. Ship.

Consistently.

I wish you good luck.

posted on Sunday, August 29, 2010 10:30:48 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, August 28, 2010

You look at the stupidity that happens in your organization and you tell yourself, "WTF! Why cant they see something as clear and stupid simple as this?".  And then after a few meetings you stop giving a f@#ck, slip into hibernation and start doing your 'job'.

Scott Berkun describes the situation rather articulately in his post about the topic of fighting management incompetence. He explains:

The big incompetence crime committed by VPs is leaving incompetent managers in place for too long. My theory: by the time the CEO knows a VP stinks, the whole org has known about it for months. The smart people have been making plans to leave or are working to cover their assses. By the time the CEO gets around to taking action, it’s way too late. And often the action taken is whitewashed: no mention is made of how the VP or middle manager utterly failed (e.g. “Fred has decided it’s time for something new.”) The denial lives on, the lie propagates, making it easier for more denials and lies the next time around.

But then the real question that continues to confuse and amuse me is this; why do so many people so high up in the pecking order of really big organizations prefer to live in the state of denial? Are they complete morons, down right idiots or arrogant pompous fools who managed to peck on others and climb the corporate latter of prickdom?

The answer however, might be none of these. John Cleese on his video about creativity might have hit upon the answer using simple science and logic. He explains:

To know how good you are at something, requires the same skills as it does to be good that thing. Which means if you are accidently hopeless at something, you lack exactly the skills that you need to know that you are absolutely hopeless at it.

And this is a profound discovery. Most people who have absolutely no idea what they are doing have absolutely no idea that they have no idea  of what they are doing.

It explains a great deal of life. It explains particularly Hollywood. But it also explains why so many people in charge of so many organizations have no idea what they are doing.

They have a terrible blind spot.

And the problem with teachers may be that the teachers do not realize that they themselves are not very creative and therefore they may not value creativity even if they can recognize it.

The approach mostly explains why kickass developers find it painful when they are asked to work with non-technical managers who had never coded or were never really good at coding in their entire life.  It also explains why so many people high up in the pecking order of countless organizations around the world do not see what every developer who walks the corridor of the organization sees.

So the next time you are asked to lead a team, work on a project, or lead a department take a long pause and ask yourself if you are really good at what you are going to be leading people on. I know there is an impulsive voice within you dying to say - 'of course I know what I am talking about!' - but hold it. Relax. Give it some soak time. Be really honest about it. What are your credentials on that specific topic?

You might have been an amazing programmer. That does not make you a good manager. You might have been an amazing manager, that will not make you a good entrepreneur. You might have been a really successful entrepreneur, but that that may not make you the best programmer. You might have built an amazing system, that does not make you a person who can drive a community.

Before you decide to get actively involved and lead from the front, think. Sometimes handing the driving wheel to someone else who knows how to drive is a way better option. Seriously.

posted on Saturday, August 28, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, August 27, 2010

Jack triggers a casual conversation about his need for mentorship

Yes, that mentorship where he is looking for an 'in office mentor' to handhold him and help him grow technically. He feels he is not 'growing' because he does not have a mentor who can train him.

He talks at length about the glory of his past mentors as you listen in silence. You happen to know and respect some of these guys that he is talking about, personally. Five minutes into the conversation and you have realized the absurdity of it all.

Respecting someone for his talents and wisdom is perfect but when people start putting other human beings on a pedestal higher than themselves and start hoping that these mentors will show them the way, strange things happen.

You look at Jack wondering if you should tell him to snap out of the Matrix. You wonder if he is ready for the red pill.

That red pill.

Then you do it. You ask him to name one hugely successful project of one of these mentors that he is talking about actually led from the forefront.

Silence. Crickets chirping.

Ok, how many times did this mentor of his actually conduct a training where he wrote code that inspired Jack?

More crickets.

Newsflash! These mentors were just as lost and confused as Jack himself or me.

Ours is a business where we mix way too many things together. We mix authorship with authority, years of experience with technical competence, a condescending attitude with power or wisdom and respect with mentorship. We see people with power or authority and assume that just because they were able to get themselves in a position where they can demonstrate power or authority, we need stop questioning and start following them.

The red pill in the software development world is about challenging the validity of every human being you learn from. Question everything that they have to say. Look for your own facts, take your own decisions and make your own judgment calls.

As you read this, you are either nodding your head in agreement or shaking it in disagreement. I am not going to try and convince you one way or the other because becoming your mentor is the last thing that is on my mind. I am not good enough to mentor anyone and I have no misconnections about that.

If I can just collaborate with a few interesting minds around the world, learn something from them, teach them a thing or two and exchange ideas worth sharing with them, I have done my part.

Now stop cribbing about not having a mentor at your workplace. Go find the best alpha geeks and loud characters out there and collaborate with them. Mentorship is not a one way street. It's cluster-fuck of hundreds of minds engaging in countless battles of ideas, facts or techniques and learning from  those battles. These battles can cause a few scars but once you get the point they are so worth the scars they cause.

Now the real question you have you ask yourself is:

Are you man enough to put yourself out there and participate?

Go on. Connect with the best of the minds you can find and then learn from them. I dare you.

posted on Friday, August 27, 2010 4:21:00 AM UTC  #    Comments [2] Trackback
Posted on: Sunday, August 22, 2010

Remember that book you promised you said you were going to write? Remember that technical blog you were going to post on regularly? Remember the little open source framework you said you were going to work on? Of Course you are working on all of that. But then, do you remember when it was that you first said you were going to write a book? Three months ago? Five Months ago? A Year?

Thought so.

Time has strange attributes attached to it particularly when it comes to the speed at which it moves. You are not going to win the fight against time, so don’t even try.

But then, as a geek you have tools at your disposal that help you realize just how pathetically slow you are moving. One simple tool is using twitter to announce the number of days since you started a task. I recently started doing this with the book project that I started working on:

The idea is to make it a point to go to twitter and post a message with every passing day telling yourself that one more day has passed. You can either leave it at that, or get creative and mix it up with celebrating doneness, announcing frustration at random distractions or announcing nothingness.

Either ways, if you can just logout for just five minutes every single day to remind yourself how fast time is moving by, chances are that as time moves by you will disconnect for longer durations and get something real and productive done.

So go ahead, make a not to yourself and tell yourself how many days has it been since you said you were going to work on whatever it is that you said you were going to work on in your free time.

Of course you will end up making a fool of yourself when the number of days start moving phenomenally high for simple things, but then, at times, self humiliation in public can work really well.  Try it.

I wish you good luck.

posted on Sunday, August 22, 2010 9:05:25 PM UTC  #    Comments [3] Trackback
Posted on: Friday, August 20, 2010

Based on criticism of the last chapter I ended up taking it offline. One of the things that I learnt about writing while doing this book is that you need to give each chapter some soak time where it just sits on your hard disk and you spend days looking at it, refining stuff, adding stuff and most importantly, removing stuff. This chapter is my attempt at doing that. The chapter has been made to soak for few days and has been edited with considerable effort.

The purpose of the chapter is to introduce you to the idea of builders without a lot of preaching.

As always, we would love to hear back from you. Feel free to drop us a comment, send a tweet @thousandtyone, email me, ping me or call me if you have anything to say regarding this chapter or the book in general.

Now go get a copy of the chapter here.

If you are interested in the other chapters that have been drafted so far you can also take a look at the table of contents.

posted on Friday, August 20, 2010 8:30:00 PM UTC  #    Comments [2] Trackback
Posted on: Sunday, August 15, 2010

Children are absolutely amazing when it comes to taking chances and moving away from the realms of mediocrity. They are also seriously kickass when it comes to the idea of learning things without measuring the exact ROI from learning those. They are good at having fun.

I have had the pleasure of spending some time today with my nephew where we ended up doing a mini research which started with my ADHD driven mind easily getting confused with a kid's question and giving in to countless digressions.

Here is how it begins:

I am in the process of trying to think of an idea to post. It's one of those hours of the day where I crave silence. Serious silence. Varun, who coined the name of this website and is about eight now, walks with his PSP in his hand and is playing a soccer game. I tell him to lower the volume. He does. I tell him it is silence zone and a little bit of quite is good for his brain. Fifteen minutes of silence follows.

Then before I know it, he is goggling videos on the Egyptian history on YouTube using my laptop. I have been removed from my very own laptop by the sheer brute force of an eight year old. We are both watching a YouTube video which is talking about Egyptian history. The video casually mentions the length of River Nile. Now how do you take six thousand six hundred and seventy one kilometers and explain it to a eight year old? Hmm.

So, let's begin with what he knows. He knows the distance between two stations of a local subway. He thinks he can guess the distance between the two other stations. So we Google the distance. Turns out, it is seventeen kilometers. He thinks that is a lot of distance.

Now translate the distance of Nile in terms of number of trips that he would have to do between these two stations. The number of trips roughly equates to: 392.4117647058824 trips. He gets it. Totally.

Now let's Google the speed of the subway in our part of the world.

Before you know it two strange minds are deeply submerged in solving a problem. Our research is taking us to corners of the universe where I would have never even dared to go alone and for those of you who might be interested in this super secret research of ours, read on people.

First of all, we now have the time it would take if you were to travel 'through' Nile using our local subway. By the way, there is a huge disagreement between me and my nephew on whether the right word to use is 'through' or 'across' because depending on the direction and angle you travel in the word to use varies. Anyway, I digress, from Egyptian History, to Nile, to Mathematics, to English my ADHD is now playing tricks with me so we decide to focus and complete the research.

We have the details worked out, which we do not have a plan to publish but here are the end results:

  1. Time to travel through Nile using our local subway if it keeps on running without stopping: 9 days 6 hours 14 minutes 24 seconds.
  2. Time to travel around the earth using our local subway if it keeps on running without stopping: 55 days 15 hours 50 minutes 19 seconds 19 milliseconds.
  3. Time to travel milky way using our local subway if it keeps on running without stopping: 3805175038 years 18 days 21 hours 19 minutes 48 seconds.

We thought of handing this over to the discovery channel and letting them publish it but then we figured that since this is our hard work, we should just publish our research on my website and continue to hold the copyright of the research.

Are we sure if the numbers are one hundred percent correct? Have we accounted for all variable factors when we drill down till milliseconds? If you are still reading this and are wondering what is the point of this post, let me tell you that you have missed the whole point already.

If you are interested in buying our research results, we are not interested in selling them. Thank you so much anyway.

Having said that if you have your very own research we (where 'we' stands for my nephew, me and a couple of really close friends) would love to hear about it. Seriously.

posted on Sunday, August 15, 2010 10:58:23 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, August 14, 2010

At a shopping mall my mom hands me a shirt which I brush aside as something I don't want to try out. When it comes to dressing most of us have preferences. What is the maximum loudness of the color that you can carry on your shirt with grace, do you wear regular fits or are you comfortable in tights. Do you have the physique or the body to carry the clothes you are wearing.

You probably even know the kind of fit that you are looking for in the first place.

You might even end up spending quite a bit of time trying stuff out.

Every time I interview someone and candidates tell me that they have not visited our website, my ears perk up. What do they know about the organization they are applying for? Have they interacted with someone in the organization? Do they know someone personally? Have they talked to someone? Read someone's blog? What made them apply in the first place? I am already suspicious of their reasons for applying.

The next question, is turning the tables, and letting the candidate interview us. Tell them that this is their only chance to know anything they want to know about the organization and let them ask questions openly and candidly.

Observe.

Their questions say a great deal about the type of 'fit' that they are looking for.

  1. How does the appraisal process within your organization work?
  2. How can I grow within your organization?
  3. What are your salary brackets for someone with similar experience as me?

This line of question says quite a bit about the candidate asking them.

He is neither looking for the personality, nor the texture of your organization. He is not considering his own mindset and mental physique before applying for an organization.

If he was given a job offer would he just join?

If he can somehow get those legs into those jeans, will he buy them?

Or is picking an organization really much simpler than picking your clothes?

Now, all you need to do is go through the interview, but you might want to keep it short with this guy, because from this point on, you are probably just wasting your time which could have been otherwise utilized interviewing better candidates who care.

posted on Saturday, August 14, 2010 8:30:00 PM UTC  #    Comments [2] Trackback
Posted on: Friday, August 13, 2010

You are in corporate business meetings where the revenue model of the product is discussed extensively. Meetings where the business wants to visualize and conceptualize every single use case of your product before you even start writing a single line of code.

You are working in an organization where ideas do not “happen” or catch someone by their collars. You are working in a company where ideas are manufactured based on market trends, what is going to be big, what is going to be hot and what is going to have the highest ROI.

The problem with this organization is that when your revenue model, your profitability and your ROI is all you focus on, you build a product which has a hollow sole and a marketing pitch that is full of impotent words.

Put simply, you are trying too hard.

And when the trying ends, you might have a product with a lot of features but you don’t have a story. You have a product that does much more than any other product out there but a product that no one cares about.

Why? Because the really smart consumers, the ones of have the means and the measures to become your unpaid ambassadors also have the common sense to see through your shit and get to the rotten core of your product.

Your product was built by builders who went on hibernation half way through the product because the so called management rubbed them the wrong way and gave them no autonomy, it shows.

Your product was build by 501 programmers who you thought you would just hire and pay to get stuff built, it shows.

Your product was controlled by a team of micro managers, who started five mail threads and had five new ideas for every five lines of code the actual team that was doing some real work behind the product wrote.

Every single act of organizational stupidity that happened through the development of your product is going to show. The folks who can actually tip your product, are going to see right through it and give your product a simple cold shoulder as you sit in meeting rooms and wonder why you are not getting a lot of traffic on your website or why no one is using your product.

What is most ironic, is that these are the same smart mavens who would have joined your team and become your unpaid brand ambassadors, only if you started with a genuine idea of helping your consumers, making a dent in the universe or just adding a little bit of fun to their, and above all your life.

When you are having meetings and politics instead of having fun while building a product, you, your product and your organization tend to become boring. At least, to an outsider. The smartest of your consumers can see right through your product. Of course, the business loves profitable, but the day you stop having fun, you stop being profitable. It’s that simple. Really.

posted on Friday, August 13, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, August 08, 2010

A book I read recently called, Drive, is fundamentally a collection of researches that other authors and companies have done regarding the hidden forces that motivate true builders. The book also talks about thing that do not motivate the true builders.

The book begins with the introducing smart chimps who solve puzzles without the lure of food or direct rewards and introduces you to the concept of intrinsic motivation, which also happens to be the central theme of the book.

This video does an really good job at describing the book and everything the book contains.

One genuinely innovative idea the book proposes is the concept of what I like to call “a quitting bonus”. The idea is fairly simple. Somewhere, smack in the middle of the year, you announce a quitting bonus. Anyone who quits within a month from the day you announce the bonus gets the bonus. It is similar to a joining bonus, only designed with an intention of driving people out of your organization.

The central idea is simple. After a certain level, the truest of the builders in your organization are not moved by paychecks. If you are a truly innovative company, chances are, that you do not want folks who will jump to the next door organization at the first fifteen percent hike that they are offered. So just offer them that much to quit in the first place and see if they stick around.

A quitting bonus gives the jumpers a chance to jump early. After the jumpers have jumped you are left with individuals who are not driven just by a slightly bigger paycheck. You are left with people who are not moved by carrots and sticks. You can now settle down and focus on making small or big dents in the universe through your work rather than constantly worrying about people leaving.

Getting your management to lure people to quit, is a little difficult to describe and sell in a management meeting, but if you think about it, you are way better off paying a small bonus to get rid of a paycheck programmer, rather than having him work half-heartedly for your organization and introducing mediocrity in everything he does.

Go ahead, use money as a carrot to drive people out of your organization and the ones who do not take the carrot might be the builders, story-tellers or people who believe your vision. These are the people you set out to look for in the first place. With the others leaving your organization, you can now settle down, focus and get down to some real work.

posted on Sunday, August 08, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, August 07, 2010

A young and budding engineer wants your advice on which of the three job offers he should accept.

Applying for three job interviews and picking from one of the three job offers is a simple “practical” decision for most programmers. Compare the salaries, the perks, the brand name of the three companies that have given you an offer and poof!

By the time they talk to you most programmers have already evaluated, calculated, measured and predicted the pros and cons of each offer. All they seek from you now, is your validation.But the mere premise of seeking validations from others has a problem associated with it. The act of seeking validation is a sign of fear. Validation is boring. Validation is safe.

The person seeking validation is usually scared of the voice that is whispering so very gently in the little corner of his brain.

“But Multiplitaxion Inc, seems like an amazing fun filled work environment”, the voice tells him.

The voice was already hushed by the “practical” thought process long ago.

Multiplitaxion Inc, was paying fifteen percent less than other job offers.

It would have been a stupid impractical decision to pick Multiplitaxion Inc, over a safe, big, high paying job.

But then the upside of listening to that voice, is that after you have heard it and followed it a couple of times, you are no longer scared.

You do not need validations.

You have no “could have" no "would have" and no "should have” scenarios in your life. What you have is a decision not needing external validations. Of course, you can fail, but then in those cases failure usually becomes a part of the learning process, not a reason to quit.

Impractical decisions are sometimes way more practical than practical ones where everything is planned and yet you are scared. Shit scared.

Stop being that practical 501 programmer or an obedient employee when it comes to your career.

We have too many of them already.

Now go do something child-like, impractical and spontaneous.

I wish you good luck.

posted on Saturday, August 07, 2010 8:30:00 PM UTC  #    Comments [2] Trackback
Posted on: Friday, August 06, 2010

If you are reading this, you are a reader. By today’s standards, when most programmers do not read books, you can even call yourself a vicarious reader. Chances are that you like to snuggle up in your bed and skim through the crisp pages of a book as leisurely moments glide by.

Books are fun, books are entertaining, books happen to be the source of food for your hungry, possibly hyperactive mind. You love your books so much so that somewhere deep in your mind you actually believe that your books love you back. You even visit the local bookstore during weekends and spend time reading stuff there.

And then you bump across a new book full of new ideas. You are holding it in your hands, snuggling up on a couch and skimming through it. Glancing through it. Hunting for ideas you can take home or ideas you can carry to work and put to use Monday morning. You are moving fast. You are sucking in information like a sponge.

That is not real reading.

Real reading is when you are reading slow, real reading is when you sit with a pencil and circle paragraphs as you read them. Real reading is when you are in crazy war with the book.

Scott Berkun describes his fascination for seeing his book, used, abused and worn out. He explains:

There is something depressing about seeing one of my books high on an office shelf, in perfect condition, covered in a layer of dust. I’m thrilled they were purchased of course, but there’s sadness there too.

Some people keep their favorite books in great condition, and that’s awesome. It’s an act of great respect.

But I admit I love seeing one of books all dog eared, with tabs, post-it notes, or even coffee-stains all over the place. That’s a book that has lived and has spent long hours in use. It’s been lent to many people, traveled in buses and planes, and read by many sets of eyes.

Real reading is when you appreciate the well knit articulate stream of words effortlessly brought together to create equally coherent stream thoughts in your brain. Real reading is when you get so excited about a paragraph that you have to take notes on the margins, a notebook or a piece of paper, right then.

Real reading is when you are not reading a book to finish it, but for the pleasure that you get out of reading it. Real reading is when your are reading is not just supposed to make you a better reader, but a better writer. Real reading is hard. Real reading is slow. Real reading is fun.

So, what did you read this weekend?

posted on Friday, August 06, 2010 6:00:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, August 01, 2010

A wise man who looked at an email trail between me and my manager once remarked that both of us were misusing the concept of email as a medium. "You are way too long winded", he said, "that is not what email is all about. When you guys have written an email, you should reread it, ask yourself how you can say the same thing with fewer words, delete everything you have written and rewrite the same email this time with a lesser number of words".

The idea was simple. When it comes to writing or reading content, that is supposed to make a point, short works better than long.

While with books the cartoon might seem funny, with emails most people scan your content anyway, and the longer it is the lesser the chances that they might actually read it. After all, people do not read email. They read me-mail.

Years later the same feedback came in for my blog posts. A colleague of mine mildly hinted that I should practice writing shorter. Particularly since all my post revolved around a point which I was trying to make. Making the same point with lesser number of words, was an art, he believed I should start learning as soon as I possibly could.

We're evolving as a race. Twitter imposes a hard limit of hundred and forty characters. Most other mediums are not as controlling and clear about how you aught to use them, but as a general rule, If you want to make a point, keep it short, keep it simple.

If you have a story to tell or a book to write, go ahead and add verbiage. Describe your experiences to your heart's content. If it's humor your are trying your hand at, and you prefer not to use brevity, play with words all you want. There will always be cases where you need to flip those keys for hours but when it comes to an email or a blog post that is supposed to make a point, short is sweet, short is fun, short is powerful.

Ok, done. I think I just made a point. That was short.

posted on Sunday, August 01, 2010 10:14:01 PM UTC  #    Comments [1] Trackback
Posted on: Saturday, July 31, 2010

Nasty emails that are condescending and / or simply supposed to trigger meaningless arguments are all over the place in the software development world. Some of the best builders I have worked with often think of these as fouls  and believe that you cannot win a game by scoring a foul in answer of another foul.

Given that you are dealing with other human beings and given that you are yourself going to act like an asshole every once in a while without even knowing that you are doing that, chances are that you are always going to face a turmoil regarding the thoughts that you want your brain to focus on and the thought that your brain actually focuses on.

You want to focus on the facebook integration for your product and think about it.

But then, are you truly focusing on it?

Fred is acting like a hardcore asshole. The suit, who you report to has suddenly started acting like a jerk. There are three emails in your mail box that you are just itching to respond. You can shatter the sender of all these three emails right now. All you need to do is hit the reply to all button and slam your keyboard with your fingertips for five minutes.

You are thinking about responding to those emails when you truly want to think about facebook integration.

Aren't you? Huh? Huh? Huh?

Paul Graham has a rather interesting take on the topic. He explains:

Turning the other cheek turns out to have selfish advantages. Someone who does you an injury hurts you twice: first by the injury itself, and second by taking up your time afterward thinking about it. If you learn to ignore injuries you can at least avoid the second half.

I've found I can to some extent avoid thinking about nasty things people have done to me by telling myself: this doesn't deserve space in my head.  I'm always delighted to find I've forgotten the details of disputes, because that means I hadn't been thinking about them.

My wife thinks I'm more forgiving than she is, but my motives are purely selfish.

Some attacks are best defended by funny twitter hash-tags, some are just not worth responding to and some are not even worth thinking about, because all they do is clutter your brain and occupy precious processing time which could have been otherwise used processing way more fun filled ideas that would help you move forward. Thinking of how you are going to respond to Fred? I suggest throwing the idea out and not giving Fred your precious processing time.

Go reserve your processing time for something more meaningful that is going to add some genuine value and ultimately matter in the long run.

I wish you good luck.

posted on Saturday, July 31, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, July 30, 2010

There is something to be said about throwing out "work in progress" versions of chapters for your book online. Last week, I published a chapter of my book live and within a week I heard from more than individuals who had important but varied feedback about that chapter. All their feedback basically boiled down to this:  'Pops, the chapter sucks! Take it down and rewrite it. Now!'.

The three primary reason why most people disliked the chapter was because:

  1. The chapter was written with a timeline in mind and that showed in the writing.
  2. I did not have a lot of fun writing the chapter and that showed in the writing too.
  3. The third feedback was a rather long feedback which came down the fact that writing for a book is very different from writing for a blog post. When you are writing a blog post you have an audience that reads you and is aware of the context you write in. When you write for a book you need to tell a story, set the context and help your reader understand the context. If you don't do that you have lost your readers.

I continue to be amazed at how easily and clearly people can see through the work that is done halfheartedly without a lot of passion or work that is just done to meet a timeline.

So as of now, I am taking the chapter down and giving you a big fat sorry for wasting your time by asking you to read a chapter that was half baked; something that even I did not enjoy writing in the first place.

Going forward, if a chapter goes out, you can be rest assured that I have given it my best shot, have enjoyed writing it and that there is a good chance that you might have a concrete take-away or something to learn from the chapter.

And as far as this post is concerned, what you can take away from it is simple.

Whether it is a new feature, a new software or a new chapter of your book, the same rule applies when you are about to publish something online.

Did you enjoy writing it?

If you did not enjoy writing it, they will not be able to stand it when they download it.

Do not publish it live.

Let it soak. Work on it. Make it better.

Bring it to a level where you can get at least yourself to genuinely like it.

I wish you good luck.

posted on Friday, July 30, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, July 25, 2010

If you have been a reader of this this blog, you probably know that I am not a big fan of planning. Having said that, I like to celebrate all forms of doneness. An online version of the Table of Contents is my attempt at celebrating doneness as far as this book is concerned.

You can take a look at the work in progress version Table of Contents by clicking on this link.

The page is slightly crude  in terms of design but the good thing about this page is that it gives you a single URL from where you can download all files associated with this book. Of course, any new chapter added to the book will also get added to the Table of Contents.

posted on Sunday, July 25, 2010 10:12:14 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, July 24, 2010

The second chapter of the book is now live for download. The point of this chapter essentially is introducing the concept of a builder and what drives builders around the globe. The chapter can be downloaded using this link.

It is funny how the guys who talk about management, hikes, career or rapid professional growth hardly ever understand or get to any of these while the folks who are getting a kick out of building stuff often end up getting good at all of this. What is also amusing is how most kickass developers around the world shrug at discussions which involve these topics but get insanely excited when talking tweaking a for-loop which has a database query inside it.

A consistent doer is much more effective than the talker.

This chapter lays the foundation of some for these ideas and more.

Go get the chapter here.

As always, your ideas, comments and suggestions are always welcome.

Feel free to email them to me or use the comment on this post.

posted on Saturday, July 24, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, July 23, 2010

For those of you who might have been following the blog and downloaded the Acknowledgement section of the book, the first chapter of the book where the basic theme of the book is introduced is now live and can be downloaded using this link.

During my years of observing multiple organizations at work, one of the recurring theme that often keeps coming out is that when we get together in large groups and try to organize things, we often loose the ability to thin slice information, organizations and situations.

The first chapter is all about thin slicing the people who work in the business of software development.

You can get the chapter here.

As you read the chapter please do remember that this is a draft version and is open to change. If there are any typos, errors or concerns you have regarding any of these chapters, please feel free to email me or drop in a comment in the comments section.

Now go download the first chapter of the book here.

Don't forget to email me your thoughts, suggestions or opinions. Given the fact that I am not working with a full time editor, these comments, suggestions and opinions genuinely help.

posted on Friday, July 23, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, July 18, 2010

Long Story Short.

For those of you who know about my book project. I have started releasing parts of the book live as and when I get considerably 'done' with those parts. This is the first in the series of posts where the Acknowledgement section of the book goes live.

You can get the draft of the PDF version using this link.

If you don't know what this is all about, read on. You know what, even if you know what this is all about, I would still recommend you read on.

The Story So Far.

Months ago I announced on this blog that I would be doing some serious bathroom singing at a concert and that this was your chance to boo at me. The book, even though I have no clarity about what I plan on calling it, was an idea that caught me by my collar and would not let me go till I had set it down on a white canvas of my word document or blog posts.

After writing a truck load of content and material for the book and making all of it live, I looked back at the content and thought I would just dump it in a word document, publish it and be done.

Then when I started re-reading the content, there was only one thing left to tell myself:

Fu@#k!

I mean seriously. There are primarily three reasons why I was f@#cked. They were:

  1. Editing and Proof reading a book is hard. Just like everything else this is the ten percent of the work that is usually the hardest. Which means that there was quite a bit of work still left on the book.
  2. Your past work, when looked back, from a point and time in the present always sucks. Which meant that there were parts of the book that would have to be heavily re-written and parts that would have to be edited out.
  3. The book was not going to let me go till it had received the final touches and till it was released.

So, after a state of panic and denial which lasted for a few days and then jumping over to a couple of added side projects, I came back to the book and decided to pause all other side projects of my life till I am done with releasing this book.

Your Help And Participation Required.

As always, when I sat down to edit the book and give it the final touches, I thought of releasing parts of the book as PDFs which you can download, read, talk about, blog about, tweet about, criticize, comment on and give your feedback on.

With every release of a new chapter, go ahead and grab a copy of the chapter. Go through it. If you find any typos, let me know. If there are parts that you believe are better left out, let me know. If there are parts that you feel would be better re-written let me know.

You can either leave a comment on the post where the chapter is announced for download or just email me using the mail icon on this blog.

The Content.

I've given a decent round of editing and proof reading to the Acknowledgements section of the book which is now available for download.

More chapters and added parts of the books will start following in the weeks to come. Looking forward to your comments, suggestions and opinions. Given the fact that I am a cheap author working without a real editor your help would mean a lot.

Now get the Acknowledgements section of the book using this link and do start in your comments, suggestions and opinions.

posted on Sunday, July 18, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, July 17, 2010

I'm late. We were going to have a product scrum. I worked late and could not get up. Shit. I was supposed to get the scrum started. We were supposed to talk about the features we would address in the next sprint. I overslept.

When I rush to office, my gut reaction is to email everyone and let them know that I am sorry for cancelling the scrum. We can do it later during the evening.

But the scrum has already happened. The team has already met. They have already picked the items they would address in the next sprint. They have already started working on those items.

I glance through the backlog, desperately looking for items that they should not have picked up. Items that are not 'high priority'. Items that are not even 'required'. I am desperately and quickly glancing through the list, looking for every single item in the list that they should not be working on. Looking for any mistakes that they might have made during this morning's scrum that basically happened without me.

Stop it. A voice deep down within me tells me.

I glance through the list.

Stop it. The voice repeats itself.

There, that's the item they should not be working on. It's just packaging. They could have done this later. There are so many other high priority items that they could be working on. I tell myself.

Yeah right. You are scared. Scared of losing control. Shit scared. Deal with it. The voice says coldly and disappears.

It's like being slapped on my face.

The voice, as it often turns out, is correct.

I decide to keep my gob shut, focus on fixing the bugs that are on my plate and let my team do their thing. They are growing. They are learning. They no longer need me to give them direction, and that, in a very special way, is a hugely good thing.

Want to see if your manager is worth his salt? Stop involving him in a couple of decisions. I am not even talking about the overall product direction. Just a sprint which lasts a month. Go pick a few items from the backlog that you feel are most needed for the product and start working on them without involving your manager.

Did you piss him off?

Did he freak out?

Did he just politely invite you to a meeting room that tell you that you are working on items which are not high priority?

Or did he find something bigger and better for himself and let you continue with the sprint without any interruptions?

How you react when your team stops asking you for direction and starts taking their own decisions is your true test of leadership. Go on, give up that insecurity. It's way too heavy and you cannot carry it with yourself in the long run anyway. Go ahead. Throw it away. Shred it off.

I wish you good luck.

posted on Saturday, July 17, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, July 16, 2010

Fred is in a meeting. Answering questions about the delay of a project and why things are not moving. He is passing the buck to his team in their absence. Fred as it turns out is acting like a whiner and is getting loved for it.

The others in the meeting room seem to have joined him in their collective criticism of the team and why they are so unproductive.

Every single individual in the meeting seems to be getting a perverted sadistic pleasure out of mentioning how unproductive the team is. No-one seems to be talking about how utterly helpless they are in terms of helping the team.

There is a major bug in the system. Discussions seem to revolve around why the bug was missed during the testing cycles. There seem to be no discussions around what we can do to make the testing cycles better. Not a single person in the room seems to stand up and contribute towards helping with testing the application before it is released to the client.

If there is one thing I have worked on really hard, in the last few years of my career, it is observing human beings in general developers and managers in particular.

In this post I am going to let you on to a little known dark secret that is so well guarded that even most managers around the world are not aware of it.

Before I tell you the secret however, I need you to promise me, that you will not dismiss the secret as stupidity. That you will hear me out. That you will at-least think about it. That you will do some honest soul searching and ask yourself if it is true.

Ready for the secret? Here we go.

Most managers around you. The ones you work with. Irrespective of how amazing they are as managers, get a sadistic perverted pleasure out of a situation where their team fu@#ks up big time. Don't believe me? See a manager describe how unproductive his team is, in a meeting called to discuss why the project is not shipping on time.

Observe a manager closely as he talks about how unproductive his team is. You might actually seem very mild indications of subtle dramatic pleasure and excitement in his voice as he speaks. He will refer to his own team as 'they' instead of 'we'. The idea is to disassociate yourself from trouble, pass the buck over to your team and run.

And this is not about bad management or micro-management. If one of your team members went out and did something stupid, like delete a production database, I bet you have experienced this feeling too. The first gut as a human being is that you want to disassociate yourself from 'him' and then get in a meeting and talk about his stupidity and how to resolve it.

Why mention the fact that giving 'him' the access to the production database was in itself not such a smart thing to do in the first place. After all, that makes you equally responsible for the shit that just happened. No one needs to know that.

For years managers have got away by just blame and whining about their teams and their team's lack of productivity. So much so that, most managers around the globe seem to get a mild sadistic pleasure and a kick out of criticizing their teams.

If you run an organization, go make your managers accountable for their teams. Their failure is your failure. In fact it is the entire organization's failure. Breathe. Let that fact sink in. Seriously.

Stop talking. Stop bitching. Stop whining. Stop disturbing your team and help them any in real, productive ways that you can. Take up a round of testing. Do their documentation. Check every screen of a new release meticulously. Find out other ways of reducing their work and helping them productively.

If you cannot do any of that, just get the shit out of their way and let them function independently.

And if you did not even realize that you get a secret pinch of pleasure deep down inside at the first mention of f@#kup or drama within your team, now might be a time to do some serious soul searching. Go on. Starting thinking about how you can stop getting that perverted sadistic kick of pleasure every time your team fu@#ks up. Stop it as quickly as you can. Seriously.

posted on Friday, July 16, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, July 10, 2010

Every now and then I stumble upon medium sized software development companies which play around with their product and their pricing. Observe these companies closely and you will realize a common trend running through all of these.

Most tend to start a product with a product idea and not a personal pain point that they want to solve to begin with. When you get subject matter specialists in the room and when you start spending hours gathering requirements, about a problem that you couldn't care less about, you tend to build mediocre products that, 'meet all requirements'.

The same subject matter specialist that billed you by the hour, also happened to bill your competition and what you have in your hand right now is a 'me too' product. Your product has screens which are very similar to the screens of your competition. Your product has features which are very similar to your competition. Your product also has pricing which is very similar to your competition.

You are what James Surowiecki describes in his article for the The New Yorker as, Soft in the Middle. He explains:

For Apple, which has enjoyed enormous success in recent years, “build it and they will pay” is business as usual. But it’s not a universal business truth. On the contrary, companies like Ikea, H. & M., and the makers of the Flip video camera are flourishing not by selling products or services that are “far better” than anyone else’s but by selling things that aren’t bad and cost a lot less.

These products are much better than the cheap stuff you used to buy at Woolworth, and they tend to be appealingly styled, but, unlike Apple, the companies aren’t trying to build the best mousetrap out there. Instead, they’re engaged in what Wired recently christened the “good-enough revolution.” For them, the key to success isn’t excellence. It’s well-priced adequacy.

These two strategies may look completely different, but they have one crucial thing in common: they don’t target the amorphous blob of consumers who make up the middle of the market. Paradoxically, ignoring these people has turned out to be a great way of getting lots of customers, because, in many businesses, high- and low-end producers are taking more and more of the market.

In fashion, both H. & M. and Hermès have prospered during the recession. In the auto industry, luxury-car sales, though initially hurt by the downturn, are reemerging as one of the most profitable segments of the market, even as small cars like the Ford Focus are luring consumers into showrooms.

And, in the computer business, the Taiwanese company Acer has become a dominant player by making cheap, reasonably good laptops—the reverse of Apple’s premium-price approach.

While the high and low ends are thriving, the middle of the market is in trouble. Previously, successful companies tended to gravitate toward what historians of retail have called the Big Middle, because that’s where most of the customers were. These days, the Big Middle is looking more like “the mushy middle” (in the formulation of the consultants Al and Laura Ries).

The companies there—Sony, Dell, General Motors, and the like—find themselves squeezed from both sides (just as, in a way, middle-class workers do in a time of growing income inequality). The products made by midrange companies are neither exceptional enough to justify premium prices nor cheap enough to win over value-conscious consumers.

The same article also talks about why it is so tempting and yet so painstakingly non-rewarding to stay in the comfortable middle path:

This doesn’t mean that companies are going to abandon the idea of being all things to all people. If you’re already in the middle of the market, it’s hard to shift focus—as G.M. has discovered. And the allure of a big market share is often hard to resist, even if it doesn’t translate into profits. According to one estimate, Nokia has nearly twenty times Apple’s market share, but the iPhone alone makes almost as much money as all Nokia’s phones combined.

The argument becomes much more dominant if you are launching your own product or service. You are not exactly a Sony or a Nokia and chances are the soft middle in your industry or domain is already taken by someone. Your only chance of surviving is that you make the best freaking products out there. Build awe and surprise by innovating the best product out there.

If you can't build a seriously kickass product that people would pay a premium price for, build something acceptable that works and disrupt your competition with the lowest of prices.

After all, safe is risky, remarkable is fun.

Go on, get out of that circle mediocrity when it comes to products and prices.

I wish you good luck.

posted on Saturday, July 10, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, July 09, 2010

How often have you witnessed two or more individuals disagree over something and battle it out over email?

Come on. You have seen the thirty-five email long mail thread where two big Grizzly Bears of your organization were fighting with each other over a technical disagreement. Haven't you? Huh?

If you've been in the business of building software long enough I bet you have been a part of at-least one or more of these email trails. At more than one point of time in my life,  I have been involved with quite a few of these and have specially devised twitter hash tags which can be used to rescue and bail me out of some of these 'yes but' discussions and arguments.

The deal is fairly simple. If it's a productive, objective discussion where the best solution is bound to win and it helps you learn something new, battle it out. Argue. Discuss. Learn. Strain yourself defending your strong opinions weakly held.

At the first indication of things turning personal, the sign of a meaningless flame war, the sign of bozoism or the sign of a 'yes but' discussion, back out. The battle is just not worth fighting.

Scott Hanselman's post on keystroke worthiness, which is inspired out of the original classic counting your keystrokes, by Jon Udell, is not a post which addresses this topic directly but provides some useful advice if you are just about to hit that reply to all button and respond to an email which is soon going to turn into a never ending yes-but discussion. The basic idea is simple. You have a finite number of keystrokes that you can use in your entire life. Scott explains:

Let break it down. I'm 36 and change. I'll live to be 80, let's say, and I can type 100 words a minute (but 50 of that is errors and the backspace key) so let's say 50WPM. If I type for 6 hours a day, 5 days a week, 50 weeks a year, for the next 44 years, that means there are 198M keystrokes left in my hands. Max. Period. And that's generous; it's likely 10% of that.

5.1CPW * 50WPM * 60m/hr * 6hr/s a day * 5 days/wk * 50 wks/year * 44yrs = 1,009,800,000 keystrokes left in your hands.

Let's assume the average length of an English word is 5, plus a space, so six. That's a ceiling of 168M more words I can type in my lifetime. Nothing I can do, short of dictation, or some new brain invention is going to create more keystrokes. I am I/O bound by my hands. The keystrokes they contain are finite. And this assuming my hands don't give out.

Drink that in. OK. So now, next time someone emails you ask yourself "is emailing this person back the best use of my remaining keystrokes?" That includes both 1:1 and 1:many emails. You could even add a little hubris to it and say: "Does this person deserve the gift of my keystrokes?"

If you are working with human beings, by now you probably already understand the fact of life: shit happens. While it is tempting to respond to every flame mail, every nasty comment and every heating discussion, remembering that your keystrokes are finite is your first step towards using them in places where they can have the biggest impact.

Go ahead, back out. Turn the heating mail trail into a objective research driven blog post.

Go on and Present your facts and findings and give the whole wide world the gift of your keystrokes. Chances are, that this is where your keystrokes will make a much wider impact on people who want to learn. Folks who want to participate and contribute.

Chances are that this is also how you will avoid useless stress, learn something new, move on and get stronger to fight much more meaningful battles that matter. After all, you have a limited number of keystrokes. Don't waste them on situations or mail trails which are not worthy of the gift of your keystrokes. Use your keystrokes wisely. 

I wish you good luck.

posted on Friday, July 09, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, July 04, 2010

My early school life started with underpaid teachers who were so cold about the subjects they taught that their passion was hardly infectious. Most of them were faking it, frustrated, depressed with life or were not even decently deep in their subjects.

By high-school, thanks to their combined effort, I had been convinced that there was something majorly wrong with the way I saw the world. Of course, I had my experiences with a few good teachers. Most of the other things that school taught me however, was just through some strange isolated incidents that changed me, rather than a long cultivated respect or admiration for any of the teachers or the school in particular.

One of my high school English teachers for example, was the first to give me amazing grades and break the stereotype that English essay writing in high school was all about how many stellar high profile words you could cram in that essay. That incident to an extent told me that essay writing can be fun, that I could be really good at it and that I could even just write for the fun of writing.

This however, was an isolated incident and if I sit down to look back at the amazing teachers who worked for my school and who have had a lot of influence on my life, I hardly find any. By the time I started college, I had pretty much come to the conclusion that those who seriously, cannot do, teach.

It was then that while continuing college I also landed up with my first job as... a part time system administrator and a part time computer science teacher. It was payback time! Like a rebel I set out to break all rules of teaching.

If someone felt like dropping a class or if he didn't understand something I was teaching, it was all my fault. I knew that back from my own days at school. But even these were just games a teenager plays. I was nowhere close to seriously dissecting and understanding what makes a really good teacher.

It was not until later parts of my career that I met a very different kind of mentors. These were people who were so passionate about their subjects that their passion would transmit over TCP/IP, come off the other end of your monitor and infect you.

These were kick-ass teachers. Not a bunch of underpaid non-doers, but the best in the industry, who were so successful they could not even give you their free time and so thoughtful, that they actually made it an effort to share their experiences with you.

These guys knew how to learn like a teacher and teach like student.

To a large extent, I had completely stopped believing in training programs by now. Anyone who was good at what he did, was online. Sharing his experiences. Teaching you stuff through his writing, podcasts and videos. Others, were just not worth wasting your time or your money on.

It was not until recently that I started taking up a couple of language classes that I started dissecting the difference between an amazing teacher and a mediocre one, who might even be an underpaid non-doer.

My French Lessons

The classes happened in a brightly lighted class room of a plush building, belonging to a very famous organization, which shall remain unnamed. On the very first day the person teaching us French had an issue with some of us not carrying a proper notebook and a pen to take notes. On the second day, we were told that just weekend classes were not enough and that we should study French at home as well.

On the third class, we had already pissed the teacher off by the lack of our involvement. But then, the feeling was mutual for some of us. The teacher, as it turns out, had pissed some of the students off by her slightly intimidating approach to teaching. Things were written on whiteboards. People copied them and then people tried to memorize French. She would read things out from grammar books and then people would take notes.

By the third lesson I had already found a lot of rather amazing French learning tutorials online which were way better than my French class and was having a ball with those. I was hooked to the idea of learning new languages and I was just using the classes as a means to check my progress and see where I was.

The ones who were actually expecting to learn something out of that classroom however, were utterly disappointed. By the fifth class, we had been reminded more than a dozen times that French was a very difficult language and that we must give in hard work to learn it. By the fifth class, a good thirty percent of the class had got intimidated and had either dropped out or just stopped coming.

With all due respect to the person who taught us French, she was a nice person and she was truly trying her level best to teach us French. She was amazing at French too. It's just the 'teaching' part where she was... well... just as mediocre as some of my school teachers.

My Sanskrit Lessons

For those of you who might not know what Sanskrit is, it is a ancient Indian language. Languages for me are a medium of expressing intent. I speak over four of them very fluently and somewhat understand a few more. For me every language has a use. If English is the language of communication, French is the language of romance, Sanskrit is the language for the intellect and the soul.

So when I was asked if I wanted to attend a one day session on Sanskrit I promptly answered 'yes' and attended it even though I had been able to grab just five hours or so of sleep that night.

I walked into the class without a notebook or a pen to write stuff on and then when the memories from my French class flashed back, I thought, since I was there I might as well show some respect to the teacher and go grab a notebook. So a colleague of mine and me went out and grabbed a notebook along with a pen.

There was something interesting about the teacher however. He started the class by asking us how many of us had never studied Sanskrit in our entire lives. I raised my hand promptly. Then he smiled and asked us which language he had asked us the question in.

Dumbstruck the folks who had lifted their hands looked at each other. The guy had asked us the question in Sanskrit. We had not just understood the question, but responded to it. This was a wearied mix of funny and creepy both rolled into one. We smiled in amusement.

Then there were some philosophical statements that were made, all in Sanskrit, with a little bit of English words inserted in every now and then, to give us the context and help us understand what he was talking about, but during most of the class, we felt like young kids learning how to walk, stumbling, falling, getting up, falling again. It was fun. Serious. Raw. Fun.

Notebooks. We were asked to not use them if possible, because chances were, you were going to lose your notebooks the moment you left the class. We were asked to just listen, sit back, enjoy and have fun.

In the one day boot camp, we were not just taught Sanskrit but that the secret behind any language is not to 'learn by translation'. It is to learn by LSRW which stood for Listen, Speak, Read and Write. You start by just listening to a language like a baby does. You do that for days. Then you slowly start understanding and speaking. The reading and writing are supposed to come in much later.

By the end of the day, two random students from the class got up and did a small situational play in Sanskrit. As we rolled over laughing at their mistakes, our minds were engaged in picking up on every single mistake each one of these guys made. Our minds, were learning. Unlike the French class, we were told over a dozen times in this class, that Sanskrit was easy and the general stereotype that it is really hard is just a myth.

Half way through the training a wearied realization dawned on me. I thought of my French classes we had stopped half way through and had never gone back to attend those. If our French teacher had used a teaching style that was similar to the one this guy was using, we would all be speaking fluent French by now.

The One Thing

If there is one thing I was told to pick as a difference between this Sanskrit teacher and the French teacher, it would be one little word that means the difference between your being a good teacher, your being a mediocre one or your being a lousy one.

Empathy.

No seriously. That is one quality a lot of my underpaid school teachers lacked as well. It's easy to put someone on the spot. Easy to ask him questions and feel frustrated when he is unable to answer questions. Teaching is not about any of that. Teaching is about connecting to other human beings, understanding their minds and giving them the best freaking environments where learning can be a fun and rewarding experience.

After all we are creatures who want to learn. The real question is, are you man enough to teach us? Do you feel strongly about your subject? Is your passion for your subject so strong that you can actually infect others with it? Can you simplify? Can you make it fun?

So, the next time you are planning on conducting a class or a small knowledge sharing session for your organization, here is a piece of advice: keep your frustrations at your home before you leave for the class and don't forget to load your bag with loads of patience. If your students feel bored, you are not entertaining enough. If you have to tell them to read up the subject at home, your passion for your subject is not infectious.

If they are not laughing and having fun, you are boring.Oh and yes, if you feel that your topic is very difficult and complicated, you might know your topic really well but you just might not be qualified enough to teach it yet.

Even if you forget everything else you read in this post, if you are ever going to teach people, whether it be professionally or for a small knowledge sharing session you are going to conduct in your organization, you cannot forget empathy. Now go, infect someone with your passion for a subject or a topic.

I dare you.

posted on Sunday, July 04, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, July 03, 2010

You could be a young and budding programmer fresh out of college or a veteran who has had a very long career. One fine morning as the birds flutter outside the office window and you stare at them, you realize a strange thing about the culture of your organization.

You realize that your organization is a safe, non-political environment where no-one is out there to screw you in particular.

You are safe. You are protected. You don't need to fight it.

And then you realize that all you need to get your job done are the few basic programming techniques you slogged hard to learn during your college days. You get a few pats on the back on a job well done, life moves on and you move on to the next assignment. Once again, the skills you picked in engineering school come handy. A project well done and on time. No one is complaining.

What you don't hear however, is that no one is clapping like they did last time either.

This is the start of the loop.

You are using the same skill-sets to product the same output for the same kinds of project month after month.

You are boring to the rest of us.

To you however, office seems like home. It's safe. It's warm. It's cozy. And look, you have made a few friends too!

For you, your friends are people you can take to conference rooms with you and chit chat about process and 'resources' and shit like that. You know, things that seem like work, but are not really work.

For you, friends are people who you are comfortable with. For you friends are people who you do not challenge you. For you, friends are people who you do not challenge either.

Put simply, your friends are in the same shitty loop of safety as you are.

Neither of you have ever brought yourself close to getting fired. Neither of you guys have tested your limits. You have looped your skill-sets, done just enough to get your work 'approved' and then have serious kick-ass chit-chat in meeting rooms.

Then one strange day it happens. You get an email from your customer telling you that your module has done no major feature releases for the last five months. You are not really working. You are just talking about work and whining your time away. Your customer is calling out on your bull-shit. Your customer just told you that the work you are doing lately is fu@#ked up.

Now you are just going to have to deal with it.

It feels like being punched on the stomach doesn't it? Your bit fat hundred pound ego shattered to the ground. The guilt of f@#cking around in meeting rooms for hours when you should have been doing some real work seems like a heavy burden on your back, doesn't it? What do you do? What do you do? They clapped at your work three years ago. They sent you special appreciation emails back then.

F@#CK!

It CANNOT be your fault.

Your first gut-based-knee-jerk reaction? Fire up the mail client. Hit the reply to all button and poop all over with a truck load of shitty jargon that you were busy learning in the last three years.

Resource Planning needs to be done properly... Blah.... Blah... Requirements need to be elaborated and frozen... Blah... Blah... The Quality Approval process needs to provide suggestions on what needs to be improved which they are not doing... Blah... Blah... Yeah.

You review that, pat yourself on the back and whisper to yourself, "Yeah. That aught to set things in perspective."

Thinking of hitting the send button?

Here is my humble advice: Don't.

There are multiple reasons why you need to stop. Now.

First of all, you have just been criticized. You need to give that some soak time.

Secondly, by hitting that send button you are taking your first step at becoming a fully qualified whiner. What ever amazing talents that were bestowed upon you by your engineering college, the ones you have been flaunting for years, even those might slowly start fading away if you walk down that path.

Thirdly, people are going to see your shit and laugh at you and here is the worst part, they are going to do that behind your back, because now they have seen how you defend negative feedback with aggression and lame excuses.

If you ask me, I'd start by telling you to just shut the F@#CK up and apologize. Then when you have done that, realize that words mean nothing. So when the next sprint begins get your ass out of that meeting room, logout of your yahoo messenger and focus on shipping. Then, go ahead and ship. Remember, goals win matches, fouls don't.

Are you still reading this?

Well, it probably means that you have made it through the entire blog post. The irony with a post like this one however, is that if you are reading this, it probably does not apply to you. The mere fact that you subscribe to a blog that talks about self improvement and reflection probably means that you are open to the idea of criticism. I agree, you are probably not the 'you' I talked about during the entire post.

But then, humor me on this one. What if (and I am just saying), for whatever reasons, what if you got distracted and could not produce anything in the last couple of weeks. What if your manager calls out on your shit and tells you that you have been producing horse shit in the last three weeks.

How would you react to that?

Will you try pampering your ego of being the alpha-geek who knows it all? Are you going to defend your guilt of that distraction by pooping all over in the email which you send out as a response?

Or are you going to be man enough to come out and say it, 'Yeah, I know. Sorry about that. Give me some time. I'll fix it'.

Once you have done that, are you man enough to actually go out there and fix it.

If you aren't, you are a whiner in the making.

If you are, we would love to work with you irrespective of the fact that you do go through a few random distractions in your life. We all do.

Our biggest problems are not your distractions. It is also not how you deal with them. It is what you do when we call out your shit.

Seriously. Stop feeding your ego and your guilt.

Now.

I dare you.

posted on Saturday, July 03, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, July 02, 2010

You walk a couple of miles into office. Brain Rules and Spark tell you that brisk walking or any exercise before work produces a supply of BDNF and Dopamine to your brain. It's healthy. But this is not a post on fitness. That one is here.

This is a post on 'Doneness'.

Pretty much like fitness, doneness is a state of mind.

Jack is at your desk as soon as you get into office.

A client seems to have reported a critical bug in the application. A bug that triggers a firefighting Endeavour consuming about fifty minutes of your time.

You check your email... ten minutes slip by.

Fred  is a little lost about the his purpose of life and needs mentoring (spelt: psychological pep-talk). You cringe. Another thirty minutes slip by and Fred is completely pepped-up now.

There is an interview you need to take. The candidate has arrived.

F@#CK!

Can't time move a little slower?

Someone on the transmission team needs your help. The dev working on it is stuck with some IIS configuration issues and is getting cryptic error messages. You show him how to change the Application Pool settings to allow Win-32 applications to run in IIS on a 64-bit machine. As you get up, you look outside the window. It's starting to get dark. It's evening.

F@#CK!

By now you have already moved to a panic state. The three items on your TODO list are staring at you straight in the eye. Your manager is calling you for another meeting. Improvise. Make a decision. Pick between the three items on the TODO list or the meeting. You are scared of the monkey taking a stupid decision which might come back to bite your team.  That monkey. Or maybe your team just needs some cover-fire. You decide to attend the meeting.

By the time you get out of the meeting your task list is still snarling back at you and you have a headache from the meeting.

F@#CK!

What happened to your true, fun loving self which used to get things done and ship? You take a pause by the office window to do some serious soul searching and reflect on today. The noise has dulled your brain out and there is a gentle silent voice whispering from deep down within.

"You did not get anything done today."

You feel like shit.

Michael Lopp describes this feeling rather articulately in one of his posts. He explains:

This sensation will appear at the end of the day when you ask, “What did I build today?” The answer will be a troubling, “Nothing”. The days of fixing ten bugs before noon are gone. You’re no longer going to spend the bus ride home working on code; you’re going to be thinking hard about how to say something important to someone who doesn’t want to hear it. There will be drama. And there be those precious seconds when there is no one in your office wanting… something.

It's an important realization. That and the fact that you actually did get a few things done. That interview you took, those three bugs you were able to close during the afternoon. That small class which you refactored while you were eating lunch. Those client emails you responded to while the meeting was going on. You just feel like shit because you are focusing on the three TODO items on your list staring back at you for the last three days.

You are planning, not coordinating.

Even more importantly, you are waiting for a big productive evening instead of celebrating small minutes or hours where you can squeeze time out and get stuff done. Next time you have fifteen minutes between meetings, see if you can look at the bug-list, pick up a small bug and close it. If you can, go ahead, pat yourself on your back. In fact, might I suggest that you celebrate the fact that you #gotdone on Twitter.

And then, when the TODO items on your task list snarl at you in anger, you have another list to throw back at it and not feel like shit.

Productivity is a state of mind, and much like exercising, even when it comes to work, you begin by understanding your basic limitations, working with contains and willing small battles instead of aiming for one large war.

Go ahead, be loud about what you got done today. Doneness is a good thing. It's healthy. It brings you happiness.

Celebrate your moments of doneness with the #gotdone hashtag.

I wish you good luck.

posted on Friday, July 02, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, June 27, 2010

For those of you who might have read this blog post, you probably know my stand on the whole stupid you-follow-me-I-follow-you game that is played so frequently on Twitter.

If you remove that game out of the equation and then consider the amount of chatter and noise on twitter, the real question you start asking yourself is this - is twitter even worth spending any time on or is it just an elaborate version of Yahoo Chat or Yahoo Messenger, depending on if you want to meet interesting strangers or catch up with friends.

My recent activity on twitter however seems to have shot up drastically in the last few days. The rise in activity is a based on a simple realization about Twitter after 'not using it for months'.

If you have been using Twitter regularly, you probably do one or more of the following:

  1. Talk about your product or service.
  2. Catch up with friends.
  3. Paste useful (or useless) links.
  4. Collect followers and flex your mussel power.
  5. Talk about a global event like the #worldcup for instance.

And depending on which one or more out of the above makes you happy, doing either is perfectly fine. After all, twitter was actually supposed to thrive on activities like these.

What you might be missing out on, however, is an opportunity to observe things around you. If you have been following me on twitter you might have noticed that this is what I have been doing a whole lot lately.

Here are some of my recent tweets that aught to give you an idea of what I mean along with a context of where they were done from:

Isn't it sad that #socialmedia guys are making so much noise about #socialmedia on #socialmedia sites? blatant self promotion.
(While searching the social media tag on twitter).

Amazed at what anger can do to you. Was about to file a complaint about a rude call center guy. Waited and decided against it. #happy.
(While having a bad time with an Indian call center).

Wonders how to give an interesting talk and constantly worry about someone feeling bad or disagreeing at the same time.
(While reading the GNU speaker guidelines).

A girl learning how to drive. wonder why people become so serious and worked up when learning anything new. smile. learning is fun.
(Walking on the road, as I watched a girl learn how to drive).

School uniforms are a disrespect to diversity. every human being is different and so is what he wears. can we please stop raising sheep now?
(In a bus in India where I saw a few students in uniforms get on and act like a flock of sheep being herded into the bus).

Word of advice: when you don't know what you are doing find people you can trust and who know what they are doing. set them free.
(While watching a new budding manager managing people).

Honking on Indian roads is a reflection of general Indian personality. loud. interesting and at times downright obnoxious. #toughlove.
(On Road in India).

Have you ever tried actively keeping a track of the days as they slowly pass by? The velocity at which time moves is rather scary.
(On a slightly depressed moment).

If there is one word you can block from your company's vocabulary what would that be? For mine it would be calling people "resources".
(As I heard the word 'resource' getting mentioned over a dozen times in a meeting at work).

The food joint where I am eating with brother and nephew has been around since 1939. the point: small businesses with a niche can work.
(While enjoying a snack at a small joint near home with brother and nephew).

The point, is that these are all events that pass us by about a dozen times a day. How frequently do you see a serious girl, looking all worked up behind the drivers wheel with an instructor equally worked up and worried? How often do you get turned off by the responses from an Indian call center? How often do you hear the term social media as if its the next best thing since slice bread? How often do you eat out at a small joint you love?

These are all perfectly 'normal' event. What twitter does is that it gives you an opportunity to turn these into 'abnormal' events by adding your perspectives and by adding a little bit of yourself to these events.  It then allows you to share your perspectives with the rest of the world and more importantly, archive them for your own future use.

What better way to end this post, than with a tweet that I first posted when I realized and started doing this:

Tweeting is about having a abnormal way of looking at perfectly normal things. Now give us meaningful content. I dare you.

See if you can make your different, weird or opinionated perspectives fit in that hundred and forty characters.

I wish you good luck.

Side Note: If you are still not there on Twitter, here is quick starter guide.

posted on Sunday, June 27, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, June 26, 2010

Hell has broken lose at Multiplitaxion Inc. The sky is falling. The shopping-cart of a production system seems to have developed a glitch in a live website and apparently, it seems like people cannot buy things from the website.

I know what to expect next.

Throng of emails start flowing in on the support system.

Then comes a few emails from the client, with a little bit of tough love, directed at all of us.

It looks like there is a minor configuration glitch in Jack's code which is causing this awkward moment for all of us.

I hear the soft whisper in my head. My first instinct, the hidden, sedated asshole within me, whispering in a gentle, seductive and powerful voice.

"Call up Jack! Ask the incompetent idiot to fix it ASAP. Tell him it's CRITICAL. Absolutely fu@#king critical."

And then the veteran who has been there, done that and knows that it not work in the long run takes over.

I smile inwardly and decide to wait, answering the emails to the best of my abilities and sitting down to fix my own share of bugs, reminding myself that I am just as incompetent and just as big an idiot as anyone else.

Jack has already received the email. Jack is a mature human being with brains to understand that when shopping carts go down, companies lose money. He is probably looking at the problem right now and trying his best to fix it as quickly as possible. If he does not respond in the next hour or so, I will causally check with him. I respond to the seductive voice in an equally commanding tone and shrug it aside.

A few minutes later, another email lands on my inbox. It's Jack. The issue is resolved. The cart is up and running again. Life is back to normal.

The next morning, Jack is at my cubical. He wants to apologize about the issue and all those emails everyone had to reply.

"Nah. Don't worry about it. Shit Happens." --- I respond with a smile.

That is it. End of discussion. We go grab a cup of hot chocolate, talk about latest phone that I have been drooling over and discuss my intent of buying it.

I am happy. My life as a 'manager', 'development lead' or whatever it is that you want to call me, is a happy one.

It was a zero-touch operation or me. I now have a self sustaining team that functions perfectly well without me and I would have never found that out if I would have intervened on that and many countless nights before that.

Yes, there have been a few accidents. A few bumps while the teams I worked with in the past were in the drivers seat and I was in the back-seat, looking out and admiring the view, but nothing bad enough to get us killed.

Here is the interesting part however.

Every time the sky starts falling you will have a temptation of taking the drivers seat. Ease out of it. Let your team drive.

Because if you let them drive, they might get into a couple of small accidents and maybe even a couple of big once, but then they will learn how to drive, really fast and really well.

And once that happens, you can just take the back seat and admire the view or just find bigger challenge for yourself.

You know, the "professional growth" crap they talk about in seminars. This is how it happens.

Try it.

It actually works.

I wish you good luck.

posted on Saturday, June 26, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, June 25, 2010

I just promised someone I'll do a talk in their conference. He wants a copy of the presentation I am going to deliver at the conference. I have two unfinished drafts of blog posts sitting in my drafts folder. There is a side project that I need to be working on.

I am out with my family, eating in an amazing Italian restaurant. There is some shopping that I need to do. The book that I started working on is on a stand still, unfinished, grabbing me by collar and asking me to give it the finishing touches it deserves.

Put simply, I am on a thread dead-lock as I desperately try to figure out which thread to take up and process next.

It is something fairly similar to your machine's processor choking with too many applications running and each ALT+TAB takes you seconds to switch.

The conference cannot wait, neither can the blog posts but it is time to choose between the book or the side project. A decision has to be made,  a thread needs to be ended and a door needs to be closed. At-least temporarily.

Dan Ariely in his absolutely amazing book, Predictably Irrational talks about the inherent fear that we as human beings have towards closing doors. He used experiments which included observing students while they played a computer game designed specially for the experiment to observe how human beings react to the idea of closing doors. He explains:

To find out, we changed the game. This time, any door left unvisited for 12 clicks would disappear forever. SAM, A RESIDENT of the hackers' hall, was our first participant in the "disappearing" condition. He chose the blue door to begin with; and after entering it, he clicked three times.

His earnings began building at the bottom of the screen, but this wasn't the only activity that caught his eye. With each additional click, the other doors diminished by one-twelfth, signifying that if not attended to, they would vanish. Eight more clicks and they would disappear forever. Sam wasn't about to let that happen. Swinging his cursor around, he clicked on the red door, brought it up to its full size, and clicked three times inside the red room. But now he noticed the green door—it was four clicks from disappearing.

Once again, he moved his cursor, this time restoring the green door to its full size. The green door appeared to be delivering the highest payout. So should he stay there? (Remember that each room had a range of payouts. So Sam could not be completely convinced that the green door was actually the best. The blue might have been better, or perhaps the red, or maybe neither.) With a frenzied look in his eye, Sam swung his cursor across the screen. He clicked the red door and watched the blue door continue to shrink.

After a few clicks in the red, he jumped over to the blue. But by now the green was beginning to get dangerously small—and so he was back there next. Before long, Sam was racing from one option to another, his body leaning tensely into the game. In my mind I pictured a typically harried parent, rushing kids from one activity to the next.

Is this an efficient way to live our lives—especially when another door or two is added every week?

I can't tell you the answer for certain in terms of your personal life, but in our experiments we saw clearly that running from pillar to post was not only stressful but uneconomical. In fact, in their frenzy to keep doors from shutting, our participants ended up making substantially less money (about 15 percent less) than the participants who didn't have to deal with closing doors.

The truth is that they could have made more money by picking a room—any room—and merely staying there for the whole experiment!  (Think about that in terms of your life or career.)

When Jiwoong and I tilted the experiments against keeping options open, the results were still the same. For instance, we made each click opening a door cost three cents, so that the cost was not just the loss of a click (an opportunity cost) but also a direct financial loss. There was no difference in response from our participants. They still had the same irrational excitement about keeping their options open.

As human beings in general and as programmers in particular we are hugely attached to the idea of keeping our options open, keeping multiple choices in our lives and getting involved with multiple projects. On one hand, we have programmers who cannot program and 501 developers. On the other we have folks who are working on so many different things and trying so hard to keep all of these efforts alive that none of them ultimately see the day of light.

For me, it was this secret project of mine, that would have to wait. I am closing a door for the time being, so that I can focus on another one and so that the book can reach a meaningful logical milestone.

If you are getting bogged down with too many side-projects to work on, too many speaking engagements, too many things to do and you find yourself handling multiple threads even on weekends, maybe its time to take a pause, evaluate and close a few doors. The least you can do is close them temporarily and then come back to them at a later time.

Prioritize.

Focus on what is really important to you, even if it means closing a few doors of your life so that you can focus on the ones that mean a lot more to you..

Go ahead, pick a few assignments or projects that can wait and either end them or put them on hold temporarily.

I wish you good luck.

posted on Friday, June 25, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, June 20, 2010

This idea of this post started off with a mail thread from someone who has a knack for sending amazing links which nudge you to do some serious soul searching every time you click one of his links. This one was a post about the iPad.

To be honest however, it was more than just an iPad post. Peter Bregman in his post on why he returned his iPad in less than a week, talks about the importance of boredom in your life. He explains:

The brilliance of the iPad is that it's the anytime-anywhere computer. On the subway. In the hall waiting for the elevator. In a car on the way to the airport. Any free moment becomes a potential iPad moment.

The iPhone can do roughly the same thing, but not exactly. Who wants to watch a movie in bed on an iPhone?

So why is this a problem? It sounds like I was super-productive. Every extra minute, I was either producing or consuming.

But something — more than just sleep, though that's critical too — is lost in the busyness. Something too valuable to lose.

Boredom.

Being bored is a precious thing, a state of mind we should pursue. Once boredom sets in, our minds begin to wander, looking for something exciting, something interesting to land on. And that's where creativity arises.

My best ideas come to me when I am unproductive. When I am running but not listening to my iPod. When I am sitting, doing nothing, waiting for someone. When I am lying in bed as my mind wanders before falling to sleep. These "wasted" moments, moments not filled with anything in particular, are vital.

They are the moments in which we, often unconsciously, organize our minds, make sense of our lives, and connect the dots. They're the moments in which we talk to ourselves. And listen.

To lose those moments, to replace them with tasks and efficiency, is a mistake. What's worse is that we don't just lose them. We actively throw them away.

"That's not a problem with the iPad," my brother Anthony — who I feel compelled to mention is currently producing a movie called My Idiot Brother — pointed out. "It's a problem with you. Just don't use it as much."

Guilty as charged. It is a problem with me. I can't not use it if it's there. And, unfortunately, it's always there. So I returned it. Problem solved.

Go ahead, click the link and browse through the entire post if you haven't done so already. The valid point Peter seems to be making here, is about slowing down. Giving your brain some boredom so that it can figure out creative, genuinely fun and innovative things to do to avoid that boredom.

It's more than just the iPad.

I have talked about this before. Firefighting for instance gets you in a mode where you are least creative.

With a zillion gadgets, MP3 players and twitter on our phones, we are insanely connected to random people all around the globe but it does the exact same thing to your brain that firefighting does. It gives you an easy convenient way to make yourself busy and indulge in activities which are 'seemingly productive' but result to nothing other than a truck load of time getting wasted in the long run.

If you work in a field which involves creative work or are connected with the process of building software that is supposed to make big or small dents in the universe, the first thing you need to do is slow down and give your brain some boredom.

Boredom is important,  because when your brain experiences boredom and feels restless, it starts thinking of productive ways to keep itself busy. That's when some of the best ideas and solutions emerge. The last time I checked, ideas and amazingly interesting solutions to complicated problems, typically don't emerge when you are watching an action movie or a soccer match for instance.

Go ahead, slow down.

Experience a little bit of boredom today.

Use this boredom to let you mind wander and come up with a genuinely innovative idea or two.

I wish you good luck.

posted on Sunday, June 20, 2010 10:34:06 PM UTC  #    Comments [2] Trackback
Posted on: Saturday, June 19, 2010

Folks at Multiplitaxion Inc are gathering in small groups and talking every time I walk through the cafeteria. There are whispers all around. It's in the air. You can quite literally feel it. There is drama in the air and it looks like the drama has a drama queen.

Or should I say, a drama king.

It seems like Fred just had a hugely vocal argument about why he cannot be working from home on a certain day. Fred it seems is not willing to accept the fact that HR isn't comfortable with the whole idea of working from home. Fred is also not willing to have a logical objective conversation with the HR folks and convince them of the benefits of letting folks work from home at times.

He chooses the vocal loud revolt instead, creating a loud conversation which turns into a heated argument.

Very soon, every single engineer, in every nook and corner of the office knows the incident and is talking about it.

Fred's intent is pure. His approach however is destructive because it involves a simple ingredient which single handedly is capable of destroying teams and organizations.

Drama.

A few days later, one of our scrums, begins with a joke involving a senior manager. Everyone in the scrum takes a stab of cracking a joke at this manager. Soon, a decently normal scrum now involves a lot of talking. It has almost turned into one of those meetings where nothing gets done. This dear manager of ours, has fired three innocent hard working programmers and has given us something to discuss.

More drama.

Some idiot somewhere has sent condescending emails with a threat to one of his managers at the time of his resignation. The email seems to have gone to everyone in the group and a truck load of people seem to be involved in discussions on the topic.

Insanely massive drama.

During my early days at Multiplitaxion Inc, I loved going to office every day, but then there was a part deep down within me which wished that there was no drama the next day. It was stressful. Seriously stressful and non-productive.

But then, to be honest, there was also a deep dark secret part of my brain, which uncontrollably liked observing drama as it unfolded. Like everyone else in the organization, I often got involved in discussing the drama as it was unfolding.

That, to an extent, is what we all do. At different levels. When there is drama unfolding all around, you are likely to get sucked in. The spice of the drama, happens to be much like the oil in the McDonalds French fries. It surely won't kill you in a shot or two, but then when it sneaks up on you, you hardly know what hit you. That is exactly what drama does to your productivity, your work ethics and your professionalism.

It turns you from a productive programmer to a drama queen before you even know it.

I have talked about this before. Relationships and circles based on criticisms don't last long. Work relationships based on dramatic situations are even worse. So I totally understand that you had nothing to do with Fred sending out that flame email to his manager and copying the entire group while he was at it, but even then, might I suggest that you disconnect from the drama and focus on being productive.

Might I suggest that when a colleague takes you to a cup of coffee and then starts bitching about a mutual boss, you gently change the topic and focus on what you can do to fix the situation rather than whining together like babies.

It's hard.

But I didn't become a programmer because I wanted to bitch, whine, moan, cry or experience a lot of negative drama. If I wanted that, I would have given my shot at the films or television. I joined programming because I wanted to work with the sharpest, smartest, wildest, wittiest and some of the most creative people I could find and then join forces with them to build stuff or tell stories about what they do or how they do it.

The lesser drama you see on a day-to-day basis, the more you will get done, the more productive you will be, the happier you will be, the more flow you will experience and above all, you will be able to build more stuff and get more done.

Go on, the next time you start experiencing random negative drama, say no to it.

Seriously.

Start saying no to it.

Chances are high that you will get much more innovative, creative and above all productive, instantly.

I wish you good luck.

posted on Saturday, June 19, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, June 18, 2010

You have spent days observing Jack. He is awesome when it comes to dealing with pressure situations. Never looses his cool. Has shown perfect leadership qualities when talking to you, even in the most pressure prone situation, giving you a strong vibe that everything is under control.

You are impressed.

Months later, you find yourself sitting across the table with a bunch of developers telling you how Jack is throwing his shit their way, bossing them around and making them do hardcore deadline driven development.

You cringe.

A few days ago I posted a small tweet.

You thought you knew Jack.

Human beings happen to be hugely polymorphic. They are insanely different creatures in different situations and in different groups.

Jack, as it turns out, happens to be a seriously kick ass programmer and a very good person to have on your team. Give Jack a couple of additional programmers to mentor or work with and Jack measures them with the much higher level of critical outlook that he measures himself with. This is not about qualities or talents that Jack lacks when working with or mentoring a small team.

When he happens to be seating in a status meeting or dealing with crisis situation Jack happens to be a very different human being than what he is when his team is facing a crisis. Observe carefully and you will be able to literally see Jack morph from a quite, calm, cool headed individual sitting in front of you, to a angry, loud micro-manager when working with his team.

This is not the only situation where people in your teams and organization will morph though. Another classic case of morphing that human beings often go through is when they have given you their resignations.

This is when folks will give you a truck load of suggestions about how your organization needs to improve, how it has been missing out on certain areas and above all, all those dozen tiny little areas which he just did not seem to care about before he resigned.

The same individual who tells you how much he loves working in your organization or your team morphs into a totally different human being when he interviews for a different company next week and answers the famous "three things that you don't like about your current organization" question in that interview.

When you are working with a team of three individuals, you are probably dealing with a team of more than thirty personalities, constantly morphing from one to another.

This is important. So important that I am going to say it again.

When you are dealing with a team of three individuals, you are actually dealing with thirty different personalities, not three.

If there is one thing years of working with human beings has taught me, it is that you cannot be banging your head over being nice to all thirty of these constantly morphing personalities. Focus on the three that work with you.

Go ahead, talk to Jack about how much his team hates working with him, even if it means rubbing him in the wrong way.

Go ahead and stop worrying about the personality that is constantly looking for a change because irrespective of how much you or your organization tries there are always going to be some folks who will occasionally morph into individuals who are so dissatisfied with small things that you cannot just retain them in your organization or your team.

Stop worrying about rubbing two-hundred-and-ninety seven morphing personalities the wrong way and focus on the three that work with you.

Be nice to them and do all you can to make their work experience a pleasurable one.

I wish you good luck.

posted on Friday, June 18, 2010 8:30:00 PM UTC  #    Comments [1] Trackback
Posted on: Sunday, June 13, 2010

Multiplitaxion Inc, was a technical training provider where I happened to work for a few months. Multiplitaxion Inc, as it turns out was very open to change and as far as getting approval for change was concerned, if you knew the right people to talk to, getting your ideas approved for implementation was easier than you could think. But then, getting your ideas approved was just a small part of the brining-about-change game.

If medical science ever discovers such a thing as organizational procrastination, let it be known to mankind today that you read about this condition here first. Multiplitaxion Inc, was a master at it.

This was, in more ways than one, very similar to silent disagreement. In fact, it was worse because it worked at an organizational level. Projects that had been approved took days to get started, policies took weeks to get applied, rules took months to actually get changed and even project parties for successful projects took countless number of days to get planned.

Approvals were quick.

Actual implementation however, took months, even for the smallest of decisions.

Amidst all this procrastination, one thing that we as young and budding engineers learnt was that procrastination at an organizational level often also leads to organizational amnesia. Before long, we realized that some of the best ideas that would have otherwise turned into innovative products, were not even seeing the light of the day, because people were approving them and then procrastinating over them till they dropped out of everyone's memory.

If you happen to run an organization or have the power to get things done within your organization my advice to you would be, don't create organizations or teams with procrastination and amnesia. Think hard over an idea till the time you back it and approve it. Once you know you need to get something done, stop your procrastinations and get things done as a fast moving team or organization.

I wish you good luck.

posted on Sunday, June 13, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, June 12, 2010

If you have ever worked on anything that was used by more than one user, for more than a few days of their lives, you probably get a truck load of hugely random and weird feature requests at work. If you have worked with a bunch of marketing and sales folks responsible for demoing your product to 'potential customers' you probably know this even better. 

I have talked about avoiding the Perils of Demo Driven Development through heavy use of YAGNI before. But then having said that, every once in a while, a random critic will convince your marketing and sales team that if you could just build that chat application that allowed the point-of-sales team to interact with each other and integrate it with your billing system your billing system will sell like hotcakes.

If you have ever thought of giving in to temptation and building stuff that the competition is building just so that your product could compete with your competition, Paul Buchheit of Gmail has sensible word of advice for you. He explains:

I believe this "more features = better" mindset is at the root of the misjudgment, and is also the reason why so many otherwise smart people are bad at product design (e.g. most open source projects). If a MacBook with OSX and no keyboard were really the right product, then Microsoft would have already succeeded with their tablet computer years ago. Copying the mistakes of a failed product isn't a great formula for success.

What's the right approach to new products? Pick three key attributes or features, get those things very, very right, and then forget about everything else. Those three attributes define the fundamental essence and value of the product -- the rest is noise. For example, the original iPod was: 1) small enough to fit in your pocket, 2) had enough storage to hold many hours of music and 3) easy to sync with your Mac (most hardware companies can't make software, so I bet the others got this wrong). That's it -- no wireless, no ability to edit playlists on the device, no support for Ogg -- nothing but the essentials, well executed.

We took a similar approach when launching Gmail. It was fast, stored all of your email (back when 4MB quotas were the norm), and had an innovative interface based on conversations and search. The secondary and tertiary features were minimal or absent. There was no "rich text" composer. The original address book was implemented in two days and did almost nothing (the engineer doing the work originally wanted to spend five days on it, but I talked him down to two since I never use that feature anyway). Of course those other features can be added or improved later on (and Gmail has certainly improved a lot since launch), but if the basic product isn't compelling, adding more features won't save it.

On his assessment on whether iPad is a great product or not, or if all the critics shouting at the top of their voice about the lack of features in the iPad are justified in doing so or not, Paul gives useful advice to young and budding product designers. He explains:

By focusing on only a few core features in the first version, you are forced to find the true essence and value of the product. If your product needs "everything" in order to be good, then it's probably not very innovative (though it might be a nice upgrade to an existing product). Put another way, if your product is great, it doesn't need to be good.

Making the iPad successful is Apple's problem though, not yours. If you're creating a new product, what are the three (or fewer) key features that will make it so great that you can cut or half-ass everything else? Are you focusing at least 80% of your effort on getting those three things right?

If you are working on a product, go ahead. Pick those three small and simple things which your product is supposed to achieve. Write them down in easy to understand sentences on a whiteboard.  Now, do some serious soul searching on if your product does these three things flawlessly. Is your product the best in the world at doing these three things? With consistent effort and hard work, can it become the best in the world at doing these three things?

If you answered no, adding features to your product will not help. If you answered yes, put in that consistent effort and hard work to make your product a great product, because if it is a great product, you won't have to slog your ass to make it a good product.

I wish you good luck.

posted on Saturday, June 12, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, June 11, 2010

During my work at a client, who for the purposes of this post, I shall refer to as Multiplitaxion Inc, I saw an amazing example of management and HR policies, backfiring in ways that no-one had expected them to backfire.

Multiplitaxion Inc, was an amazing place to work at. Even for me as an outsider or a consultant who was just visiting, the folks at Multiplitaxion Inc were not just nice, they were super nice. They got me my very own personal cabin, gave me printer access and even had a name plate with my name printed even though I was just going to work with them for a few months.

Multiplitaxion Inc, happened to be one of those places where a group of like minded people gather, not just to work but to live a like minded life. These were bunch of rather amazing oil engineers and software engineers who worked for twelve to thirteen hours a day. Walk into Multiplitaxion Inc at seven in the evening and chances were that you would see a bunch of engineers flocked together trying to solve a problem.

During my stay at Multiplitaxion Inc one thing I noticed was that people hardly ever took leaves. During my first three months of stay, no-one from my team ever took a leave. 

This story however, begins on a bright sunny day when someone high up in the pecking order who had access to the time card logs and no real work to do decided to glean though the logs and discovered that people were coming really late to office. Soon strings were pulled and decisions were taken for the best interest of the organization.

Emails went out informing the employees that folks entering office after ten would be marked absent for the day and that people were 'requested' to be at office on time. A policy that was supposed to put some sense into office timings and increase employee productivity. A policy that started backfiring on the very first week on which it was imposed.

Turns out, Jack, who happened to be one of the youngest and the brightest programmers in our team, stumbled on a scenario which caused the policy to backfire on the very week in which when it was imposed. One first morning, as Jack prepared to leave from office, his eyes fell on the watch and seeing that it was nine-thirty already, Jack realized that there was no way he was going to cover a one hour drive and make it to office by around ten. 

Jack, gave the situation due thought and given the fact that he had a ton of leaves cumulated with him because he never took any, decided to go for the idea of taking the day off. From that point on, the idea spread like wildfire. Folks who had never taken leaves in years, suddenly started going missing. Passion that had once driven folks to come to office, turned into confirmation towards rules. Leaves that were never utilized were now used up rather quickly.

A policy that was designed to make people spend more hours at the workplace turned into a policy that made them spend the least number of hours that they had spent in office during their entire careers.

What had happened here is very articulately describes by Dan Ariely in his book Predictably Irrational. Dan explains:

My good friends Uri Gneezy (a professor at the University of California at San Diego) and Aldo Rustichini (a professor at the University of Minnesota) provided a very clever test of the long-term effects of a switch from social to market norms. A few years ago, they studied a day care center in Israel to determine whether imposing a fine on parents who arrived late to pick up their children was a useful deterrent.

Uri and  Aldo concluded that the fine didn't work well, and in fact it had long-term negative effects. Why? Before the fine was introduced, the teachers and parents had a social contract, with social norms about being late.

Thus, if parents were late—as they occasionally were—they felt guilty about it—and their guilt compelled them to be more prompt in picking up their kids in the future. (In Israel, guilt seems to be an effective way to get compliance.) But once the fine was imposed, the day care center had inadvertently replaced the social norms with market norms.

Now that the parents were paying for their tardiness, they interpreted the situation in terms of market norms. In other words, since they were being fined, they could decide for themselves whether to be late or not, and they frequently chose to be late. Needless to say, this was not what the day care center intended.

In the same book Dan goes deeper into the concept of why this fine did not work using the idea of two worlds that each one of us live in. He explains:

As Margaret Clark, Judson Mills, and Alan Fiske suggested a long time ago, the answer is that we live simultaneously in two different worlds one where social norms prevail, and the other where market norms make the rules. The social norms include the friendly requests that people make of one another. Could you help me move this couch? Could you help me change this tire? Social norms are wrapped up in our social nature and our need for community.

They are usually warm and fuzzy. Instant paybacks are not required: you may help move your neighbor's couch, but this doesn't mean he has to come right over and move yours. It's like opening a door for someone: it provides pleasure for both of you, and reciprocity is not immediately required.

The second world, the one governed by market norms, is very different. There's nothing warm and fuzzy about it. The exchanges are sharp-edged: wages, prices, rents, interest, and costs-and-benefits.

Such market relationships are not necessarily evil or mean—in fact, they also include self-reliance, inventiveness, and individualism—but they do imply comparable benefits and prompt payments. When you are in the domain of market norms, you get what you pay for—that's just the way it is.

Dan holds the opinion that when you take a social norm and try to replace it with a market norm you typically, for lack of a better word, f@#ck things up. He explains this much more articulately that I would be able to describe it, using what happened with the fining incident in Israel:

But the Real story only started here. The most interesting part occurred a few weeks later, when the day care center removed the fine. Now the center was back to the social norm. Would the parents also return to the social norm? Would their guilt return as well?

Not at all. Once the fine was removed, the behavior of the parents didn't change. They continued to pick up their kids late. In fact, when the fine was removed, there was a slight increase in the number of tardy pickups (after all, both the social norms and the fine had been removed).

This experiment illustrates an unfortunate fact: when a social norm collides with a market norm, the social norm goes away for a long time. In other words, social relationships are not easy to reestablish. Once the bloom is off the rose—once a social norm is trumped by a market norm—it will rarely return.

For the passionate software and rig engineers who worked at Multiplitaxion Inc, coming to office in the morning and working passionately for problems that were thrown their way was a social norm. What the time-policy at Multiplitaxion Inc did, was to take the social norm and mix market elements to it.

What Multiplitaxion Inc did with this policy, in the words of the book was much like, paying your mother-in-law for a fantastic thanksgiving party or for that matter paying your wife for her love.

Mixing social and market norms usually creates odd situations for everyone involved. If you lead a team or run an organization, it is hugely important that you realize the social norms that exist within your organization. There are things that people might be doing as a part of their existence in the 'social world' and the moment you try to reward or punish them using market norms, you are likely to create awkward situations and policies that backfire in ways you never thought.

Go ahead, use social norms heavily in your organization and when they are in place, don't ever try to replace them with market norms, because if you do, you just might f@#ck things up.

posted on Friday, June 11, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, June 06, 2010

I love writing on this blog. For me this blog is more of an opportunity to stand back, evaluate the experiences of my life and write about these, by adding a little bit of myself to this blog. The very fact that I post multiple times a week, turns this blog into something which allows me to exercise my writing skills and develop my writing mussels.

Having said that, this post has developed a very different audience than what I initially expected. Besides programmers, this blog is read by managers, business folks and even my mom. One of the thing that I try to pay special attention to, while writing, is the timelessness of each post.

I try to add content here which usually does not tend to become obsolete when the next version of visual studio comes out. Of course, there are one or two  exceptions, but then, most of it happens to be timeless. At-least I try to make it timeless to the best of my ability, even though when I read my older posts, I do realize how much I sucked.

Because this blog is read my more than one reader, it often means that I end up spending a lot of time adding graphics, hyper linking, formatting and proof reading all content that goes out here.

To be honest, I love doing all of that.

A huge part of my life includes working with other human beings and that is what this blog is all about.

But then, there is another part of my life. A different persona, so to say. One that deals with bytes. One that likes to fiddle with technology, explain design patterns using wild examples and whacky home made philosophies and the one that likes to tinker with the code-base of crux in my free time.

Unlike most software developers, I have been fairly open about my experiences with other developers or what I learn from these experiences but then unlike most developers who write blogs, my close encounters with code and technology often remain undocumented.

The idea is not new however. I have been thinking about this for a long time. The whole concept of learning like a teacher and teaching like a student is something that I have talked about before on this blog.

I think it is time when I can introduce a different part of my personality on a different blog all-together.

People, here is presenting, my code-persona.

Think of code persona as my personal little wall to scribble things on as I work. Just bought a new cam-coder, you might read a review that I slapped together rather quickly there. If I just learnt a neat way to solve a programming problem, you might read it on code persona. The posts on code persona might not be as well formatted or as minutely proof read as this blog, but that's the whole point. Like I said, its my personal little wall.

So What Happens To This Blog?

Nothing. It continues. Just as before.

I am not stopping to write on this blog.

This blog will continue to have posts added to it, just like before.

So if you like the kind of content that you read here, you will continue to find more of it. But if you are a hardcore programmer and you are more interested in curly brackets and semi-colons, code-persona is the blog you also want to subscribe to.

It's been quite some time since I did some serious hardcore technical blogging.

I feel like a little child again and that, I believe is a really good thing.

Feel free to hang out with us on code-persona.

More content will start getting added there soon.

Wish me good luck.

posted on Sunday, June 06, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, June 05, 2010

My team at Multiplitaxion Inc, happens to be a group of really seriously kick-ass programmers where even some of the weakest in the team can kick some serious butt. Fred clears multiple rounds of interviews for Multiplitaxion Inc, and wants to join this team.

I cringe.

As far as I am concerned, if you are joining my team, I prefer that you have, either gone through my interview and met my criteria or have proved yourself within the organization in one way or the other before you are made a part of my core team.

Fred as it turns out, has done neither.

He is a young and budding programmer fresh out of college who has taken an engineering degree, answered a few math questions and a few puzzles correctly and cleared the Multiplitaxion Inc, interview with flying colors.

A few mails back and forth, the really awesome folks at the Human Resources department Multiplitaxion Inc, allow me to screen the guy and they give me the liberty of taking him in my team or letting him move over to a different team.

I spend some time talking to Fred, asking him a simple question - We have a month to build anything that you want to build. Can you spend a day thinking about what you want to work on and let me know tomorrow. We will start working on whatever you pick and I'll help you as we move on. After a month we will evaluate what we have built and if it's good enough you join the team.

Fred looks at me like I just dropped a rodent on the table.

The next day he comes back with three things that he would like to work on:

  1. A brand new operating system - which is what you often fantasize about building when you are in an engineering college and if you are lucky they even let you build a small theoretical kernel as your college project.
  2. A brand new security algorithm - again a hugely academic project I am sure a million mediocre students in a million colleges around the world are working on.
  3. A Patient tracking system for a hospital - this one, I'd rather not comment on, for the fear of sounding very nasty and mean.

Then Fred basically tells me that even though he has thought of these, he is not going to actually work on any of these. Put simply he is not up for this whole lets-innovate-idea. He wants an assignment and he wants to start working on it right away.

On any given day I get bombarded with dozens of ideas which I tend to put on the back-burner till they find me, grab me by my collar and make me work on turning them into realities. In our days, we became programmers, because it was fun and because it was empowering. It allowed you to think of stuff you could build and turn this stuff into reality.

I see, talk and work with countless programmers around the world and while the niche still gets it, I think, overall we are just breeding 501 programmers who join the software business because its good money or because their friends are joining it. Of all the things that young and budding programmers coming fresh out of college these days tend to lack, is the ability to find their own sources of motivation.

We are screwing the software development world and letting it loop in the infinite loop of failure by turning it into factories where clones are produced. If you are reading this and are responsible for hiring folks in your organization, might I suggest that you turn this into an interview question.

Ask a candidate what he would build if he was given one month of free time to work on anything that he wanted to work on. His reply may or may not impress you, but it will tell you a lot about why he wants the job. Now make an objective decision on if you really want him on your team.

Go hire programmers who can drive themselves rather than folks who want to be driven like a folk of sheep.

I wish you good luck.

posted on Saturday, June 05, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, June 04, 2010

Most managers typically go through the periodic phase of being an asshole. Its the time when you play the blame game. Its typically the time when you forget that you are not getting paid to screw people left and right.

The difference between a-fun-to-work-with-person and a prick is that while the prick never snaps out of that adolescent stage of being an asshole, the fun to work with manager often gets sick of it, disconnects and learns from those times. He looks back at those times of his life as painful moments and treasures everything that he learnt during the conversion phase.

He probably has a Not-To-Do list for himself which is bigger than a to do list for his team.

He is serious about the idea of being nice at workplace.

I call these folks, converted assholes.

Now, a truckload of things might have caused the conversion to happen, starting from a tragedy to just finding a pet, but a guy who was once an asshole and is now raging a war against the idea of prickdom at workplaces, is invaluable for your organization.

This is the guy who understands how prickdom works inside out.

This is the guy who can smell prickdom from miles and can spot an asshole in an interview.

This is the guy who can identify assholes in your organization.

This is the guy who can give the assholes in your organization a hard time. Sedate the monkeys. Confuse the jargon idiots with more random jargons. Attend meetings and sit through them without dozing, guarding the ground from folks pooping on your organization or team through funny decisions that are usually taken in these meetings under the name of 'working for the best interest of the organization'.

Put simply, he knows how the game is played, he plays it well and can be a bigger prick when dealing with pricks in your organization.

If you are a young and budding entrepreneur looking to have a kick-ass environment at your workplace, go hire a few converted assholes and get them to rage a war against prickdom within your organization.

I wish you good luck.

posted on Friday, June 04, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, May 30, 2010

I have always nudged young and budding developers to try and turn themselves into one man armies. I have also often gone ahead and said that a good programmer is formed when, as they say in martial arts, the warrior and the weapon become one.

In a recent conversation with a young and budding programmer regarding how most office environments are nothing more than cubical farms for breeding incompetence, I stuck to my point, that most awesome programmers who know what they are doing will figure out ways to communicate and collaborate without needing a common physical location.

They will find quite islands, homes, cafeterias and corners of the world to work from. They will continue to thrive even as more and more loud or lousy workplaces continue to get built around the world.

The seriously kickass programmers will turn into one man armies and software cells that can function from anywhere and anytime. They will carry their weapons and most importantly they will carry their ability to become one with their weapons anywhere and anytime.

The Dell Mini 9, was given to me by eFORCE to try out when Netbooks first came out. I have had this thing for more than a year now and my assessment of it is that this is one rather peculiar weapon in the hands of a developer.

When I say that the Dell mini 9 is a very different kind a weapon, what I really mean by that, is that Net-books by their very nature, screen size and keyboard layout are a very different kind of a weapon in the hands of a developer.

To begin with they tend to make any developer worth his salt get a serious headache when you try to work on them. After a while, you start questioning the whole idea of working on a tiny oddly laid out keyboard and a tiny screen.

It is purely because of this peculiar nature of these devices that the Dell Mini 9 practically sat unused for months lying at my home.

I would occasionally use it to load and work on Ubuntu, but as far as practically using the device was concerned, I would cringe at the very thought of typing at the small keyboard and staring at the small screen.

I used it so little I even managed to lose its power cable.

It was not until recently that the idea of being able to work from anywhere and harnessing the power of mobility started getting discussed, that I thought I'd give the Netbooks another shot. The idea was to get a new internet access data card and use the Netbook to work from anywhere.

Today is about my first day of seriously trying to work on the Netbook and things aren't really as bad as I had expected them to be. For starters, I am getting used to working long hours on the smaller screen and the headaches are starting to disappear rather rapidly. In fact, I am no longer experiencing those headaches and bouts of irritation anymore.

The keyboard layout on this thing is slightly weird, but then I am getting used to it rather fast as well.

I have a Window 7 Ultimate loaded on this thing, along with a couple of image editing software, windows live writer, Microsoft office and a text to speech converter so that I can proof read my blog posts.

This would be my second post from the Mini 9 and as strange as it might seem, I am becoming one with this tiny weapon that lay unused at my home for months.

On the work side, I tried remoting into a office machine and tried writing some code on the remote box. It was not as bad as I had expected either. It's definitely not the only machine you would like to have, but then, it is a very different kind of a weapon for a very different kind of an attack that every software programmer must learn.

One major gripe I have with this machine, specially while programming is the position of the double-quote and a couple of other keys on the keyboard. Having said that, a little bit of practice and I think I might be able to get over these annoyances.

The funny thing about these devices, specially if you can tune yourself to become one with them and use them productively is that you can exploit the heck out of them. For once, you could be writing code on a remote box located at a data center in California as you drive through the plush green pastures of India on a  weekend vacation.

No fear of denting an expensive laptop. No worries of wearing off the battery because of excessive use. Toss it in your bag, carry it everywhere with you, exploit the heck out of it and get work done like never before, from anywhere, anytime.

Go learn the art of mastering tiny weapons, tune yourself to them and become much more productive.

I wish you good luck.

On a side note, for a detailed technical review of Dell Mini 9, see Scott Hanselman's post on the review of the device. I consider Scott to be a rather worthy maven of the software development world and his post on Dell Mini 9, to an extent, nudged me to try out my Dell Mini 9 again rather than letting it gather dust. I am happy it did.

I will continue to post updates if my opinion on Netbooks changes again but for now, I am loving the idea of being able to carry these devices anywhere and doing some serious damage using them. What is your experience with Netbooks?

Discuss.

posted on Sunday, May 30, 2010 8:30:00 PM UTC  #    Comments [1] Trackback
Posted on: Saturday, May 29, 2010

We are seated at a local startup club where startups demonstrate their products to a bunch of fellow developers, designers, entrepreneurs or technologists. An young man is talking about his idea of building a community site with a difference. He wants to build a community site for runners and walkers around the world.

He doesn’t have a thing to show us.

No wireframes. No screens. No working systems. Absolutely nothing.

He seems to be blabbering non-stop about how his idea is different and how no website in the world has thought about it before him. It almost seems like he has just hit upon a totally different and new way to fly the skies.

During a quick bathroom break we start talking to this gentleman and I mildly and politely hint to him that maybe, just maybe, everything that he is trying to build on his community website can be easily done with a Facebook community site.

He seems grossly offended.

Somewhere, unknowingly I seemed to have shattered his dream and told him what he really does not want to hear.

Its not his fault though. Most ideas are a dime a dozen. To make things worst, when its your idea you tend to think that its the best thing since slice bread. You tend to protect your ideas like babies when your all your ideas need is dedication and concrete work, not protection.

Go on. Take the litmus test. Think of an idea. Then try to find websites that do exactly what you just though about. Chances are that you will stumble upon at-least a dozen sites that do exactly what you were just thinking about.

There is also a high possibility that when you stumble upon these websites, you will disregard them as useless and you will start sentences which begin with – "yes but this website is slightly different than what I was thinking about. It does not do 'Z' which is what is going to differentiate us from them.

Newsflash.

Your idea is already taken. Someone beat you to it and you have no unique selling points. You are just making this differentiation crap up because your brain has just switched to a denial mode where it is clearly refusing to accept that someone beat you to that idea, executed the entire idea flawlessly and is making money from the idea.

You, were late.

Deal with it.

Your product idea just does not have a unique selling point.

All that yes-but-we-are-different talk that you are mumbling is just bullshit to feed your own ego and pamper it.

You have about a dozen competitors out there and the only thing that is going to set you apart is how you add a little bit of yourself to the product and how you handle execution.

Now, take a pause. Reflect. Ask yourself if you can genuinely pull off an execution that is superior than any of the other products out there. Be careful, because even here, your brain is going to trick you into saying, 'Sure! Of course I can!' without giving it any real thought in the first place.

Take your own sweet time. Reflect. If the answer is no and if the idea is not keeping you awake at night, it's okay let go shamelessly. After all, you do not find truly remarkable ideas. Truly remarkable ideas find you. It just makes the defeat that much more easier to accept and it frees your mind to find something else that really matters to you.

Go ahead, start something that makes a small dent in the universe or just give up and wait for a new idea but don't build a mediocre crappy product because we have enough of them already.

I wish you good luck.

posted on Saturday, May 29, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, May 28, 2010

One of my first teams kicked some serious butt. We shouted at each other, we used the F-word rather generously and when that did not work, we raised our volumes to a level that would blow the office roof sky high.

Then when the fight was over and the best solution had won, we would go out and have lunch together with no hard feelings.

That was my understanding of strong opinions and disagreement.

These were two very useful tools to reach the best of solutions. During my times at Multiplitaxion Inc, I often tended to respect guys who had strong opinions weekly held and had  the conviction or the spine to disagree with me.

Disagreement was loud.

Disagreement was a good idea-validation-check.

Disagreement was good.

It was only during the later part of my career that I bumped into a different form of disagreement that confused me and left me totally dumbfounded.

Ladies and gentleman, if you haven't met 'Silent Disagreement' you are one lucky son of a gun.

If you have, you know exactly what I am talking about.

This is a form of disagreement where someone sits smack across the table to you in a meeting, nods his head in agreement to everything you have to say and then goes out and does just the opposite.

Consider an arbitrary example for instance. Assume that everyone in  your organization, starting from the lowest programmer fresh out of college, all the way up to the chief-executive-officer agree on having a free open internet access policy.

You call the group who is responsible for maintaining the restrictions on firewall in a meeting where you tell them to drop all restrictions from non-work related sites like Facebook or You-Tube. You are going to trust your employees work ethics more than a firewall, you tell them.

Everyone nods in agreement.

You wait for the firewall policies to change and Facebook to get unblocked. Nothing happens. Days later someone higher up in the management sends a flame mail, asking that all sites be unblocked immediately, and everything gets unblocked, only to get re-blocked a couple of days later.

You call another meeting to discuss what went wrong here. Did we disagree on something? Did we not collectively decide that we were going to have an open internet policy? Did we not agree on that? Didn't we waste an entire day discussing the pros and cons on having free internet and trusting your employees versus blocking non-work-related sites?

Strangely enough, even in this meeting, everyone agrees to the idea of an open internet policy.

Strangely enough, non-work related site still remain locked down.

It is then that you realize, that you are not dealing with rational, thinking, objective individuals who believe in strong opinions weakly held. You are up against folks who take every argument personally, folks who indulge in strong flavors of mitigated speech and folks who do not express their disagreement in words but instead choose to disagree, silently.

During my career as a software developer I have seen countless examples of silent disagreements. I have seen examples of folks who think that they should say 'no' to their managers but who lack the spine to say 'no' to their managers on their face, so they resort to silent disagreement. I have also seen folks who think that they are working for the 'best interest of the organization' and use silent disagreement to avoid all arguments or discussions.

Assuming that you can bring about change in your organization, if there is just one thing that you can change, I suggest you put an instant stop to silent disagreement within your organization. This is another one of those issues that you are way better of confronting rather than avoiding.

Go on, confront the folks who tend to disagree silently, and demand an open objective argument or total agreement through not just words, but action.

I wish you good luck.

posted on Friday, May 28, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, May 23, 2010

I'm heading to office. The phone rings. Someone, somewhere wants a stupid signature on his release letter. I tell him I'll be there in about thirty minutes. My DVD company just shipped the next DVD on my queue to my office and I'll get it the next day. My manager is calling to catch up on how things are going. My phone is losing charge already and so am I.

I am juggling with an iPod, a phone, a book and the bus playing a stupid radio channel - when all I should be focusing on is enjoying the long roads that pass me by. Or I should be reading the amazing book I grabbed last evening. I am doing, twenty other things.

Then I walk into office, hoping to get to the bug I spent my entire last night thinking about. I woke up with my mind still chirping at the problem and I found the answer when I was in the shower. It feels like first day at work. Knowing that I have the answer and experiencing the pleasure of putting the fix in place.

That's when I open my mailbox.

A dozen other funny problems await me. Someone is not being able to make it office because of a headache. Someone has a broken laptop and is whining about it in a mail trail. The support guy responsible for fixing his laptop is yelling back and using the caps lock key rather generously both in his written emails and verbal communications. Yet another client is raising stupid, irrelevant red flags.

My miserable little dreams of focusing on one thing that is important and blurring everything else out seem to be getting shattered like a house of cards. That's when the headphones come out.

If you read this blog, you probably know my preference of silence over any form of music when I am consumed in work, but headphones serve another important purpose. Ted Dziuba explains this behavior of using headphones rather articulately in his post titled - Break my concentration and I break your kneecaps. He explains:

I own a good set of headphones that fully enclose my ears. I am not an audiophile, I just don't like to hear other people talk at me.  When I am staring at my Emacs windows with headphones on, it generally isn't a physical cue that I am looking for conversation.

In fact, when I am that deep into thinking out a problem and I get interrupted, I think about the anti-workplace-violence clause in the employee handbook, and how a poorly lit parking lot probably doesn't qualify as "company property".

Interrupting a thinking programmer is a sucker punch to productivity's kidney. Of course it's still important to keep open communication channels, especially in a small team. I don't mind answering questions and helping out, so long as it's not an immediate context switch for me, i.e. I'll help you if I don't have to speak.

On any given day, there are a dozen tasks that I ignore. There are probably dozens of emails that I ignore as well. The underlying assumption is simple. If it's truly  important, someone, somewhere will remind me or someone somewhere will talk about it. If no-one reminds me that it is important, it probably isn't important. I can go back to putting my headphones on and working on things that I believe will eventually matter in the long term.

Then there are things which are pseudo-important, the false urgency alarms, the trivia of broken laptops, egoistic arguments, meetings and the discussions on the status of how things are going. Being a programmer isn't just about programming and chances are that on any given day, you are going to be bombarded by things which seem important but at the end of the day, your ability to ignore them is going to be much more important than your ability to get them done.

Slow down. Take a pause every now and then. Think about, what matters the most to you and spend most of your time on things that matter the most, because most other things that seem really important, hardly matter. Most things that you do on any given day are just random distractions.

Go, reflect on what is really important to you and then spend most of your day, doing those things.

I wish you good luck.

posted on Sunday, May 23, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, May 22, 2010

During my days as a young and budding programmer, I was bubbling with confidence. Never in the wildest of dreams did I imagine that a software project or a task given to me could just not get done.

I mean, sure I might have to throw in a few extra public variables, not have enough time to give a shit about the quality of the code I was writing or throw in a couple of hundred band-aids on the codebase, but I would still get the job done.

Put simply, I knew if I worked fourteen hours a day I could stick it up together to deliver to a client. I also knew, if I acted smartly, I would not get my ass kicked or busted. To add to that, if I used enough jargon I could blame it all on requirements, use-cases or some abstract shitty artifact that was always responsible for the failure of the project.

Young engineers learn the shit that they see their seniors do and they learn it fast.

Then it happened. My first successful failure where we were building a piece of software that was sofa king (to be read really fast repeatedly) complex that the thought occurred to me a month before the delivery date - what if, we don't make it - the voice said deep down within as I tried desperately to write a function that would increase the power of the device my code was supposed to control.

This was a project where we were integrating with random devices around the world and some of them had serious issues with their hardware, which is what we were working around. This was not a typical - 'what if we don't make it in time' or 'what if we are a week late' question. Those, you can answer by pointing your finger at a random artifact. This was a case of 'what if we just cannot build this project'.

We did not have shit to show to the client.

What we had, did not work.

What if another one month passed and we were not able to crack the show-stopping problems we were facing?

What if we just did not get anything done?

The question was scary. The realization that I as a software programmer with just a couple of years of experience behind me, had limitations which were as real as gravity was scary. The realization that I could not overcome these limitations with trickery, big talk, smart ass ideas or stupid band-aids was even scarier. All the tricks that my so-called seniors had taught me were failing me. Blatantly.

The project ended without anyone getting killed. We threw tons of band-aids in there. Got a few things done. Then, I struggled for hours and days to set it right before we handed over the project to the client and moved on. Multiplitaxion Inc announced it a grand success. I called it the first (and hopefully the only) successful failure of my life.  

I don't want to live that part of my life again. It was terrible. It was scary. It felt like shit. What felt worst after the project however, was not the fact that I was overworked, stressed out, about to quit had it lasted sometime longer or any of that. What felt worst after the project was the feeling of being used - almost like a mindless human bomb who goes and blows himself up for a cause which is totally insane and downright stupid.

This was the part of the project, that helped me grow in ways I would have never otherwise grown in my entire life.

One of the most important things that the project taught me was the art of caring and putting in my one hundred percent into the work that I do, without giving a f@#ck about what my team, my managers or my clients classify as 'success'. After all, I had just been a part of a project that my team, my managers and even my clients classified as a huge success when the reality of it is that it felt like a one big colossal f@#k-ups of my professional-work-life.

Since then I have come across countless examples and incidents where a client somewhere wants me to believe that my tiniest of non-confirmations to their processes, their dates or their deadlines, equates to a humongous failure. The idea is simple - convince the programmer psychologically that shipping the software on a specific date with a specific list of features is so hugely critical that his entire career depends on it and then he will ship.

I have been through so many of these situations in my life, that I almost find them hilariously funny every time I encounter them now.

Every time I come across situations where I am being told how critical it is to ship on a given date or just how critical fixing a spelling mistake of a label is, I smile inwardly, argue outwardly and somewhere deep down inside, there is a calm, quite, silent voice telling me:

'You have been through this before Pops. You know what to do. Give it your best shot, be honest to yourself and then don't give a rat's ass about the so-called-success.'.

Years ago, after my first successful failure, I learnt that you are way more efficient if you leave your fears of failure behind and replace them with passion. If fear and pressure move you, that is all you will get your entire life.

On the other hand, if you are moved by your own passion to do amazing work, questions like - what if we do not ship on time or what if we fail - will just start sounding seriously stupid to you. You will eventually stop worrying about them and start giving your best shot irrespective of whether these questions are asked or not.

When the sky starts falling, don't panic. Prioritize. Think pragmatically. Give practical options to your clients. Do all you can to turn your project into a win-win situation for everyone connected with it. If you keep getting bull-shit in return, continue helping them, continue shipping, continue putting in your best but just stop giving a rat's ass about what anyone on the project says about the success of failure of your project.

It's time to wear a thicker skin.

I wish you good luck.

posted on Saturday, May 22, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, May 21, 2010

I'm sitting smack across the table as Jane, a very talented young and budding programmer, tells me her side of the story. For the last three months she has been a part of the product team and she has been fixing bugs which involve changing the captions of labels on screen.

I cringe.

There are more than one things in this discussion that worry me. The first is that her talents and her abilities are getting utterly wasted in the organization. Secondly, it also means that more sooner than later she would be sick of working and she would start looking for a change. All of this worries me as I listen to her, but what worries me the most is the thought that her team lead is an Alpha-Geek who is refusing to breed more Alpha-Geeks.

And he is violating the pact.

Yes, that pact.

He is solving the most complicated, challenging and some of the most interesting problems himself.

He is not, 'teaching the young'.

Every once in a while, I come across super-alpha-geeks, sometimes even good ones, who prefer to solve the hardest of the problems themselves, instead of letting others in their team solve it and helping them with the problems. Strike a conversation with them and most of them will offer you arguments on the lines of:

  1. It's easier to do things myself than to explain and delegate things to someone else.
  2. Most programmers in my team are not good enough.
  3. I took it up myself because it was critical for the success of the project.

Hidden behind the layers of excuses, lie the bitter facts. The real reason why most alpha-geeks who like to control the most-critical items in the project and do these themselves, can be one or more of the following:

  1. The Alpha-Geek has serious insecurity issues and feels threatened by people in his team.
  2. The Alpha-Geek thinks of his team as a bunch of incompetent, inefficient idiots who are either not talented enough, fast enough or both.
  3. The Alpha-Geek is a control freak and wants total control over the project.

The next time you see the scrum back-log and you start picking up the most complicated items, question yourself, if you are just acting like a selfish insecure jerk or are you helping other programmers transform themselves into alpha-geeks and become critical members in the team.

Give them the most complicated, difficult and challenging items, help them expand their zone of comfort slowly and help them turn into true alpha-geeks over time, because that is what true alpha-geeks do. They breed more alpha-geeks.

I wish you good luck.

posted on Friday, May 21, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, May 16, 2010

At one of our clients office, who for the purposes of this post shall be called Multiplitaxion Inc we have what I call a decision-execution-crisis.

You know, those meetings where really smart people who have done really big things in life and have achieved really serious sounding designations on their business cards carefully position their asses on really soft chair and talk about really sensitive topics like the future of the organization, the future of the product, the official-name of the product, the official editions of the product and the features the free edition of the product would contain.

Did you notice the use of the word 'talk about' and the absence of the term 'decide' or 'act' in the above paragraph. The use of the word 'talk' was intentional, because while a lot of talking happens in these meetings there is often very little decision that ultimately gets taken and even lesser real work happens on those decisions.

It's not about what your manager says in these meetings that matters. It is how he acts after a couple of these meetings that matters the most. Does he get stuff done or does he act all tied and helpless.

Michael Lopp describes his practice rather articulately in his book Managing Humans. He explains:   

When the new VP showed up for his first day at the startup, he was wearing a Members Only jacket. Sky blue. I didn’t know they still made these throwbacks to the '80s. A jacket that lived under the tagline, “When you put it on, something happens.”

I’d given the VP a thumbs up during the button-up and tie phase of the interview, so I gave him the benefit of the doubt.

Three months in, we had a problem. Members Only was doing a phenomenal job of discussing and dissecting the problems facing engineering. We’d leave meetings fresh with new ideas and promises of improvements, but then nothing would happen. OK, so follow-up meeting. WOW! He gets it. I’m fired up again. Let’s roll. Umm, two more weeks and nothing is happening here.

Michael in the same book also describes the problem with most managers who conduct these meetings and love the idea of talking strategy, ultimately getting nothing done. He adds:

The act of delegation is a slippery slope for managers. Yes, you want to figure out how not to be a bottleneck in your organization and, yes, you want to figure out how to scale, but you also want to continue to get your hands dirty.

Members Only's problem was he believed his job was purely strategic. Think big thoughts; delegate the results of those thoughts to the minions. He was a pure delegator and he’d forgotten how to do real work.

Pure delegators are slowly becoming irrelevant to their organizations. The folks who work for pure delegators don’t rely on them for their work because they know they can’t depend on them for action.

This slowly pushes your manager out of the loop and, consequently, his information about what is going on in his organization becomes stale. Then, the CEO walks into your boss’s office and asks, “How’s it going?” The third time your boss gives the same generic answer, the CEO goes to you and asks the same question. When you respond with, “Well, we’re fucked,” the CEO has an entire other conversation with your manager.

Real work is visible action managers take to support their particular vision for their organization. The question you need to answer for your manager is simple: does he do what he says he’s going to do? Does he make something happen?

And its not just about strategic changes or the steering the organization or the product through its future path. I am talking simple decisions here.

How long does it take your organization to get you a whiteboard in a meeting room when you tell them that you guys desperately need one. How long does it take your organization to fix network patch chords in your meeting rooms. How long does it take for your organization to reduce your meeting count when you tell them you are sick of attending them and want to focus on work for sometime.

Measure your manager's and your organization's ability to take decisions and then act on those decisions. If they are able to take decisions and act on them, you will be just fine, even if those decisions aren't correct or even if they are failing and learning at each step.

On the other hand, if nothing ever gets decided and nothing ever gets done at your organization, maybe its time to get your act together, figure out why your organization cannot act and do something about it. Procrastinating with your organization will not get you anywhere in the long run.

As they say, You can Change Your Organization or Change Your Organization.

Either ways, I wish you good luck.

posted on Sunday, May 16, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, May 15, 2010

I find myself seated smack across the table with Fred looking at me like I just performed the gravest of offence in his professional life. I tell him the awesome news of his promotion and a handsome thirty-percent hike. He eyes me like a criminal.

Turns out, he was expecting more.

He tells me that he was aiming for a higher hike.

Ok. Breathe. I tell myself.

I thought this was good news. I thought his face would light up. I thought... I am confused by the time the discussion ends.

I feel shitty. Really shitty. Really, really shitty.

During my career of breaking appraisal results to folks and telling them how their year was I have worked with three kinds of programmers, or should I say, human beings.

The first is the kind of have very little expectations and if they get what they deserve you can see their faces light up. These guys are happy-human-beings. They know their net-worth, they know the perils of over-pricing themselves and they have no desire to take home more than what they really know they deserve.

The second kind is the group of folks who just don't give a shit. Ok, maybe that's not a very good way to describe this group. Maybe they do give a shit. Just a little bit. But these are folks who are motivated by the process of building stuff and for them an appraisal meeting by itself is an awkward moment.

They would rather you just print their letters and send them their revised salary letters by post so that they can ignore the letters like their telephone bills and find out their new figure when the amount lands up in their bank account. Maybe they would like to just glance at their appraisal letters and if they are not utterly insulting or disappointing they would just keep them aside and move on with their lives.

Put simply, For this kind of people, appraisal discussions are not a life changing moment.

This is the kind that usually draws the highest raises in the organization. Raises, power and promotions are funny things. They tend to usually go to he people who have very little or no craving for them.

Even though the first two kinds are insanely interesting to study this post is not about the first two kind. This is a post about Fred. The third kind. One which lives in the constant state of craving and discomfort. This breed will tend to bitch, whine and moan about their salaries, what the organization gives them, what they give to the organization and what the organization aught to give them.

If you are leading them they will remind you a dozen times a year that they are grossly underpaid and they will decide to stick with the organization anyhow.

This is the group that typically hops organization for a ten-percent hike every time they get a better opportunity. The group that powers the infinite loop of failure.

We start getting into an awkward dance here. Fred and I. Fred tells me he is underpaid, I show him industry wide pay scales of people with similar experience and expertise. He refuses to believe the research data. Fred, as it turns out, loves to nurture the idea that he is grossly underpaid and he seems to love continuing  to work for the organization in a mode of utter discontent.

If you are dealing with Fred, here is a word of advice that comes after coming across quite a few Freds in my career: you cannot make them happy. So don't even try. As an organization, get them a fair deal and everything that they deserve and move on.

You can attend a dozen management classes on how to keep your employees happy, but the sorry fact of life is that you are always going to hire a couple of people who you cannot please irrespective of what you do for them.

Do what you think is fair and then draw a line. Stop feeling bad. Stop getting confused and stop spending hours wondering how you can please Fred, because it is pointless. And assuming that even if you were able to please Fred, chances are you would get his resignation the day he gets a ten percent hike. You are way better off sticking to the age old saying, you cannot please everyone. Focus on the other two kinds instead and do all you can to keep them happy.

That way, you can at least have a team where most folks are happy and productive.

I wish you good luck.

posted on Saturday, May 15, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, May 14, 2010

We are here for you Twenty-Four-Seven.

Today, lets dive into the depths of time and bring from days that have rolled behind, a classic tale of support done the Indian-way. Before you read any further and start sending me flame mails about the generalization of the word 'Indian' here, trust me, I know exceptions do exist.

I also know that generalizing anything by a country is just about the biggest stereotype of the software development world that you should avoid at all cost, but humor me. I have a point to make and the point is not to ridicule or insult Indians in any way. I happen to be an Indian and I am actually fairly proud to be one. But then, having said that, India as a country and Indians as a group are often totally capable of doing seriously shitty things.

So, as I was saying, lets dive into the depths of time and bring back from the days that have rolled behind, a classic tale of support done the Indian way.

In one of my last work trips somewhere between New York and Chicago, after making us wait inside the plane for about an hour because they lost the stair-case that was supposed to get us down, making me miss my connecting flight and making me quite literally run for the next flight United Airlines manages to put a cherry on the cake of surprises by loosing my luggage.

After a few frustrating experiences with the ground staff who tell me that the bags would show up a day later at my hotel, I decide to make a move, get to the hotel and get on with my life. Three days later, however, I find myself trying to look up my luggage using the baggage tag on the United website which tells me that my luggage cannot be located.

Then, smack out of nowhere, I find myself doing something that I have a love hate relationship with --- I am calling the Support Line. Now, as I already said, I have a love hate relationship with support lines. Love because support lines often tend to be sofa king (to be read really fast, repeatedly) funny that they give me food for thought and posts like this one. Hate because they are so funny, that after a while they stop being funny.

As far as the United support line is concerned this is how it goes. The system routes me through series of automated questions. Then after routing me through a hugely long automated process which also confirms that my luggage 'cannot be located' it lets me talk to a customer care executive. Seven minutes of wait follows after which someone answers the call.

Voice On The Support Line: Good Evening Sir, This is United Airlines. My name is Fred (I could have used the real name, but then Fred sounds so much more fun in this situation), How can I assist you today?

The voice is Indian. Clearly. Plainly. Indian. And the fact that this gentle-man uses an American name to identify himself, tells me exactly what to expect next.

Me: My luggage seems to have gone missing at the O'Hare airport. The ground staff told me that they would ship it to my hotel in about the day and It's been three days since then. I am just calling to find out if you guys know when I would be getting my baggage shipped to my hotel because I am leaving this place and moving on to a new location in the next couple of days.

Fred: I am sorry for the inconvenience sir but we are here to help you Twenty-Four-Seven.

Long silence. Awkward moment.

Me: Do you need my baggage tag number?

Fred: Yes sir. Can you please provide your baggage tag number?

I give out the number. Another long pause follows. After which he tells me that he is going to put me on hold and I sit there listening to music for about three minutes. Then the voice cracks back.

Fred: I am sorry for making you wait Sir. I am also sorry for the inconvenience sir but the system is showing that your luggage cannot be located at this time.

Me: I know that. I saw that on the website and heard that on the automated system and both of them said I should talk to a customer care executive.

Fred: Sure sir. We will have updated information on your baggage soon. I apologize for the inconvenience but we are here to help you twenty-four-seven. You can call us anytime.

Me: How soon would you have updated information on my luggage?

By now I am having a seriously hard time hearing anything other than, Fred is really sorry for the inconvenience caused and that he is here to help me twenty-four-seven. But then, I don't want him to be there twenty-four-seven. All I want is my baggage back. I don't give a rat's ass if they work for three hours a day or twenty four.

We do this insane dance for long time where he assures me that he is really sorry about the inconvenience caused, that he is going to get me a hundred dollar discount on my next flight and that I can call the support center anytime. He then reminds me for, I don't know how many'th time, that they are there twenty-four-by-seven and that I can call them anytime.

Three days later the baggage arrives at my hotel and United conveniently just forgets the promise of the hundred dollar discount on my next flight. I receive no emails, as Fred had promised, no discount coupons. Nothing.

It's like the episode never happened.

We Cannot Help You Unless You Pay More.

Life moves on. I get back to work and this incident of Fred and his Indian support center being online twenty-four-by-seven for me is long forgotten. Till the time I see another example of support done in a slightly different way.

Recently, one of my posts hits the top five post related to programming on Reddit and I get a throng of people visiting this website. The new unique-visitor-count hits almost about fifty-one-users-a-minute, with old users continuing to read and click links on this blog.

This is when the website starts crumbling down under the load of heavy unexpected traffic. After about five hours of non-stop-traffic growing at an uncontrolled rate people start complaining about getting service unavailable errors. I decide to call the support line of my service provider.

Now, before I describe how the call goes, here is a little bit of history of how these guys transformed their support department. These are guys who were once notoriously famous for bad customer support and then one fine day, magic happened. They changed.

They were now, suddenly, providing support that started positively surprising me and the rest of their customers in all the right ways. No-one could really figure out what they had done but something had changed for better.

There were no solid announcements per-say but I suddenly started getting great responses in my support emails and my problems were getting resolved at the blink of an eye. I never had to call them so far, but with this issue it was better to call, than to email and wait for a response.

So, as I was saying, I decide to call up the customer support.

With literally two choices on the automated system, one that asks what I am calling for and other that asks me to press a number to talk to a customer support executive, in less than three minutes I am talking to a real human being,  who by the way, helps me locate the customer ID that he needs and then tells me, that I am facing service-unavailable issue on my website, without me having to describe the issue in detail to him.

Then he wants to know if this traffic was expected. He puts me on hold for less than a minute and comes back informing me that even though I am just using one percent of my bandwidth I have crossed my concurrent connection limit and that I would have to pay a little bit more to fix this issue. He then adds confidently that without upgrading the plan there is nothing he can do to fix the issue. Unless I chose to pay more, he cannot help me.

He is direct. Confident. Focused on my problem and is providing me the one single solution he has with a choice: take it or leave it.

I take it.

He initiates the payment right away and the service unavailable issue is sort-of-gone in less than about half hour.

While I should been utterly annoyed with my service provider and the fact that they never documented the number of concurrent connections my site was allowed to have anywhere, I actually end up liking the way the guy at the support handled the situation.

He is not nice to me, he is not sorry for the inconvenience cause, he makes me pay more.

But then, he understands my problem and fixes it while my dear Fred at United, who is there for me twenty-four-by-seven does not get shit done.

And The Point Of This Long Tirade Is...

That support is an art which requires people who know what they are doing. That hiring random Indian students, paying them their pocket money and giving them a bunch of carefully scripted cue-cards or a stupid set of Frequently Asked Questions does not equal good support.

Sometimes, we really do not give a shit if you are there twenty-four-by-seven.

All we give a shit about is our problem and how quickly you can help us fix it.

So the next time you think of publishing your support email, see if you can get the best of your folks in that mailing list and allow them to answer support emails if they want to. The next time you think of building a support department, see to it that you hire the guys who are just as good as your developers or the rest of your organization.

Support is not something you outsource and forget.

Because if you do, people will eventually just stop calling.

And then, they just might move on to companies who understand their problems and do not hire a bunch of random college students to tell you how sorry they are about the inconvenience caused.

Support, is serious business. Give it the time, money and attention it deserves.

I wish you good luck.

posted on Friday, May 14, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, May 09, 2010

David Heinemeier Hansson in his talk at Startup School describes the typical product cycle and the day dream of making billions and getting bought over by venture capitalist that most young and budding entrepreneurs have using a simple slide:

During the presentation, David's point is focused on a single topic. One way to make money is to hope for a lot of magic in step two and expect that a venture capitalist or a Google will buy you out. David describes the other, more practical, sane and logical way using a simple slide:

If you have not clicked the link to the video yet, you should.

David explains the idea of pricing your product or charging for your online service using simple, direct and wise advice for young and budding entrepreneurs. He explains:  

The really cool thing about all of this is that you don't need to be a fu@#king genius to make it work. Its not rocket surgery. It really is a simple three step idea.

You have a great application. You ask money for it. If people like it, they will pay and you profit.

But here is a kicker. Just because you slap a price on something does not mean you will have a successful business

37Signals has their own offering of free products for the end consumer but the focus of this video, is on their paid versions and how they make money online. As someone who has observed a truck load of software products getting priced, if there is one thing that I have learnt about pricing it is that pricing is just like any other phase of building great software.

Like any other aspect of software development, when it comes to pricing your product, you will fail too. The earlier and more often you fail the better off you are, as long as you do not keep making the same mistakes all over again.

Should you give out your product for free and seek additional business models to make money? Should you use free as a means to keep in touch with potential customers and convert them to paid customers over time? Is free your way to wipe your competition out of market? Are your products too highly priced? Are they priced too low?

You will never find out until you go out there and experiment with pricing. Lose a few customers because you are too highly priced. Get a few customers at a very low price. Give parts of your application for free. Explore other models of making money by giving your entire product out for free.

The beauty of online products and services is that you are always free to come back and fix your mistakes. Long story short, making mistakes is much better than procrastination and analysis paralysis.

Seriously, you really don't have to be a fu@#king genius to make it work.

Now go out there, make a few real product pricing mistakes and then learn from them.

I wish you good luck.

posted on Sunday, May 09, 2010 9:07:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, May 07, 2010

Have you ever seen folks who admire other folks for their work, their focus and their commitment and wonder why they don't have any of it?

Have you ever seen companies who like to give examples of other companies that are hugely effective and wonder why they themselves are not as effective?

Have you ever seen vice-presidents, directors, managers and team leads talk about how some team in a different company that they knew built an amazing service in three weeks and how their team takes too much time or is never able to get anything done?

Word of advice:

Whenever you see the discussion of this sort, the person who starts a discussion is probably the reason you, your team or your organization is ineffective.

No, I don't mean that the person who starts this conversation is necessarily a bad human being, stupid, evil or any of that.

Maybe he is just a nice manager, trying to get his team to do more and make them as effective as the 'other team' he has seen somewhere else. Maybe he is getting bogged down by other nice managers above him who are trying to get the team to do more and make them as effective as the 'other team' they saw somewhere else. Maybe he is just getting bogged down by a nasty client.

But then, having said that, the fact remains that he is in-fact making the team ineffective.

Chances are, that this gentle-man who started the discussion in the first place, is making the team ineffective by pushing them and making them work harder. I have personally witnessed managers taking great pride in discovering the fact that their teams are staying late to get things done. David Heinemeier Hansson from 37Signals has excellent advice regarding the topic of staying focused and getting things done, when he is asked a question at a conference

Question: I am in front of my computer ten to fourteen hours a day. I am supposed to be writing code. But I find that, I spend a lot of time getting distracted, surfing the web, trying to keep up with rails. Did you have any similar problems? What advice can you give to developers to keep on track and what motivated you to crank down and crank out a product?

Answer: I think the problem is you are trying to work fourteen hours a day. Who the hell gets anything productive done for fourteen hours a day? Try working five hours a day.

If you only have five hours a day to spend on something, you'd focus your time a lot better.

We've just gone down to four day work weeks. We are trying to work just eight hours a day. The amount of productive time I get out of that... two hours... three hours? I think people are just not willing to accept the fact that you can't, in a creative endeavor as programming, work for fourteen hours a day. It's ridiculous!

If you could just get three great hours in per day, you would get a ton more done.

To be honest, as a developer, I have been guilty of this too. If you are managing me, all you have to do is tell me that the sky is falling and we 'really-really-really' need something by this weekend and chances are you will find me rip off my shirt, move to my super-hero uniform and jump right out of window flying in my funny super-man underpants.

We as programmers, even the best of us, are sometimes just as guilty as our managers, when it comes to nurturing the belief that if you are pressured to close fifteen non-critical bugs by merely announcing to you that they are critical and that they have to be done today, you will actually end up staying all night and closing every single one of those bugs the very same day.

The next time the sky is falling try working less for a change. Get in just about three to five hours of focused work a day and keep opening the IDE every single day. Next time when you get an email in the middle of the night make your own judgment call on if the issue is really critical or if it can wait till tomorrow. If it can wait till tomorrow, logout.

Work less, stay focused and if you find yourself moving into a constant firefighting mode for fifteen hours a day and you cannot get shit done, learn how to say no, logout and get some sleep. The same applies for your team if you happen to be leading one.

Maybe you, your manager and your organization is trying too hard.

Slow down.

Chances are that you will be much more creative, much more innovative and much more productive.

I wish you good luck.

posted on Friday, May 07, 2010 8:30:00 PM UTC  #    Comments [8] Trackback
Posted on: Sunday, May 02, 2010

A small project in a tiny little nook of your organization fails but the universe continues to function exactly as is. A close friend has a bad breakup but decides to move on with his life. A cockroach loses its home and decides to move into your hotel room. You have not been able to do any real concentrated work for days. On the face of it, these are utterly insignificant events of your life that no-one gives a rats ass about.

Ok wait... maybe you care. Maybe your mom does. Maybe your friends, colleagues or acquaintances do. But that's about it - you tell yourself.

Then when you sit in front of the monitor thinking of what to write about, you see nothing but insane white electrons staring back at you. You feel like those days when you were asked to answer a question you were totally clueless about.

All you hear is silence.

The sound of crickets chirping deep inside your head.

You whine.

You just missed fifteen things that you could have written about in the last seven days. 

You just missed fifteen new perspectives.

You just missed out on fifteen new conversation any one of which could have brought purpose or meaning to your life and your universe.

And did you realize what the problem was?

As much as you might have heard me telling you that one of the biggest problems about writing on the internet that young and budding blogger often forget, is that no-one cares about you, your blog or your product, to be honest that is not the biggest of the problems keeping you away from blogging consistently and achieving ultimate success in one easy step.

The real problem here is hugely different. The real problem here, just in case you have not yet realized it, is that you, yourself don't care enough about any of these events, experiences and moments that are shaping your life,  even right now as you read this.

TEDxCalcutta speaker and a movie director Ashoke Vishwanathan first introduced me to a rather philosophical concept of movie making which also applies to blogging. During his talk, he explained the concept of the hyper-real in movie making:

This is what we call the hyper-real.

If you walk into a rock concert, where say Madonna is singing. Because the auditorium is so big you require giant television screens and on those giant television screens you will see images of Madonna.

Now when you attend the rock concert, are you watching Madonna singing or are you watching yourself watching Madonna singing. You are actually watching yourself watching Madonna.

While most folks scratched their heads at this remark, what Ashoke was really talking about was your ability to step out and watch yourself participating in your own stories. Do you even have the perspective to notice that the stories are happening all around you? Do you have the ability to step out, watch, learn and then tell these stories to the world? Do you even care about these stories?

Do you just see a cockroach getting squatted, or do you see a tale or errors unwind itself with you playing the central role? Do you genuinely and truly think that a train trip can change your outlook on life?  Do you genuinely believe that programming is art, science and passion all rolled into one and that depressed programmers should be smacked out of the profession and asked to join a different profession? Do you have an enemy?

Do 'you' truly and deeply care about anything?

Do you even have strong opinions on anything?

Do you believe that the life that you live, the work that you do or the experiences that you have are informative, funny or remarkable enough that you feel the urge to move your buttocks off that couch and share them with others around the globe? If you don't care, don't you think, asking your audience to give a shit, is asking for too much?

If you do care enough, you won't have a difficult time finding a topic for your next post, because that is the only thing lying between you and the next meaningful conversation you are going to start.

I look forward to reading it and as usual, here is wishing you good luck.

posted on Sunday, May 02, 2010 8:36:00 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, May 01, 2010

I have never really discussed my ADHD openly until recently. It was also not until recently that I started talking about taking active and conscious steps to work around it. But then I have been working around it for years.

I have always been a vicarious reader of books connected to philosophy, the human mind, business or management. Poems have been something I have liked ever since school days and I could practically recite scenes from the William Shakespeare play I was studying.

I love books but then it took me years to figure out why I read a few books end-to-end in just one sitting and why I just could not gather enough focus to even browse through others end-to-end in spite of the fact that I desperately wanted to.

I either fell asleep way too randomly or I just quit reading them half way through.

ADHD Is Not About Attention Deficiency

For anyone who has browsed through the basics of ADHD if there is one thing qualified doctors often tell you, it is that ADHD is not about deficiency of the ability to gather attention. As a matter of fact, folks with ADHD tend to be much more attentive than their normal counter parts when they are paying attention. Having said that, ADHD is about the deficiency to 'voluntarily' focus your attention on something.

Put simply, your mind silently-and-quietly almost sub-consciously decides the things that it wants to pay attention to and the things it wants to ignore. Once it does that, no amount of convincing usually tends to work.

Of course you know exercising is good for your body, of-course you know that reading classics is a great way to improve your writing skills but if your brain has flipped the switch on the side of not doing it, chances are you wont be able to give enough attention to the thing to get it done.

Listen Don't Read.

When it came to Outliers, when I was reading it, you would find me with a hardbound copy of the book on my way to commute. If you caught me at a bus or a cab chances were that I was reading it. I completed the book within about a couple of weeks, reading it on my commute to office. 

Atlas shrugged has been in my list of favorite books for years. Having said that, here is a deep dark secret. I was never able to complete the book without skipping huge number of pages in the middle. Lets face it, the book was seriously hard to focus on.

Then then the miracle of a life time happened. I don't know exactly when or how this happened. As far as I remember I just bumped into an audio book and decided to download it. I was hooked on to the idea. My MP3 players started having physical scars because of overuse and it was practically next to impossible to see me on my way to office without a pair of headphones on.

When I went through my first audio-book of atlas-shrugged there was very little skipping. I started remembering and stumbling upon parts of the story that I did not even know existed. I started remembering incidents from the book, I started remembering the names of characters, phrases and writing techniques way better than I had ever remembered by reading the book multiple times over.

There were a certain kind of books that I could have read, for everything else, I almost instantly started preferring audio books. Then came a realization that I happen to be 5x to 10x more attentive and receptive to learning when I am listening to stuff rather than reading it.

For me audio books were like a conversation. My mind was suddenly focused and soaking in words like a wet sponge as I sat down with eyes half closed in a moving bus speeding on its way to my office.

My mind, it seems had pre-decided that while it was okay to listen through a version of the Da-Vinci-Code it was a criminal waste of time to flip pages of a text book and even try to read it.

Classics, literature, travel related books, love stories - the horizon opened up and I was reading, or should I say listening to everything and anything I could lay my hands on. Slowly, as I listened more I also started grabbing hard copies of these and I started reading them occasionally as well.

I had similar issues with long-winded emails which I often found pointless to read. Proof reading my emails, which were generally long was also painful. Editing the blog posts I write was a huge problem as well, because no matter how many times I proof read them, they would typically have a couple of mistakes. Besides proof reading them sounded like a boring chore as well.

Then one fine day the realization dawned unto me with divine intervention, that I could in-fact use the inbuilt engine of Microsoft word to read aloud what was written on screen. In the first few days of doing that, proof reading emails or blog posts like this one wasn't suddenly all that boring or difficult. I actually started liking it and getting done with just one round of review.

The point of this post, is a rather simple one. If you think you have ADHD, having issues with paying attention while multi-tasking and are having a hard time reading a certain kind of material, don't try to force yourself too hard to read it. Go grab an audio book or an audio version of the same content. If you cannot find the audio version, drop the content into Microsoft word and have it read aloud to you by the text to speech feature of Microsoft word.

Of better still, if you can afford it go grab a copy of text aloud with a few natural voices from AT&T and have your emails or word document read out to you. See if you can focus any better. If you suffer from ADHD and are like me, chances are that you will love audio and will soak in much more content than what you will absorb if you were reading the same content. Chances are that you will actually love audio. Try it.

I wish you good luck.

posted on Saturday, May 01, 2010 8:30:00 PM UTC  #    Comments [1] Trackback
Posted on: Friday, April 30, 2010

Multiplitaxion Inc, had multiple offices around the world. When the news of a particular office-head in a different city resigning came in, I shrugged. My life was not even touched by the news and I could not have cared less.

When the news of a new office head getting hired within a month of the older one leaving came in I shrugged again. I couldn't have cared less again.

When the tales of the new branch-head who for the purposes of this post, we shall refer to as Fred, taking charge started coming in I wanted to shrug again and get on with my life, but then, these tales were, for lack of a better word, spicy and interesting. So I didn't shrug.

To be honest, I mostly behaved like like a young college going teenage girl, who finds pleasure in the hottest gossip in town. With my ears pressed hard on the source that was brining us the hottest news about this new branch head of one of our branches, we had found a source of free entertainment. Our ears were wide open for every new tit-bit of information about this new branch-head and what he did today.

Its called learning what not to do in management by watching other people f@#ckup. This new branch-head of a small office based in a small town had a small problem. From the very day he joined office, he realized that there were things that he had to change and he went all out to make these changes.

New rules were formed. New policies came into existence over night. We felt sorry for the folks working in this particular office and at the same time had hilarious laughs when we first heard the rule that you were not supposed to listen to songs, even on headphones, inside office because that was considered using of company time for your own personal use.

The guy was making a new rule or policy every couple of weeks. He truly believed that he was shaping an office into discipline and order both of which he believed had been neglected by the older branch-head.

From these series of dramatic episodes in one of our branch offices, we learnt as much as a fresh management book would have taught us. But then, of all the things that this set of dramatic episodes taught us, one of the most important things I personally learnt was something that most folks learn when they have their first breakup during their teens.

Now, if you have had a bad breakup in your life you probably know this already. If you had a breakup that was so bad that you actually had to seek advice from a close friend or a shrink, this is probably the advice they gave you too, but I am going to give it you again.

Ready for the super-breakup-tip? Huh? Huh? Huh?

Wait. It. Out.

That's right. The times following your breakup are usually very risky for getting into another friendship or relationship. That's the time when you usually end up picking the worst of partners. Which is why when you have a bad breakup, anyone with a sensible mind will tell you to stop looking for someone and to wait it out. Be single for a couple of years. Live life. Focus on your hobbies. Do things you always wanted to do. Have fun. Don't rush into another relationship.

You know what? Now, as it turns out, if you happen to run an organization, this rule also applies to you. When the best of your organization leaves, you usually see the Human Resource department swimming through resumes and getting back to work so that they can hire you what they call - quality resources - to replace the ones who are leaving. All I have is two words, which describe this exercise rather appropriately:

Bad Management.

That's right. Looking for 'quality resources' when the best folks in your team start leaving is just about the stupidest thing that you can do. It's like looking for the best girl you can find when your girl friend breaks up with you. Newsflash. It doesn't need a rocket scientist to tell you that you are going to make some really stupid mistakes.

Yet, this is exactly the mistake Multiplitaxion Inc made when they went out looking for a new branch-head and hired Fred.

What Multiplitaxion Inc, should have done, was simple. They should have 'waited it out'. They should have seen to see if someone in house steps up to take the responsibility. Waited to see if the office really needed a so-called-head to run it properly. They should have waited to see if the smart team that they had hand picked after countless rounds of interviews would step-up and take the responsibility.

And then if they really needed a 'branch-head' they should have sat tight and waited till they found the right person. Instead, they decided to replace the old branch-head with Fred as quickly as  they could and triggered a series of dramatic episodes which were no better than confusing painful relationships that folks often get into after a breakup.

As for Fred, he practically f@#cked up the entire branch in the short one year during which he headed it and then ended up getting fired.

Now, years later, every time I get a couple of resignations on my team and people come up to me all worked up and worried, asking me what we are going to do, asking me what our 'hiring strategy' is going to be or how we are going to replace the 'quality resources' that just left us, I smile.

Then I tell them that I don't like the idea of getting into a relationship immediately after a breakup and I tell them that we are just going to wait-it-out for a couple of months and see what happens.

Maybe someone from the team will step up. Maybe, we will realize that the person leaving wasn't all that critical after all. Maybe we will not need a replacement. Maybe we will. But then we have time on our side and its better to wait it out and make a calm decision rather than rushing to make a stupid hiring mistake that you end up regretting for months.

The next time the best programmer in your team or your alpha-geek resigns and others walk up to you asking you what your hiring strategy is going to be, go ahead, ask them if they ever had a breakup and what was the advice their friends, family or shrink gave them after the breakup?

Wait. It. Out.

Observe what happens.

Things have a strange way of working themselves out.

I wish you good luck.

posted on Friday, April 30, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, April 25, 2010

Quick! How many windows do you have open in the background right now as you read this? On a given day my desktop would have looked somewhat on the lines of this:

If you have more than ten parallel windows and you find yourself jumping from one window to another loosing complete track of what you were doing before you jumped to a different task, you might consider taking an online test for ADHD.

Michael Lopp describes this classic symptom of having way too many tasks on at your desktop in his post about Nerd ADD. He explains:

Stop reading right now and take a look at your desktop. How many things are you doing right now in addition to reading this column? Me, I’ve got a terminal session open to a chat room, I’m listening to music, I’ve got Safari open with three tabs open where I’m watching Blogshares, tinkering with a web site, and looking at weekend movie returns. Not done yet. I’ve got iChat open, ESPN.COM is downloading sports new trailers in the background, and I’ve got two notepads open where I’m capturing random thoughts for later integration into various to do lists. Oh yeah, I’m writing this column, as well.

Folks, this isn’t multi-tasking. This is advanced case of Nerd Attention Deficiency Disorder. I am unable to function at my desktop unless I’ve got, at least, five things going on at the same time. If your count came close, you’re probably afflicted, as well. Most excellent.

My mother first diagnosed me with NADD. It was the late 80s and she was bringing me dinner in my bedroom (nerd). I was merrily typing away to friends in some primitive chat room on my IBM XT (super nerd), listening to some music (probably Flock of Seagulls — nerd++), and watching Back to the Future with the sound off (neeeeerrrrrrrd). She commented, “How can you focus on anything with all this stuff going on?” I responded, “Mom, I can’t focus without all this noise.”

While ADD, ADDHD, NADD or extreme multitasking and restlessness, whatever you want to call it, has its own advantages, after a while it gets to you. For me the noise and parallel processing in my brain started becoming scary when every project that I undertook outside of work hardly ever ended.

It was time that I decided to take a few online tests and realized that I scored consistently high in all of them, every single one of them ending with a result which was nudging me to start doing something about it.

The first side of dealing with it was through fitness and exercise which train the brain to control attention.

The second aspect of it was setting a few circuit breakers in place.

For me a circuit breaker in this case would be anything that stops me from ALT+Tabbing my way to another task while I am working on one. If I am in the middle of composing an email and I am called to a meeting what I want to do, is get back to composing that email when I get back to my desk. Typically, I don't. I instinctively spawn either a new visual studio instance or an internet explorer instance.

If I am in the middle of writing code and I suddenly think of paying my cell phone bill online, I want to resist the temptation of hitting the Window button and typing iexplore to bring up internet explorer.

What I wanted was a circuit breaker that would stop me from hitting ALT+TAB or the window key, pause for a second and let me consciously decide if I wanted to perform a task-switch. 

In my search for finding applications that will lock down all other applications and let me run just one or two programs that I wanted to focus on at any given time, I hardly came up with any solutions or tools that would lock down everything except the one program that I wanted to run.

In the end, I ended up using a simple hack to help me focus on just one thing at a time. Let's assume that you want to focus on writing a blog-post for which you need to focus on Windows Live Writer and nothing else. Here is what you do to set up a circuit breaker for yourself:

  1. Close all other applications.
  2. Start Windows Live Writer.
  3. Go to Task Manager by hitting ALT+CTRL+DEL, Move to the Processes Tab and kill explorer.exe.

Now all you are left with is Windows Live Writer and your desktop. Even the desktop icons would have disappeared. Your window button is gone. There is nothing to ALT+TAB to. Just you and Live Writer:

Of course, you could start your explorer again by brining up Task Manager and Hitting The New Task Button.

But then hitting ALT+CTRL+DEL and invoking explorer often involves a couple of clicks and it often acts as a circuit breaker. The mere act of going through a few clicks helps you slow down and consciously decide if you want to brain up explorer and move to multitasking mode again.

Do you also find the idea of multitasking painful?

Do you use special programs, post-it notes or labels to remind yourself that you should be doing less of it?

What is your circuit breaker?

Discuss.

posted on Sunday, April 25, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, April 24, 2010

As far as most minds are concerned, the very words 'computer programmer', 'geek' or 'nerd' usually does not tend to conjure up an image of the most physically fit human beings that walk this planet. As a computer programmer myself, I have never really paid active attention to my health, exercise routine or a healthy life style. Old acquaintances back at school often referred to me as 'bill gates'. Well, what they meant was, this bill gates:

Honestly, being called out for being skinny every once in a while or the element of physical appearance somehow never seemed important enough to move to a stringent exercising regiment and then sticking to it. I hardly ever thought that I would be consistently or actively thinking about health leave aside, exercising and writing a series of blog post on it.

Things That Move A Nerd And Getting Him To Give A F@#CK.

During my life, a decent number of well-wishers have asked me to pay more attention to health and exercise. 'Its good for your body', 'its good for your mind' and 'it will make you feel good' are some of the most common reasons that have been sited.

What most folks forget however, is that when you are selling a life-changing idea that needs solid commitment to a geek, selling him physical appearance, the idea of 'feeling good'  or the concept of well-being is not going to do it. The geek as it turns out, does not care enough for that stuff. At-least, he wont admit that he does, even if he cares about these things. He likes his dark cave and his interactions with his compiler.

He just won't buy your 'it will make you look and feel good' argument.

What the geek needs is a challenge or a problem that he can connect to. A problem that is worth fixing. A problem that is engaging and consuming as a software program. Something that he can connect to. Consider this thought process from John Walker:

I'm an engineer by training, a computer programmer by avocation, and an businessman through lack of alternatives. From grade school in the 1950's until 1988 I was fat--anywhere from 30 to 80 pounds overweight. This is a diet book by somebody who spent most of his life fat. The absurdity of my situation finally struck home in 1987.

"Look," I said to myself, "you founded one of the five biggest software companies in the world, Autodesk. You wrote large pieces of AutoCAD, the world standard for computer aided design. You've made in excess of fifty million dollars without dropping dead, going crazy, or winding up in jail. You've succeeded at some pretty difficult things, and you can't control your flipping weight?''

Through all the years of struggling with my weight, the fad diets, the tedious and depressing history most fat people share, I had never, even once, approached controlling my weight the way I'd work on any other problem: a malfunctioning circuit, a buggy program, an ineffective department in my company.

Michael Lopp in his article on The Nerd Handbook describes one of the examples that can really move a nerd to address fitness. He explains:

Make it a project. You might’ve noticed your nerd’s strange relation to food. Does he eat fast? Like really fast? You should know what’s going on here. Food is thrown into the irrelevant bucket because it’s getting in the way of the content. Exercise, too. Thing is, you want your nerd to eat healthily so that he’s here in another thirty years, so how do you change this behavior? You make diet and exercise the project.

For me, exercise became the project ten years ago after a horrible break-up. When the project was no longer the Ex, I dove into exercise every single day of the week.

There were charts tracking my workouts, there were graphs tracking my weight, and there was the exercise. Every single day for two years until the day I passed out in a McDonald’s post-workout after not eating for a day.

Ok, so time for a new project. Yeah, nerds also have moderation issues. That’s another essay.

Significant nerd behavioral change is only going to happen if your nerd engages in the project heart and soul, otherwise it’s just another thought for the irrelevant bucket.

For someone like me, the idea of being called fat or the idea of a break-up is not compelling enough to get my ass off the couch and start running, but if you can appeal to my brain and convince me with objective and scientific facts which tell me that getting up and walking five miles a day will help me write better code, you have my attention.

With me the idea of exercise every day started rather recently with a realization that the ADHD that I often joked about having and never even bothered to get tested or formally diagnosed, was starting to impact my life and was preventing me from working on things that I always wanted to work on.

The open source timesheet entry system that I started, my announcement of working on a book and my announcement of starting to write technical posts were just some examples of incomplete ideas that have not yet seen the day of light purely because I could not generate enough focus or attention that these activities deserved. To be honest, there are a zillion more ideas that float in parallel and create a turmoil in my head.

After a while these things get painful to deal with.

This was clearly a problem needing a solution. It was time to do some serious geek-type-research using the same information tools that I use when I sit down to research a new topic when I am going to blog about it. One thing that kept coming back in all the research that I read about and all the material that I came across was that cardio-exercises have concrete and scientific benefits at improving your attention span.  

Strangely enough, it was these scientific researches I read about (which I might do another blog post to talk about) that I could connect to the most. And then, one fine morning, on my way to office, I got off the bus a couple of miles before office and walked. The nerd in me had voluntarily and seriously started giving a f@#ck about this workout thing.

In the end things are fairly simple. As programmers we tend to build some fairly complicated systems and work on some fairly interesting problems. We are often in a war on multiple fronts, where chances of losing are way higher than chances of winning.

But we adapt, improvise, and work.

Consistently.

If you can build complex software that works reliably in a production environment and not police or panic even when the sky is falling, figuring out a fitness regiment that meets your need, clears your head, helps you focus and keeps you mentally fit, should not be all that hard, if only you can get the nerd within you to give a f@#ck.

How you get the nerd within you to give a fu#@k however is a whole new problem that you are going to have to deal with yourself. For me, it was ADHD and the fear of not being able to work on things that I always wanted to work on. For you, it could be something totally different. Whatever it is, the sooner you can convince the nerd within you to get his ass off the couch and run a few miles consistently day after day, the better off you are.

I wish you good luck.

posted on Saturday, April 24, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, April 23, 2010

Fred is an asshole. Having said that, when talking about Fred, the people who report to him are hugely reluctant and scared at using that word to describe him.

During my consulting days at a client, who for the purposes of this post we shall refer to as Multiplitaxion Inc, the people who work with Fred seem constantly stressed out and unhappy.

Then in a conversation with one of the testers in Fred's team I stumble upon the reason why Fred is commonly perceived as an asshole by everyone who works with him. I am told that Fred "uses his logic to classify everything that he sees in black or white".

Using your logic and seeing things in either black or white, is usually your first step towards prickdom. It is your first introduction to the problem of other minds and nudges you to believe that everyone you are talking to is either a lying scumbag or a mindless zombie.

Consider for example, a tight situation in your project.

A situation where the sky is falling.

Your team are really trying hard to get a the data transformation feature rolled out to a client as quickly as you can.

You walk up to your manager to tell him that the data transformation service is going to take about three weeks to build.

He looks at you like you just dropped a dead rat on his table.

You cringe.

What follows is a 'logical' argument where he uses pressure and intimidation along with simple logic to question you why you think parsing a simple file is going to take three weeks.

You know why it will take three weeks to build but suddenly you find it difficult to explain the reasons articulately. Your throat dries up a little. There is strange awkwardness in the moment created by the intimidating look he is giving you. You fumble something to the effect that the file is not a structured CSV file to which he responds that we have formatted non-structured files in the past rather quickly. You respond that this one is complex. He questions you why.

Very soon, before you know it, you are playing the cat and mouse game where he is the cat and you are the mouse. It feels like you are defending yourself rather than having a real pragmatic discussion on timelines. It feels like you are being cornered. You know deep down inside that the file is complex but you suddenly start finding it really hard to explain why it needs your time and attention.

What your manager is busy doing, is finding out if you are are lying scumbag or it is genuinely going to take three weeks. As far as he is concerned, these are the only two possibilities that can exist. Things are either black or they are white. Not to mention of course, that he is starting with the assumption that things are black and that you are in fact a lying scumbag, unless you prove to him otherwise.

The reality of things however, lies somewhere in the middle. Chances are that the file parser will take about two weeks to write and about a couple of days to test. Chances are that if you are done early you will also ship early. Chances are that you are not lying, just keeping a couple of days because you know that shit happens when you least expect it to happen.

Things are neither black nor white. They are a totally different color and any other color to your manager means black. He has already stern investigation, cross examination and deposition all rolled into one.

You have proved yourself in multiple projects and multiple assignments. You have demonstrated your work ethics more than once. You stand there answering questions, wondering why your integrity, skill or gut-feeling is being doubted. And then, suddenly you hear a voice in your head whisper - F@#k him. He wants it in one week. Give it to him in one week.

This is when you start building a truck load of crap that causes companies to move in infinite loop of failure. This is when you know for sure that your manager is an asshole. You spread the word every time the topic comes up. Then there are others who have had similar experiences with him too. The story spreads within the corridors of your organization and a brand new asshole is born in your organization.

If you are working with a bunch of developers, learn how to shut the fu@#k up and listen to their problems, specially when the best of your team come up to you and tell you they need more time. Stop what ever you are doing and listen when they come up to you for any help whatsoever.

There is nothing wrong with a healthy discussion, but don't act like an asshole. Don't classify things as black or white and don't start by assuming that people who come up to you are lying scumbags till the time they pass your elaborate cross examination and prove their innocence. Don't interrogate your team members like criminals.

Put simply, don't be a black and white jerk.

I wish you good luck.

posted on Friday, April 23, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, April 18, 2010

As a part of my job, I meet young and budding programmers around the world, connect to them and work with them. One of the thing that amuses me more than anything else as I talk to some of the brightest programmers that I find is the amount of programmers who have 'plans' of starting their own organization or their very own personal pet project in the 'future'.

Ask them if they have a prototype or a work-in-progress version and you will find yourself staring into the wilderness of no-response. When these folks say they 'plan on' having an organization or a pet project, they don't mean they are actually working-on one. What they really mean, is that they are 'hoping' something magical just turns their 'plans' into reality without their doing anything.

Put more specifically, they mean that they have 'dreams' of starting their organization or their pet project someday.

After a couple of months however, these dreams after a lot of talking and without any real work, become hugely boring.

Not to say that these folks do not have in them what it would take to start an organization or just a pet project. Every single one of them have what it takes to start either of these. What they lack however, is determination and consistency. 

 Paul Graham explains this rather articulately in his article on determination. He explains:

We learned quickly that the most important predictor of success is determination. At first we thought it might be intelligence. Everyone likes to believe that's what makes startups succeed. It makes a better story that a company won because its founders were so smart.

The PR people and reporters who spread such stories probably believe them themselves.

But while it certainly helps to be smart, it's not the deciding factor.

There are plenty of people as smart as Bill Gates who achieve nothing.

In most domains, talent is overrated compared to determination—partly because it makes a better story, partly because it gives onlookers an excuse for being lazy, and partly because after a while determination starts to look like talent.

If you have ever thought of starting an organization or maybe even just a small pet project that you can work on for your entire life, remember that the world around you will not suddenly change magically to give you more time, means or measures to work on it and make it happen. None of anything that is worth doing is so easy that anyone can do it.

The least you can do is stop giving lame excuses for your own laziness, get your butt off that chair, power on your laptop after your return back from work and write some code over a nice warm cup of coffee or hot chocolate.

Stop whining and start shipping.

Keep opening the code editor day after day consistently for years and who knows, you might wake up one day and realize that your dream was not just a boring little dream after all. Of course, there is also a possibility that after years of hard work you might realize that things just did not work out, but then if you don't put in the years of work, there is a guarantee that they won't.  Besides, if you want it bad enough, you don't have an option, do you?

Now stop giving those lame excuses about you being busy and go write the first screen of your pet project, the first draft of the first chapter of your book or your first blog post today.

I wish you good luck.

posted on Sunday, April 18, 2010 9:54:52 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, April 17, 2010

Finding competent programmers in a hay-stack of incompetent idiots is level-one of hiring that every startup needs to learn.  This post assumes that you have crossed level-one of the hiring game and that your organization, company or startup is hiring decently competent programmers who are getting things done.

Now that you know how to look for competent programmers and hire them, what next?

What if I told you that hiring just hugely competent programmers for your startup is not enough. What if I told you that besides competence, that there is one quality that you need to look out for in your programmers and what if I told you that this quality is hugely important.

You know that three second thin-slicing that Malcolm Gladwell talks about in his famous book Blink. What if you could use that to get deeper insights into characters of the candidates you are interviewing and if there is one quality of a candidate that you could  find out about what should that quality be?

What if I told you that the quality that you should be looking out for is straight-forwardness and integrity.

Now, that should be easy, shouldn't it be? After all you are hiring programmers from the best of backgrounds, the best of colleges and the best of upbringings; how hard can it be to find folks with straight-forwardness and integrity? Turns out, it is harder than most organizations think it is.

Anyone who has taken his high-school class in economics, read freaknomics or super-freaknomics will tell you that human beings are not good or bad. Human beings are just human beings and that they are driven by incentives. The point of hiring straight-forward individuals with a truck load of integrity is not that you hire programmers who are hugely loyal to your organization or sacrifice their careers for your organization.

In fact, if all you do it hire people who are working for the best interest of the organization both you and your organization are seriously screwed. You want incredibly smart, self-centered and selfish programmers. The point of looking out for straight-forwardness and integrity is not to keep seriously kick-ass smart, selfish guys out of your organization.

On the contrary, the point of it, is to hire people who are driven by deeply selfish incentives and who have the spine to be completely open about the incentives that move them. The whole point is to hire people who can take their selfish needs and incentives and align them with the best interest of the organization.

Flashback into the days of Multiplitaxion Inc when the company was about three weeks away from a huge bonus payout to all the employees. It was during this time that someone in the organization had an idea of talking to some of the best programmers we had and doing one-on-one discussions with the programmers. The idea was to get their feedback on what could be improved at the organizational level.

Three of the most competent programmers in the organization, were asked what they thought about the organization during these one-on-one discussions and all three of them reportedly mentioned that they thought the organization was an amazing work culture. That they loved coming to work each day and that they would love to continue being a part of the organization.

Three weeks after collecting the bonus payouts, all three of them quit, within a three days.

Turns out, that all three of these individuals were amazing guys and they were very competent at what they did. They were not bad human beings per-say. Like most kick-ass programmers they were driven by incentives and selfishness which was also fine.

What was hugely disappointing however, was their inability to express their opinions strongly and candidly. The lack of straight forwardness. The lack of openness and the fact that they lacked the courage to talk openly about what they felt was wrong within the organization or how their incentives were not aligning with the organizations incentives.

This lack of openness is what ultimately results in dual personalities where you say a thing and end up doing exactly the opposite thing. The cherry on the cake of this story however were the exit interviews of these programmers where they saw everything wrong the organization, their compensation package and even the work that they were doing.

As a young and budding managers, I watched opinions and personalities change over a period of three days and for lack of a better word, let us just say that it was amusing.

The dual personality problem to be honest, is actually bigger than just a hiring or a retention problem. I have also had the opportunity of working with programmers who would sit in a meeting telling you how amazing your ideas were. Then months after the meeting, you would learn that none of those ideas had been implemented because those same individuals thought that the ideas were shitty and they would not work.

No discussions. No disagreements. No arguments.

They would agree to everything that you had to say and then go out and decide to do just the opposite without even feeling the need to discuss.

Again, not bad human beings. Just individuals who lacked the courage to express their opinions in a bold, candid and civic way.

I have worked with hundreds of programmers during my career and if there is one thing I have learnt it is that human beings cannot be classified as 'good' or 'bad' and that shit happens anytime you are dealing with people.

Having said that, in the long run, as an organization, entrepreneur or as anyone responsible for hiring, you are generally way better off hiring and working with straight-forward, open, candid programmers compared to their confused, lost or scared counterparts.

You are way better off being told 'no' on your face rather than being given a truck load of encrypted messages sprinkled with mitigated speech all over it. A simple open personality is much better than a complicated dual one.

If you are a small startup, looking for some seriously kickass programmers, the next time interview people for your team, remember to look out for openness, a strong spine and a straight forward simple personality in the programmers you hire. Without these qualities, the kick-ass competence hardly matters.

I wish you good luck.

posted on Saturday, April 17, 2010 9:20:00 PM UTC  #    Comments [3] Trackback
Posted on: Friday, April 16, 2010

I work in the high-tech business and being a programmer I am often surrounded with more programmers. Now we as programmers, as it turns out, are incredibly amazing and weird people who believe all problems on this planet can be solved by writing code and building a system for solving the problem.

This is probably why, I also get into frequent discussions with young and budding web 2.0 (whatever that is) enthusiasts asking me if I have seen this cool and happening site which will help me promote my blog and help thousands of more people find it.

I on the other hand, seem to consider this blog to be my true-third-place. A quite dimly lighted corner of the web where I can meet the kind of people I wanted to meet and start real online and offline discussions with them. Through my very own personal thoughts on software development, what I am really trying to do is not to change the world, but make a very tiny little dent in my very own personal universe.

I am not trying to sell to an audience of millions. Just trying to find one individual I can connect to and have meaningful conversations with over a mail thread or a cup of coffee. As I have often said, I am happy with this blog as long as it has three readers, me, my mom and you, dear reader.

I am not trying to start a movement here. All I am trying to start through this blog, is small threads of conversations with the kind of people I would like to connect to. Having said that, even if it was a movement that I was trying to start, I am not so sure if trying to sell your ideas to a million users and trying really hard to get a million individuals attached to your cause is the best way to start a movement.

Derek Sivers in his TED talk describes the importance of finding just one true follower or even being that first true follower rather than 'leading' the whole wide world into following a movement. He puts his  point across through a video of a shirtless guy dancing like a manic to start a movement. He explains:

The first follower is an underestimated form of leadership in itself. It takes guts to stand out like that. The first follower is what transforms a lone nut into a leader.

If you are the type, like the shirtless dancing guy, standing alone, remember the importance of nurturing your first few followers as equals, so it is clearly about the movement, not you.

But we might have missed the real lesson here. The biggest lesson, if you noticed, did you catch it? Is that leadership is over glorified. That yes, it was the shirtless guy who was first and he will get all the credit but it was really the first follower who transformed the lone nut into a leader.

So as we are told that we should all be leaders,  that would be really ineffective. If you really care about starting a movement, have the courage to follow and show others how to follow and when you find a lone nut doing something great have the guts to be the first one to stand up and join in.

If you haven't clicked on the link to the video yet, I strongly suggest you do.

So the next time you think of starting an organization, starting a product or even something simple as starting a blog, stop worrying about search engine optimization, getting your site up on that popular website or using the quote-unquote 'social media' to publicize what you are doing.

Be the lone shirtless dancer, prepare to get ridiculed and continue to do your remarkable dance consistently.

Chances are that you will stumble upon at-least one genuinely lone nut who will decide to join you as a partner in crime or better still you just might find a few other lonely nuts that you can join and that is the start of a small conversation. Maybe even a tiny little movement.

When that happens you are on your way and you know it from within.

You don't need a system.

You don't need to go shopping for Google Ad-words to increase you site traffic anymore.

I wish you good luck.

posted on Friday, April 16, 2010 8:30:00 PM UTC  #    Comments [1] Trackback
Posted on: Sunday, April 11, 2010

Just how much time do you spend in meeting rooms, conference calls and web conferences? How much time do you chit-chat with fellow developers? For how long do you have casual conversations discussing your family and your last vacation with your team? How many hours a day do you spend discussing people issues, organizational issues and project issues? Put simply, how much talking in any given day do you do?

I have been observing people in the business of building software and the conclusion that I have come to is that the software programmers and managers around the world are quietly turning into chatterboxes who chatter more and do productive work less.

"Come on Pops" - you tell me - "Talking is important. It is how communication between programmers happens".

Of course talking is important. Hugely important. But then there when you find yourself spending more and more time just talking rather than doing anything productive, there are some serious reasons to worry and do something about it.

The thing with talking, specially when you do it in a professional setup like an organization and when you are talking to your fellow programmers, inside an office meeting room, is that it seems like work. The reality most of the times however, is that It is either inspiration, collective thinking, entertainment or just plane and simple whining. Talking, in more cases than not, is not work.

I am not saying that inspiration, collective thinking or entertainment are not needed, but when you confuse them with work, you tend to do more and more of those rather than working and that is what makes talkers addicted to talking.

Jeff Atwood describes this rather articulately in his post on the topic. He explains:

In software, some developers take up residence on planet architecture, an otherworldly place where software is eternally planned and discussed but never actually constructed. Having endless discussions about software in a conference room or mailing list feels like useful work-- but is it? Until you've produced a working artifact for the rest of the world to experience, have you really done anything?

To be honest, this is not just an architecture or development thing after all. This is a huge problem even with Leadership, Quality Assurance, Entrepreneurship, Documentation, Marketing or virtually any field that you can think of. Even genuine management is much more about getting things done than it is about talking. It is about empowering people rather than just sitting in meeting rooms and discussing how things 'aught to be'.

If you find folks in your organization who spend a lot of time talking about how someone should change the culture of the organization, chances are that these individuals will not be that 'someone' who ultimately changes the culture of the organization.

Ever been through a long meeting where everyone discusses how-the-morale-of-your-team-can-be-improved for hours and comes out with no resolution? Bad Management.

Want to do something real?

Send out an email asking for a small budget for Logo-ware. If you get no response, spend some of your own money to get a really small quantity of seriously appealing Logo-ware printed and give it out. Do not spend countless hours talking about the implications of giving out logo-ware how people will react to it, how much morale increase you will get out of it or if it will even work. Do it. Try it out.

And then move on to doing something else which you believe will positively impact the morale.

Do one thing at a time and every time you hear the word call or meeting cringe.

I have watched programmers, managers, business analysts, testers and even entrepreneurs and I have come to a conclusion that might seem rather strong and harsh but it is indeed true. Those who cannot do things, talk about doing them.

Focus on 'doing' and while it might seem really tempting to call all your programmers in a meeting room and start 'discussing' a serious problem, ask yourself if you can get everyone to do something about the problem rather than just 'discussing' it.

I could have said this politely and I could have mitigated my speech, but then it probably would not have had the same impact that it would otherwise have. So here is my advice for today which I hope nudges you on the path of productivity - Try to see if you can shut The F-Up and Go get some real work done.

I wish you good luck.

posted on Sunday, April 11, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, April 09, 2010

If you build software, you work in a business which is controlled by simple concrete fundamental rules which are just as real and just as invisible as gravity. That is not to say that these rules cannot be bent, bypassed or broken, but then when we are talking about breaking these rules we are either talking sweat, blood and time or we are talking simple magic. Put simply, we are either talking about taking the Wright brothers way or taking the Harry Potter way.

The Wright Brother way involves having a culture where people understand the existence of these simple fundamental rules. Then they work on a slow, steady, scientific approach to taking small steps towards twisting and bending these rules.

The 10x productivity rule for example offsets the iron triangle rule but then it takes about ten thousand hours for a developer to be able to bend the rule. No different that building a airplane step-by-step.

A good ten years of committed focus and hard work goes in. Expertise is developed, you slowly move away from typical CRUD applications and build something that is genuinely innovative.

That is when an overnight success that takes years is born.

The Harry Potter Approach on the other hand involves no respect for the fundamental rules. It typically involves a bunch of clients or managers using all their management arrows to hunt out a few Harry Potters within the organization and then hoping that these Harry Potters pull a magic trick and just get things done consistently without failing.

You know that your manager is expecting a Harry Potter when he is not 'listening' to what you are saying. Instead of realizing the practical problems and the productive constraints which force you to remove excess fluff and focus on what is important, he is busy reminding you how important it is for you to do what he is telling you to do, within the timelines in which he is telling you to do it.

What he is doing is that he is genuinely hoping you are his Harry Potter and that you can pull a rabbit out of your hat for him.

As someone who was once a Harry Potter early on in his career I have witnessed how bad pulling magic tricks in projects can hurt.

After my first successful failure where I pulled a few magic tricks, I recovered, healed rather quickly and resolved that I was not going to repeat my failure. I also learnt the finite rules that exist in the world of software development and then I set on a path to break these rules with consistent and focused commitment to at-least try to get better each day.

Personally, I do not know if I have been successful at my self-commitment but I am definitely trying to take continuous steps on the path of self development.

So as a young and budding manager, or as a regular ass-hole, as much as you hate that guy who tells you the practical realities of your business, your team's limitation or brings you face to face with realities you did not want to encounter, remember, that this is not the guy who will get your project to fail or your career to take a steep nose-dive. In fact, if you can give this guy a serious pat on his back and make him your friend, that is what you should do.

Then there is the Harry Potter who never says no, pushes 'harder' to get things done and pulls out magic tricks without any respect for real constraints that exist all around him and his team. This is the guy you need to be seriously careful of.

This is the guy who will take both you and your project down if you keep trusting him to pull his magic tricks for you.

Why Pops, you ask. What is so wrong with a little bit of magic?

Remember that magician who used to make your coin disappear into thin air when you were young? The coin wasn't really gone. It was sitting somewhere under his sleeve and the art of shitting canning things under your sleeve is exactly the kind of art and talent that you need to get your next project to fail in the long term.

So if you are a young and budding entrepreneur, vice-president or a manager, stop looking for Harry Potters within your organization and start looking for people who remind you the practical realities or rules of life and then show you how to overcome, bend or break these rules with step by step hard work, one track focus and relentless commitment.

I wish you good luck.

posted on Friday, April 09, 2010 8:36:07 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, April 04, 2010

TEDxCalcutta speaker Sarvesh Tiwari, first introduced me to the idea of Intellectual Surplus. According to Sarvesh its the part of your brain that is left un-used after you have done your days work at your organization. This is the part of your brain or your intellect that individuals often do not pay any attention to.

Given my contention, that no-body works for more than 80% of his time spent at office, the idea of intellectual surplus was something that was not just easy to understand but was actually rather simple to connect to.

If you think about it however, the idea of an intellectual surplus goes beyond utilizing that 20% of time where you are involved with doing nothing in particular.

What your brain is doing for example, when you are seated in a bus, in a subway or driving on your way to office is a classic example of intellectual surplus getting wasted. Pop in a podcast CD or MP3 and chances are that you suddenly started using your commute time to utilize, exercise or stimulate your brain a little more.

Another way to think about this concept is that you are utilizing your intellectual surplus all the time. You are even utilizing it when you are watching the newest Hollywood movie and admiring the special effects or the acting of your favorite actress. You are taxing your brain and the kind of entertainment that you pick also ends up deciding the amount intellectual surplus that you use.

As someone who finds discotheques utterly boring and an excessive dose of television utterly depressing, I've learnt that I am often fairly happy when I am using my intellectual surplus to do or build something meaningful.

Whether it is organizing TEDxCalcutta, talking at a local developer community conference, taking a knowledge sharing session at my organization or doing a blog post for this blog, I tend to fairly happy when my intellectual surplus is getting used to create meaning. For parts where my brain needs to relax I have learnt that I am way better of going on a long walk with friends or having meaningful discussions and arguments with folks I can really connect to.

The real trick is to realize that, as a developer you have this huge part of your brain which is not really getting utilized to do or produce anything meaningful. Once you have realized that sit back, relax and reflect on your day to observe how much of that intellectual surplus is being wasted on nothingness, the idiot box and insanely meaningless activities like daily commute.

Now that you have an idea of the amount intellectual surplus you are squandering away, the next step is to think on what you are going to do about it. Audio books for commute? Language classes during weekends? Take up a hobby that you always wanted to take up? Start a pet project that you always wanted to start? Do a few blog posts each week?

The choices are yours, make them wisely, but then any choice that you make will be better than not even knowing that your intellectual surplus exists and it is getting wasted every single day of your life. Go make a choice and utilize that part of your brain that was often wasted gazing out of the bus window on your way to commute or watching an utterly depressing and boring television program.

I wish you good luck.

posted on Sunday, April 04, 2010 9:51:01 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, April 03, 2010

In my earlier posts I gently nudged young and budding developers to be there and not evacuate the pond when boulders are getting thrown at it. Feel the ripples, deal with the pressure, get your work done and while you are at it, also try and have some fun.

Of the many reasons why staying the pond when boulders are being thrown at it, one of the most important reasons can be explained in one word: cover-fire. Cover-fire is what I do when my manager hints at the fact that I am running slow on a project. Cover-fire is when I know the fact that Jack is not in the flow and isn't shipping but I decide to keep my gob-shut and not explicitly mention that during the discussion with my manager.

As members of the same pack we tend to give cover fire to others in the pack. The cover fire is based on trust that has been developed over time. It is also a personal thing.

You know Jack has a problem on his family front, you also know that he is trying his level best, he is showing up, he is putting in his hundred percent. All he needs is some time and that some time is not going to kill the project. You decide to pull your management gun out and give Jack some cover-fire.

There are times when you know that Jane is going to propose an architectural approach that will rescue your project, but then she is not very articulate at describing the approach to the folks sitting on the other side of the table. You decide to drop in at the meeting, take sides and explain the long-term-ROI of the architectural solution Jane is proposing. The 'managementese' that most people in that meeting-room understand really well. More cover fire.

Then there are times when you receive cover fires. Remember that vacation that you took or that holiday that you took to get your personal-pet-project wrapped up. That is when someone from your team chimes in and works on getting the next sprint shipped exactly on the same day as you had planned even if you are not around. No-one misses you. You come back from the vacation only to find that everything is exactly as you would have wanted it.

That is your team giving you exactly the kind of cover fire you need and keeping you out of trouble.

Cover fires are built on mutual trust, respect and an unspoken pact that if you are not performing to the best of your abilities, you will revive, recover and come back soon. When people you work with understand this about your work ethics, you are what I call, cover-fire-worthy.

You live up to that trust and respect by honoring that pact. By getting back in the flow and helping the team move forward.

Of the many situations where you lose your cover-fire-worthiness one is when you break the trust and respect that was causing your fellow programmers to give you the cover fire in the first place. Take cover fires for granted and be rest assured that you will find yourself smack in the middle of the battle field all alone.

You also typically tend to get lesser cover fire when you are constantly not around when your fellow programmers need you. I have seen this theme over a dozen times in my life. I have observed it rather closely and I think I understand how a team of seriously kick ass developers works in times of crisis. Take a team of kick-ass developers when every team member is closely knit with another and put them in a crisis situation.

Chances are that you will see very little finger pointing. Problems will be discussed, ideas will be brainstormed but no specific names of developers causing delays will come out during management meetings and status calls. You will never hear Jane saying for instance, that the project is late because Jack is not doing his work as quickly as the team expected him to do it. In fact, you might actually see Jane defending Jack.

Now, get Jack to go to a few parties with friends when the entire team is struggling and getting the sprint out or keeping the sky from falling. Then get him to turn his cell phone off. Do this a few times over and what you have done is shattered Jack's cover fire worthiness to pieces. Now do a management meeting and chances are that you will hear a couple of developers hinting that Jack is causing the sprint to get delayed.

What is going on here is simple. The team is booting Jack out and refusing to give any him cover fire primarily because they know that Jack is no longer cover fire worthy.

If you are a young and budding engineer doing your job, kicking some serious ass with your programming skills and moving up the corporate ladder of promotion watch your cover fire worthiness very carefully because everyone needs cover fire once in a while and if you have lost your cover fire worthiness, you are going to have some seriously difficult battles up ahead.

Cover fires are good and if you see someone in your team who genuinely needs them, go ahead and give them some. On the other hand, if you notice someone losing his cover fire worthiness or taking your cover fires for granted, look at him in the eye and tell him he is losing the trust that made him a kick ass programmer in the first place. This is one issue you are way better of confronting rather than avoiding. Go ahead, talk about it, openly and candidly.

I wish you good luck.

posted on Saturday, April 03, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, April 02, 2010

Jack is a seriously kick ass programmer who gets his job done. He is not a hard worker in the conventional way but he works smarts. Put really simply, he gets things done.

Over a period of a couple of years he climbs the steps of promotion and becomes an integral part of our core product development team. Every single one of us respect him for the volume and the quality of work that he puts in. For some of us, over a period of time, Jack seems to have become a the rock-star problem solver of the team and we find ourselves depending on him every time a particular kind of problems need to be addressed.

But then as the sky starts to fall, I notice a tiny-fundamental problem with Jack. The first time I see it, I ignore it as a lousy co-incidence. Maybe I am just being paranoid. Maybe it was just bad luck. The second and the third time I see it, the problem worries the heck out of me.

Jack, as it turns out, has the habit of moving out of the pond every time a stone is thrown at it and ripples are formed. Michael Lopp describes the idea rather articulately. He explains:

When I think of communication in a large group of people, I imagine a pond. Small, round, slightly green water. You can see the edges of this pond and there’s a willow tree over there looking both informed and sad. Metaphorically, all the people in the organization are standing somewhere on this pond. Our positions are based on whom we know and where we are in the organization chart. When something happens in the company, when something noteworthy is said, a drop falls in the pond and creates a ripple.

The ripple is the piece of information traveling from one person to the others. Big drop, big ripple… travels further.

With me so far?

There is a constant flow of information in your company. That means there are constant drips in the Pond, creating various-sized ripples traveling every which way, bumping into each other, and transforming each other into slightly mutated ripples. These mutated ripples are the rumor mill, gossip, and all those small pieces of slightly bizarre information that cross your path during the course of the day.

If you’re in the Pond, you’re gathering data, whether it’s intended for you or not. It’s inevitable. It’s what we do as curious humans; we receive information, digest it, alter it, and then send it on its way tweaked to our own personal wavelengths.

A remote employee is not in the Pond. Yes, he’s on the mailing lists and he aggressively updates the wiki, but the subtle, unintentional, tweaked, quiet information that is transferred throughout the Pond doesn’t leave the Pond.

Ripples are getting formed all the time. Then there are also boulders, both big and small ones being thrown at the pond and your job as a team, is to deal with those ripples and boulders without switching to the panic mode or doing something stupid like killing each other or more specially, without getting each other fired.

Not being around when the ripples are formed is not just a problem with someone who works remote. It actually a bigger problem when someone who works with you actively chooses to move out of the pond every time a ripple is formed.

If you want a really hip and enterprizy way of describing the process of moving out of the pond, you can describe yourself as someone who acts professionally and keeps your personal life separate from your work life. Which effectively means that if hell breaks lose after six and the entire team is struggling to fix a bug in production you not just decide to leave but actually turn your cell phone off so that you cannot be disturbed.

That is you acting professional. But then, any programmer, manager or leader worth his salt will tell you that there most things that decide your career path or your organizational culture chart, are not professional. They are insanely personal.

If you are a young and budding programmer on your way to becoming someone who people will eventually look up to and if there only one advice that I can give you from all that I have learnt out of my professional life, it would be this -  when the sky starts falling, don't run away, don't disappear and cancel your personal parties if you can. When someone in your team or your organization needs you, show up. Consistently.

You may not be the best developer in your organization, but if you are dependable, people will depend on you.

On the other hand you might be the best developer in your organization, but if your team cannot depend on you to be around when they need you the most, chances are that they will not give a rat's ass to your talents very soon.

So the next time your personal life calls and your team is out struggling to keep the boulders off the pond, the least you can do for them, is leave your cell phone on, walk out of the party and take the call if they need your help. Or better still, go ahead and reschedule the party if you can. Be approachable, be dependable and above all, be there when people need your help because that is what makes you special or wanted.

I wish you good luck.

posted on Friday, April 02, 2010 9:00:00 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, March 27, 2010

While organizing TEDxCalcutta I received tons of phone calls and emails asking me if there was a dress code for the event. With that question, what people were really trying really ask was this: Is TEDxCalcutta a suit-and-tie event or is it an event where you are allowed to be yourself and wear what makes you comfortable.

For us, personally, it was really important that the answer was later. The best events are where people look at or get inspired by your ideas and personality, not your dress code.

But then this was not the first time that we were hearing the whole dress code question. I have had the pleasure of facing and answering this question on multiple occasions, starting from my early days at Multiplitaxion Inc, where one of my early managers had actually insisted that I stop wearing slippers or floaters along with casual t-shirts and jeans to office, only to receive a polite but an out-rightly-flat 'no' from my side.

To be honest, it did feel a little scary to say no at first, but then, I figured that I was way better of saying no and being myself rather than spending eight hours a day being someone who I was never meant to become.

A casual, informal dress code that makes you feel comfortable and lets you be who you are seems to have become such a rare thing that companies like vertigo actually mention it as one of the intangible employee benefits. Placed smack under employee benefits section of the vertigo website are words which are both interesting and funny: 'Acceptable office attire includes shorts and t-shirts; unacceptable office attire has yet to be identified'.

Personally, I seem to consider myself really lucky to have been employed in a work environment where we do not waste hours talking about the dress code and most people come to office in jeans, t-shirts or any attire that make them comfortable. Yes, we do have a manager or two who would be bothered by someone wearing a pair of jeans to work, but that overall thought process is on its way to a slow, painful extinction and that to be honest, is a good thing.

The point of the post is not to tell you that suits are bad. If they make you feel at home and if you like them, by all means, go ahead - indulge yourself. If you are not comfortable in them, wear what you are comfortable and at home in.

As long as you do not end up embarrassing others and can carry yourself well, wear what makes you feel at home and settle down. Focus on your overall personality, ideas, work and what you bring to the table rather than being overly conscious about what you are going to wear to your next client meeting.

Be at home. Work hard. Focus on consistently giving your clients a kickass product that simplifies their life or brings a smile on their face. Give them the best of the products that can get and then if they cannot stand your pair of jeans or the fact that you do not wear a tie to meetings, they are just going to have to deal with that.

I wish you good luck.

posted on Saturday, March 27, 2010 9:00:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, March 26, 2010

Honest confession about my professional life: I am not the best programmer out there. To be honest, I am not even the best of the programmers to exist in the team of programmers that I work with. In fact, most programmers I help are already way better programmers than I am. The problems I have been playing with tend to be way bigger than what a programmer of my caliber usually ends up playing with.

Most of the times when I am giving a training session within my organization or to an external group of developers and I see eyes staring at me almost as-if I am this super-alpha-geek who know so much, deep down inside, I know really well that it is not the 'knowing so much' that is making my presentation tick. It is the articulately explaining what I know with a hugely different perspective that is keeping people's asses glued to their chair.

Then every once in a while, during these discussions or training sessions, depending on where I am conducting them, absurdly strange but rather funny and appropriate analogies will come out of my mouth. I will come out and pass random but relevant statements which were heard years ago or which are just formed at the runtime.

Things like, 'exchange of ideas and excessive dose of inspiration is nothing more than masturbation for your intellect' or 'knowing what interfaces are, is like knowing what sex is; truly realizing what they are and using them is what I call loosing your programmer virginity'.

Maybe this explains why Scott Berkun's video on Attention and Sex is one of my favorite videos on the topic of multitasking.

When it comes to technical discussion, maybe it is the philosophical, psychological and sometimes event the down-right weird perspective of looking at things which my mind tends to deploy, that comes to my rescue.

Maybe there is nothing very 'technical' about my 'technical' presentations after all.

When it comes to my work life, I tend to get approached by seriously kick-ass programmers who are looking for solutions to complicated problems. Or should I say problems begging to be solved with a really simple solution that no one seems to be thinking about. People also tend to come to me with problems that do not require solving in the first place. Problems where no one has even asked why the problem needs solving before they got down to solving it.

Maybe the techniques that I employ to solve the most 'technical' of the problems that I get approached with, are also not that 'technical' after all.

As someone who is a programmer at heart, a huge part of my programming life has been about realizing that programming languages are means to express your intent and while it is important to become really good and articulate at expressing your intent, working on having a really interesting intent in the first place is also equally important.

Even this blog, is my humble attempt at asking the questions that I would have otherwise never had the time or the spine to ask. Why for example, is using the F-word in a meeting considered so very sinister, why do you really need more features in an application before you go out to sell it, why is it so bad to suck at things and a truck load of other questions that I was never allowed to asked during my painful school life.

School taught me that being weird or different was a bad thing.

But then, I became a programmer early on and started doing a full time job while doing my college. What I learnt from the very first day of my very first job was that you actually got rewarded for being different. Since then, a huge part of my life has been about realizing that it was ok to be a purple cow at heart. That being a purple cow was in fact a good thing and it did not require fixing.

As a matter of fact, for months now, I have been consciously keeping some time every week to exercise my brain and allow it to wander into unchartered territories. I am not so sure you realize it, but I am doing it right now as I flip the keys on my keyboard and try to bring this post to life.

To a young and budding programmer who might be reading this, or to a veteran programmer who might be too busy building enterprise applications and who might be skimming through this post,  I leave you with a gentle suggestion: As you pick up programming languages, tools and technologies, be sure that you set some time aside and that you spend this time at becoming the best purple cow that you can become.

I wish you good luck.

posted on Friday, March 26, 2010 9:00:00 PM UTC  #    Comments [2] Trackback
Posted on: Saturday, March 20, 2010

As developers who believe in participating and contributing one of the things that I do often is tweet using Tweetdeck

As much as I love Twitter and Tweetdeck, one of the things I find deeply painful is keeping Tweetdeck or any twitter client open as I work. I have tried it over a zillion times now and if I have Tweetdeck or for that matter any twitter client open on my desktop I just cannot seem to get anything done.

It is the very core of the twitter design, the very thing that makes twitter tick that starts playing against you when you are trying to focus on a piece of work and get it done while keeping a twitter client like Tweetdeck open.

At the very core of the twitter design lies a fundamental component that makes twitter tick and makes you addicted to it: your ego.

Human beings by their very nature are playful beings.

We love playing and above all we love the idea of winning.

Winning allows us to feel good about ourselves and pampers our self-ego.

What twitter allows you to do through its one-forty-character-long-text-box and showing you your twitter mussel power on your timeline dashboard, is that it allows you to take a shot at the game of finding one more follower. You post an random tweet and if someone is searching the topic, likes what you say you get a plus one on your follower count. A minor boost of self-ego.

Of all the reasons that we tweet, one is that tweeting is almost like gambling where your prize is new followers.

Every time you do not have a meaningful insight or a meaningful piece of information that just has to be shared with the world and you go ahead and decide to tweet anyway, all you might be doing by publishing a tweet is taking a shot at the twitter-slot-machine where the reward is a bump-up on your follower count.

Stop playing the twitter-slot-machine while you are trying to get a focused piece of work done. In fact, I may even go so far as suggesting that you stop playing the Twitter Game all together and go tweet about something meaningful.

I wish you good luck.

posted on Saturday, March 20, 2010 8:45:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, March 19, 2010

After weeks of deliberation we have run out of time. Decisions are being taken, things are moving and work is getting done – really fast.

What had taken us three weeks to discuss is getting built in less than a week. What seemed hugely important during deliberation sounds utterly useless now. Priorities are changing. People are focusing on the right things and they are not wasting a lot of time, talking.

When that happens you know - It is the last hour.

The last hour is the time when you start running out of time. It is the time when you stop, take a gasp and you tell yourself – “shit, there is no time left!”

You are scared.

You are holding your ground.

Things are getting done.

Last hours are tremendously productive times. The good thing about them is that they test your limits. They provide you with some real constraints to work with and constraints are good.

Think of last hours as an exhaustive exercise for your brain. Too little of it, makes your brain weak. Too much of it can push you into a fire fighting mode.

Last-hours are often also an indicator that you are doing something new, or at-least something that you have not yet become very good at doing.

If you have never faced a last hour, chances are that you are playing it safe.

If you face too many of them you might be working in a reactive mode.

So, if you have just come out of a last hour and it made you stronger, smarter or wiser, pat yourself on your back. Then go and work harder so that you do not face another last-hour. Well, at-least not when you do the same thing next time.

I wish you good luck.

posted on Friday, March 19, 2010 10:59:27 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, March 14, 2010

Jack has been having a hard time in his personal life. Its been days since he been able to ship anything. I am worried. Not because of the fact that we would miss out on a timeline or because the project would slip.

None of that worries me.

The project is fully covered either ways.

Yet there is something about Jack not shipping for a long time that bothers me.

I decide to leave Jack alone for a while, waiting to see when he would be fully back instead of rushing to take his band-aids off.

A week later Jack approaches me. He wants to take over a new module and start working on it.

What makes my day is the fact that Jack is thinking of shipping again. He is back to doing what he is most known, liked and respected for doing in the organization. Soon he is shipping again. He is picking up the hardest of the problems and then getting them done.

But there is still a small gripe that is bothering me deep down inside as I monitor the check-ins on a pet open source project Jack had been working on for two years.

Nothing.

A couple of weeks later however, I see a new post on Jack's blog and a new check-ins on his open source project.

Jack is his usual self again.

I heave a sigh of relief.

Not because Jack is doing his job again or because he is contributing towards the project again, but because smack in the middle of work and personal problems Jack did not give up his commitment to his pet project or or his blog which was making him the kick-ass programmer he was. He is back in no time. He is participating and contributing, again.

While Jack's story has a happy ending, every once in a while, I see programmers, budding entrepreneurs and even bloggers go down the path of a personal or professional tangent so much so that they switch to a do-my-job-and-nothing-more mode for weeks, sometimes even months at a stretch.

The problem with pet projects, blogs, talks that you do at developer conferences and training sessions that you conduct in your organization or your local developer community, is that these are things you do not get paid for. Your immediate life, does not depend on these things and because you see no direct impact of stopping these things, they are the first to get impacted every time you get the smallest hit on your personal or professional life.

You have a really difficult project at work which is keeping you busy for ten hours a day. Why not just stop working on your pet project and focus on work?

You are having a small fight with your girl-friend. You don't feel like blogging about software development right now, do you?

Going on a holiday this weekend. Your blog can wait till next week, can't it?

Wrong decision.

What most developers around the world fail to realize however, is that as a developer, you are not just shipping within your organization. There is a different category of work and shipping which you do that ultimately defines who you are or who you become. These are those concrete, tiny, small deliverables that you ship to your people. Your tiny community. People who hang around in the same third place as you do.

These are those deliverables that rest on nothing more than a thin string of personal commitment. Deliverables that ultimately help you form your weak ties,  deliverables that land you with job offers and most importantly deliverables that help you learn from the best of people out there, overcome your insecurities and become a better programmer, even in your work life.

The next time you have a minor digression, in your work life or professional life and you feel like stopping work on your open source project or not sticking to your blogging schedule, remember that these activities are just as important as your going to work every morning.

If you can go to office and work, your digressions or your problems are probably not big enough for you to stop shipping outside of your work life.

Whether it is work connected to your work life or outside your work life, as far as you can, always be shipping.

We know you because you ship. The day you stop shipping for long enough, we might stop caring about you, your blog or your product.

Yes, of course we know your cat is sick and you need to take it to the vet this weekend, but we are still expecting you to stay up a little late and do that blog-post or that check-in to your pet project. Now, go pick a schedule for blogging or a schedule for checking-in to your pet project and be honest to yourself about trying really hard to stick to it.

I wish you good luck.

posted on Sunday, March 14, 2010 8:30:00 PM UTC  #    Comments [2] Trackback
Posted on: Saturday, March 13, 2010

Jack in engaged in a deep conversation with his manager. The topic of the conversation is hugely stereotypical. Here is the story so far: his manager wants to know how much time a module will take to build, Jack has given an estimate, his manager is a little surprised and has asked him why it would take that much time. Jack is giving explanations and his manager is giving counter arguments on the but-we-already-have-that-code-in-a-different-module line.

The scene should have resembled exactly the kind of haggling that you would need to do in an Asian or Indian fruit market.

But sadly enough, it just resembles something I have seen so often, that I don't even find it remotely funny.

Every other day I see countless young and budding developers cribbing about how their manager does not understand their problems and does not give them enough time to get things done. Then I see the same developers struggling day and night till they emerge victorious as undefeated heroes who saved the day for the organization. 

As a developer, if you have ever allowed your manager to get into a haggle mode with timelines you have made three classical mistakes which will just make things worse moving forward.

Firstly, you have told your manager that you are not sure of your own velocity and that its OK to haggle.

Secondly, if you have compromised or changed your schedule (even by just a couple of days) you have actually told your manager that haggling helps. You have told your manager that you are typically the kind where it requires 'pushing you harder' to get things done.

Thirdly, if you have managed to complete everything you were supposed to in the newly haggled time frame, you have reconfirmed your managers belief that he was right in pushing you a 'little harder'.

Next time, before you see a negotiation meeting coming, think hard on the estimates you have given. If you have unrealistic estimates behave with integrity, fix them before you attend that meeting and send them over to your manager. If however, you believe that you have realistic estimates and that you are doing all you can to get a quality job done, have the spine to say 'no' to haggling. 

Realistically, finding yourself in a situation where the sky is falling, once or twice is unavoidable. Having said that, if you find regularly yourself working in a fire fighting mode and the reason is haggled deadlines, chances are that you are not acting responsibly and you do not have the spine to say no.

When you allow haggling over timelines, you reconfirm was your managers belief that if he gets you to a meeting-room and uses all the arrows in the management quicker, he can get you to perform magical acts which you otherwise do not perform.

Next time you find yourself haggling over timelines, do some soul searching and ask yourself if you are doing all you can to get the release out without impacting quality.

Are you behaving with integrity and already putting in all you can?

If the answer is yes, don't be bullied or intimidated and have the spine to say no to haggling.

I wish you good luck.

posted on Saturday, March 13, 2010 10:48:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, March 12, 2010

If you read this blog you have probably seen me cite Steve McConnell mention that optimism is one of the biggest reasons for projects failing in the software development world. You probably have also seen me mention that I am basically a pessimist.

Jokes apart, I do not truly consider myself a hardcore pessimist. What I like doing however, is listening to the critic inside of me. Michael Lopp explains this thought approach rather articulately in his legendary book, Managing Humans. He explains:

This is your internal voice, which does careful and critical analysis of your life, and he’s gained a powerful place in your head because he’s saved your butt more than once.

He’s the one who told you that offer from the startup smelled too good to be true. You remember that company, right? The one that simply vanished three months after you declined that stunning offer letter. It was the Critic who said, “How in the world can they afford to give anyone this type of offer when I don’t even understand their business model?”

The Critic was the one who calmed you inner nerd and convinced you to not buy HDTV three years ago, and he told you not to trust that fast-talking engineering manager who emphatically guaranteed his team would be done on schedule.

The Critic said, “People who talk fast are moving quickly to cover up the gaps in their knowledge.”

The Critic was right.

If you have ever worked with a team when the sky is falling you probably know that the first part of the deal with getting out of the shitty situation is that you do not panic.

The second part is weaving an inspirational story which you yourself believe in and then telling it to your team. Its the absolutely amazing inspirational pep-talk that you see in Hollywood movies after which the team goes out and wins the game. 

Its the third part that is actually more tricky. While your entire team is pepped up and working the third part involves listening to the critic within you when he starts calculating the possibility of your team not being able to make it in time.

It is your critic who nudges you to start thinking of alternate ways of getting out of shit.

It is your critic who tells you to start talking to the customers in advance and let them know that the cute user interface you promised them is not going to be a part of the next sprint.

It is your critic who tells you to start talking to the right people in the culture chart and tell them that you might be missing out on features in the next release.

It pays to listen to your critic, because when Jack comes to you a day before the release and tells you that the last three items in the backlog might not ship, you don't give him that intimidating look. Instead, you smile back and tell him it is not a problem at all.

Your critic can be really helpful at times.

When it starts mumbling in its usual soft voice, it is time to shut up and listen.

I wish you good luck.

posted on Friday, March 12, 2010 10:55:02 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, March 07, 2010

Have you ever sat in one of those meetings where really senior people get together and scratch their heads on aligning the organization under one process? If you have, then chances are, you know what trying to create an army of clones feels likes.

Every now and then I see countless young managers and even budding entrepreneurs of startups make this mistake.

Here is how the story typically unfolds:

During the early startup days of the organization a team is usually seen as out performing. Members of the team and the team as a group seems to stand out. Very soon the team seems to have everyone's attention and anything that they work on seems to get done successfully.

This is when the managers in the organization get together in meeting rooms and start asking each other questions like - Can we not have all other teams in the organization replicate this process and achieve success too?

Asking this question, dear reader, is a big fat mistake that even I, in my early management days have been guilty of. As it turns out, there are multiple issues with trying to replicate success using one standard process across the organization. 

For starters, this approach is flawed because while you are trying your level best to copy the process and everything else that the successful team is doing, you can hardly replicate their secret sauce or their flocking patterns. Both the culture and the flocking pattern of the team is usually the hardest to copy because it is based on silent, subtle, unspoken factors like respect and mutual trust for each other.

Secondly, a successful team is constantly morphing. Which means that by the time you get to copying it, the team has already morphed and discarded its older practices and processes. One example that instantly blazes through my mind and I write this, is my experience with Agile. 

As a team, a bunch of developers and I were the first at Multiplitaxion Inc to adapt agile and swear by it. But then, by the time the decision to copy and replicate what was working for us over to other teams was made, we were actually done with using Agile by-the-book on our project.

We had stopped having daily scrums. We did not need them.

Communication was flowing freely and lucidly throughout the entire team and daily scrums had been replaced with random coffee breaks where team members were discussing the backlog items. The items were also getting closed. When people wanted help or were getting stuck they were just getting up, walking over and asking for help. Everyone knew what the others were working on and code was truly becoming a shared asset for us.

We, as a team, had morphed before we could be replicated and copied. Clearly, it was not just Agile that was making this team tick. It was their ability to form a creed that had to be copied here and that in essence is not an easy thing to replicate across teams.

Thirdly, when you copy and replicate a process or a team across the organization you close your eyes to other processes and approaches to success. Yes of-course something works, but then something else could work even better. Allow each team to take their own approach. Allow each team to encounter their own set of failures. Allow each team to address their own issues in their very own personal ways and if they cannot, help them.

Remember each team is different. Some are more professional then the others. Some have a strong personal touch element that glues them together and some even have political aspects built right into the core of the team.

Your first responsibility as a manager, leader, entrepreneur or whatever it is that you call yourself, is to accept this diversity. Once you have done that, utilize their strengths and even their weaknesses without constantly feeling the need to change them into one big army of clones.

Embrace diversity and allow your teams to take their own approaches. Let them stumble, fall and recover. If the team consists of kick-ass developers who know what they are doing, they will figure it out, eventually. If you are stuck with incompetent idiots, no amount of replication or process will work anyway.

Go ahead, let them figure out their own problems, work on their own chemistry and form their own approaches to solving problems.

I wish you good luck.

posted on Sunday, March 07, 2010 8:30:00 PM UTC  #    Comments [2] Trackback
Posted on: Saturday, March 06, 2010

Jakob Nielsen in his classic article on participation inequality describes what he calls the lurker's pyramid using this simple diagram:

Even more depressing than the diagram, are the statistics that Jakob provides in the article. He explains:

There are about 1.1 billion Internet users, yet only 55 million users (5%) have weblogs according to Technorati. Worse, there are only 1.6 million postings per day; because some people post multiple times per day, only 0.1% of users post daily.

Blogs have even worse participation inequality than is evident in the 90-9-1 rule that characterizes most online communities. With blogs, the rule is more like 95-5-0.1.

Inequalities are also found on Wikipedia, where more than 99% of users are lurkers. According to Wikipedia's "about" page, it has only 68,000 active contributors, which is 0.2% of the 32 million unique visitors it has in the US alone.

Wikipedia's most active 1,000 people - 0.003% of its users - contribute about two-thirds of the site's edits. Wikipedia is thus even more skewed than blogs, with a 99.8-0.2-0.003 rule.

Participation inequality exists in many places on the Web. A quick glance at Amazon.com, for example, showed that the site had sold thousands of copies of a book that had only 12 reviews, meaning that less than 1% of customers contribute reviews.

Furthermore, at the time I wrote this, 167,113 of Amazon’s book reviews were contributed by just a few "top-100" reviewers; the most prolific reviewer had written 12,423 reviews. How anybody can write that many reviews - let alone read that many books - is beyond me, but it's a classic example of participation inequality.

As programmers like to think of and fantasize about the web as this amazing medium of delivering content which allows two way communication. We go out an pass generic statements, like 'today anyone who wants to make a difference can make a difference' and then we go out there an nudge the lurkers and the leaches to come out and participate.

Jackob however has a different opinion. Instead of trying to alter the basic behavior pattern of a lurker, Jakob suggests a variety of techniques for getting feedback from lurkers in the article. Some of these techniques are really interesting. Think of the people-who-bought-this-also-bought-Amazon-feature for instance, where the mere behavior of the lurker: the act of buying a book for instance, actually acts as a feedback for others. Smart.

You may not be able to change the fundamental behavior pattern of a lurker overnight just by nudging him to participate or contribute. You might be able to make him publish a blog post or have him comment on one, but be rest assured that if you are targeting a lurker and expecting him to change he will hide back in his cave again, faster than you can think.

It is a painful reconciliation and an insight that you gain with time, but irrespective of what you are trying to do, building a community, promoting a product, service or an event, your only chance of converting lurkers into participants is by letting them hang around, making them comfortable, making them believe that no-one is watching them, making it really easy for them to get involved in tiny little ways if they want to and most importantly, having them keep coming back.

If they do stick around for long enough or keep coming back every now and then, chances are that some day, you might actually touch them, connect to them or even rub them the wrong way. This is when they might slowly and reluctantly take the leap from being a lurker to an occasional contributor.

If you are reading this and you are a lurker who has never commented here, it's okay. Just keep coming back and some day, we just might 'connect'. Some day we might have a discussion over a blog post that inspires you, moves you or maybe just pisses you off really badly.

Till then, happy lurking.

I wish you good luck.

posted on Saturday, March 06, 2010 8:30:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, March 05, 2010

Jack had taken three rounds of convincing before he agreed to show up at a meeting. Now as we sit there and watch people talk about the insignificantly stupid things like building a uniform process for improving developer productivity, I can here the clicks and ticks of Jack's keyboard.

A few of us decide to peek into his monitor to see what he is up to. Jack has picked up a small class in his project to refractor, has disconnected from the meeting and has decided that he is going to utilize the magic minutes we are whining away doing nothing in the meeting.

It is almost as if Jack is alone in the room and the meeting or all of us do not even exist.

What all of us, other than Jack, are doing in that meeting however is what Seth Godin, in his post, refers to as modern procrastination. Seth explains:

The lizard brain adores a deadline that slips, an item that doesn't ship and most of all, busywork.

Laziness in a white collar job has nothing to do with avoiding hard physical labor. “Who wants to help me move this box!” Instead, it has to do with avoiding difficult (and apparently risky) intellectual labor.

"Honey, how was your day?"

"Oh, I was busy, incredibly busy."

"I get that you were busy. But did you do anything important?"

Busy does not equal important. Measured doesn't mean mattered.

When the resistance pushes you to do the quick reaction, the instant message, the 'ping-are-you-still-there', perhaps it pays to push in precisely the opposite direction. Perhaps it's time for the blank sheet of paper, the cancellation of a long-time money loser, the difficult conversation, the creative breakthrough...

Or you could check your email.

The key insight here is that most of our days, these days are not made up of long work hours. They are in fact made up of magic-minutes sandwiched between reptilian lizard brain grunt work that keeps you busy with nothingness

How you disconnect with this nothingness and make the most of these magic minutes ultimately decides how much genuine work you can do on any given day. I am not talking about multi-tasking here. What I am talking about is totally disconnecting from what does not matter to you and utilizing minutes of nothingness on things that matter.

Go ahead, download that podcast on programming or that audio-book and listen to it while you are whining your time away on a cab, bus or car to office. Keep your list of small-classes-that-need-refactoring ready and work on a class in a meeting that is becoming excruciatingly boring.

Go utilize those magic minutes and go get something done.

I wish you good luck.

posted on Friday, March 05, 2010 7:00:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, February 28, 2010

Jack just earned a promotion. A rather well deserved promotion it is. I hand him a promotion letter. He turns around and thanks me deeply for it. The Thank-You is not a causal, thank-you-so-much kind of a thank-you. It is an intense, deep thank you.

I cringe.

I am in a serious problem. A problem I which I refer to as the in-the-frame problem.

After a year of hard work, effort and his very own good luck, Jack has just won a gold medal. Suddenly, for no particular reason I am in the frame of the victory photograph as someone who is responsible for the win. Suddenly I am on the spot as someone who is awarding him his medal.

It sucks being held responsible for Jack's effort, hard work and luck that ultimately got him the promotion.

Most young and budding managers that I worked with in my early life as a developer, loved being in-the-frame when the victory photograph was being taken.

During my career, I have seen managers who will go out of their way to push themselves into-the-frame. Managers who will go so far as politically remind team members how hard they recommended their promotion and how hard they worked to 'convince' the folks high up in the pecking order before the promotion was granted.

I have also seen a few who will go so far as reminding you that their recommendation had weight and impact on the promotion decision that was much more than your own effort, hard working, timing and luck.

You got the monkeys out of their path, you kept them away from long winded meetings, you mentored them and you got them to flock together. Most young managers tend to think of themselves as the captain of the team and when the team is being awarded the gold medal it is but natural for the captain to be in-the-frame of the victory photograph.

Right?

Actually, wrong.

This is a lesson that most managers around the world find it hard to reconcile with. It took me years of working with multiple teams to understand this and I; dear reader am going to let you on this dark leadership secret that you may not find very amusing. It might make you feel hugely insecure at first. Understand it well, and it help you go a long way.

This same secret might actually help you build lasting teams that are not just effective but really good as sustaining themselves in your absence.

Ready? Here you go: Your job, primarily revolves around hiring and placing the right person for the right job.

If you have hired a seriously kickass team chances are that they will kick ass. Don't get me wrong. All your pep-talk, one-on-one discussions, getting the shit out of their way and all your mentorship does make a difference but what I am here to tell you dear reader, is that maybe, just maybe all that is not enough to make a difference between whether a team succeeds or fails in the long run.

Besides, if you are doing your job properly, chances are that your team is not even finding out about the colossal f@#k-ups that your organization and team is avoiding because of your work.

Your reminding the team what a great father figure you have been and trying to butt into the frame when the victory snap is being taken, will definitely not make you a successful manager. It will just show your insecurity as a manager and demonstrate weak leadership on your part.

Next time you are giving out a promotion letter and you get a sincere deep thank you, give an equally sincere reply and let Jack know that you had nothing to do with his promotion. It was his own hard work, effort, timing and luck that did the trick.

Next time the victory picture of your team is being taken, try standing on the last line instead of the first. May I suggest that you try moving out of the frame completely. In fact, try being the guy who is taking the picture and take the best freaking picture you can take.

I wish you good luck.

posted on Sunday, February 28, 2010 8:59:00 PM UTC  #    Comments [1] Trackback
Posted on: Saturday, February 27, 2010

During the development of Crux I was in the flow or as many would say, I was in the zone. focused and getting things done.  I was productive.

Being in the flow is an amazing feeling. You are working with one sighted focus. Without worrying about other problems of your life. You are consumed with a problem and you are in a state of mind where answers are flowing through you without a lot of conscious effort. You are learning effortlessly, you are stumbling across answers, you are productive and you are getting things done fast.

But then, there is another flow or zone that is often not discussed or talked about. Here is what that zone looks like:

You have a late night status call hangover, you struggle to reach office during mid-afternoon only to find a truckload of emails in your inbox. You browse them, give a reply to a few of them.

Very soon your phone starts ringing. It is the calls again. A couple of development teams want your time.

You promised Jack you will sit down with him, review that application he has been working on and give him ideas. A couple of developers are fighting over a stupid issue and you need to take them in a room and talk.

Time is flying again. You are busy. You are doing things which 'seem' important. You are juggling tasks, you are talking, you are supposedly giving a direction to the team and you are managing human beings. It feels like you are in the zone again.

There is only one problem however - you are getting nothing done.

You, dear reader, are in the zone of nothingness.

In fact, the zone of nothingness is not just a manager thing. It impacts programmers as much as it impacts managers. What Joel Spolsky describes in his article on fire and motion is a classic example of someone being in the zone of nothingness. Joel explains:

Sometimes I just can't get anything done.

Sure, I come into the office, putter around, check my email every ten seconds, read the web, even do a few brainless tasks like paying the American Express bill. But getting back into the flow of writing code just doesn't happen.

These bouts of unproductiveness usually last for a day or two. But there have been times in my career as a developer when I went for weeks at a time without being able to get anything done. As they say, I'm not in flow. I'm not in the zone. I'm not anywhere.

The scary thing about this zone of nothingness however, is that much like the flow of productivity, even here, time flies faster than you think it does. There have been times in my life where I have snapped out of something that looks like flow, only to realize that I have wasted weeks and have been able to get nothing done.  As of today, If there is one thing that scares the heck out of me and depresses me more than anything else, it is the zone of nothingness.

Having said that, every now and then, even today, I see countless developers get stuck in the zone of nothingness and then desperately hoping and relying on their organizations to get them out of it.

If you are a young and budding developers or a manager, relying on your organization to keep you out of the zone of nothingness, chances are, that more often than not, you will be disappointed. If you are serious about not letting those hours whine away only to leave you with a weird guilt and hangover later, might I suggest that every time you find yourself in the zone of nothingness start by making your life as difficult as you can. You can start by:

  1. Committing to speak at a local developer conference that might be getting organized in your area next week or consider announcing that you will be conducting a training at your office.
  2. Committing to an open source project or a personal project like writing a book or a specific number of blog-posts a week and announcing this commitment live publicly. 
  3. Committing to organizing a community event and publishing the event date live.

There are countless other ways to shake yourself out of the zone of nothingness but the key here is to build an environment around you where you cannot help but jerk yourself out of the zone of nothingness.  A public announcement or promise of getting something done where you ego is at stake often does wonders at shaking you out of the zone of nothingness.

Next time you find yourself doing nothing and weeks are flying by, go ahead and make a public commitment of getting something done. Go put yourself on the spot. Chances are that you might be able to shake yourself out of the zone of nothingness and experience the amazing productive flow again.

I wish you good luck.

posted on Saturday, February 27, 2010 9:00:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, February 26, 2010

Jack sits on the other side of the table with a serious face and heavy eyes as he talks about how he has been trying everything under the sun to get management to care about his project. He is raising legitimate complains about his project not getting any love, attention or energy from the organization.

I play around with his product.

Brilliant idea.

Interesting execution.

Within minutes, I notice that his product has all the ingredients of becoming a successful product and yet it has received very little attention outside the small team working on the product.

I sit there and wonder why no one, other than the development team working on the product seems excited about the product? And then, it dawns on me. The project, dear reader, has lost it's Mojo.

Yes, that Mojo.

The team has been struggling for months now. They are being asked to build feature after feature when any technology savvy layman who might have laid his hand on the product would have told you that the product does not need new features. It needs, packaging, cleaning, simplifying, sophistication on the user interface front, a vibrant community, a free for use business model, adaption and an entire blooming eco-system around the product.

What the product manager aught to have done months ago is blown the whistle and asked the team to stop adding features the day they released their first sprint. They should have stopped the development of new features the moment they had enough features to constitute the soul of the product and they should have focused on adding things which would, in the words  in the words of Austin Powers, gives the product it's mojo.

Things that would make the product generate awe or put simply, things that would give the product it's appeal, get the casual website visitor to watch that product video and click the sign-up button. Things that would have got the management excited about the product and got the product the love it deserved.

Every year, I stumble upon countless engineers and startups spending hours, days and months building more features into their products by quietly working in their cubical, while they keep delaying the packaging, simplifying and garnishing of the product for what they call 'future sprints'.

If you are a young and budding startup working on a product or if you are a young and budding product manager pushing your team to build more and more amazing features into the product, here is my humble advice to you:

Work on the soul of the product and get the product an execution that goes justice to the initial vision or the idea of the product.

Once you have done that, stop your development and focus on the garnishing elements which will give the product it's mojo and differentiate it from the other half heartedly baked products out there. Those bigger fonts. classy design. Ajax driven screens and all the sophisticated packaging that you can get for the product.

Once that is done, ship and make just a little bit of noise about what you have shipped. Not a lot, but just enough for a few good mavens to find out what you were working on.

If you have a product with an interesting idea, a brilliant execution, a strong appeal and a few mavens are sold on your product, chances that your product will catch on. A feature here or a feature there does not matter. Now go focus on getting your product a mojo and then ship.

I wish you good luck.

posted on Friday, February 26, 2010 7:20:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, February 21, 2010

During my early teens I found discotheques utterly confusing. If you found me at one, it was probably because friends dragged me in. Even if you were to find me in there chances were that you would find me seated in a table, scribbling a thought or two on a paper napkin and exchanging an idea admist the loud music.

For me discotheques were not fun. They were boring. Downright boring.

Then as I grew more social I cultivated a certain acceptance for discotheques and parties where people got drunk and sometimes created a ruckus. Put simply, I cultivated a persona that made me feel at home admits other drunk developers who were dancing like idiots to really loud music which made no sense. With age, my acceptance level for other people's definition of 'fun' increased.

As I entered my professional life, the number of these parties increased, the music got louder and drinks started flowing as I watched young and budding developers enjoy project parties and company picnics by getting soaked in alcohol, puke, throw up and sometimes even get into an occasional fight or two.

I still did not 'get it' but then I developed the maturity to accept it and have 'fun' watching developers getting drunk at parties and making a fool of themselves.

Even with all the growing up, the maturity and the acceptance of other people's way of having fun, there was a part of me that would often make me carry my laptop to some of these long-never-ending-parties and do a database design or write some code smack in the middle of some of these loud parties. For places where my laptop would not go, my windows mobile did the trick.

My laptop even accompanied me to most vacations.

Every once in a while however, I often stumble across a friend, a colleague or an acquaintance who sees me checking or responding to my emails in the middle of these parties or a vacation and gently advices me that I should not work so hard and in their very own words, I should 'enjoy' life a little more.

Seth Godin in one of his books describes one such vacation of his, where he is answering his email in the middle of the night and stumbles across a couple who feels 'sad' that Seth is checking his email in the middle of a vacation. Seth provides an interesting perspective about the topic in his book. He explains:

It was 4 a.m. and I can't sleep. So I'm sitting in the lobby of a hotel in Jamaica, checking my email.

A couple walks by, obviously on their way to bed, .... The woman looks over me and, in a harsh whisper a little quieter than a yell, says to her friend, "Isn't that sad? That guy comes here on vacation and he's stuck checking his email. He can't even enjoy his two weeks off."

I think the real question - the one they probably wouldn't want to answer - was, "Isn't it sad that we have a job where we spend 2 weeks avoiding the stuff we have to do 50 weeks a year?"

It took me a long time to figure out why I was so happy to be checking my email in the middle of the night.

It had to do with passion.

Other than sleeping, there was nothing I'd rather have been doing in that moment - because I'm lucky enough to have a job where I get to make change happen.

The words belong to Seth Godin, but if I had to own the above words and defend every single word above like it was said through my mouth, I would.

Seth is not alone in working during weekends and vacations however. Jeff Atwood at coding-horror has similar opinions and so does Donald Trump.

By quoting these individuals and by giving you a new perspective to look at this problem; I am, by no means, suggesting that you stop taking your vacations or do not go to parties. Neither am I nudging you to take your laptop with you everywhere you go.

All I am trying to do, dear reader, is stimulate your mind and leave you with the thought, that maybe, checking your email on your blackberry or widows mobile smack in the middle of a loud party, can be just as much (at times even much more) 'fun' as moving your hips and doing an insane dance with totally drunk individuals.

If you don't enjoy checking your emails and need long frequent vacations or a truck load of alcohol to forget about work that you have to do for the entire year, maybe you are not passionately connected to your work and should consider alternate options or professions which would keep you happy throughout the year.

After all, this work stuff is supposed to be fun through out the year; not random pseudo fun created by loud music and alcohol flowing like water.

So if you are a young and budding developer working with me, the next time you see me dancing for five minutes at a party and getting back to scanning through my email on a phone or starting a conversation on software development with an acquaintance or another colleague, please do realize that by indulging in the stupid dance for five minutes I am acknowledging my acceptance for your idea of 'fun'.

I am also hoping that you too accept my idea of 'fun' by letting me work and realizing that I 'enjoy' working on software development and writing about it as much as you enjoy getting drunk and moving your hands and legs to loud music.

Peace.

posted on Sunday, February 21, 2010 10:45:40 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, February 20, 2010

I am in a conversation with a young and budding manager who has recently been promoted. He has inherited a young team of programmers and a couple of database administrators. He begins his discussion around what is wrong with his new team and how he plans on fixing things.

I cringe.

Besides not realizing the fact that the basic traits of human beings do not change, this budding manager has taken his first tiny step to becoming a micro-manager and a dictator both rolled into one.

The problem that is causing this otherwise wise and experienced programmer to not see the big picture as he takes his first step in leadership can be described in one word: Power.

A quest for power, disguised under multiple excuses (the whole I-want-to-help-people-grow being one of them) remains one of the primary reason which attracts people towards management. Steve Yegge describes this problem in his legendary post on Not Managing Programmers where he believes that most managers consciously choose the management route to purely fulfill their unrelenting quest for power. He explains:

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. Do you want to manage because you want authority? If so, it's a trap: you'll still be on a leash held by the folks above you.

Or maybe you just want to be a little higher in the pecking order, so you can peck downhill? If so, then you're what we call, colloquially speaking, a "pecker".

Think hard about why you want to be a manager. I've worked with a hundred managers with a hundred different motivations, and all of the underlying reasons, including my own, seem suspicious to me now. Especially now that I work for a company that works, and well, with almost no managers or management overhead. Now that I've seen it working, I question the motivations of anyone who wants to manage.

I'm suspicious of all the mother-hen types: they want to nurture their teams, but tend to smother them. And I'm suspicious of the overly-organized types: they want to bring process to chaos, but process stifles invention, and it can be used to disguise incompetence for an entire career.

I'm suspicious of empire builders; too often they lower their hiring bar. I've heard or seen a hundred reasons for becoming a manager, and I now view all of them with suspicion, because each reason is a potential psychological problem waiting to manifest itself on a soon-to-be-unhappy engineering team.

The point that Steve Yegge makes in the rather long winded post is simple: why you want to become a manager or leader will ultimately define how good a manager you become. More often than not if quest for power is the primary reason that motivates you to become a manager or a leader, chances are that the same reason will start messing up your mind as soon as you get take your first couple of promotions.

I have spent years watching young and budding managers get very excited about their promotion, desperately trying to take control and trying to fix everything that they believe is a wrong in their team. Some of them claiming that they are putting their teams under pressure and trying to bring out the best in them while others claiming that they are working for the best interest of the organization. In most cases however, all they are doing, is satisfying their quest for power.

Put simply, I have seen the quest for insanely insignificant perception of power, corrupt and confuse some of the brightest of the minds that I have worked with.

Today, I leave you, dear reader, a thought worth harping on from Steve's post:

The catch-22 of software management is that the ones who want it most are usually the worst at it. Some people, for worse or for worst, want to be managers because it gives them power over their peers. There's nothing good that can come of this arrangement: you should never give power to someone who craves it, for reasons that I hope are obvious.

If you are a young and budding manager who has just inherited a team and has started out by noticing everything that is wrong with your team or building plans on fixing everything in the next couple of weeks by throwing your new team in an instance pressure environment, I want you to take a long hard pause, do some soul searching and answer the million dollar question:

Why do you want to manage your team, dear reader? Is it really because you want to help, or do you really want to quench your unrelenting thirst for power?

How you answer this question will ultimately decide how you do as a manager. Before you start fixing everything that is wrong in your team, spend some time doing some serious soul searching and find your answer honest answer to this question. If your answer to this question is that you do not want to manage your team at all, chances are, that you will be rather good manager.

I wish you good luck.

posted on Saturday, February 20, 2010 9:05:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, February 19, 2010

Early Monday morning you see Fred approaching your cubical with a usual highly depressed Marvin like look on his face.

You can read his body language and why he is approaching your cubical.

You cringe.

You secretly wish there was something that would make him go away.

Within moments you find yourself listening to sentences which begin with words like we-do-not-have or we-need-to. Every single one of those sentences seems like gibberish to you.

We do not have documentation for all the development scenarios. We need more use-cases. We need a detail design document. We do not have a detailed process. Fred continues and if you spend enough time with Fred you actually start getting convinced about how pathetic both you and your organization are. Fred is depressed and much like Marvin he tends to spread his depression through constant whining, bitching and moaning.

Then it dawns unto you. The realization that Fred is not a bad guy after all. He means no harm. He has just realized that he is not very competent and is having a problem reconciling himself with that fact.  When this happens, it is usually easier to criticize an organization or a 'process' because, well at-lease you are not criticizing a particular human being capable of defending himself.

This, dear reader, is precisely what Fred is doing by criticizing the process or the organization. 

Put simply, Fred, has freaked out. Like a cornered cat, Fred is not looking for a convenient excuse full of complicated jargon where he can burry his incompetence.

Allow him to do that or get away with it and you are setting your precedents loud and clear.

Go ahead, take a deep breadth. Look Fred in the eye and ask him to discuss specific problems connected to the process or people and how to fix them rather than making wide generic statements on a truck load of universal problems. Put simply, ask  Fred to stop whining and start delivering.

I wish you good luck.

posted on Friday, February 19, 2010 8:47:00 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, February 14, 2010

In any given year, I get proposals for working on at-least one and sometimes even more than one business idea someone has cooked up. You are sitting with a casual business acquaintance, a sort of a weak tie who introduces you to someone who has been trying to launch a startup. It begins with chit-chat. What I like to call meaningful small talk.

He shares his idea, you tell him why it will not work, he tells you how much he has thought about it, you tell him how he has not thought shit (of course you do this politely). The next thing that happens is you find yourself scribbling things on paper napkins in a restaurant and then you are called for another cup of coffee on the weekend that follows to brainstorm further.

A couple of whiteboard discussion later, people expect you to jump in and get on-board. I don't mean get on-board in an intellectual-exercise-for-the-brain way. I mean get on-board in a get-paid-and-start-working-on-the-project-during-the-weekend way. But what the young and budding entrepreneur does not understand, is that you are not in a committed relationship with the idea. You are just flirting with the idea. I do it all the time.

I like flirting with ideas, stimulating my brain with them. But then, I have serious commitment issues as far as ideas are concerned. So I leave the idea alone and after about a couple of months of no touch, no connection, my relationship with the idea comes to a painful halt. 

That, dear reader, is my typical idea love story.

At any given day my brain is looking at three or more different ideas, flirting with a couple of them for more than a day and then moving on.

These are not the ideas that will make you fall in love with them. These are not the ideas that will keep you up all night. These are not the ideas that will, for lack of a better word, f@#k up your brain and make you slog for hours at the machine. These are not the ideas that will make you give up whatever little personal life you have left on weekends. The ideas that can do all of these are exactly the kind of ideas and projects I love working on.

The problem with genuine ideas that have the potential of making you do all of this, is that no matter how hard you try or for how long you brainstorm on a whiteboard with your weak-ties, you cannot find them.

To put things more specifically, when the time is right, these ideas, find you.

It is a subtle sublime inspiration or incident that brings this idea into your life. You see something drastically wrong with the way the world works and you see how the idea can help you fix it. The idea keeps you up all night. You spend a couple of hours thinking about it. Then you bring up your IDE and code just a couple of screens. A prototype, that would sit there on your machine for weeks as you get busy with your work life.

The difference between this idea and the one you are flirting with, is that you just find yourself opening the IDE and adding just a little bit of code on this project every time you get some free time.

This is not causal flirting. You cannot seem to move on. You keep coming back to the IDE and you keep adding just a couple of functions each day.

Before you know it, you get hooked. Committed. Stuck.

You, dear reader, are in love with the idea.

You have found the idea or to put things slightly more specifically, the idea has found you.

You have no intentions of making money out of the idea, no intentions looking for venture capitalists and turning it into a Google. In fact, chances are that you will not make any money out of the idea and that you are not on your way to becoming a Google either, but you have what we call, a project worth slogging on. A way to make a small dent in the large universe. Something that is fun to work on and a blank canvas where you can draw in bold colors.

If you are a 'practical' entrepreneur who talks about 'business model', 'revenue plans' and 'venture funding' you probably have no freaking idea of what I am talking about here. On the other hand however, if you ever fallen in love with an idea in your life you know exactly what I am talking about here.

What happened to that idea? Are you still slogging away at it during late nights and weekends?

If not, might I use today as an excuse to suggest that you dig from your hard disk, one such idea that had found you, fire up the IDE and just start adding a couple of functions to the project, again. We don't want you to change the universe, just make a dent or two on it. We don't want you to break up with your loved ideas. We want you to bring them to life. Show us what you can build through committed consistency and dedication.

I wish you good luck.

posted on Sunday, February 14, 2010 11:24:54 PM UTC  #    Comments [2] Trackback
Posted on: Saturday, February 13, 2010

I've always held the opinion that happy programmers are a true reflection of how well your project is going, how much adaption it will get and eventually how much money it will make. After all, it is the happiest programmers within your organization that often, show you the money.

If your programmers do not believe in what they are building and want to quit a project, your only chance of survival or getting that project close to any form of success is letting the unhappy individuals move to projects where they might be happier and getting people who might be more connected to the project, into the project.

If none of the programmers in your organization want to associate themselves with a project, it is high time you rethink what you are building. Maybe even consider closing down the project all together. Chances are, that a team working half heartedly on a project is just going to produce strong or mild variants of f@#k-you code and your project is not going to go anywhere anyways.

Having said that, citing 'Programmer Happiness' as a measure of how successful a project or an organization will be, often causes people to knit their brows and look at you like you just dropped a dead rat on the table.

People in general and organizations in particular that I have talked to, often tend to ask for slightly more objective measures and signs they can use to see if everything is fine at an organizational or a project level.

It is in the interest of a young and budding startups or relatively newer organizations that I present to you, dear reader, my very own personal guidelines on when you should be nudging your team members to raise a red flag, stop working like programmed robots and bring the issue up, even if it involves indulging in what I call a skip.

At an Organizational Or Team Level It Is Time To Raise RED flag If:

  1. Your daily meetings or daily project calls are consistently crossing thirty minutes and your team is getting addicted to meetings.
  2. Your team is consistently staying late without being particularly excited, happy or passionately connected to the project.
  3. Your team is consistently doing regular grunt work, like pushing a build or fixing bugs, even on weekends.
  4. Your team is not taking any happy hours.
  5. Your team is being constantly asked to build features which are not really needed.
  6. Your team or you are confused about where your role stops and where the role of your manager begins.
  7. Your team is facing constant intimidation from a client or a manager.
  8. Your team is allocated tasks with concrete timelines without having any involvement or say in those timelines.

At a Development Level It Is Time To Raise A RED flag if:

  1. Your team has parts of the project or the database which are not being checked into the source control system.
  2. Your team crosses more than a month and a half without shipping any new sprint or any new features.
  3. Your team works on and ships more than three sprints without any real feedback from a real beta user.
  4. Your team consistently writes functions that do not fit a screen. 
  5. Your list of 'Active Critical Bugs' consistently shows a scroll bar and does not fit in a screen.
  6. Your project requires a developer to carry out more than ten manual steps to get the source control system, set it up and fire a build.
  7. Your team tends to have an alpha-geek who often decides all critical design decisions with very little scope for discussion or argument.

The list of course is very basic and will grow over time. In fact, this is where I expect you, dear reader, to throw in some comments.  If you, are a manager running multiple projects or an entrepreneur running an organization which RED flags would you want your team members to bring to your notice as soon as they happen? If you are a developer which RED flags would you like to raise as soon as they happen?

Go ahead, drop in your comments. Discuss.

posted on Saturday, February 13, 2010 11:09:05 PM UTC  #    Comments [0] Trackback
Posted on: Friday, February 12, 2010

In a blog-post on your your code being a one way time machine, David Robbins identifies a special enemy from the past that can do you more harm than anyone else: yourself.

David explains:

What type of duress are you under?  The unfortunate among us have been sentenced to slavery by our evil nemesis from the past.  We all have this enemy, and at one time or another have succumbed to the enemy’s evil plot.  The enemy from the past is 'you'.

A huge part of your life as a software development is all about making decisions. How much code do you really need, how much time are you spending on thinking about your functions, do you need to start extracting till you drop or for now are you just going to ship a shitty version with bugs and get better over time. Every decision that you take will define your relationship with the you-from-future.

To be honest, most of these decisions are simple pragmatic decisions based on common sense and yet year after year I see developers building software and projects which are nothing less than Frankensteins. I see young and budding developers letting their desire to flex their engineering mussels guide the platforms or technologies they pick and not even bothering to fix broken windows as the speed along their career highway.

You primary responsibility as a developer is not to build a highly scalable enterprise application or to work on that really complex software development project. Your only true moral responsibility as a developer is to be reasonably good to the you from future and not sentence him through a painful infinite loop of failure

The more time and effort you invest in being honestly nice to the-you-from-future, the more at peace you will be with your greatest enemy from the past when the future arrives. Now go spend time and conscious effort in being nice to the you from tomorrow. Try keeping that patterns and practices book or that coolest data access framework on the block aside for one moment and take a few pragmatic decisions that will work for 'you'.

The you-from-future might actually thank you for it.

I wish you good luck.

posted on Friday, February 12, 2010 7:21:00 PM UTC  #    Comments [1] Trackback
Posted on: Sunday, February 07, 2010

If you worked with me years or even months ago, chances are that I have lost your phone number. Chances are also high that I have not kept in touch with you. Like most programmers, I knit closely with you when you are working with me and then when our ways part, I disconnect.

But then, I have nothing against you.

It is just that when you move on and do not connect on a daily basis, that familiar system of connection is gone. Conversations with you, have to begin with small talk again and like most programmers, I am not very comfortable with the idea of small talk. So, I tend to totally disconnect totally.

The paragraphs above pretty much sum up a huge part of my school life and a huge part of my early life as a young and budding programmer. Put simply, as a school student, a college graduate and a young programmer, I connected to a very small group of family members, friends and colleagues.

If you did not know me personally and if we did not spend hours having deep conversations every week, you would make me very nervous. What I, dear reader, as a youngster, failed to understand, was the power and value of keeping in touch and learning from acquaintances.

Put simply, as a youngster I did not 'get' the whole point of what Malcolm Gladwell, in his book, the tipping point, describes as 'weak ties'. Malcolm explains the power of 'weak ties' with a very simple example:

In his classic 1974 study Getting a job, Granovetter looked at several hundred professional and technical workers from the Boston suburb of Newton, interviewing them in some detail on their employment history. He found that 56 percent of those he talked to found their job through a
personal connection.

Another 18.8 percent used formal means — advertisements, head hunters — and roughly 20 percent applied directly. This much is not surprising; the best way to get in the door is through a personal contact.

But, curiously, Granovetter found that of those personal connections, the majority were "weak ties." Of those who used a contact to find a job, only 16.7 percent saw that contact "often" — as they would if the contact were a good friend — and 55.6 percent saw their contact only "occasionally." Twenty-eight percent saw the contact "rarely."

People weren't getting their jobs through their friends. They were getting them through their acquaintances.

Why is this? Granovetter argues that it is because when it comes to finding out about new jobs — or, for that matter, new information, or new ideas - "weak ties" are always more important than strong ties. Your friends, after all, occupy the same world that you do. They might work with you, or live near you, and go to the same churches, schools, or parties. How much, then, would they know that you wouldn't know?

Your acquaintances, on the other hand, by definition occupy a very different world than you.

They are much more likely to know something that you don't. To capture this apparent paradox, Granovetter coined a marvelous phrase: the strength of weak ties. Acquaintances, in short, represent a source of social power, and the more acquaintances you have the more powerful you are.

My first hand experience with the power of 'weak ties' came after about a year and a half of blogging when this blog landed me with my first job offer. Months later I received another. While I humbly declined both of them, what deeply moved me, was that I had touched and connected to a person who I hardly knew in real life and who, merely by the virtue of my writing was able to extend an offer to me.

But this isn't just about job offers or the power that 'weak ties' brings you.

After a while that bit, becomes boring.

It wears out.

What remains fascinating is just how much you can learn through some of these 'weak ties'.

This Saturday morning I made a new acquaintance with a hokey player who taught me something about perseverance. He talked at length about how, grace of god, luck and consistency have a great part to play in everything you take up. These two together, he believes, helped him get his Olympics gold medal.

The evening was spent, chatting with a school friend who had drifted into the finance world. He gave me a few tips on making some money in the stock exchange. We discussed investments and the possibility of my being able to help him in a small fun project that would help him build investment models using a SQL server backend and a decent enough front end.

Both conversations, somewhere deep down, inspired me to become a better developer, a better professional and above all a better human being in general.

While we as developers, often spend hours talking to the compiler and our evenings with friends and family, we often miss out of the importance of connecting to your acquaintances or even strangers every now and then. We miss out on the fun of striking meaningful conversations with them and we miss out on the opportunities of learning from these conversations.

Even today, as I reach out to countless 'weak ties' and acquaintances I have been guilty of not making myself accessible to and learning from countless others.

If my statistics serve me right, this blog alone, is visited by, a few acquaintances I can learn from. A few very bright minds I can connect to and have meaningful discussions with. It is in the spirit of learning, participating and sharing experiences that I am starting my very own little corner in facebook.

You, dear reader, are invited to join in.

I will be scribbling on the wall there every now and then, posting a question or a discussion when I need your advice on a specific problem and above all, I will be reaching out and connecting to anyone who wants to connect.

It is an open group so anyone can join in and if you are regular reader of this blog I hope to see you there.

Now, take a pause and go figure out your ways to connect to all your acquaintances or 'weak ties', start meaningful conversations with them and learn from them.

I wish you good luck.

posted on Sunday, February 07, 2010 11:42:47 PM UTC  #    Comments [3] Trackback
Posted on: Saturday, February 06, 2010

Fred is a young and budding engineers trying to start his new business venture with an idea that he believes will change the world. As he sits right across the table and talks, I can make out that he is attached and almost obsessed with the idea of protecting his idea like a baby:

Long story short, anyone talking to Fred can make out that he has spent weeks in:

  1. Cooking up an idea.
  2. Doing paperwork around the idea.
  3. Building PowerPoint presentations around the idea.
  4. Fantasying how he is going to become rich after the idea clicks.
  5. Making sure he can screw anyone who tries to steal his idea.

There is, however, just one little problem with his idea. It is not genuine, it has nothing new in it and it is not even worth spreading, leave aside stealing it. The success of this idea, like most others, is truly dependent on the implementation of the idea. Derek Sivers describes the concept much more articulately in his post on the topic. He explains:

It's so funny when I hear people being so protective of ideas. (People who want me to sign an NDA to tell me the simplest idea.)

To me, ideas are worth nothing unless executed. They are just a multiplier. Execution is worth millions.

Explanation:

AWFUL IDEA = -1
WEAK IDEA = 1
SO-SO IDEA = 5
GOOD IDEA = 10
GREAT IDEA = 15
BRILLIANT IDEA = 20

NO EXECUTION = $1
WEAK EXECUTION = $1000
SO-SO EXECUTION = $10,000
GOOD EXECUTION = $100,000
GREAT EXECUTION = $1,000,000
BRILLIANT EXECUTION = $10,000,000

To make a business, you need to multiply the two.

The most brilliant idea, with no execution, is worth $20.

The most brilliant idea takes great execution to be worth $20,000,000.

That's why I don't want to hear people's ideas.

I'm not interested until I see their execution.

Now there is reason why Fred has worked for hours on making PowerPoint presentations, word documents and dreams around how he will take the idea to the next level when the idea clicks, but he has not done a single screen to try and implement the idea or do a small prototype. The reason is simple - cooking up ideas and day dreaming is easy. Implementing those ideas and giving shape to those dreams or visions is hard.

Besides, somewhere deep down in his mind, Fred knows that doing an implementation and throwing his idea out in the hands of real people will most probably get his idea a reality check which is the last thing he needs right now.

Paul Buchheit describes his effort during his work during the early Gmail days. He explains:

We starting working on Gmail in August (or September?) 2001. For a long time, almost everyone disliked it. Some people used it anyway because of the search, but they had endless complaints.

Quite a few people thought that we should kill the project, or perhaps "reboot" it as an enterprise product with native client software, not this crazy Javascript stuff.

Even when we got to the point of launching it on April 1, 2004 (two and a half years after starting work on it), many people inside of Google were predicting doom. The product was too weird, and nobody wants to change email services. I was told that we would never get a million users.

Rolling your first prototypes out is usually something which requires nerves of steel. It means quite a few things.

  1. It means that you need to be serious and committed to  your idea - so much so that you are actually willing to slog midnights for it and you  are willing to do it consistently, for years.
  2. It means that you are capable of shaping the dream into something concrete - you are a doer not just a dreamer.
  3. It means that you have the thick skin to take those feedbacks and even at times, acts of bozoism with a grain of salt and continue working on your idea anyways.

All of the above three, tell us, your users, that you are serious about your idea. That your idea is not a quick gimmick to get our money. That your idea is not just a random distraction which you are going to dump tomorrow morning when you wake up and when your dream comes to an abrupt end.

Your ideas don't need you to protect them from getting stolen. They need your implementation, hard work and commitment. For years.

Now, stop discussing that PowerPoint presentation and stop talking about the business model around your idea. Show us a prototype. If you do not have that yet, figure out how you are going to build it. Go build something real and then show it to us.

I wish you good luck.

posted on Saturday, February 06, 2010 11:57:00 PM UTC  #    Comments [0] Trackback
Posted on: Friday, February 05, 2010

You have just finished patting yourself on your back for getting a team of seriously kick ass developers up and running. The team has not just flocked together, they have actually proved to you that they actually have the secret sauce for success. Products are on time. Customers love your organization. The sky is blue and it is not even falling.

You think of giving yourself the liberty to feel really happy about the amazing work environment and the work culture of your organization.

That is when Jack walks into your cubical and tells you that he isn't feeling motivated enough.

Jack, dear reader, has a problem.

A problem that he himself, in his very own words, describes as - 'Too much freedom'.

You know where this is going.

You see is that of Morpheus from The Matrix holding up a battery and saying - "The Matrix is a computer-generated dream world built to keep us under control in order to change a human being into this.'

You cringe.

'Shut up and listen to him' - you tell yourself as you intently listen to Jack describing his problem.

Sitting right across the table, Jack, dear reader, is telling you that he needs more monitoring, stringent deadlines and above all what he calls a 'big hard push' so that he can get things done. Not everyone is self motivated - Jack tells you. Jack wraps the discussion by telling you that in the absence of artificial deadlines and constant monitoring he is not feeling motivated enough to get things done.

Then as you sit there and reflect really hard you realize that Jack is not looking for motivation. He is looking for fear. Fear that can drive him to get his job done. Fear that can force him to grow his branches far and wide even if he does not really feel motivated to grow deeper roots.

What Jack is trying to do, dear reader, has its root back in the pre-historic era and how the human race evolved. Dragos Roua describes this phenomenon much more articulately than me. He explains:

Our brain has a very deep connection with fear. Deep in our limbic brain (the oldest part of our brain, also called the “reptilian” brain) lies the centers of fear. On top of them other layers of our brain have grown. But the deeper core is still there and it can still be activated.

Whether we like it or not, we’re still conditioned to act on fear. Our limbic brain is still stimulated by a variety of factors.

We translated our old fears related to survival to our modern indicators of success: we’re afraid of being taken for less than we are or we’re afraid that somebody talks bad about us. We’re afraid that we’re going to lose something if we’re not talking “immediate and aggressive” action towards the potential danger.

What Jack, dear reader, is asking you to do, is basically stimulate his limbic brain. Put simply, Jack is asking for a shot of fear-based-steroids so that he can play a few power-shots in his professional life.

Dragos, in the same article, also describes why the basic approach can be fairly lethal in the long term. He explains:

Negativity is powerful.  Every time you’re afraid, you’re giving your focus and power to the potential danger. All your energy must be there, because your reptilian brain is telling you’ll have to survive. Doesn’t matter for that reptilian brain if the fear was socially induced, if you scream “fear” it will be activated.

The more fear factors you have, the more energy you’ll have to allocate. And you’re going to pay attention to a lot of potential dangers. Sooner than you think, you’ll measure your success by the rate of your survival actions. And you’re becoming accountable to your fear sources. You’ll be actually driven by your fear sources. This is why a fearful person is so easy to manipulate.

Turning human beings into batteries is what most software development shops around the world are so very good at. We tend to refer to people as 'resources' and use every arrow in our management quiver to strike terror in those 'resources' so that we can improve their productivity. You realize how bad things are when the best of your people come to you begging for shots of fear-based-steroids, under the excuse that not-everyone-is-self-motivated.

I leave you, dear reader, with one little thought worth harping on. You might not be self motivated. Motivation may not come from within, but that is not an excuse for not looking for your own motivation yourself; and while you are at it, you might want to look for it really hard; because if you do not look for your motivation, it will not come looking for you.

Take a few shots of fear-based-steroids and you might be a 'resource' that runs on a battery before you know it. And then when that happens do not crib about how big an ass-hole your manager is.

Now go read a few books, watch TED videos, play around with some seriously interesting technology you feel passionately about or find your own avenues of looking for getting constant motivation.

I wish you good luck.

posted on Friday, February 05, 2010 7:03:00 PM UTC  #    Comments [2] Trackback
Posted on: Sunday, January 31, 2010

On a typical day that looks like any other, for anything between three to ten hours, I am an employee.

Most of that time, I spend firefighting.

Fred wants to a discussion regarding his salary, Jack is having a problem with the data-access layer, somewhere the sky is falling. I'm adapting, prioritizing, talking, taking decisions and above all I am reacting to random uncertainty as it rolls my way.

Then there are days at a stretch when I cannot seem to get much done.

Seventeen emails I have not responded to sitting in my inbox. I just missed a status call. Last I checked I was going to get back to Jack in the couple of minutes. It's been two hours since I told him that.

FU@#K!

Then the magical time of the day happens. Usually, this is late evening for me. When the cubical farm is quite. When I am not speeding. When I am not cruising on employee-auto-pilot-reactive-mode. This is when I am not assertive. I am not running around solving problems. I am not in meeting rooms. I am not scribbling things desperately on the whiteboard trying to make a point. This is when I am not ATL+Tabbing between applications.

Late evenings, for me dear reader, are my happy hours.

This is the time, when I set those crazy baby neurons free and let them wander where they feel like wandering. I give these neurons the liberty to fail; even make a fool of myself.

Sometimes, it is a new idea for a blog post. Sometimes, it is a new technology that I am trying to dissect and understand which will later turn into a training session for my team. Sometimes, it's an open source framework I am playing with which I will later release.

Sometimes, it is just a few webcasts or just a few videos containing deeper insights into the human mind. Sometimes it will just be playing with new ideas that will not let go till they become product features or new products.

Put simply, my happy hours are the time when I am working, sometimes even for my organization, but I am doing so without wearing my employee cap. This is when I am going slow. Without trying to prove a point. Without desperately trying to get things done. Not just enjoying, but actually loving, whatever it is that I am working on. This is my disconnect from a system that is designed to turn you into a robot.

I love my happy hours.

Most organizations around the world feel hugely insecure with employees spending happy-hours. I had my share of these organizations until I stumbled upon my current organization, where happy hours were not just acceptable, they were actually encouraged. Today happy hours are an integral part of our leadership.

So much so that every once in a while I find myself giving appraisal feedback to individuals I am promoting: You are way too strongly attached to the organization. You need to detach for a couple of hours, look outside and bring the learning back into the organization. You need your happy-hours.

Its your happy hours that will make you much more valuable as an employee. It is what you learn in these happy hours, that will become your long term investment for your career in your organization. It is your happy hours that will empower you to steer your organization or your team members in directions that they never thought of taking while they were busy fire-fighting or doing what they were told to do.

So the next time you have the outlook window blinking with seven follow up icons, code waiting to be written, problems dying to be solved - ask yourself if you are completely ignoring your happy hours in the midst of blinking meeting reminders, pending email responses and long To-do lists.

The employee mode won't take you far, not even as an employee.

Go ahead. When you get a chance, disconnect and take your happy hours. You will be doing yourself and your organization a favor.

I wish you good luck.

posted on Sunday, January 31, 2010 8:53:00 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, January 30, 2010

Jack, a young and capable developer is starting out his development blog by hiding behind the mask of anonymity.

He is concerned that his blog posts are not mature enough and that he still hasn't found his style of writing. He prefers writing anonymously because it allows him to learn how to write without his friends, family or juniors finding out how much he sucks at it.

When I hear Jack mention this over a conversation at a friendly neighborhood food joint, I cringe.

There is nothing wrong with anonymity. Which name a man writes under, is every man's own choice.

What irks me however, is an overly conscious attitude towards failure and the active effort being put behind hiding how much you suck.

In the world where I live, spending time and effort behind shit-canning how much you suck seems like an utter waste of time. Everyone successful at what they do, that I know of, is often rather open and candid about how much he sucks.

Steve Yegge for example, in his classic post on Languages, makes a rather honest, open and direct confession followed by his attempt at sucking less each year. He explains:

When I started at Amazon, I could recite for you all the incantations, psalms, and voodoo chants that I'd learned, all in lieu of intelligence or experience, the ones that told me Multiple Inheritance is Evil 'cuz Everyone Says So, and Operator Overloading Is Evil, and so on. I even vaguely sort of knew why, but not really.

Since then I've come to realize that it's not MI that sucks, it's developers who suck.

I sucked, and I still do, although hopefully less every year.

Legendary author Steve McConnell describe the idea of accepting how much you suck rather articulately in his classic book Code Complete. He explains:

What? You don’t have to be super intelligent?

No, you don’t. Nobody is really smart enough to program computers. Fully understanding an average program requires an almost limitless capacity to absorb details and an equal capacity to comprehend them all at the same time.

The way you focus your intelligence is more important than how much intelligence you have. At the 1972 Turing Award Lecture, Edsger Dijkstra delivered a paper titled “The Humble Programmer.” He argued that most of programming is an attempt to compensate for the strictly limited size of our skulls. The people who are best at programming are the people who realize how small their brains are.

They are humble.

The people who are the worst at programming are the people who refuse to accept the fact that their brains aren’t equal to the task.

Their egos keep them from being great programmers. The more you learn to compensate for your small brain, the better a programmer you’ll be. The more humble you are, the faster you’ll improve.

In one of my earlier post, I describe how no one cares about you and while a couple of people were really angry at the post, the bright side of no-one caring about you, is the fact that they do not even care about failures.

Mark Cuban describes the idea of using this could-not-care-less attitude of the world around you to your advantage using a single quote. He explains:

It doesn’t matter how many times you fail. It doesn’t matter how many times you almost get it right. No one is going to know or care about your failures, and neither should you. All you have to do is learn from them and those around you because... All that matters in business is that you get it right once. Then everyone can tell you how lucky you are.

A good way to start wrapping this post up, would be with an inspirational ad from Nike, where Michael Jordon is heard speaking the words of wisdom:

I've missed more than 9000 shots in my career. I've lost almost 300 games. Twenty-six times I've been trusted to take the game winning shot and missed. I've failed over and over and over again in my life. And that is why I succeed.

Today, I leave you, dear reader, with a word of advice: stop taking yourself seriously. Start flaunting your failures, accepting how much you suck and above all start sucking less each year. And no, you don't have to worry about the whole world finding out, because no-one is watching. They just don't care. Remember?

Now, stop shit-canning your failures and fail in remarkable new ways like a baby.

I wish you good luck.

posted on Saturday, January 30, 2010 11:05:22 PM UTC  #    Comments [6] Trackback
Posted on: Friday, January 29, 2010

Jack codes quietly during the day. He is a seriously kick-ass programmer at work. Later during the evening, as the number of people in the cubical farm go down, Jack transforms into a musical rock-star dying to share his musical taste and collection to the whole wide world.

I cringe as I listen to the speakers of Jack's laptop buzzing away to glory.

"Headphones people. Use a freaking set of headphones." --- I think.

Then quietly, I grab my laptop and head in search of a quite conference room that will allow me to work.

Demarco and Lister in their legendary book, the Peopleware discuss issues associated with programming while listening to music:

During the 1960s, researchers at Cornell University conducted a series of tests on the effects of working with music. They polled a group of computer science students and divided the students into two groups, those who liked to have music in the background while they worked (studied) and those who did not. Then they put half of each group together in a silent room, and the other half of each group in a different room equipped with earphones and a musical selection.

Participants in both rooms were given a Fortran programming problem to work out from specification. To no one's surprise, participants in the two rooms performed about the same in speed and accuracy of programming. As any kid who does his arithmetic homework with the music on knows, the part of the brain required for arithmetic and related logic is unbothered by music—there's another brain center that listens to the music.

The Cornell experiment, however, contained a hidden wild card. The specification required that an output data stream be formed through a series of manipulations on numbers in the input data stream. For example, participants had to shift each number two digits to the left and then divide by one hundred and so on, perhaps completing a dozen operations in total.

Although the specification never said it, the net effect of all the operations was that each output number was necessarily equal to its input number. Some people realized this and others did not. Of those who figured it out, the overwhelming majority came from the quiet room.

Many of the everyday tasks performed by professional workers are done in the serial processing center of the left brain. Music will not interfere particularly with this work, since it's the brain's holistic right side that digests music.

But not all of the work is centered in the left brain. There is that occasional breakthrough that makes you say "Ahah!" and steers you toward an ingenious bypass
that may save months or years of work. The creative leap involves right-brain function. If the right brain, is busy listening to 1001 Strings on Muzak, the opportunity for a creative leap is lost. The creativity penalty exacted by the environment is insidious.

Since creativity is a sometime thing anyway, we often don't notice when there is less of it. People don't have a quota for creative thoughts. The effect of reduced creativity is cumulative over a long period. The organization is less effective, people grind out the work without a spark of excitement, and the best people leave.

The whole left-brain-right-brain argument has been a question of argument amongst neuroscientists for years and I don't know if there is such clear demarcation between left-brain and right-brain. Having said that, the fact that your brain is just not designed to multitask is rather well known.

Quite work environments are so important that I have often gone ahead and proposed a silence room for every office in planet earth. Silence and quite working environments are so important to most kick ass developers that Jeff Atwood has decided to make it a part of his Programmer Bill Of Rights. He explains:

Programming requires focused mental concentration. Programmers cannot work effectively in an interrupt-driven environment. Make sure your working environment protects your programmers' flow state, otherwise they'll waste most of their time bouncing back and forth between distractions.

True, music serves as a nice distraction from other conversations, noises and crazy distractions that you might come across in a typical cubical farm; but when picking between music or silence while programming I would pick silence any day.

You, dear reader, are free to pick music, if you are still not convinced, but if you do pick music over silence, do me a favor. Be a nice citizen of the developer community, think about being considerate to your fellow developers who may not share the same opinion as you. You are not a radio station and unless we tell  you so, we are not interested in listening to songs you want to make us listen today.

Now, if you must listen to music as you code, grab a pair of head phones and use them. Do not make us listen to your collection of songs. Seriously.

posted on Friday, January 29, 2010 9:05:00 PM UTC  #    Comments [4] Trackback
Posted on: Sunday, January 24, 2010

As managers, leaders or whatever it is that we like to call ourselves, we have a tendency to think of ourselves as mentors, helpers and protectors of people who work with us.

As a part of this tendency, it is but natural to get tempted to help your team member change himself every time you see a fault or a weakness in the person. After all, if you can push hard enough the person might change, improve and grow to be a better individual.

If you are a young and budding manager, chances are that every once in a while you find yourself spending time in a one-on-one with a person in your team. You  find yourself trying to mentor him, help him give up a weakness or fix a basic problem in his character.

Then as months go by, you learn that all you did with the person in that one on one was that you wasted his time and you wasted your own time.

As you grow older, you tend to implicitly and unknowingly learn the cardinal rule of management - people do not change their basic traits and character over time.

Markus Buckingham and Curt Coffman, describe this basic rule of management in their book First break all the rules, using a simple research on neuroscience:

At birth the child's brain contains one hundred billion neurons, more brain cells then there are stars on the Milky Way. These cells will grow and die regularly throughout the child's life, but their number will remain roughly the same. These cells are the raw material of the mind. But they are not the mind. The mind of the child lives between these cells. In the connections between the cells. In the synapses.

During the first fifteen years of life, the carving of these synaptic connections is where the drama unfolds.

From the day she was born, the child's mind begins to reach out, aggressively, exuberantly. Beginning at the center of the brain, every neuron sends out thousands and thousands of signals.

They are trying to talk to one another, to communicate, to make a connection. Imagine everyone that is alive today simultaneously trying to  get in touch with 150,000 other people and you will get some idea of the wonderful scale, complexity, and vitality of the young mind.

By the time the child reaches her third birthday the number of connections made is colossal - up to fifteen thousand synaptic connections for each of it's one hundred billion neurons. 

But this is too many. She is overloaded with the volume whirling around inside her head. She needs to make sense of it all. Her sense. So during the next ten years or so, her brain refines and focuses on its network of connections. The stronger synaptic connections become stronger still. The weaker ones wither away.

Dr. Harry Chugani, professor of neurology at Wayne State University Medical School, likens the pruning process to a highway system:

"Roads with the most traffic get widened. The ones that re rarely used fall into disrepair."

If she ends up with a four-lane highway for empathy, she will feel every emotion around her as though it were her own. By contrast, if she has a wasteland for empathy, she will be emotionally blind, forever saying the wrong thing at the wrong time to the wrong person - not out of malice, but simply out of an inability to pick up the frequency of the emotional signals being sent.

The carving for these pathways is the carving of her character. Neuroscience is telling us that beyond her mid-teens, there is a limit to how much of her character she can recarve.

Neuroscience confirms what great managers know. Her filter, and the recurring patterns of behavior that it creates, is enduring. In the most important ways she is permanently, wonderfully, unique.

So are you. And, of course, so are the people you hire.

Your job as a leader is to best utilize the strengths and if possible even harness the weaknesses of your team members. It is not to try to fix every single weaknesses or to eradicate every fault out in your team. People with high degree of emotional attachment being moved over to PR departments and flourishing there is one simple and classic example. Keep your eyes open and you will find multiple others.

You might be able to teach people new skills and technology, but if you are trying to teach someone how he can feel empathy towards others, or why he should be lying less, you are probably wasting his time and your time.

Every time you find an issue with the basic trait or character of a particular individual, trying to fix the issue is a waste of everyone's time. Hoping that you will be able to fix the weakness is hoping for too much. If glaring issues exist with an individuals personality, character or basic trait and you believe that these issues will be a problem in letting him flourish in his work, you might want to:

  1. Consider not hiring the individual if you can (unless of-course you can find a different role where he fits really well).
  2. If you are stuck with an individual, you have spent umpteen numbers of hours trying to fix a problem and your organization lacks another role where he fits, asking a person to leave your organization might be an option. It is hard, but most veteran managers will tell you that you are a management virgin till you have done this at-least once.
  3. Finding him a role where he can utilize his weaknesses and turn those into his strengths - if you can do this, you can pat yourself on your back, because this dear reader, is the biggest 'help' you can extend to someone. This is what leadership is all about.

Remember, next time you see someone in your team with a weakness in one or more of his basic traits, do not focus on trying to fix the weakness. Instead, focus on finding him a role where he can utilize his weaknesses and turn those into his strengths.

I wish you good luck.

posted on Sunday, January 24, 2010 10:43:30 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, January 23, 2010

During its early days Multiplitaxion Inc, was a dramatic company with equally dramatic projects, every single one of which could have been quite literally turned into a small documentary or a movie. Of those projects a particular one, which for the purposes of this post, we shall refer to as 'Project-Rocket-Science' introduced me to, what I later started referring to as F@#K-YOU-Code.

The story started out with Fred intimidating a team member to write a piece of code that would transmit a file over a message queue which would then, at a later stage, transmit the file over to the client. The message queue was locked down there were serious issues with submitting requests to it.

Both pressure and intimidation on the developer were increased to get the job done on time so much so that we could see the tension in the developer's eye. He was quite literally working sixteen hours a day and was getting seriously nervous about the fact that he was facing a problem and no-one cared to help. Every time he went to Fred seeking help he returned, with his hands full of insulting remarks.

Then one fine morning it happened. The Breakthrough. Clicking the 'transmit' button on the screen showed the message 'file transmitted' and the entire team rejoiced. Soon multiple other complicated problems in the project started getting solved almost magically. The project was back on time, and the pressure and intimidation-levels came down.

A couple weeks later, as the project started nearing the testing phase, two of the best developers, including the developer who was working on the file transmission piece resigned and left the organization. Then others started following.

The couple of guys that remained in the team continued with the project.

A few days later, as the project moved into the testing phase, a tiny little bug appeared on the bug tracking system which was titled --- 'File is not getting transmitted when the transmit button is clicked'.

When Jack, who was a young and budding developer was brought over to the project and assigned this bug; he decided to study the code and get to the root cause of the bug. It took him less than ten minutes to get to the root cause and when he showed us what he had found, every single one of us laughed inwardly and at the same time we felt a chill run down our spines.

Embedded behind the click event of the button were two lines of code which read:

// No immediate fix was found for the file transmission issue. Will be fixed later.
Response.Write("File Transmitted.");

Jack, said in a as-a-matter-of-fact, cold blooded tone - 'it is not a bug. The code never did anything other than display a message of successful transmission'

Then after a long pause, he remarked, 'why would anyone do something like this?'

My response was rather spontaneous and unplanned --- It's F@#K-YOU-Code. That is what he wanted to say when he was writing this.

The person who wrote the two lines wanted to send a very clear message to Fred through these two lines of code, before he got sick and tired of the insults, the intimidation and the pressure. Before he resigned, he had cracked the biggest practical joke that I ever saw in my career and it took us two weeks and a QA cycle to catch his practical joke. By the time we did, he was gone.

But the dramatic twists of this real life story do not end here.

When Jack went back to Fred, and tried to explain to Fred how what he was trying to fix was not just-a-bug. It was functionality that he would implement and that it would take time, Fred pretended like he was not hearing English but a totally different language.

Jack was now under the intimidation and intense pressure spotlight. Jack worked for two weekends and spent more than sixteen hours a day trying to replace the two lines of practical joke with genuine code that actually transmitted the file. Then on a Friday Jack was told that he was causing the project to stall and the fact that he was not being able to resolve a simple bug, was causing serious doubts on his competence.

The following Monday, we heard about Jack's resignation. This bit was expected.

What was not expected however, was that, on his last day, Jack logged into the bug tracking system and marked the bug as 'Resolved' and in the comment field added a line - 'resolved using the same approach of original implementation'.

As you would expect, the bug of course, was not resolved.

When we asked Jack what he meant by what he wrote in the comment field of the bug tracker he responded with a rather sarcastic smile. We knew what it meant - 'F@#K-YOU-Code, F@#K-YOU-Resolution' - the bug was quite literally 'resolved' using the exact same approach of the original implementation. Jack did not do a thing to fix the code. He just went to the bug tracker and marked it as resolved on his last day at work.

Three weeks after Jack resigned, the organization discovered that all the other complicated problems in the project that had started getting fixed were also fixed using F@#K-YOU-Code, written by people who had planned their resignation and left before they were caught.

The project went into a nose dive.

As someone who was not directly connected to the project, I saw the team members who were directly connected run for cover.  As for Fred, no-one did a root cause analysis of why the project failed and Fred was moved to manage another project.

Of-course, no-one in the 'upper management' could have even thought about developers writing F@#K-YOU-Code as a symptom and intimidation as a root cause for a project failure.

They were busy looking for more complicated reasons like - The-Requirements-Were-Not-Clearly-Defined or The-Scope-Was-Not-Correctly-Measured.

Even though this was a hugely dramatic, one in a million example of F@#K-YOU-Code that you get to see in your professional life, even today, every once in a while I see developers write subtle examples of F@#K-YOU-Code every time they are cornered using tools like insult and intimidation. Of-course they don't plan their resignations and crack practical jokes as huge as the one I witnessed, but every time they are cornered, chances are that they will litter the codebase.

They will leave a broken window with a F@#K-YOU-FOR-CORNERING-ME message silently and subtly embedded in the codebase without even knowing or fully realizing that they are doing so.

F@#K-YOU-Code might be causing your project to fail right now and you may not even know it.

Talk to your developers, make them feel at home, do not (and I cannot emphasize this enough) use an intimidating or a condescending tone while talking to them. Encourage them to bring problems out in the open and when they do, stop playing the blame game and help them fix the issues.

I wish you good luck.

posted on Saturday, January 23, 2010 10:29:51 PM UTC  #    Comments [0] Trackback
Posted on: Friday, January 22, 2010

Fred sits high up on the pecking order of Multiplitaxion Inc. He is notoriously famous for meticulously planning his projects by the man-hour and maintaining hugely elaborate Gantt Charts which he uses to track people by-the-day.

He is in control.

When did Jack the developer come in today morning. How many hours of work did he do today. What did Jack do yesterday.

Fred knows it all.

Panic buttons, artificial deadlines, pressure techniques - Fred has has all the arrows in his management quiver.

Arrows which he fires from time to time.

And then there is a secret arrow which never misses its target, even if all the other arrows do not work.

Intimidation.

The use of I-am-highly-disappointed-in-you line of conversation is just for starters. Fred can go far in this line of discussion and he can seriously make you hate yourself after just thirty minutes with him in a meeting room.

Fred is young. Fred is taking his first steps of professional management. Fred is ambitious and merciless. Fred, dear reader, is getting things done.

Fred has tasted success with Management-by-intimidation and he has no intentions of stopping.

I see Fred function and I cringe.

More than I feel sorry for the people that work with Fred, I feel sorry for Fred himself.

What Fred is doing, dear reader, is pretty similar to drunk driving. You feel the rush of adrenalin in your nerves, you feel like the top of the world and you keep moving faster till you crash your way into a sudden accident.

With Management-By-Intimidation the sudden accidents happen when you forget:

  1. There are people sitting higher up than you in pecking order.
  2. Even though some of them are really nice-to-work-with-even-when-the-sky-is-falling they can be really big a@#holes when they spot a@#holes and have to deal with them.
  3. Just when you think that no one is watching you intimidate young engineers fresh out of college, someone who is higher up in the pecking order and can be a bigger a@#hole than you if he wants to be, is either watching you or will find out.

Monica Burns-Capers describes this in her article on Management by intimidation. She explains:

Managing by intimidation is never the right way in any organization. If it has worked for you now or in the past, you’ll soon regret it. While you are busy intimidating your staff, someone in a higher position is paying attention. You think you are getting away with it because nobody has said anything. You’re not. It’s only a matter of time now. The higher-ups are waiting on you to hang yourself. And you will. You can’t possibly think that your intimidation will go on forever. When you hang yourself, watch how far down the hill your career starts to plummet. It’ll go so far down, you won’t be able to see it anymore.

So if you want longevity in your career and you want to gain the respect of your subordinates and your colleagues, learn to give them respect first. Tell them that they are doing a good job sometimes. Reward them for their work.

Manage your staff by the knowledge and people skills that you posses. Besides, isn’t that what got you the position in the first place.

Even in the most bureaucratic of organizations, if you work hard at making yourself hated and disliked, you will eventually be hated and disliked, consistently across the organization.

When you play around with intimidation as a tool, you typically get a lot more attention as a manager and you create huge ripples (sometimes even waves) in the organizational pond.

If you ask me personally, I have seen more than a dozen managers who believed in the idea of intimidation get fired and yet, every year, I bump into at-least one or two managers who tend to practice the art of management-by-intimidation, within closed doors of meeting room. Every single one of them seem to believe that no-one in the pecking order above them will find out and as long as things get done.

Almost invariably, every single one of them tend to become insanely famous as a@#holes and end up collecting dislike and hatred enough to get them fired.

Remember, management by intimidation is pretty much like drunk driving. It is not just a stupid thing to do, it is actually pretty risky.

I leave you, dear reader, with a word of advice: even if you are having a bad day or you are getting a strong urge to shout at someone, be nice. It helps you much more than the person you are being nice to.

Empathy happens to be much more powerful arrow to have in your quicker and it is just as accurate when it comes to hitting the bulls-eye. Go ahead, and replace intimidation with empathy and you just might see some serious magic in your work life.

I wish you good luck.

posted on Friday, January 22, 2010 10:41:46 PM UTC  #    Comments [3] Trackback
Posted on: Sunday, January 17, 2010

Your Geek Isn't Shy. He Is Just Not 'At Home' Yet.

Even though I cannot describe my school life in the friendly neighborhood Indian school as traumatic, but I often use the word 'painful' to describe it rather accurately. From arguments with teachers, to being yelled at by the principal for not getting insanely short haircuts, if there is one thing school did in my life, it is that it left painful scars on my personality that took years of passionate software development to wipe out.

Through the twelve years of schooling I was labeled multiple times.

Here is a short and non-extensive list of labels I received in the twelve years of schooling:

  1. Introvert.
  2. Shy.
  3. Complicated.
  4. Pull-through (I was fairly skinny back then).
  5. Trouble maker.
  6. Not a gamer.
  7. A vice captain (amongst sixteen other captains and vice captains).
  8. A very good student.
  9. A geek.

The list is endless and the labels changed every other day based on every single act that I indulged in, the teachers mood, the teachers interaction with his wife the night before and a gazillion other factors which were beyond my comprehension as a teenager.

To put it mildly, I was totally confused about the role of people like me, who had opinions about everything and people who begged to differ on most things, played in an environment which was supposed to be factory for churning out 'responsible citizens' with shinning white uniforms and really short haircuts.

Long story short, I spent years, feeling that there was 'something missing' or more specifically - 'something wrong' with our so-called education system.

Then, school ended.

Of course there were moments to treasure, but basically, I heaved a sigh of relief that it was over and other than keeping in touch with a few friends and having a couple of really bad dreams about exams during my school life, I never made a conscious effort to look back.

Work life for me was a different experience all together. On the very first day at work, I introduced myself with a rather interesting improvised speech and bagged the most interesting introduction prize. From the very first day at work, one message was loud and clear - be a purple cow - and you can actually get rewarded for being different.

A job later, there were tons of realizations I had experienced that I never had during twelve years of schooling:

  1. If you did not feel like reading books, there were tons of podcasts and webcasts you could just watch or listen to, in order to pick things up.
  2. If you did not agree to what your boss was saying, it was ok to interrupt and question him.
  3. If you did not like the idea of going out to a loud party and dancing all night, you could have some serious fun getting together with a bunch of friends and having conversations on technology, life and management.
  4. If you did not like the idea of wearing a tie to office, you could wear jeans and T-Shirts.
  5. If you were late at office, you could work late and still get your work done.

Of all the realizations that I had, here is the most important one: If you did not like things, you were both empowered and free to change them.

Years after school, when I look back to reflect on where my school went utterly wrong and where most organizations that I worked in utterly succeeded at getting the most out of the geek in me, it was all about - making me feel - at home.

What You Need To Know While Working With Geeks.

While schools are busy stereotyping, putting human beings in buckets of categories and labeling them they often tend to miss out of making folks feel 'at home' when they are sitting in a class room listening to a lecture or for that matter, when they are being asked to have 'fun' at school party with loud music.

The thing with the geek within you, is that it likes to live in a nice dark homely cave.

Michael Lopp in his essay on the Nerd Handbook, explains how you can make a nerd venture out of that cave and do something different, like going out on a vacation. He explains how you can get the nerd in you to do new and interesting things:

Map the things he’s bad at to the things he loves. You love to travel, but your nerd would prefer to hide in his cave for hours on end chasing The High. You need to convince him of two things.

First, you need to convince him that you’re going to do your best to recreate his cave in his new surrounding. You’re going to create a quiet, dark place here he can orient himself and figure out which way the water flushes down the toilet. Traveling internationally? Carve out three days somewhere quiet at the beginning of the trip.

Traveling across the US?

How about letting him chill on the bed for a half-day before you drag him out to see the Golden Gate Bridge?

Second, and more importantly, you need to remind him about his insatiable appetite for information. You need to appeal to his deep love of discovering new content and help him understand that there may be no greater content fire hose than waking up in a hotel overlooking the Grand Canal in Venice where you don’t speak a word of Italian.

Today, the once shy geek from high-school interacts with over a hundred people every week, communicates with dozens others. The same shy nerd deeply believes in and nudges other nerds to go out of their way to connect to other human beings.

I enjoy games ranging from ping-pong to ice-skating and the pull-through has been putting on enough weight that he is now thinking of excising to keep his weight under control.

The point here, dear reader, is not to demonstrate how much I have changed over time, but to illustrate how every label that you put on geeks come off, the moment you give the geeks their dark little corner where they feel at home and them allow him to grow from there.

Next time you bump into a geek, and you find yourself attaching labels to the geek, remember, your geek is not shy - he is just not 'at home' yet. Before you label him as shy, introvert, complicated or anything else - try making him feel at home and he just might surprise you.

Something my school never understood, but every organization that employed me, understood rather well.

Something you try spending time to understand as well. Specially If you are a young and budding manager, working with a team of geeks. Go make them feel at home and reap the benefits of having them on your side.

I wish you good luck.

posted on Sunday, January 17, 2010 8:03:17 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, January 16, 2010

Jack has been going around in circles. He is asking me about how I designed that logger in a project that I worked on two years ago. His team is working on a logger and he seems to need some advice. The programmer in me is alive, jumping at the whiteboard and drawing lines with wild vigor explaining the design that was used a couple of years ago and did wonders for us. After listening for sometime Jack breaks the news.

The design I am explaining on the whiteboard is pretty similar to what Jack already had in mind.

But then, there seems to be a problem.

His manager, is going a different route. An approach that Jack knows will not work. Things are bad. The team has already started working using the manager's approach. Jack, is not seeking the programmer in me for help, he is seeking the bullshit buster in me to chime in and talk to his manager. Jack is seeking my help to stop the entire team from moving in the wrong direction.

What started as a discussion around angular brackets of XML has turned into a discussion of confronting the issue and saying 'no' to things that you do not agree to.

My advice to Jack is simple. Instead of talking to his manager, I gently nudge Jack to have that conversation. I nudge Jack to tell his manager that his manager's decision is not correct.

The advice is supposed to have to good effects.

First thing it is supposed to do is help Jack develop a stronger spine and become an individual who is not just capable of having an opinion but standing by it too.

The other really important thing that the advice is supposed to do, is to help Jack's manager from, as Michael Lopp, in his book, Managing Humans, would say, 'Losing it'.  Michael  uses his book to explain:

Losing It.

Managers don’t lose it simply because the pixies showed up with the top hat, they lose it because those they work with forget to look at the back of the hat.

Remember:
Front: I'm the boss.
Back: ... For now.

Management is a myth, just like the top hat. We, as employees, believe it’s there, so we treat these management types differently. We operate under the assumption that they are the ones who can make decisions.

When the team is stuck on a hard problem, we gather in our manager’s office, present our case, and then the manager nods and says, “Go that way!” More often than not, we’re so happy to be past the hard problem, we don’t even question whether it’s the right decision or not. “He’s got the top hat, so he must be right!”

No no no no. Also? No.

Managers lose it when they are no longer questioned in their decisions. When the team stops questioning authority, the manager slowly starts to believe that his decisions are always good, and while it feels great to be right all the time, it’s statistically impossible.

The most experienced managers in the world make horribly bad decisions all the time. The good ones have learned how to recover from their decisions with dignity, but more importantly, with
help from the team.

Saying no forces an idea to defend itself with facts. It forces a manager under the influence of his top hat to stop and think. Yes, I know that top hat can be intimidating, and yeah, he’s the guy who signs the checks, but each time you allow your manager to charge forward with unchecked blind enthusiasm, you only reinforce his perception that he’s never wrong. That’s a ticket straight to Crazy Town.

If you are a young and budding engineer reading this and if there is one advice I can give you today, it is that you develop a strong spine to constantly ask - why -  and question authority. Even if that means questioning decisions your manager might be taking.

If you believe your manager is taking a wrong decision, go take him for a cup of coffee and ask him to explain his rationale behind his decision.

If his explanations do not make sense, have the spine to say 'no'.

I wrap this post up, dear reader, with an answer to the question Jack asks me when I give him the advice of directly talking to his manager instead of routing it through me. 'What if he feels bad about me questioning him?' - Jack asks.

My answer to the question, dear reader, is a rather simple and direct response- 'That is his problem, not yours'.

What I want you to do dear reader, is look around you. Do you see something wrong? Something that you are doing just because someone higher up in the pecking order or your manager asked you to do it and doing it does not make any sense to you?

Maybe it is time to question authority - not just for your own sake but even for the sake of helping your manager from 'losing it'.

Now give up your mitigated speech and go have that direct discussion that you were so scared to have. Go and gently remind your manager that you think he is taking a wrong decision, and do not stop nudging him gently till either you are convinced he is right or till he changes his decision.

I wish you good luck.

posted on Saturday, January 16, 2010 10:27:15 PM UTC  #    Comments [2] Trackback
Posted on: Friday, January 15, 2010

Jack has been on my team for months. Besides being a kickass programmer fresh out of college, Jack is also a gadget freak. From the latest iPhone to the coolest iPod, Jack owns it all.

In a casual discussion on why Jack has not yet bought a domain name or a website yet where he can blog, he responds with a grin on his face, that he is, as he likes to say in situations like these, running seriously low on funds.

I cringe.

Of all the programmers I have worked with, when it comes to spending money, I have come across only two kinds - the kind that sees their career from a passionate entrepreneurial mindset and the kind that does not.

If you fall in the first category, before you grab a fancy-car or a sexy-motor-cycle, a decent part of your paycheck is automatically re-invested towards becoming a better programmer or a better individual. You probably invest in books, own multiple domains, buy tools which improve your productivity as a programmer, enroll for classes or sign up for seminars.

If you fall in the second category, you probably have a dozen excuses on why you do not need to buy your own domain or attend that programming class. If you fall in this category, you are probably also really good at convincing and telling yourself why you need that new car.

A good programmer is difficult to come across. A good programmer, spending time, effort and money to get better at the craft of building software is a rather rare phenomenon. This rare breed, that once walked planet earth and spent their pocket money to play with Altairs because they were passionate about programming these machines, is fast moving towards extinction.

Observe the young and budding programmers you work with and you might easily stumble upon way too programmers who shell out a truck load of money to buy the latest-slick-looking-phone out there, but are totally hesitant while enrolling for a programming class, buying a book on programming or getting their own domain.

Like it or not, programming, dear reader, is a profession which demands that you re-invest a part of what you earn in yourself. If you hesitate in doing so, you are no different than organizations that invest in their buildings much more than they invest in their employees.

Go ahead. This month, buy a few books, enroll in a class, upgrade your internet bandwidth, buy a domain name, try to do a small business venture or just buy a couple of refactoring tools like Resharper and Code-Rush.

Put simply, let this be a month where you begin setting aside some money that you will consciously spend on getting better at the craft of building software and becoming a better individual. Then do it consistently, month after month.

I wish you good luck.

posted on Friday, January 15, 2010 10:36:00 PM UTC  #    Comments [2] Trackback
Posted on: Sunday, January 10, 2010

Every time I sit down in a meeting where ideas for the next generation of software products are thrown on the whiteboard, I cringe. Something seems fundamentally wrong about the image of a team of nerdy scientists, coming together in a dimly lit meeting room, to conceive and implement ideas which change the world.

Nassim Nicholas Taleb in his thought provoking book, The Black Swan challenges this whole idea and introduces the idea of serendipitous discoveries. He explains:

If you think that the inventions we see around us came from someone sitting in a cubicle and concocting them according to a timetable, think again: almost everything of the moment is the product of serendipity. The term serendipity was coined in a letter by the writer Hugh Walpole, who derived it from a fairy tale, "The Three Princes of Serendip."

These princes "were always making discoveries by accident or sagacity, of things which they were not in quest of."

In other words, you find something you are not looking for and it changes the world, while wondering after its discovery why it "took so long" to arrive at something so obvious. No journalist was present when  the wheel was invented, but I am ready to bet that people did not just embark on the project of inventing the wheel (that main engine of growth) and then complete it according to a timetable. Likewise with most inventions.

Take this dramatic example of a serendipitous discovery. Alexander Fleming was cleaning up his laboratory when he found that pénicillium mold had contaminated one of his old experiments. He thus happened upon the antibacterial properties of penicillin, the reason many of us are alive today (including, as I said (earlier), myself, for typhoid fever is often fatal when untreated).

True, Fleming was looking for "something," but the actual discovery was simply serendipitous. Furthermore, while in hindsight the discovery appears momentous, it took a very long time for health officials to realize the importance of what they had on their hands. Even Fleming lost faith in the idea before it was subsequently revived.

In 1965 two radio astronomists at Bell Labs in New Jersey who were mounting a large antenna were bothered by a background noise, a hiss, like the static that you hear when you have bad reception.

The noise could not be eradicated—even after they cleaned the bird excrement out of the dish, since they were convinced that bird poop was behind the noise. It took a while for them to figure out that what they were hearing was the trace of the birth of the universe, the cosmic background microwave radiation. This discovery revived the big bang theory, a languishing idea that was posited by earlier researchers.

If you think on the lines of Taleb, every innovation in the field of computer science, ranging from the creation of MS-Dos to the building of twitter, does seem like a serendipitous discovery with only one a few things in common:

  1. Their builders were playing around with technology and were involved with projects which were nothing more than what can otherwise be described as 'fun projects' when, as a matter of chance, they bumped into something which was capable of taking a life of its own.
  2. They were not afraid to fail - as a matter of fact, they failed multiple times before the serendipitous innovation which set them apart from the other mere mortals that walk planet earth.
  3. When they bumped into a serendipitous discovery and saw what they had bumped into, they worked hard for years to turn it into a concrete implementation with a real existence. 

The next time you find yourself in a meeting where new ideas for changing the world of software development or redefining how people do business are being thrown on a whiteboard, remember this - the harder you try to desperately innovate ideas in a meeting room, the crappier your ideas will be.

Maybe you should just cancel the meeting and go for a walk. Maybe you should just get back to working on that side project and have fun like a child. Keep your eyes open and be on constant lookout for serendipitous discoveries that take a life of their own. Keep jabbing, keep opening your IDE, and always be on the lookout for bird-poop. When you find the idea worth chasing, work hard - consistently. Rest of it should just workout over time.

I wish you good luck.

posted on Sunday, January 10, 2010 11:31:27 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, January 09, 2010

You have hand-picked every single member in your team. Every single one of them is a fully competent one man army. When you ask them to do something, things get done.

Your organization is growing faster than you think. There is more work around than your team can possibly complete in years. You tell yourself that you need more people. More small teams like this one.

You scale up.

You hire more kickass programmers.

It is time. You ask your team members to step up, grow and lead their very own teams.

You continue working with your current team. Each of them now has their very own team which in turn is running a module or an entire project. All of these teams are highly effective and getting their job done.

You now have what they call - an organizational structure of self sustaining teams - in the management world.

Collectively, these teams are getting more done than you ever thought was possible.

You are living in a paradise.

Now unless you are seriously lucky, chances are, that you are going to snap out of your dream really fast.

It will happen when a young recruit you placed in one of these teams last year is going to walk up to you one fine morning and say in very clear words that his team culture is nowhere close to the culture you wanted to promote in your team. He might, for example, tell you that he is being micro-managed, bossed around or being pressured to work late three days a week.

It will hit you. Really hard. The realization that some of the core values that you worked really hard to push in your team may not be flowing through to rest of the organizational structure under it.

Jack is a very effective programmer. During his course of working with you, you developed strong respect for his talents and a strong friendship with him. You wanted to help him grow and hence the decision of letting him manage his own team. Now you have a young and budding engineer working under Jack telling you loud and clear that Jack, is not a very good manager or for that matter a very good leader.

Accepting that, dear reader, is going to be a painful reconciliation.

Confronting the issue and doing something about it is going to be even more painful. Your mind will trick you into telling yourself amazing stories in favor of Jack - Maybe his team members are bitching unnecessarily. Maybe he needs more time. His team is effective; maybe it is just the fact that his management style is different. His team is effective - he is getting things done - his team members will eventually get used to his working style.

Put simply, you can either confront the issue or tell yourself stories to avoid it.

What you are doing, dear reader is, making a choice. A choice between whether your organization will live by its core values that got it so far or it will grow big and lose its soul.

Go ahead, cut through to the bone. Confront the issue. Look at Jack in the eye and ask him to make a choice between passing on the core values, happiness and freedom that he receives from you, over to his team or stepping down and letting someone else lead.

That, dear reader, is your own chances at letting your organization retain the magical touch of being small as it grows and letting it retain its soul.

I wish you good luck.

posted on Saturday, January 09, 2010 10:06:27 PM UTC  #    Comments [2] Trackback
Posted on: Friday, January 08, 2010

Years ago, I find myself working for a huge Texas based client of ours. I have slowly and gradually become one of the star performers in a team of three. For reasons beyond my understanding, it is often being assumed that I am of French (or some other) origin.

It is somewhere bang in the middle of the project that a SOS request for help comes in from a connected project team that is working out of the same campus. When Fred walks up to a couple of other guys and me, seeking help with fixing and refactoring code he is rather articulate about how the code got this convoluted in the first place. He explains - 'They got some Indians to write this. Those Indian guys f@#cked it up. What else could you expect?'

I smile inwardly.

After spending some time, we have white boarded a solution and I find Fred thanking us for all our help in fixing the code. Without further adieu I decide to disclose my true identity using a friendly joke cracked with a simple as-a-matter-of-fact smile: 'So, the code that was fu@#ked up by a stupid Indian was fixed by another stupid Indian'. 

I stand there smiling while Fred experiences a long awkward silence as the news of my being an Indian slowly sinks into his head.

Fred apologies. Suddenly he acts like I have caught him scoring a foul.

I crack a joke about me knowing exactly how it feels to work with Indians. That lightens the situation instantly.

Then we talk about whether and movies. Soon life returns back to normal.

Years later I find myself writing about the incident and adding my very own fictional elements to it.

If you have been in the business of building software long enough and have worked in more than a couple of countries, chances are, that you might have pre-conceived notions and stereotypes about people from different countries.

Chimamanda Adichie describes the issues with this kind stereotyping in her TED talk on the danger of a single story. She explains:

Years later I thought about this when I left Nigeria to go a university, in the United States.

I was nineteen. My American roommate was shocked by me. She asked where I had learnt to speak English so well and was confused when I said that Nigeria happens to have English as its official language.

She asked if she could listen to what she called my 'tribal music' and was consequently very disappointed when I produced my tape of Mariah Carrey.

She assumed that I did not know how to use to a stove. What struck me was this - she had felt sorry for me even before she saw me; had a default position towards me as an African, was a kind of patronizing, well-meaning pity.

My roommate had a single story of Africa - A Single story of catastrophe. In this story there was no possibility of Africans being similar to her in any way. No possibility of feelings more complex than pity. No possibility of a connection as human equals.

The single story creates stereotypes and the problem with stereotypes is not that they are untrue but that they are incomplete. They make one story become the only story.

In my career, I have worked with people from Pakistan, Germany, England, Sri-Lanka and the US. If there is one thing I have learnt about people from different countries around the world, it is that smart people exist in every nook-and-corner of the world.

My approach towards classifying human beings is pretty similar thought approach Nassim Nicholas Taleb takes in his book The Black Swan. In his famous book, the black swan, Nassim describes his thought process on this topic. He explains:

This nationality business helps you make a great story and satisfies your hunger for ascription of causes.

It seems to be the dump site where all explanations go until one can ferret out a more obvious one (such as, say, some evolutionary argument that "makes sense").

Indeed, people tend to fool themselves with their self-narrative of "national identity," which, in a breakthrough paper in Science by sixty-five authors, was shown to be a total fiction.

("National traits" might be great for movies, they might help a lot with war, but they are Platonic notions that carry no empirical validity—yet, for example, both the English and the non-English erroneously believe in an English "national temperament.")

Empirically, sex, social class, and profession seem to be better predictors of someone's behavior than nationality (a male from Sweden resembles a male from Togo more than a female from Sweden; a philosopher from Peru resembles a philosopher from Scotland more than a janitor from Peru; and so on).

This post, dear reader, is not so much about an isolated incident of my life, or stereotypes connected with my being an Indian. This post, dear reader, is my humble attempt at gently nudging you, dear reader, to avoid all stereotypes in your life, as far as you can.

Software developers are not very good at communication.

Geeks are usually not into fitness or fashion.

All Indians are cheap bodies who write shitty code and suck at communication.

As programmers, we are surrounded by hundreds of these stereotypes and what I intend to do with this series of posts, is to blow up some of these stereotypes, expose exceptions, and bring to your notice, the fact that multiple sides of the story can exist.

Now, what I want you to do, dear reader, is to go out there, every once in a while, pick up any of of these stereotypes, challenge it and find out the truth for yourself. For it is only by challenging some of these stereotypes that you will find truly remarkable people, stories and results.

I wish you good luck.

posted on Friday, January 08, 2010 9:10:59 PM UTC  #    Comments [2] Trackback
Posted on: Sunday, January 03, 2010

Jack is at my desk; talking about how he deserves an additional seven percent salary hike over and above what his next month's appraisal promises him. He even has an offer letter from a different company to show me what his 'market value' is. It truly is just seven percent more than what Multiplitaxion Inc would have promised him in the next appraisal.

Jack really 'needs' that seven percent and he needs the seven percent now. He even has an offer letter to prove to me that he means business.

I file a request for a 'match' and escalate the request to what is often referred to as 'upper management'.

I am happy because I know the request might get accepted.

At the same time however; I feel deeply sorry for Jack deep down inside; because Jack just used his trump card for a measly seven percent salary hike.

For the first couple of years that you spend in an organization; you are basically warming up and developing deeper roots within the organization. You are understanding the culture chart of the organization; understanding what it will take to bring about changes. It is after these couple of years; that you wake up one fine morning and find out that people are listening to what you have to say.

This is when you start loving your organization and your organization starts loving you back.

Attached with this love is also the fear element of this relationship coming to an end. Your organization has a fear of losing you; and you dear; reader have a fear of losing your organization. 

This is when; you start realizing that people in your team and at times even folks in other teams are listening to you or looking up to you for help or advice. This is when you start making small changes to the organization.

Word of advice if you are going through this phase of your life: Slow down. Be careful.

This is by far the riskiest time of your career. This is when you learn that you as a young; budding and a rather valuable engineer have a trump card you can use.

Your resignation.

You know that it will send ripples down the organizational pond. This is when you will be tempted to do crazy things - like negotiate a seven percent hike on your salary based on offers from another organization.

Now here is another word of advice if you have been reading along and have been thinking of using your trump card: Don't.

The use of the trump card passes valuable information over to your organization. This is the kind of stuff folks people who run companies for instance; are on the look out for:

What drives you.

Your using the trump card for a simple salary percentage hike says out loud that the number on your paycheck drives you. I don't know about you; but if I was running a startup; I would be a little uncomfortable putting up with someone who is solely driven by the numbers on his paycheck so much so that he can quit for a seven percent salary hike.

What would it take to retain you.

You know the whole thing about love relationships that make them so desirable; it is the mystery of it. It involves working hard to getting to know the other person; spending time with the other person and learning what the other person really wants or does not want.

Now; all of this also applies to retention of employee. Your quitting for a small percentage of salary hike; yells out loud that retaining you in the organization is as easy as retaining a piece of furniture that can be bought from a local furniture store.

What are the changes that you can bring about.

Most organizations and entrepreneurs tend to look for leadership in people they want to promote and retain in the long term. Most entrepreneurs also realize that they need this leadership to spread their shared vision and to correct them if they start making mistakes or walking in the wrong direction.

If all that worries you every appraisal cycle is a seven percent salary hike for yourself; I personally; would not see you as someone who can be what I call a 'partner in crime'. An excellent employee; maybe; but not someone who can share a vision and work for the organization like it truly belongs to him.

With years spent in the organization; you get a truck load of responsibilities and a trump card that you; at all time; should try your best; not to use.

Remember; the lesser you use the trump card; the better off you will be.

And now; a final word of advice: forget that the trump card exist; and get back to work. If you continue using your trump card; chances are that things will never work out and you might never really exactly get what you wanted; but if you stop using it; forget that it exists; and focus on working towards growth; chances are that things might work out in the long run.

I wish you good luck.

posted on Sunday, January 03, 2010 10:11:01 PM UTC  #    Comments [1] Trackback
Posted on: Saturday, January 02, 2010

At Multiplitaxion Inc; people are optimistic about everything that they do. Jack; a programmer sitting across in his is silently and quietly celebrating the fact that the organization has signed up a new project. My problem; dear reader; is my knowing that we do not have a sign off from a client yet.

How did he learn about the new client; I ask him hesitantly.

His manager told him; I am told.

I cringe; then I decide to keep my gob shut.

As someone who leads teams of programmers there is something you need to know about both good-news and bad-news. They spread; within the corridors of the organization. They spread in an uncontrolled manner; pretty much like an organizational wild fire that is rather painful to stop once it starts spreading.

To add to that; most managers that I have seen around the globe seem to have another problem. It is a problem with transmission of messages. Messages often change drastically when they move from managers to programmers.

A classic example for instance is: we 'might' sign off a really huge project next week becomes we 'will' sign off a really huge project next week.

What this means is that getting Jack in a room and telling him about a new deal that Multiplitaxion Inc 'might' sign off; will often mean that you end up telling him about a new deal Multiplitaxion Inc 'will' sign off.

When you do that as a manager what you are doing is adding a lethal dose of optimism and starting a wildfire. If you are one lucky son of a gun; the sign off will happen next week and the wildfire of happiness you started will do no harm.

If however; you are like most of us mere mortals; in most cases Murphy's Law will kick in; which simply put; means that if something can go wrong; it will. It is then; that you might find yourself indulging in a painful firefighting exercise.

Spread wildfires of happiness with optimism a couple of times and you have lost all confidence that people who work with you had in you.

As individuals who lead a team and as human beings in general; we crave to become the bearer of good news.

Obviously you love spreading Happy wildfires; but before you do; think.

Are you adding unnecessary elements of optimism to these happy wildfires? Are you creating happy wildfires which you might have to bring to painful a painful halt in future? Are your happy wildfire based on genuine confirmed good-news or are there elements of your personal wishful thinking?

If your good news has elements of personal optimism and wishful thinking attached to it; you be better off waiting a while before you light the wildfire. Hold off lighting the fire till you have a confirmation of good news and till you know deep down inside that there are no elements of personal optimism and wishful thinking involved in lighting the wildfire of happiness.

I wish you good luck.

posted on Saturday, January 02, 2010 9:06:56 PM UTC  #    Comments [3] Trackback
Posted on: Sunday, December 27, 2009

Fred approaches my office with heavy steps and a question that often makes me cringe. I have done the whole motivating; playing the father; explaining; mentoring part with Fred a thousand times before and yet the question remains - 'when is my project ending so that I can be placed on a new project'.

The answer makes a slow entry into my mind as I contemplate on if I should be breaking the bad news to Fred yet --- "Never. Hopefully." --- I hear a voice deep down in my mind respond to that question.

If you go by the paradigm - everything you do is a project  - I am not so sure I agree to Fred or for that matter Tom Mochal's idea of completing a project as quickly as you can. Tom; in his story about how he put a never ending project to end; sounds very typical of how most project managers or developers think about and react to long running projects. He documents his very own personal experience:

“Terry,” I began. “What’s going on? Your project is lasting much longer than anticipated, yet I don’t see or hear any indication that you are behind schedule.”

“There have been a number of scope changes that have required us to push the end date out,” Terry said. “However, you will be glad to know that I am invoking scope-change management. Each change is being approved by our sponsor, so we have been getting extra funding and extensions on our deadline.”

“That explains why no one is complaining,” I noted. “What types of change requests are you receiving?”

“They are mostly for additional features and functions, and small changes to our current deliverables,” she said. “That’s one reason why we have been able to accommodate most of them successfully. They don’t require a lot of work from our team.”

“What’s the future look like?” I asked. “Are you going to be able to complete the project in four weeks?”

“It’s not clear,” she replied a bit apprehensively. “Most of the shop floor supervisors have never had extensive Web experience. Now that they are getting more familiar with that environment, they are finding more and more features they want to incorporate.”

“Well, that’s not entirely good,” I said. “Projects are temporary endeavors to produce a set of deliverables. They need to come to an end at some point. I’m afraid you may be in a position where your project goes on and on, with minor changes bringing incremental and marginal business value.”

Terry agreed. “In fact, I think the team is starting to lose focus and energy. I have some concerns that we're getting a little sloppy.”

“Let’s talk with your sponsor about bringing the project to a close,” I suggested. “This doesn’t mean they have no chance for additional changes. If there is business value in additional modifications, let’s consider them enhancements for the future.” 

What Tom fundamentally misses out on; is that successful projects; often never really end. Sprints end. Versions do; too. But not the projects themselves. Any programmer worth his salt who has worked on a product that has stood the test of time and has survived for more than a couple of versions will tell you this.

Linux. Windows. JBoss. Microsoft Office. Go ahead. Pick any successful piece of software out there and ask their parent organizations when they plan on putting a stop to it.

You think that is a stupid idea?

Thought so.

Seriously; that is the whole point of writing code that you can support for years; growing your code organically and keeping it clean for years as you morph slowly over to new technology stacks and churn out new versions that do more; work faster and get better; year after year.

As developers and even as managers; we have this yearning desire to 'start fresh' every once in a while.

A desire to end your project and jump over to another one; often indicates a project badly implemented project in the first place.

The next time you get on a project; dear reader; may I suggest that you work under the basic assumption that your project is not going to end anytime soon and that you are going to be supporting what you write for multiple years to come.

That thought process; dear reader; might be your only chance against the temptation of creating a mess and then jumping over to something else; while someone else does a clean up of the mess you created.

Remember; as you write your code; work under the assumption that you are going to be stuck with your current project for life. Is your code maintainable? Easy to migrate part-by-part when new versions of the underlying technology stacks show up? If your code extendable? Is your code going to not just stay alive but thrive for the years to come?

If yes; you are going to love working in a never-ending project. If not; you might want to start by assuming that you are not leaving the project anytime soon; settle down; and start doing something about the mess that you just created.

I wish you good luck.

posted on Sunday, December 27, 2009 9:07:00 PM UTC  #    Comments [1] Trackback
Posted on: Sunday, December 27, 2009

On a bright sunny morning I find myself talking to a very smart acquaintance. The conversation revolves around how human beings in general and programmers in particular grow in their professional life.

He describes his mentoring approach using circles; where the green circle indicates your comfort zone and the red one indicates what your new assignment needs you to do.

His contention is that most managers encourage their employees do get involved with new assignments which are somewhat on these lines:

Put simply; with every new project; you are doing most of what you did in your last project and then you learn something new.

His approach to mentoring is simple; move the circles as far away from each other as practically possible; move people out of their comfort zone and see if they pull it off or breakdown and collapse.

I am myself a strong believer of getting out of your comfort zone. I have even suggested that developers should in fact bring themselves dangerously close to getting fired each year.

Having said that; I am not so sure if the approach is a universal solution to helping people grow.

Havi Brooks; for example; has a slightly different take on making people leave their comfort zone and presenting them with wild and scary challenges which make them collapse. She explains:

I can’t even tell you how many eager beaver coaches I meet at business events who can’t wait to meet people just like you, so they can drag you kicking and screaming from your comfort zone. They think they’re doing you a favor. They’re not.

They’re not doing it out of meanness, of course. They sincerely want to help. They think that if you can leave the place where you’re comfortable and try this new, scary thing, you’ll get over it already. The problem is that sometimes what you need in order to grow is more comfort. And this kind of work needs to happen where you feel safe; where you’re most comfortable.

That’s why there’s a zone for it.

In the future your grandchildren will look back on this age of insisting on people leaving their comfort zones with shock, horror and a sad shake of the head. The way we do now when we think about things like electric shock therapy and lobotomies. The atrocities of good intentions.

Instead of leaving your comfort zone, let it grow with you

Stretching is good. Gently. Learning new skills is good. Gradually.

Learning new things doesn’t have to mean leaving the comfort zone. You actually want to be growing your comfort zone. And you can do it with as much comfort as possible. At a pace and speed that are comfortable, with support from people who adore you, and adding tricks and techniques as you go.

Your comfort zone is your friend. So you have my permission to stop trying to break your way out of it and start trying to cultivate it, nourish it, grow it and be nice to it. Hey, I’m waving to you from mine — squeaky duck in hand — right now.

To be honest; I don’t have all the answers here. Each human being is different and while a hard push out of their comfort zone followed by a what-does-not-kill-you-makes-you-stronger approach might do wonders for some; some of your best developers might actually grow the fastest with a series of really gentle nudges where they are allowed to slowly and steadily increase the size of their comfort zone.

Maybe it is not about jumping out of your comfort zone; maybe it is just being on the edge of it all the time and then pushing it a little farther each time you can.

I cannot tell you if you should jump out of your comfort zone all together in an attempt to make yourself stronger or slowly grow your comfort zone every in a gradual step by step approach. If you think about it; both are 'technically' just different ways to 'grow' your comfort zone. One with hard jerks and push; the other with constant, consistent persistence.

Even though; given the choice; I might tend to lean more towards the brook's approach for the people who work with me; I am not here; dear reader; to advice you on which one of the two approaches you should take for your very own personal growth as a programmer.

What works best for you; in this case; is for you to find out yourself.

What I can tell you; however; is that even if your comfort zone is growing by a tiny-little-bit every single day of your life; and I seriously do not care what is making it grow - a hard push or a series of gentle nudges; you are probably on the right track. Focus on getting it to grow just a little wider; just a little faster each day of your life and you should be good.

I wish you good luck.

posted on Sunday, December 27, 2009 8:25:50 AM UTC  #    Comments [0] Trackback
Posted on: Sunday, December 20, 2009

Jim Collins in his book Good To Great describes the concept of Fox and The Hedgehog using one simple diagram.

Jim; in his book; explains the concept using the simple story by Isaiah Berlin who divided the world into two kinds of people; foxes and hedgehogs. Jim explains:

In his famous essay "The Hedgehog and the Fox," Isaiah Berlin divided the world into hedgehogs and foxes, based upon an ancient Greek parable: "The fox knows many things, but the hedgehog knows one big thing." The fox is a cunning creature, able to devise a myriad of complex strategies for sneak attacks upon the hedgehog. Day in and day out, the fox circles around the hedgehog's den, waiting for the perfect moment to pounce. Fast, sleek, beautiful, fleet of foot, and crafty - the fox looks like the sure winner. The hedgehog, on the other hand, is a dowdier creature, looking like a genetic mix-up between a porcupine and a small armadillo. He waddles along, going about his simple day, searching for lunch and taking care of his home.

The fox waits in cunning silence at the juncture in the trail. The hedgehog, minding his own business, wanders right into the path of the fox. "Aha, I've got you now!" thinks the fox. He leaps out, bounding across the ground, lightning fast. The little hedgehog, sensing danger, looks up and thinks, "Here we go again. Will he ever learn?" Rolling up into a perfect little ball, the hedgehog becomes a sphere of sharp spikes, pointing outward in all directions. The fox, bounding toward his prey, sees the hedgehog defense and calls off the attack. Retreating back to the forest, the fox begins to calculate a new line of attack. Each day, some version of this battle between the hedgehog and the fox takes place, and despite the greater cunning of the fox, the hedgehog always wins.

The Hedgehog concept by Jim; is designed to work for both organizations as well as individual careers. It involves answering three simple questions:

  1. What are you deeply passionate about?
  2. What drives your economic engine?
  3. What you can be the best in the world at?

Once you have found answers to the three questions; Jim gently nudges people to involve themselves with doing things; where answers to all these three overlap. The thing where the three circles overlap for you; is the thing that you want to spend your life doing and this is what you want to become a hedgehog doing.

As superfluous and abstract as the concept might sound; Jim uses his own journey to finding a personal hedge hog to illustrate a practical example of how this concept can be put to work.

In a world where we have programmers who cannot program and teams that go around in the infinite loop of failure maybe; conscious thinking and reflection of our very own personal hedgehog is something that every programmer should be taught in software development schools around the globe.

Have you ever spent time to consciously think and reflect on what your very own personal hedgehog is?

If you answered no; now might be a good time to start thinking about it.

I wish you good luck.

posted on Sunday, December 20, 2009 11:56:13 AM UTC  #    Comments [2] Trackback
Posted on: Saturday, December 19, 2009

An acquaintance from the real physical world; complements me on having a good 'management blog'.

I cringe.

To be honest; I cringe every time someone refers to what I do at work or on this blog as 'management'. The word 'manager' or as I like to call it - the m-word is the one word; that you; dear reader do not want to have anywhere in your secret title.

You might be okay with tolerating the m-word sitting quietly in a tiny little corner of your business card; but not on your secret title.

Steve Yegge; in his famous post on not-managing-programmers describes his frustration with the term 'management' and the whole idea of striving to become a 'manager'. He explains:

But I think the best managers don't want to manage: they want to lead. In fact most leaders probably don't think about it much, at least at first, because they're too busy leading: rushing headlong towards a goal and leading everyone around them in that direction, whether they're on the team or not. Leadership stems from having a clear vision, strong convictions, and enough drive and talent to get your ideas and goals across to a diverse group of people who can help you achieve them. If you have all that, you're close. Then you just need empathy so you don't work everyone to death. If you're a great leader, you can put the whip away; everyone will give you everything they've got.

Put in that light, management no longer seems so glamorous, does it? Ironically, "I want to be a manager" is just about the worst sentiment a would-be manager could possibly express, because the statement has absolutely nothing to do with leadership. A leader doesn't fixate on management, which is after all just a bureaucratic framework that attempts to simulate leadership through process and protocol. Great teams building great things don't worry about process. They just build whatever it is as fast as they can.

The more HR-oriented a tech organization becomes, with manager training and manager forms and manager evaluations and manager this and that, the harder it is for a real leader to get any work done. Often as not, the actual leaders in the organization (at all levels, from individual contributors up through senior VPs) tend to be very slightly unpopular with HR, because they're always bending the rules and not doing things strictly by the book.

The true leaders in an organization are seeing the world through a very different set of eyes: the eyes, almost, of someone reading a story unfolding, except they're the ones writing the story. They can see clear as day how the world should be different in some way, and they're doing whatever it takes to get from here to there. And they're enlisting all the help they can get along the way, because getting others on board with your ideas is one of the best ways to accomplish your goals. They'll align their own goals with yours if they agree with you strongly enough.

Great companies recognize that leadership is orthogonal to management, and that people can be highly influential leaders with or without direct reports. The management hierarchy isn't generally helping the leaders. If you're lucky enough to have truly great leaders in your org, the best thing you can do is get out of their way and let them lead.

Any time I hear someone say "I want to be a manager", I just want to smack them. But maybe it's just me. 

Unfortunately I cannot tell you that I have seen it all; but in the years of software development I have done and the countless companies I have consulted with or visited; if there is one thing I have seen; it is that the best managers in the teams are usually the one who do not talk about management.

In fact; the managers who manage developers the best are managers who do not manage developers at all. All they do is; hire the best; and then get the obstacles out their way.

The best of the managers I've worked with; often do not tend to use heavy words. They do not tend to bitch about process; they do not tend to feel the yearning urge to manage others; or obsess over project plans. To be honest; the best of the managers I've worked with often do not even think or see themselves as managers; and they definitely do not use the m-word as frequently as their traditional-mediocre-counterparts. 

Remember; the best management is management that you cannot see; and the best managers are managers who do not need to manage people or things. True management is all using inspiration; dreams; story-telling or passion to mentor and align smart human beings towards remarkable goals which result in genuine win-win situations.

So; if you see me as a manager; or this blog as a management blog; maybe that's probably just because this blog is my journey away from the m-word and towards something more meaningful; and I may not be quite there yet.

The very fact that you see me as a manager probably tells me that I am not the best of the managers out there; but then: I'm learning.

Every single day of my life; and so should you.

Can we please stop using the m-word now and focus on common sense; empathy; cutting the crap; ethics and (as the title of this blog reads) simple 'logical thoughts'?

The best managers in the world do not use the m-word very frequently; they don't obsess over management either and neither should you.

Seriously.

posted on Saturday, December 19, 2009 6:33:44 PM UTC  #    Comments [0] Trackback
Posted on: Thursday, December 17, 2009

After a gnawing reluctance deep down inside; I decide to approach Fred; my manager in my early days at Multiplitaxion Inc. The purpose of my visit to his office is to discuss possible problems our current development approach might have in the days to come.

For no particular reason; I am not very comfortable as I walk down the corridor towards Fred's office.

Something tells me deep down inside that sitting right across the table I am not going to see a manager with empathy - but an hourglass - constantly reminding me; through his body language; that the 30 minutes I have scheduled with him for this discussion are running out.

Fred; dear reader; like most traditional managers; is not really a busy man.

He is just playing busy.

Even as a young and budding engineer; I can sense it. Loud and clear.

Fred is popular in Multiplitaxion Inc for doing what this Harvard Business paper describes rather well:

Managers will tell you that the resource they lack most is time. If you watch them, you'll see them rushing from meeting to meeting, checking their e-mail constantly, fighting fires.

Managers think they are attending to important matters, but they're really just spinning their wheels.

For the past 10 years, the authors have studied the behavior of busy managers, and their findings should frighten you: Fully 90% of managers squander their time in all sorts of ineffective activities. A mere 10% of managers spend their time in a committed, purposeful, and reflective manner.

If you asked for 30 minutes of Fred's time; chances are that before giving you that time he would give you at-least one or two gentle reminders about how busy he is going to be with client meetings; meetings with the vice president or some other meeting you do not know anything about; when in reality every single one of us had serious questions on what it was that Fred really did or added to the organization or the team.

Where Fred and countless managers like him; who are busy trying to play busy; often go wrong is in getting their priorities right. Michael Lopp in his book Managing Humans describes this mistake rather articulately:

My first piece of advice to all new managers is "Schedule one-on-ones, keep them on the same day and time, and never cancel them."

With this mind, some of the trickiest transitions for me during the day are when these one-one show up. I'm deep in some problem, writing a specification, answering a critical email, and this person walks in my office and they want to talk about I don’t know what... I’m working in the zone here, people.

In the brief second  I try to figure out some way to reschedule this meeting, I remind myself of a simple rule, "You will always learn something in your one-on-one."

When is your manager giving you a chance to tell him what's in your brain? I'm worried if your answer isn't "at a one-on-one" but I'm not panicking, yet. Maybe your manager is one of these organic types who likes to jump you in the hallway and gather relevant bits. Terrific.

Does he do it consistently or when he needs something? The former is great; the latter is a problem waiting to happen.

A few years and a few promotions later; Fred is gone out of my life. Things at Multiplitaxion Inc change for good. I find myself working with a couple of managers who are genuinely fun to work with. The hesitation that I once felt while walking into Fred's cubical is gone.

Suddenly I find myself starting phone calls to my managers with - "Good time?" or "Can we talk?" - and getting responses on the lines of - "sure" or "yeah" unlike the standard canned - 'I'm a little busy now' or 'I need to take a client call' - response.

If they are busy; they make it a point to callback and start a discussion around the topic I wanted to talk about.

As you grow in your professional life; every once in a while you come across a few small things that have a big impact on your work environment and how you feel about your job. Your manager not being busy playing the role of the busiest man on planet earth; is definitely one of those things that can be a major deciding factor on how you feel about your work environment or how valued you feel at your workplace.

Years later; today; when I see a young and budding engineer walk up to my desk; and ask me if I am busy - my standard response is a big fat "no" or "no; of course I am not busy". 

Let us be totally honest here; on a typical workday; I probably spend a good twenty percent of my work day not doing any real work and so do you. We are not busy. We just like to pretend we are.

If you work happen to be in the same office as me and want to a quick chat on programming; life or any problem where I might be able to help; just walk in and start talking --- I'm free.

Are you; my dear young and budding manager?

If you want to work with a team one of the first things you need to learn is how to be free when someone walks up to you seeking help.

Pretending to be busy all the time and placing yourself in unapproachable ivory towers of 'upper management' is not genuine leadership; plus it will not take you anywhere.

Seriously.

Now go try not sounding busy for a change; even if you really are extremely busy.

I wish you good luck.

posted on Thursday, December 17, 2009 8:48:32 PM UTC  #    Comments [2] Trackback
Posted on: Sunday, December 13, 2009

In an interview; Fred sits there on the other side of the table and complains about his current organization not hiring an 'experienced architect' to guide him; which he believes; is the thing that his impacting his growth. Fred has been working in the business of building software for the last seven years and Fred; dear reader; is still looking for 'a real life mentor' in his very own office who can 'guide' him or as he puts it --- help him grow.

I cringe.

Fred's looking for a mentor in his very own organization or team is a recurring theme I have seen in many programmers working in countless organizations around the world. To be honest; I have also seen teams of programmers act like orphaned children when the architect they look up to decides to resign and move over to another organization.

The whole - 'we need someone senior and experienced to guide us' - stream of thought is a recurring theme which manifests itself in multiple forms within most typical stereotype development teams I have seen in my life.

I look at Fred; and then reflect into my very own life trying to find a single technology mentor who helped shape my career; who I may have worked with in the real physical world.

I think of names; ranging from Scott Hanselman; Karl Franklin; Richard Campbell; Scott Guthrie; Venkat Subramaniam and countless others on the technology front to Michael Lopp; Steve Yegge; Joel Spolsky; Scott Berkun; Jeff Atwood; Seth Godin; Malcolm Gladwell and countless others on the non-technical; project management or soft skill front. If you take the entire list into consideration; I probably have more than a couple of hundred mentors.

The funniest part; however; dear reader; is that I have never even met any of these individuals in my real life; and yet these names and countless others have contributed towards successful projects; genuine growth and even the promotions that I may have had in my professional life.

Where Fred is going fantastically and marvelously wrong is that instead of learning from the best out there;  Fred; dear reader; is desperately seeking someone in his very own office to train him and mentor him.

Now; if you work in a software development firm that is not a Google or a Microsoft; like it or not; chances are; that you are not going to bump into the best of the world alpha-geeks or rock-stars in any field or domain; in your very own office.

You dear reader; will have to look out for them; reach out to them; and learn from them.

The best part about living a world that is so very connected is that anyone who is remotely passionate about anything; is also equally passionate about sharing his thoughts; ideas; findings and the best part of his personality either through a book; recorded webcasts; podcasts; blogs or whatever system of communication he find appropriate; with the whole wide world.

The real question is; are you willing to listen; participate and learn; from absolute strangers; who are willing to share their experiences and findings with you. If you are reading this; dear reader; chances are; that is exactly what you are doing right now. By reading this blog and these words; you  are allowing me to share my experiences and insights with you and you dear reader; are learning with me.

Behind the small LCD screen that stares at you; is a network that connects you to the smartest; wildest; funniest; craziest; most innovative minds in the world. If you constantly participate in the discussions and interact with people here; chances are that you might bump into these stalwarts; sharing their pearls of wisdom; and you might genuinely pick up a pearl or two. Keep doing that for long enough and you will actually grow faster than you expected.

You can either do that; or you can crib; cry and bitch about your organization not hiring that 'senior experienced mentor' who will come into your life and show you the light.

The choice is really yours; but if you ask me; I would gently nudge you to use the network behind that little LCD screen in front of you and connect with people who have genuine stuff to teach you. They are all out there. They are more than happy to teach you through the content that they give out as well as the experiences that they share online. Go - read; watch; follow and learn from the best of the world.

I wish you good luck.

posted on Sunday, December 13, 2009 7:35:15 PM UTC  #    Comments [2] Trackback
Posted on: Saturday, December 12, 2009

In one of my earlier post; I talked about the infinite loop of failure and the infinite loop of non constructive criticism. Joel Spolsky in his post on Figuring-out-what-your-company-is-all-about; how he avoids these loops using a simple diagram.

In the post Joel describes how he started Fog Creek as a company that programmers would absolutely love to be at. He also has a series of posts; like this one for instance; which shows the amount of time; thought and effort that Fogcreek spends behind their employees and their happiness.

If you work for most body shops or software development firms out there; or you are a manager who worries a lot about optimum utilization of human resources; chances are that you; dear reader consider happy programmers dangerous.

Erik Forsberg explains the idea as he narrates his very own personal experience as a developer conference:

Lot's of people from different tech companies in Linkoping. Someone said that Scrum kept the programmers happy which would produce better code. That's probably true. Here comes the fun part - another person in the audience were worried that happy programmers would code things they thought were fun instead of the things they were supposed to do.

Hmm.. yeah, right. That's the way it works. Or maybe not! I'd say that the risk is much bigger that bored programmers spend their time working at things they shouldn't do.

I would really like to know where this person works, so I can avoid working there.

The whole model of hiring cheap programmer; squeezing them to their limits; and micro-managing them to get results leaves most companies out there hanging in the realms of safe mediocrity.

The folks at 37Signals take the concept of happiness and bake it right into their Ruby-On-Rails framework to make developers around the world 'happy'. David Heinemeier explains this concept while giving an interview at eweek. He explains:

The author of Ruby, Yukihiro Matsumoto, tells us that he set out to create a language that would "make programmers happy." Rails attempts to run with that noble and profound goal and bring it to the world of Web application development. Were optimizing for humans first, compilers and the frameworks second. Its been a constant search for how we could make the development process more in tune with what makes programmers happy.

Kathy Sierra dissects the whole concept of happiness and talks about spreading it to all levels within the organization; even in areas which are connected to programming or seriously technical. She explains:

Understanding the connection between happy users and happy developers (or happy anything-supporting-users) is a big step forward.

The HR folks have cared about happy employees for a long time, but the notion of "happy programmers" was always more about benefits, perks, or pay... now a lot more people are starting to care--and talk--about things like programming language, API, framework, methodology, etc.

The things that keep you in a flow state.

If you take all of what his post has talked about so far and compare it with what happens in most organizations out there; what you might realize is that; most organizations out there; actually work hard at building technology; processes; business models; marketing techniques; sales strategies; when all you need to do if you are an entrepreneur is:

  1. Hire the best programmers; managers; marketing guys; or for that matter; any other kind that you recruit.
  2. Get out of their way - stop micro-managing and interfering in their job. 
  3. Figure out innovative ways to keep them happy.

If you can do just these three things and do them well; chances are; that you might have a very successful and even a very profitable organization in the long run. After all; happy programmers build remarkable products; and even more remarkable organizations. Happy marketers often sell better without lies.

Now; go and rethink your policies; your compensations; your projects; your technology and your processes. Are they fundamentally built to make the best of your employees feel 'connected' to your organization? Are they designed to spread happiness? If you answered with a 'no' - get rid of them - and build new ones which are designed keeping the fundamental idea of happiness in mind.

I wish you good luck.

posted on Saturday, December 12, 2009 7:31:56 PM UTC  #    Comments [2] Trackback
Posted on: Friday, December 11, 2009

This post is about all about doing some serious soul searching and reflecting on your professional self.

If you have spent more than a couple of years in the business of building software you probably know by now that designations mean nothing. Anyone who has read a couple of books on neuroscience or management will tell you that the first rule of self improvement is that you stop trying to improve on your weaknesses and you utilize your core competence to make them stronger and more effective.

Step one to this process of-course is knowing what your core competencies are; and in a world where we excessively turn to business cards to pass our judgments on human beings; finding out your core competencies or what you 'really' do; is hard. Michael Lopp describes this rather articulately in his book - Managing Humans. He explains:

What do you do? Seriously, on your business card there is a title. Say it out loud.

  1. "Senior Manager of Engineering"
  2. "Industrial Data Analyst"
  3. "Human Factors Specialist"

Is that what you actually do? Try this: think about the last four hours of your job and give yourself a title. Mine would be "Senior Meeting Wrangler" or perhaps "Guy Who Listens." Last week it would’ve been "Whiteboard Operator."

When you graduated from college, when you got your first job in your chosen profession, did you think you’d be doing this? No. Whatever you thought you'd be doing when you looked forward to being an "Associate Software Engineer" is not what you ended up doing.

You'd think this title dissonance issue would be a problem. You'd think that the fact that what you thought you'd be doing has nothing to do with what you do would turn into angst, but it turns out, as long as everyone is clear what your secret title is . . . we're cool.

The basic idea; dear reader; like all good ideas; is a rather simple one. Pause every once in a while as you work and question what you are 'actually' doing. Compare what you are 'actually' doing with what you business card reads and you might realize that you have more than one; what Michael calls --- secret titles.

The more you do this the more likely you are to find more of your implicit or secret titles. Club these together and you might be able to figure out a general direction of your core competencies. What is really scary about this process however; is that when you do this; chances are really high that you might actually discover that your core competencies evolve over time and they often have nothing to do with what your 'official' business card reads.

When this happens most folks panic.

After all; when your business card reads 'development lead' and you suddenly have a realization that you are just a 'guy who listens' it is easy to shift to the shit-I-am-going-to-get-fired mode and focus more on your development capabilities rather than your listening capabilities. If that is what you have done in the past; I have two words for what you may have done:

Big mistake.

If you; dear reader; were to wake up one fine morning; and you were to discover that morning that your secret title has developed a strong tangent with your what your business card reads; I have one advice for you:

Don't Panic.

Sure; spend a little bit of time doing what your business card reads; but instead of trying to force yourself to move back to your 'official' designation; try sticking around with your secret title and see if you can get better on that front. Then as you get better at doing what-ever-it-is that your neurons are naturally meant to be doing give out gentle signals of your secret title to folks around you.

Chances are; that people around you might accept you for what you were naturally meant to be and might actually like you for it.

Remember; the sooner you find out your secret titles and their variance from your official designation; and the sooner everyone around you knows and accepts this variance the happier you will be as a professional.

I wish you good luck

posted on Friday, December 11, 2009 10:46:53 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, December 06, 2009

If you are in the business of building software; every now and then; you will find yourself surrounded with moments when the sky-is-falling. Every now-and-then; you might also come across seriously kick-ass engineers who emerge as super heroes and save the day.

It is rather easy to identify and reward these super heroes of your organization and shower them with pats on their backs; salary hikes and promotions. What is hard; dear reader; is identifying and recognizing the silent programmers; who avoid the sky-is-falling moments or as Michael Lopp in his book; Managing Humans calls Malcolm events. He explains:

Avoiding Malcolm events is completely unsatisfying and here’s why: you know what failure sounds like, but success is silent. It’s when the release goes well. It’s when you don’t have to release an immediate update to your major release. Avoiding a Malcolm event is when you managed to predict the future and no one is going to believe you when you tell them what you did because nothing happened.

Management is the care and feeding of the invisible. You’re doing your best when it appears the least is happening. I love the thrill of the last month of a release as much as the next guy, but I suspect the reason we’re yelling at each other, working weekends, and feeling the depressing weight of compromise is because we’re surrounded by Malcolm events.

Nassim Nicholas Taleb in his  famous book - The Black Swan - explains the exact same problem of identifying the true silent heroes and rewarding them much more dramatically through his excellent story telling and though experiment:

Assume that a legislator with courage, influence, intellect, vision, and perseverance manages to enact a law that goes into universal effect and employment on September 10, 2001; it imposes the continuously locked bulletproof doors in every cockpit (at high costs to the struggling airlines)— just in case terrorists decide to use planes to attack the World Trade Center in New York City.

I know this is lunacy, but it is just a thought experiment (I am aware that there may be no such thing as a legislator with intellect, courage, vision, and perseverance; this is the point of the thought experiment). The legislation is not a popular measure among the airline personnel, as it complicates their lives. But it would certainly have prevented 9/11.

The person who imposed locks on cockpit doors gets no statues in public squares, not so much as a quick mention of his contribution in his obituary. "Joe Smith, who helped avoid the disaster of 9/11, died of complications of liver disease."

Seeing how superfluous his measure was, and how it squandered resources, the public, with great help from airline pilots, might well boot him out of office. Vox clamantis in deserto. He will retire depressed, with a great sense of failure. He will die with the impression of having done nothing useful. I wish I could go attend his funeral, but, reader, I can't find him.

And yet, recognition can be quite a pump. Believe me, even those who genuinely claim that they do not believe in recognition, and that they separate labor from the fruits of labor, actually get a serotonin kick from it. See how the silent hero is rewarded: even his own hormonal system will conspire to offer no reward.

As software managers; we tend to look for people who emerge out of nowhere; and turn complicated defeats into victory and save the day. We glorify them and shower them with praise, salary hikes and promotions.

What we often fail to take a note of; dear reader; is the silent catalyst who gracefully builds synergy in the team; the brilliant engineer who does excellent estimations; the manager who sedates the monkeys; the technical lead who pushes the idea of keeping the team size small; the kick-ass programmer who quietly fixes the first broken window or the young recruit who changes the culture of the organization without making a lot of noise about it.

It is tragic but true; when it comes to the world of software development; a smooth sailing successful project without any panic moments does not seem to grab management attention. Add elements of panic; late night programming; working weekends or a rescue operation of an almost failed project and suddenly you have everyone giving you all the attention you want.

An excellent oracle database administrator who worked at one of our client; who for the purposes of this post; we shall refer to as Multiplitaxion Inc; received very little recognition for all his efforts.

During a casual conversation I asked him what was the most heroic moment of his life. He smiled at me and gave a reply which was somewhere on the these lines: 'none. maybe I should have taken our website database offline one or twice and then everyone in the organization would know me as a person who saved the day by bringing it back up. Maybe I should do that every five or six months and then I would be really famous individual in this organization'.

As a manager; the next time you come across a sky-is-falling event; a hero emerges out of nowhere and saves the day; sure; reward the hero; but also do a constructive analysis of why the sky-started-falling in the first place. Look hard; and you might find surprisingly new reasons and causes for the sky-falling.

As far as your smooth sailing projects are concerned; where Jack is sitting in the little corner and pushing the culture of writing clean code that takes a little bit more time; before you treat him like the legislator from Taleb's Black Swan thought experiment; do some serious soul searching and try to estimate the number of panic moments Jack is saving your organization from.

Next time you see Jack; try giving him recognition and reward for what he is avoiding with his talent and hard hard work.

Recognize your true silent heroes; give them  the recognition for their work; and you; dear reader; would have taken your first step to genuine management.

I wish you good luck.

posted on Sunday, December 06, 2009 8:51:33 PM UTC  #    Comments [2] Trackback
Posted on: Saturday, December 05, 2009

Fred is struggling to answer the basic Fizz Buzz questions. He is answering them averagely well and yet something about both; his handshake and his personality seems nervous and weak.

Half an hour into the interview Fred seems desperate. He is fumbling; lying and pushing hard to get to the right answer; his desperation to get selected clearly showing in every question he answers. Half way thought the interview I ask him a question which changes the course of the entire interview:

'Tell me three things that you find completely unacceptable in an organization. Three things or attributes that if we had; they would make you reject a job offer; even if we were to give you one'

Fred looks at me like I just dropped a dead rat on the table. He thinks hard; and yet he cannot seem to think of one thing that would make an organization not worth joining.

What Fred; like most programmers who cannot program; was doing dear reader; was applying for a job where the only criteria that would decide if he joins us; was the criteria of us selecting him. 

Put simply; he would join any organization that offered him a higher salary; and had an interview process; he could somehow manage to clear.

Most veteran builders; unlike Fred; realize that interviews are not a phenomenon where a interviewer sits on the other side of the table and asks difficult questions which have to be answered --- 'somehow'.

Most veteran builders around the world that I have worked with; and in particular interviewed; realize that the act of applying for a job; is almost like making friends or for that matter; even dating; where both parties involved have to mutually decide if a relationship would work out in the long run.

If you happen to take interviews dear reader; may I suggest; that besides asking technical questions; you also spend a few minutes driving the discussion towards finding out the level of interest the candidate genuinely has towards your organization:

  1. What does he know about your organization?
  2. How much time has he spent on your website and what does he like or not like about your website?
  3. How many valid and interesting questions does he have about your organization?
  4. How many valid and interesting question does he have about the work he would be doing?
  5. Is he even interested in knowing or finding out about the culture of your organization and how he fits into  the whole picture?

And most importantly; does the candidate have preferences; opinions and a spine strong enough to understand; that of the many programming jobs out there not every job is meant to be 'his' dream job; or even the one that he accepts.

When hiring candidates; don't just look for people who meet your criteria. Hire candidates who themselves have strong criteria; other than salary; that they expect the companies they join; to meet.

Hire candidates who clear your interview with confidence and then have the confidence to turn the tables around and interview your organization.

Hire folks who understand that of the many job offers that they can get not every job is worth joining. Hire folks who take time to know your organization; then actively interview and hand pick your organization; much like your organization hand picks them.

I wish you good luck.

posted on Saturday, December 05, 2009 9:57:33 PM UTC  #    Comments [2] Trackback
Posted on: Friday, December 04, 2009

I'm a firm believer of building close allied relationships with every single client that you work with. Having said that; the art of building allied relationships in the war front is a tricky affair. Finding a true ally you are willing to trust and bet your professional life on; is even trickier.

At Multiplitaxion Inc; a client of ours who was into selling multi-functional devices; it was not an uncommon sight to see countless engineers scramble for cover every time a new client showed up.

The reason: every single engineer in the premise knew that the client could ask for any product feature and chances were; that the marketing folks would go out there and either say that the device driver we were building already supported the feature or it was a part of next release that would be out in the next fifteen days.

Then; armies of consultants would be hired to get things to move faster. Multiplitaxion Inc; built their projects based on lies; but more than the lies; what really came back to bite us was the fact that Multiplitaxion Inc saw the client as external entity who descended from the heavens above; told the development team what to do; and then we; like robots; pretty much went out there and did what they told us to do.

Even today; I see countless engineers; both young and veteran ones; take the whole 'the-word-of-the-client' way too seriously. Every month I interview countless engineers; who use insanely stupid and complex frameworks to solve insanely simple problems. Ask them why they picked the framework and chances are; that they will tell you that their client wanted them to use the framework.

One example of taking the client's word way too seriously; came in this blog as a comment on my post about getting rid of your systems and not logging every single requirement your client has.

For those of you know did not read the post; the one line simplified version of the post; is that you need to get rid of as many systems as you can and sensibly possible and get your developers talking to each other.

Harvey Kandola offers a rather thought provoking comment on the very idea of getting rid of systems.

He brings up a valid point:

Good post, but not convinced the advice from 37Signals is applicable. What would you say to your clients who want to log and track each Request? Would you tell them that "we do not log / have systems". I think not.

In the end, every organization is different, and needs to look at things from it's own perspective. Team dynamics are a major factor in how people adopt and use systems.

I've myself gone ahead and suggested in the past that every organization is different; so yes; there is validity in the point Harvey makes. Having said that Harvey's comment also brings up a rather interesting concept of asking why and checking on the basic premise of the comment.

Humor me; dear reader; and read on; even if you might disagree. If nothing else; I might end up giving you some food for thought.

So; assuming that you have moved to an truly agile (without a capital 'A') environment where you have a successful product being used by a couple of clients; and you totally believe that logging every single requirement in a 'system' is not the way to approach software development. Smooth, free flowing, verbal communication has done the trick for you and has got you more than one successful implementation.

It is then that a client shows up and tells you that they want to track and log each request. What is it that we as software development shops; entrepreneur; and even developers; find so criminally wrong about telling the client that - we do not log or have a system for that.

Remember; that each client is different; and your relationship with your client; is an allied relationship or a marriage of two organizations to get something constructive done; where most typically your clients are supposed to know what needs to be get done and you are supposed to know how to get it done.

It is a mutual relationship; based on equality and exchange of value with your talent and services.

Go down the path of putting the client on a raised pedestal as a superior species who is always right; and you will soon learn that the path does not have an end. Every now and then; every successful business out there pulls the plug and learns the art of saying 'no'.

Success Factors CEO; Lars Dalgaard pulls the plug and draws the line; at the idea of being nice. He explains:

I was in Boston once and one of our customers was very nasty to our employees. I made it extremely clear to him right then and there that if he continued that; that means we close the deal. We like closing deals.

37Signals does it by starting by saying 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.

And what do you say to people who complain when you won't adopt their feature idea? Remind them why they like the app in the first place. "You like it because we say no. You like it because it doesn't do 100 other things. You like it because it doesn't try to please everyone all the time."

We at have work; in my current organization; have said 'no' to a process or a methodology that a client wanted us to follow more than once. 

There are millions of clients on this planet; not every client out there is 'your' client. If your organization; or you genuinely believe in an approach or process; have the courage to stand by it; and say no --- even if it means losing a client.

Now; go find your own answers; figure out what works for you and what does not.

The next time; you have a client; who wants every error logged in a system; and 'if' your organization genuinely believes doing so is a waste of time; try saying 'no' for a change. There is a high possibility that you client might thank you for it in the long run; and if you lose them; they were probably not 'your' client in the first place. Just in case; if that happens; go look for another client.

There are plenty out there and if you look hard enough you might find clients who you can form strong allied relationships with.

I wish you good luck.

posted on Friday, December 04, 2009 9:32:02 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, November 29, 2009

As programmers we love the idea jumping up to build a new system at every given opportunity.

At Multiplitaxion Inc; I see a few young and budding managers attend a conference for a project management tool by a software development giant. They come back hugely serious; excited and amazed; much like babies who have found something new to explore and play with.

When I see them bubbling with excitement --- I cringe.

As programmers we have a tendency to get hugely excited about building something or putting a completely new system in place. Walk up to a programmer and tell him that you are having problems with people not applying for leaves in advance and chances are; he will tell you; you need a leave tracking system in place.

Tell a developer that you are trying to start a small library to encourage people to read books and chances are that he will tell you how badly you need a library tracking system.

To be honest; it is not just the excitement of building something new that gets the programmer within us excited. As geeks we love to also connect using familiar systems. The problem with having a whole lot of systems in your organization however; is that if you get make too many systems available to your builders and geeks; chances are that they will never connect and communicate at a human level.

Folks at 37Signals have interesting advice to give to people who are looking for a 'system' to track the feature requests. In their classic book; getting real; they explain why you should just forget your feature requests instead of trying to log them in a formal system:

Of course we don't fault people for making requests. We encourage it and we want to hear what they have to say. Most everything we add to our products starts out as a customer request. But, as we mentioned before, your first response should be a no. So what do you do with all these requests that pour in? Where do you store them? How do you manage them? You don't. Just read them and then throw them away.

Yup, read them, throw them away, and forget them. It sounds blasphemous but the ones that are important will keep bubbling up anyway. Those are the only ones you need to remember. Those are the truly essential ones.

Don't worry about tracking and saving each request that comes in. Let your customers be your memory. If it's really worth remembering, they'll remind you until you can't forget.

James Shore and Shane Warden come heavily on the simple idea of a bug tracking system in their book - the art of agile development. They explain:

Unless you're writing software by and for yourself, you will have to deal with at least one other person somewhere during the process. A grudging détente is not enough; you need to work together effectively. This means forming solid working relationships that are built on honesty, trust, cooperation, openness, and mutual respect.

You can’t force people to do this. The best your agile method can do is support these sorts of relationships. For example, one way to engender healthy interaction is to have people sit together and collaborate in pursuit of common goals.

It’s far easier, unfortunately, to craft your method in a way that discourages healthy relationships. An extreme example (sadly, one that actually happens) is forcing all developer communication with stakeholders to go through business analysts. As another example, a sure way to damage programmer / tester relationships is to require them to communicate solely through the bug-tracking system.

Ideally, your team will fix bugs as soon as they find them, before declaring a story "done done." Nobody’s perfect, though, and you will miss some bugs. Schedule these bugs with story cards, such as "Fix multiple-user editing bug." Schedule them as soon as possible to keep your code clean and reduce your need for bug-tracking software.

The point here; dear reader; is not to throw away all your systems of organization and turn into wild programmers who write random code. The point in fact; is all about is about letting go of access baggage and getting your basics facts right.

If you genuinely want your programmers to connect and communicate; first get rid of any excess 'systems' that you can possibly get rid of. Of course there will be some - like a version control system or the IDE in which you develop - that you cannot and should not get rid of; but reflect on and question the existence of every other system that you can see running in your organization.

Once you have done that; give your programmers opportunities to genuinely connected to each other verbally; their programming skills and their communication skills being the only two options left open to them and chances are; that they will use them both to the best of their abilities.

With no CYA systems in place and with free flow of information you will feel every ripple in your organizational pond and believe me dear reader; you will not need a fancy project management tool or an expensive bug tracker to find out what is going on. Honest.

posted on Sunday, November 29, 2009 10:41:31 PM UTC  #    Comments [3] Trackback
Posted on: Friday, November 27, 2009

At work; as a labs project; Kaushik Das; who is one of our seriously talented developers has been working on studying the SQL Server Schema --- just for the fun of it. To turn this learning into practical implementation instead of just theory; we decided; to build a web based administration console which users can use manage SQL server instances that they have access to using a web based administration console. This; is how eFORCE SQL DB Administrator was born.

Put simply; the first version of SQLDBAdmin by Kaushik; in it's scope and basic philosophy is pretty much like any other web based administration console for SQL server; one common example being - Microsoft Web Data Administrator.

We do realize that this problem has been solved multiple times before; and we also realize that as of today SQL DB Admin happens to be a 'me too' product; but what we believe makes SQL DB Admin worth giving a try are the following facts:

  1. Looks and feels just like the SQL Server 2005 Database Management Studio - so there is very little learning-through-fiddling that needs to be done. 
  2. It is free and open source; which means you can not just download it but actually modify the source code for your implementations if needed.
  3. We will be working really hard to add new features to SQL DB Admin which might make it easy to do day-to-day administration tasks. Some examples include: scheduling a database backup, compressing a database, re-indexing a table. etc.

As of today you can grab a copy of the SQL DB Admin code base by visiting its codeplex site.

As a matter of fact; this is one of those projects that we just started for 'fun' and now that we have something that works; we are seriously looking at adding new features that give you; dear reader; reasons to download it and use it while comparing it with multiple other web based SQL server administrators that are out there.

If you; dear reader; have a task or a feature in mind that you or your database-administrators do regularly on SQL server administration front and you would like to perform the same tasks through a web based console; let us know about the feature and we will try out best to squeeze those features into the road map for SQL DB Administrator.

In the meantime; if you want to grab a copy of the latest code base and start using it in it's current beta stage; you can get a copy from the SQL DB Admin codeplex website.

We genuinely and sincerely hope that this product; makes your life; as a database administrator; developer or anyone who has to manage multiple remote databases behind the firewall; just a little more easier. We will continue to add new features to SQL DB administrator and then blog about those features when we add them into the product.

Wish us luck.

More open source goodness coming soon.

Stay tuned.

posted on Friday, November 27, 2009 8:44:36 PM UTC  #    Comments [0] Trackback
Posted on: Thursday, November 26, 2009

Throughout my career; if there is one thing I have seen a lot in the software development world; it is; programmers who cannot program pretending and advertising that they are the alpha geeks of the millennium.

When I was a young and budding programmer; brimming with dreams and confidence; I walked the world of software development assuming only three kinds of people existed in the world of software development:

  1. Alpha-geeks who were kick-ass programmers making huge dents in the universe with their code.
  2. Passionate programmers who knew how much they sucked and were on the life-long path of learning how to become kick-ass programmers.
  3. Programmers who could not program but were busy pretending they were alpha-geeks.

Then; years later; while consulting for a client; who for the purposes of this post; we shall refer to as Multiplitaxion Inc; I met Jack; and I realized; that I was; dear reader; so very wrong; in my assumptions about people who exist in the software development world.

Jack was not a programmer.

In fact; he had done his major in philosophy.

When I first met Jack; the question that bothered me was simple: how the f@#k did Jack manage to join a software development firm?

In my first few weeks of working with him; I found my answer in the way Jack approached work; people and life. The guy was an interesting storyteller. He was almost a catalyst. To add to that; he was what I then started referring to as a --- 'contributor'.

During the first month of the project; Jack and spent a huge amount of time with me and the five person development team. He would read the requirements end to end and then talk about those requirements; so that we would not have to read them; he had valid questions on the flows we built; he engaged himself in usability testing; he tested the screens that we rolled out and pointed out valid bugs the official testing team was often not able to point out.

Our true surprise however; came when someone from the development team showed Jack how to write Ant scripts and we discovered that he was surprisingly good at it. Within a few days; we also had a build manager; taking up tasks which no developer wanted to take up.

Jack; dear reader;  was not writing a single line of code; but in a matter of three months; he had made himself very difficult to replace.

Steve Yegge brushes against the concept of a contributor in his post on a completely different topic; he explains:

Let's face it: there are a lot of professional programmers out there who realize they're not very good at it, and they still find ways to contribute.

If you're suddenly feeling out of your depth, and everyone appears to be running circles around you, what are your options? Well, you might discover you're good at project management, or people management, or UI design, or technical writing, or system administration, any number of other important things that "programmers" aren't necessarily any good at.

You'll start filling those niches (because there's always more work to do), and as soon as you find something you're good at, you'll probably migrate towards doing it full-time.

If you read between the lines; Steve's post might actually suggest that finding other ways to contribute when you discover that you are not a programmer; is not the best of things. You can actually hear a slight tone of sarcasm between the lines if you were to read them carefully. A few years ago; I would probably have agreed; but my experience with Jack; and a couple of other contributors I worked with after Jack; changed my opinion of this topic all together.

Yes; we don't need millions of non-programming contributors; but till date; I hold the opinion; that if you are a young and budding programmer; struggling with programming; not loving it; but you still feel passionately about being connected to the world of software development; you are much better off trying to morph into a contributor who contributes a host of things towards making the project a success and is a 'fun' guy to have on the project.

We do need a select few genuinely passionate 'contributors' around; much like we need good passionate programmers and at times; if you are genuinely passionate; we might not even care if you can write any code in the first place.

So stop trying to pretend you are the best programmer around; stop trying to climb in pecking order of your organization and desperately get promoted to the position of a manager; stop being a whiner; or a 501 programmer.

Find your niche and start making genuine contributions.

I wish you good luck.

posted on Thursday, November 26, 2009 10:53:03 AM UTC  #    Comments [0] Trackback
Posted on: Sunday, November 22, 2009

Multiplitaxion Inc; a consultancy services organization I worked at years ago was an organization where Managers sat in ivory towers and gave strange; unclear instructions to engineers. Then when you started working; they would score a foul by emailing you about a completely disconnected topic; turning you from a programmer to a multi-tasking joker.

A classic example of unclear instructions happened at a project where we were building device drivers for a multi-functional device. This is when two young engineers fresh out of college were asked to --- 'map device codes to device names' halfway down the project.

What followed; as I watched in horror; was a long tale of errors and confusion; as these two young engineers; too scared to ask and get an intimidating response back from their managers; fumbled through the project document repository in an attempt to find the document that contained master device codes; device names and their mapping. Turns out; the repository had no such document.

After a couple of days of fumbling when the engineers asked for the device codes they were sent an email containing all the device codes that could exist in the system; leaving them to ask for all the device names and the mapping information between the two.

The entire cycle took three days of emailing back and forth after which they finally had everything they needed. It took more than five emails back and forth. One email had device codes; the other hand device names and three others had 'business logic' on how they could map device names to device codes.

My exposure to prickdom however; came when I needed additional specifications of the device and asked for the information I needed. Turns out; the manager was being bogged down with meetings and was too busy to respond to my email. What I got in response of the email I sent was an attachment. It was excel file containing device codes; names; the device specifications and the mapping between the three pieces of information.

As I scrolled through the email trail that had been forwarded to me; I learnt that the file had been sent by the client a couple of months ago.

A Gazillion questions filled my head as I glanced through the file:

  1. Why did the manager not upload the file on the project repository and let everyone know?
  2. Why did he not send the file to the two young and budding engineers when giving them their assignment?
  3. Why did he actually take the pain to extract information out of the file; paste it in an email and send out only partial information over to the engineers; even when they explicitly asked for the information?

While this may sound like an extreme example of prickdom; I have seen managers around the world holding on to information and being highly reluctant to share it out; almost as if their job depends on what they know and what no-one else in the project team knows. Others spam the team with random information that the team does not need in the first place.

Joel Spolsky provides sound advice to young and budding managers when talking about the topic to human task switching. He explains:

On the individual level -- have you ever noticed that you can assign one job to one person, and they'll do a great job, but if you assign two jobs to that person, they won't really get anything done? They'll either do one job well and neglect the other, or they'll do both jobs so slowly you feel like slugs have more zip. That's because programming tasks take so long to task switch. I feel like when I have two programming projects on my plate at once, the task switch time is something like 6 hours. In an 8-hour day, that means multitasking reduces my productivity to 2 hours per day. Pretty dismal.

As it turns out, if you give somebody two things to work on, you should be grateful if they "starve" one task and only work on one, because they're going to get more stuff done and finish the average task sooner. In fact, the real lesson from all this is that you should never let people work on more than one thing at once. Make sure they know what it is. Good managers see their responsibility as removing obstacles so that people can focus on one thing and really get it done. When emergencies come up, think about whether you can handle it yourself before you delegate it to a programmer who is deeply submersed in a project.

At the end of the day it is not just about multitasking. If you call yourself a manager; a leader or whatever-it-is-that-you-call-yourself; it is your responsibility to see to it; that your fellow programmers have precise; compact and concise information to act on the tasks that you expect them to work on.

Do not start parallel threads of work; don't make them starve or look for information when it is readily available with you; and don't bombard them with more information than what is necessary.

If you are not comfortable leading from the front; the least you can do as a manager; dear reader; is get down from your ivory tower; develop a strong bonding with your team; show some empathy; stick around as a helper as they slog; and when they need information make the information available to them; without making them beg for it; or bogging them down with too much data or information that they do not need.

If you can just do that; you have probably taken your first step towards fearless project management without a lot of insecurity.

I wish you good luck on your way ahead.

Remember; if they are confused and lost as they develop; it probably is your fault.

posted on Sunday, November 22, 2009 8:52:51 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, November 21, 2009

Wikipedia defines Lorem ipsum in a website design proposal as - generally incomprehensible placeholder text allows viewers to focus on the visual elements, rather than the content.

Lipsum - the online Lorem Ipsum generator is bullish about the Lorem Ipsum history and future:

Lorem Ipsum is simply dummy text of the printing and typesetting industry. Lorem Ipsum has been the industry's standard dummy text ever since the 1500s, when an unknown printer took a galley of type and scrambled it to make a type specimen book.

It has survived not only five centuries, but also the leap into electronic typesetting, remaining essentially unchanged.

It was popularized in the 1960s with the release of Letraset sheets containing Lorem Ipsum passages, and more recently with desktop publishing software like Aldus PageMaker including versions of Lorem Ipsum.

To be honest; Lipsum has a genuine reason to be bullish about Lorem Ipsum.

Graphic designers around the world have loved Lorem Ipsum for more then one generation.

Even today; I see countless graphic designers designing their site-layout using Lorem Ipsum; sending the designs out for review and then replacing them with real content as the project moves ahead.

Most graphic designers love Lorem Ipsum because it keeps them from having to work with those nasty business guys who are way too lazy to think about or give them genuine content upfront. Lorem Ipsum also shields the designers from those pesky programmers who make them fix their nasty HTMLs every time the designers try to work hand-in-hand with them.

The business folks love it because it allows them to walk up to a creative designer and say - 'I want a marketing website' - without having to worry about giving them any content or specifics before they start designing the website.

The programmers love it; because they can now develop their system without having to worry about synchronizing their development with the pretty-looking-screens.

Throw in a few stock photos; make pretty boxes; fill them up with Lorem Ipsum; and you are good to go. Life; for a designer; was never so beautiful before Lorem Ipsum showed up.

Put simply; at the end of the day; programmers love building ugly systems; graphic designers love building pretty boxes and business users love telling both programmers and graphic designers what they should do without feeling the need to take any real responsibility of the content or the message upfront. Lorem ipsum is a universal glue that makes this entire ecosystem function and makes all this possible. No wonder; we all love Lorem Ipsum.

Jason Fried at 37Signals however; has the courage to walk a different path and say no to Lorem Ipsum. He advices developers and designers to consider Lorem Ipsum their enemy; not their friend. He explains:

Lorem ipsum dolor has long been known as the designer’s best friend. We think it should be your enemy. Using lorem ipsum dolor reduces text-based content to a visual design element (a “shape” of text) instead of valuable information someone is going to have to enter and/or read.

We recommend that when you build out interfaces you use real and relevant words not “lorem ipsum” representative text. If your site or application requires data input, enter real and relevant words and type the text, don’t just paste it in from another source. If it’s a name, type a real name. If it’s a city, type a real city. If it’s a password, and it’s repeated twice, type it twice.

The goal here is to get as close to the real customer experience as possible. Don’t abstract yourself from the real experience. Every layer removed pushes you further and further away from the actual customer experience.

Ben Hunt in his book; Save the Pixel; explains the same thing from the perspective of a veteran experienced web designer. He explains:

Design the content, not the box it comes in.

Use your pixels on things that communicate meaning. It used to be very common for web designers to make just templates – attractive or jazzy  containers which would have “content” added at a later time.

This is a fundamentally wrong approach, because it doesn't fulfill the designer's mission - facilitating communication. If you find yourself decorating the package, rather than crafting real, meaningful content, stop & ask: “Are these pixels best used here?”

You want the visitor to focus on the navigation & content as that's where the signposts are that point to the goals.

When you are designing the layout of a website; it is easy for you to get consumed by just the layout and not even think about the content or what the design is trying to communicate in the first place. Ben describes this concept rather articulately in his book - Save The Pixel. In his book he explains:

Design isn't Art. It's not about creating beautiful or thought-provoking things for the sake of it. Design is a discipline – creating communication with a purpose.

So the next time you head out to a Lorem Ipsum generator; try spending some more time on your content or your system and try to figure out the message that your application or website is trying to convey using your design. If you don't have a strong message your pretty boxes will not mean a thing.

Now; go think of a concrete message and decent amount of content or the system before you even open Photoshop.

This dear reader; is your chance to designing something meaningful.

Don't build pretty boxes with Lorem ipsum. Let your design be a part of your communication; what you want to say and what it is that you stand for.

I wish you good luck.

posted on Saturday, November 21, 2009 5:57:57 PM UTC  #    Comments [2] Trackback
Posted on: Thursday, November 19, 2009

Sam at CodeOder.com asks a rather interesting question; asking which is much like opening a can of worms.

Sam's question seems like a simple question raised by an inquisitive mind; but scratch the surface of the question and you will realize it is not just a controversial question; but a question that can end up defining your character and life-style as a software developer. Sam questions:

We hear vague descriptions about project size tossed about all the time: Ruby on Rails is better for small projects. Java is for large projects. Skip the framework for small projects, but I recommend using one for large projects. What factors go into determining the "size" of a project?

Reflect on the question dear reader; and chances are that you might realize the problem in attempting to answer the question. You probably know this already. If you do not; ask anyone who has spent even a couple of years programming and estimating projects and he will tell you that:

  1. Simply counting LOC or number of lines tells you nothing about the project size. It is a ridiculous metric.
  2. Complexity is not indicative of largeness but just bad design.
  3. Large team size is not an indication of a large project but just an indication of bad management.

And so; if we as programmers; are going to take every metric out there and thrash it against the wall; how are we to then; dear reader; measure which project is large and needs special attention and which project is small and can be built easily?

As a young and budding engineer at Multiplitaxion Inc; years ago; I was a part of countless meetings where my ideas were turned down with stereotype remarks like - yes-we-know-it-worked-for-your-project-but-our-project-is-really-large.

Attending countless number of those meetings taught me that the difference between a large project and a small project can be described using this rather funny code snippet on the sun java forum:

'Large Project' usually does not mean or do a thing other than give you a warm and fuzzy feeling of being involved in something complex deep down inside; and that dear reader; is not such a good thing.

No; seriously; if there is one thing years of programming; software development; and software management has taught me; it is that if you are working on a 'large' project you are doing something wrong.

Now; stop drooling over how large your project is; how huge a team you have; and how many lines of code you have to write. Go ahead; break your next so-called-large project down into smaller components and start hiring kickass developers  who can design each component like there were neatly cut pieces of diamonds.

I wish you good luck.

posted on Thursday, November 19, 2009 8:46:01 PM UTC  #    Comments [2] Trackback
Posted on: Sunday, November 15, 2009

At Multiplitaxion Inc; a bunch of programmers (me included) started what we called a 'knowledge sharing sessions' which would happen every fortnight. The idea was to exchange thoughts; talk about what we had learnt; and get inspired.

As months passed; the number of people joining these knowledge sharing sessions increased and so did the frequency of these discussions. We moved from once every fortnight to twice a week. With an ever growing audience; discussions moved from hardcore technical topics where people would program on stage; to discussions on design; abstract philosophical topics connected to project management and sometimes these talks even touched the social aspect of things.

Before we knew it; we had turned a technical session planned with a specific purpose into a general purpose discussion forum where people got together and --- well; talked; about --- anything.The little fortnightly meet of ours; dear reader; had turned from a meaningful specific into a wondering generality; and it was happening two days a week.

Now as someone who is a big time fan of TED videos and inspirational books; I completely understand the importance of inspiration. Having said that; most good inspirational book nudge you to read them and then go out there and work. TED talks range for just 18 minutes where people talk about what they have 'done' or 'built' and the entire event ends in about three days; after which you get down to real work of trying to make dents in the universe.

That is exactly what makes TED so beautiful.

We; on the other hand; were doing inspiration two days a week; and that dear reader; was a real problem. We were talking more; and doing less. Jeff Atwood describes this phenomenon rather articulately in his post about doer-or-talker. He explains:

It's an easy conceptual trip from building bridges to building software. In software, some developers take up residence on planet architecture, an otherworldly place where software is eternally planned and discussed but never actually constructed. Having endless discussions about software in a conference room or mailing list feels like useful work-- but is it? Until you've produced a working artifact for the rest of the world to experience, have you really done anything?

There is something to be said about getting ready for and then assembling for a serious meeting in a conference room. Its really easy to fool yourself into believing 'this-is-necessary' or 'this-is-important' when in reality it is nowhere in the same vicinity as 'necessary' or 'important'.

Every time you find yourself spending more time getting inspired or discussing stuff than you spend actually doing stuff and shipping things; may I suggest; dear reader; that you take a pause and indulge yourself in some serious work.

Charles Miller uses the example of open source project to illustrate the same point. He explains:

The best way to start an open source project is with code. Working code. Hack away at home on weekends, maybe get a couple of friends to help you out, and don't go public until you have something to show people that does something interesting, and that other people can use to build more interesting stuff on top of.

You need this for a bunch of different reasons: it establishes the original contributor's bona fides in the open-source meritocracy, it shortcuts all sorts of damaging debates about coding styles and architecture that can stop a project before it starts, and so on.

Most importantly, though: working code attracts people who want to code. Design documents attract people who want to talk about coding. I've seen what happens on projects that start with no code and a commitment to produce a design. Some of the procession of UML diagrams were really well put together, but that's about the extent of it.

Yes; inspiration is a critical part of moving forward and so is design but if you surround yourself with people who want to 'talk' inspiration and design all the time; without doing any real work on it; you are going to have highly scalable systems that don't exist and highly rewarding careers which produce no real meaning.

Word of advice; stop talking and ship.

If you are a programmer; slog away at a truly remarkable system; if you are an author; go ship a book; if you are a blogger; blog consistently; if you run a podcast; package and deliver it consistently.

Yes inspiration is important; but remember; it is a medicine and an overdose of inspiration can have some serious side effects.

Take the right amount of inspiration; know when you have had enough; and when you realize you have enough of it; stop; get your ass out there and slog at shipping something.

I wish you good luck.

posted on Sunday, November 15, 2009 9:38:29 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, November 14, 2009

If you are a programmer or even remotely associated with the world of software development; you have probably seen an entire team; built and function on lies. No; I am not talking about the occasional long nosed marketing weasel who lies to a customer about how much functionality your product has; and how quickly you can get stuff built.

What I am talking about; dear reader; is an entire ecosystem that stems out of the lie of one marketing weasel. Somewhere; during the life time of your project; usually even before the project starts; someone lays a foundation or a contract built on a lie; and then it snowballs from there. Before you know it; you have an entire ecosystem built to survive and thrive in an environment of lies. Jan-Erik explains this much more articulately than me. He explains:

Back when I was doing project work in the traditional waterfall way, I noticed liars all around. Developers lied about the status of their work (more or less deliberately) to the project manager, the customer lied to the project manager about how much functionality they really needed in order to use the product. The salesmen lied to the customer about how quickly the team would deliver.

It was lies all around and we where so used to it that we started to make daily routines to cope with the effect of lies . For this reason, all estimates would for example be padded with a fixed percentage and in all contracts you would find legal statements that would punish the parties if they was caught lying.

It was a cruel environment to work in. We even lied about the process we used, what we said we would do in a sales meeting was often quite different from what we actually did when we started to feel the pressure of delivering.

If you have lived the world of professional software development you can probably connect to Erick's post. Of all the things that Agile does; one of the most important things it does; is that it brings things out in the open. But even Agile; in all it's glory cannot keep the liars out of your project and your professional life if the very foundations of your project are built on lies. Jan discusses this while talking about the benefits and limitations of agile. He explains:

So, where have all the lairs gone? The lying people are still there, even in Agile teams. But it is simply too hard for them to lie and they gain too little from doing it.

Whenever it becomes easier to lie than to be honest and the immediate gains of lying is high enough, they will be back.

If you miss the times of deception and lies, please feel free to put more formalities and team separation into your process. And make sure to have lots of fixed price projects. The liars will be back before you know it.

Let's try to stay honest for a while, it feels much better than the alternative, don't you agree?

Visualize for example; the vice-president of marketing in a meeting room when a simple statement - we-can-get-this-done-in-a-month - can land him with a fixed price project worth a couple of hundred thousand dollars and you might understand how easy it is to find yourself engaging in a tiny little lie that you feel can be turned into reality by putting a just-a-little-bit-of-pressure on your team.

That's when the grand saga of lies begin which pretty much runs downhill; till the time developers give into the pressure and start looping around in the infinite loop of failure.

Look around your office hard enough; and you might actually come across a manager or two who actually want you to lie and tell them the every-thing-is-on-schedule even when it is not.

Look around your office hard enough; and you might also find developers who cannot break the bad news or give up.

Whenever it becomes easier to lie than to be honest and the immediate gains of lying are high enough; people will lie and those very lies will create broken windows that result in projects; careers and organizations coming to a slow painful end.

If you are a programmer; a manager; or a young and budding entrepreneur starting your own organization; might I present to you; dear reader; three simple ground rules that you can stick to and avoid the painful software-development-ecosystems built on lies. The rules are really very simple:

  1. Do not work with clients who want you to meet unrealistic hard dead-lines on fixed time fixed price projects.
  2. Do not hire managers who have a habit of estimating tasks in man-hours.
  3. Do not hire developers who cannot say no and are always ninety percent done.

Yes; all of the above is easier said than done; but I have personally seen organizations that stick to these rules; and reap the benefits by building remarkable software and building meaning.

Remember; every lie in your professional life; is a broken window with the full potential of snowballing into something nasty. Go ahead; say 'no' to your manager; give your estimations in days or weeks instead of hours; fail remarkably and turn down a client who just has to get the product built with every single feature discussed; before the road show which is three weeks from today.

I wish you good luck.

posted on Saturday, November 14, 2009 9:12:39 PM UTC  #    Comments [2] Trackback
Posted on: Thursday, November 12, 2009

During my stay at Multiplitaxion Inc; I am asked to oversee a project that folks in the management team think is not shipping as effectively as it should. I am given access to the project repository and the mailing list. By the time I close my outlook on the very first day; I see project members communicate using very different medium of communications than the ones I am used to. Somewhere; a connection seems to be missing and they don't seem to be 'talking'.

Emails --- rule how project communication happens; how tasks are assigned; how task completion announcements are made.

On the very first day in the project; I quite literally; get spammed with over a hundred emails.

Emails providing details about mundane; irrelevant facts like:

  1. A programmer just checked in a couple of code file.
  2. A tester is taking the local development database down for five minutes.
  3. A tester is taking SVN update.
  4. The local database is back up again.
  5. Bug IDs of bugs that have been assigned to a particular developer.
  6. Bug IDs of bugs that have been fixed and assigned to a particular tester.

People in this project; had a tendency to paste SVN logs into emails and send those out for every check-in that they did. For every piece of work that you did; for every minor assignment you completed; it was expected that you to write an email; and send it out. When you send the email you were expected to  copy the entire team.

Now; to be honest; there was nothing wrong with me getting over a hundred emails. I would have been happy deleting the emails and moving on with my life; but then a hundred plus emails in my inbox meant that:

  1. People on the project were wasting a lot of time writing these emails.
  2. People on the project were wasting a lot of time reading these emails and dealing with random redundant noise.
  3. People on the project were doing some level of CYA.

It was generally believed that if a programmer sent out a cryptic email with a SVN log of a check-in; he basically passed the responsibility of testing the code over to a tester; who was supposed to grab that email; get an update; understand what changed by looking at the log; and test the newly built functionality.

Shivers of chill ran down my spine as I saw the hundred plus emails get downloaded into my mailbox; emails with cryptic signals that you had to monitor like a hawk to see what was getting done or for that matter; what was not getting done. Terror struck with the number of emails I was getting just from this project team; I decided to investigate and find out what started the whole CYA exercise of emailing the entire team every time you did anything.

Turns out; the team had once been told to send out regular email updates on every SVN commit they did. Being the introverts and un-social creatures we as programmers are; every single programmer in the team; even the best of the builders; started following the rule; and in some little perverted corners of their geeky-brains started somewhat enjoying the rule.

When I was asked in a management meeting what it would take to get the team to become fully productive; my response was simple; direct and straight forward. The team was already productive. All you had to do to get things done was cut off their email accounts from them and you would have a golden team that not just flocked well; but communicated and connected with each other.

That dear reader; was of-course easier said than done. After days of trying to convince people to walk up to person in the next cubical and talk; if there was one thing that I learnt it was this: if you want your programmers to succeed; keep them as far away from meetings and emails. Get them white-boards; get them markers and more than anything else get them to talk to each.

So the next time you find yourself writing an email to your colleague; stop. Think. Can you use better forms of communication than a random haphazardly written email? If you must use email; can you limit your audience to people who really need to act on your emails rather than randomly emailing the entire team? Take some time and indulge in some serious soul searching before you press that send button.

After all; you might be spamming your whole team; and you might not even know it.

What is worse; is that you might be spending hours of your day pretending to yourself that you are indulging in an act that is professional when all you are doing is indulging in a CYA excursive; wasting your time and the time of those who work with you.

Facing a problem fixing that code you are working on?

Don't send an email yet; go talk to the person sitting in the cubical next to you; ask for help and try to strike a meaningful one on one conversation.

I wish you good luck.

posted on Thursday, November 12, 2009 11:01:14 PM UTC  #    Comments [3] Trackback
Posted on: Sunday, November 08, 2009

During my childhood I was told by many that I was what they called an --- 'introvert'. As far as my side of the story was concerned; I found human beings; to be these hugely  complex creatures who were very difficult to understand and establish a connection with.

If I can be honest here; it was not the human race that was a problem. I actually liked interacting with other human beings. It was just the first five minutes; the small-talk; the how-are-you-doing or how-is-the-weather-there discussion along with that phony smile that I found hugely complicated and pointless.

Computers and compilers on the other hand; were hugely different. At times they were unpredictable too but they came nowhere close to human beings; besides there was no small-talk; weather-talk; and phony-smiles involved.

Armed with my programming skills; I entered a profession where interaction with human beings was just as important as interacting with the compiler.

Then as I grew and morphed into a better programmer; something funny happened. My quest of becoming a better programmer started making me interact with other fellow-programmers and I; dear reader; started connect to them. Then there was the ability to explain technology to explain technology to clients and business folks; that started getting developed as I worked more with people who were not very technical.

Put simply; as I grew up as a programmer; I realized that I was not the 'shy' or 'introvert' character I was told I was.

I just had a slightly different medium; way and approach of connecting with people.

As a part of my job; this blog and my online presence I think on any given day the number of human beings that I interact with; is probably more than any typical social lawyer or insurance agent out there; and I love it.

Having said that; for the programmer within me even today; connecting to random strangers is not easy; and yet; every time I get an opportunity to connect to people; I try my best to do so.

Michael Lopp in his post about 'Your People' explains why I make a conscious effort to interact with people through twitter; blogs; and conferences every time I get an opportunity. Michael explains:

There are two types of networking. Basic networking is what you do at work. It’s a target rich environment with co-workers, your boss, and those of interest in close proximity. It’s work, but it’s easy work because your day is full of those you depend on and you’ve learned that professionally befriending these people keeps you comfortably in the know.

The other type of networking I’m going to call people networking and it’s harder work. This is when you put yourself out there. It’s attending a conference where you know no one. It’s driving to the city to sit in a coffee shop with ten strangers bonded by a programming language. It’s a leap for the socially awkward, but the infrequent reward is that you discover Your People.

While Michael's definition of 'your people' is a definition that I would rather use to describe close friends or colleagues; he makes a point that is rather valid. As programmers; it is easy for us to interact with our compilers; talk to other fellow programmers and completely miss out on opportunities that allow us to connect; share; and learn from other smart individuals around the world.

My Point?

Look around. Connect with other human beings whenever you can.

If you are a programmer; who finds peace by being in flow and talking to his compiler; my advice to you dear reader; is that you go out there and start a dialog with smart people out of your current workplace.

If small talk makes you nervous; find other way of communicating with people. If constant ongoing conversation is your medium on conversation; start a twitter account. If you like a coherent stream of organized thoughts and discussions around those thoughts sign up for a blog. If personal one on one communication makes you happy; start attending conferences.

Whatever it is that you do; connect to people every time you find the opportunity to do so; because at the end of the day; that is what will make you a better programmer; a better professional and a better human being.

I wish you good luck.

posted on Sunday, November 08, 2009 11:53:08 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, November 07, 2009

What Are You Spending On - Programmers  Or Infrastructure?

If you are a regular reader of this blog you probably know that I do not do not usually do not do travelogues in this blog; unless of-course my travel results in meeting a really interesting individual or finding a meaningful insight which I can share with you dear reader.

This one did. This by no means is this post just a travelogue. Read on.

In a recent visit at Ted India I spent three days in the beautiful and plush campus of Infosys.

Before I start this post; let me go ahead and mention that Infosys is an amazing organization; and is often referred to as the one of the best software firms of India with high employee satisfaction. The guys at Infosys were not just kind enough to sponsor Ted but were actually kind enough to give some of us a very elaborate Infosys campus tour; even though we were not registered for the tour.

The intent of this post; dear reader; is not to criticize Infosys; put the organization on the spot; or bore you with a detailed description of the entire Infosys campus tour; but to leave you with a few facts; a few questions and a thought worth harping on.

Ready?

Here we go.

Fact one - Infosys campus is huge and beautiful.

As you read hear me say that the Infosys campus is huge and beautiful; dear reader; you have to keep in mind that this comes from someone who has seen some amazing campuses in his career as consultant across the globe. Just so that you know; I've worked in campus ranging from filthy rich oil companies at Texas; all the way to the Microsoft Silicon Valley campus.

The Infosys campus with its plush green environment, clean roads and huge intimidating architectural structures which look like palaces of Paris or the epcot center building; beats anything I have seen till date. Try cycling through the campus and your panting breath will tell you how huge the campus is.

There are guest houses, swimming pools, bowling alleys, super markets, saloons, multiplexes, cycle stands where you can grab free cycles and pretty much anything you can think of.

It's clean beyond imagination; huge beyond imagination and has buildings which are shaped beyond imagination.

Fact two - Pillars Without A purpose.

As we tour through the Infosys campus; we are accompanied by a Tedster who happens to be in the business of reconstructing old buildings.  I stand in awe looking at the huge marble pillars; when suddenly; I am told by this gentleman; who can differentiate a fake pillar from a real; that the marble isn't real marble.

They are in all probabilities a synthetic material; he tells us.

The guide agrees.

Turns out, the pillars aren't even a structural necessity. They just happen to have been constructed using a compound that 'looks' like marble purely for beautification purposes.

Fact Three - Domes without a meaning.

Infosys buildings seem to copy or replicate structures from around the globe. The primary training facility resembles palaces in Rome or Paris.The primary planetarium looks exactly like the epcot building. In fact, most TEDsters; me included; actually start referring to it as the epcot building.

Turns out; the epcot building is a perfect rectangular box like any other building from the inside. The epcot-like-dome is a facade on the outside of the building purely for beautification purposes.

You can see the taste; the diligence; and the pride Infosys folks have when they are talking about their campus. It almost feels like being in the silicon valley of India --- till I make a request to one of our tour guides.

What I decide on doing is applying my litmus test of finding out if a software development firm is truly remarkable; on Infosys. Promptly I express my desire to see the offices where developers work.

Fact Four - Infosys Refers To Software Development As 'Production'.

After a little bit of thinking our guide is kind enough to get permission and give us a quick tour of the Infosys 'Production' area. I ask him if this is a common term used across Infosys. Turns out that software development is actually referred to as 'production' across Infosys. I cringe.

Fact Five - The Programmer Bill Of Rights Happens To Be Non-Existent At Infosys.

Shivers run down my spine as I walk into the 'production area' which looks like any other 'cubical farm' of any other organization. Engineers work on desktops and tube based monitors. They sit in cubical with very little division or privacy between four cubical.

You can see effort; or lack of it thereof; that went into designing the office. Compare it with the effort and money spent on building the amazing and intimidating domes; and you will realize that workplaces received very little attention.

Clearly; seems to have been outsourced to an architect or a designer who knew nothing about software development.

And The Point.

Put simply; Infosys workplaces are just like any other software development shops around the globe. Absolutely nothing special or different about them.

The work environment pretty much seems to violate every right in the programmer bill of rights.

I watch the engineers code away to glory as they work on a project; which is about writing software which controls the wing of an air-craft; in averagely mediocre offices; on desktops; with single monitors and not very quite work environment. Had I blind-folded you; took you in; and opened your blind-fold once you were in the 'development' center; chances are you would not know you were at Infosys.

If you have not yet figured out where I am going with this; here are some questions to play around with dear reader in your head as you read along.

Lets face it. Programmers are what build Infosys. While most programmers look decently content with their work environment; why does Infosys spend all this money building Domes around boxes, copying the epcot building, or building with fake marble pillars when the environment where the developers work most of the times are barely mediocre?

Does Infosys; like most other software development shop around the world; miss the whole point?

To be honest here; dear reader; this post is not so much about Infosys; as it is about the sorry state of software development world and how we as software development shops treat programmers.

Of all the companies I have seen; worked with; or read about; I am yet to find a company other than Google, Fog Creek and Microsoft which realizes the important of giving the basic necessary infrastructure to development teams which ends up making their developers genuinely productive.

Now; if you happen to be a young and budding engineer or even a veteran looking for a job; chances are that you are going to find yourself in a cubical farm. Even if they do not explicitly mention it; chances are that your organization too considers software development synonymous to 'production' as it spends spends millions in marketing, management and building hollow pillars which look like marbles; well at-least metaphorically.

Lets face it; dear reader; There is not much you can do to change any of that; yes you can try to change your organization but chances are; you company may have already run out of budget to do anything and there will not be much they can do.

Having said that; if you are a young and budding entrepreneur; setting to start your own company; might I suggest that before you hire that architect who designs hollow pillars and fake domes for you; spend some serious time understanding software development; what your developers truly need and get them those quite offices with privacy; aeron-chairs; powerful laptops; dual monitors and a silent work environment which allows them to get in the flow.

And that; dear reader; is what will make your campuses much more beautiful than most other software development firms out there.

I wish you good luck.

posted on Saturday, November 07, 2009 9:33:11 PM UTC  #    Comments [0] Trackback
Posted on: Thursday, November 05, 2009

I write this from the Plush; huge and amazing campus of Infosys Bangalore where TED India 2009 is being hosted.

Before I even start with this post; let it be known that I love TED and have been watching TED videos for three years. Being at a TED is an experience any creative mind should indulge in and I would highly recommend TED to anyone who as I say - aspires to make small or big dents in the universe.

TED India; much like all other TEDs was an amazing experience.

I have been blown away with the hospitality; arrangements and the insightful talks.

But this post isn't about reporting TED events or doing a shameless plug for TED.

This series of posts; dear reader; is about 'entertaining' a few thoughts that whisked through my weirdly-different mind during the last two days spent at TED India. It is also about sharing, raising and discussing a few of my very own personal questions and perspectives that I carry back with me; besides the amazing things that I learnt from TED India speakers, fellows and participants.

May The Best Man Win.

If you happened to be at TED India one of the things that you would have found striking is the amount of conversations and talks around; India, Indian Culture, How India is different from the west, How Indian infrastructure is growing; how corruption in India works; how the Indian poor are being helped by Indian NGO's and how nothing in India is perfect but in spite of that things still 'work'.

The amount of discussions and content around the whole mechanics of how India works; what India is up to and how India is coming up; in TED-India were fascinating; but if I can be brutally honest here; they were also a little overwhelming.

Put simply; by about the evening of second day; as I saw almost every speaker and participant touch the topic of 'India' and how it works; I was starting to miss talks which touch universal problems like happiness; education; drawing inspiration and many more like it in a rather fascinating and engaging way . What was also happening by then; was that a few question were starting to find their way through my mind:

  1. Were the TED India speakers and even we (me included) as TED-India participants spending just way too much time on understanding the differences that are either going to pretty much automatically find a way to co-exist or are going to be wiped off in a matter of few years?
  2. Are we not rapidly moving towards a world where the best of efforts and products cross the dip; stand the test of time and eventually survive; irrespective of the country that they originate from?
  3. Are we not already in a world that is so mind-blowingly fair that just one rule stands - may the best man, woman, organization, thing or effort, win.

No seriously.

Before you knit your brows at the questions; and go on the defensive; consider this:

If you happen to be the best social worker out there; you will figure out a way to help those who most need your help; irrespective of the country that they belong to.

If you are the best architect; you will find a way to build the best of the buildings that people find fascinating.

If you are the best musician; you will find a way to touch people's heart with your music in a way that moves them.

If you are the best software developer; you dear reader; will find ways to build the most remarkable software out there.

So the next time you see me at a cafe; I do not care if it is in India or California; lets get together and talk about insights that makes you the best whatever-it-is-that-you-are. If you are not the best let us exchange ideas, thoughts and experiences about what can; as professionals; make us; the best at whatever-it-is-that-we-do.

Everything else; is just details.

May the best man, woman, organization, idea or product win.

Now; tell me what makes you the best? If you are not there yet; how are you working towards getting there? What have you learnt from your failures so far?

I will take what applies to me. As an educated man I will try my best to filter the inapplicable and entertain your thoughts without accepting them.

I do not care where you are from; where you are located or how amazingly different we are. Seriously.

Go ahead. Start the conversation.

I am listening.

Are you?

posted on Thursday, November 05, 2009 6:56:26 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, November 01, 2009

You Might Be A Spammer And You Might Not Even Know It. 

From Saving cost; increasing my IQ; getting a free degree; living a happy life to increasing my man-hood; the number of spam emails that I get on any given day is astonishing.

While I am hard-wired to ignore these emails; there is yet another kind of email that is also technically spam and that I also ignore.

This dear reader; is not the typical malicious spam sent with an intention of spoofing; identity theft or running a Trojan on your machine.

Instead; these email include a real organization and a real marketer trying desperately to market a product that he or she has set out to make you interested in through what I like to call 'brute force marketing'.

Examples include:

  1. Valid and Authentic Placement Agencies checking to see if you have openings in your organization and if you would like to interview their candidates. 
  2. Web conferencing companies trying to show you their solution and help you get; what they call; a higher 'ROI'.
  3. Training organizations wanting to check if you are interested in attending their next paid training session or workshop which will 'boost' your productivity.

Read between the lines and you willl sense both; the mediocrity of the product and the frustration of the person sending the emails.

For months I struggled with why anyone would indulge in the act of spending all this time and effort to spam your mailbox when it is a vastly known fact that we as computer users ignore most of the emails that we get.

For months I wondered how the idea of writing Trojans and spammers worked. Were there organizations that had developed this as a Niche? Were there whiteboard meetings; backlogs and scrums around the features to include in the next version of the cutting-edge-spammer these guys were writing?

No; seriously; this entire 'industry'; for lack of a better word; and its workings; were beyond my comprehension.

It was then that I happened to work with the client where I saw how it all begins.

This client of ours; who for the purposes of this post; we shall refer to as Multiplitaxion Inc; had a marketing department which undertook the task of sending out monthly mail blasts to what they called their 'potential clients'.

To give them credit for ethical conduct; the mail blasts were not malicious though. They contained simple HTML emails with harmless irrelevant stock-pictures of planets like Saturn or smiling people. The idea of these emails was to get the receiver of the email excited about the insurance product this client of mine worked on.

A little more investigation into the process told me how it typically works:

  1. There were people hired (usually outsourced from marketing firms based out of India) to search and collect email addresses on 'potential customers' from the web and multiple other sources.
  2. There were companies which sold database of email addresses. These database were purchased on a regular basis.
  3. People were added to the centralized CRM database without their express permission and is most cases even without their knowledge; albeit they were offered a small 'un-subscribe' link at the bottom of every email that went out to them.

Yes; this client of mine was one-hundred percent ethical; with no malicious intent and yet they had taken their first step to becoming what can otherwise very technically be called a --- 'spammer'.

As a fully ethical organization; which was working on a genuinely good product; why did the marketing teams of Multiplitaxion Inc; feel the need to do this?

My personal theory behind this is simple --- because the math associated with this thing was staggering. It was an expensive insurance product for the enterprise this client of mine owned. The product had just three huge paying clients; which was good enough to sustain the product development team and keep the product running.

On any given month they sent out around five thousand unsolicited emails. Assuming that just 1% of the recipient clicked on the email and then 10% of  that 1% came to their website and spent considerable time there; they would have 5 interested customers that they could track and follow up with.

Now if your marketing could turn just 20% of those into paying customers; you had one new customer - which basically translated to 25% more revenue coming out of the product.

It was huge.

Human beings; are driven by different motivations; and when the motivations are high; people tend  to lean towards what might be wrong without even realizing we are doing so. This is exactly what had happened here. Multiplitaxion Inc; was sending out spam-mails without even realizing it was 'spamming' people.

No-one in the marketing department; development team or the entire organization saw this as spam. Everyone just called it a 'mail-blasts' and we even had calls around how we can improve the email sending job so that we can track the people who were getting these emails and see what they were doing with these emails that we were spending so much time and effort to send.

That is when we started embedding GUIDs and JavaScript in our email to track who was clicking on them; who was deleting the emails without reading them and who was spending time on our website.

We never went beyond this point; but as we sat through some of those meetings; I as a developer; could almost see what the natural next-steps or set of 'features' could be to take our mail-blast program to the next level - introducing a small executable or active-x component (or should we say a Trojan) to see which other insurance products the recipient of the email was running?

I cringed at the very thought of it.

It freaked me out to even think how thin the line is between being a software developer who is building a great product and helping the marketing team get the word out and a spammer who is writing state of art tools for spamming people.

The only good thing; that I can say about that episode is that this client of mine; knew where to draw the line and stop. No-one even thought of or spoke about introducing executables or active-x controls for better tracking visitors.

Of-course; as we sat in that meeting room; none of us; even thought that; just by sending those emails out; we had taken the first step to becoming the spammers we all hated.

Now; pause a moment; dear reader.

Reflect.

Does your organization send out an email blast about any of your product or service?

Harmless HTML emails that go out to a few hundred or thousand readers?

Maybe; and I am just saying maybe; much like those placement agents checking in to see if you have openings; or the training institutes checking in to see if you would like to boost your productivity; your organization might be spamming people too; and you might not even realize it.

Just a little something to think about.

posted on Sunday, November 01, 2009 8:52:58 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, October 31, 2009

The Mango Warehousing Business In India.

The Mango-Warehousing business in India is huge and yet very few people do it.

If you were to look at the business of warehousing mangoes; you might realize that; in order to get into the mango warehousing business; all you need to do is to go stay at the Mango-Farms in remote villages in India; during the mango season; look for the best prices that you can get and stock as many Mangos in your warehouses as you can.

The whole process involves some work; particularly before the mango-season in India.

Usually this translates to about a month worth of work.

Once you have put in that effort and have stocked the mangos; you go back home and sign a few sale-deals with retailers or grocery-stores. The signing of contracts with major groceries and distributors typically takes another month and does not involve any real hard-work.

If you; like a friend of mine; work in the business of warehousing mangoes; chances are that you probably work for just two months a year; and you make a truckload of money.

As tempting as some of these money making stories are; mango warehousing; dear reader; is not what I do for a living.

I build software and weave stories around software development.

Not to bring the people in mango warehousing business down; but I; dear reader; am not particularly interested in stocking mangoes for a living.

Are you?

The Point.

Now; if you have been knitting your brows with my mango-warehousing-commentary or the funny question it ended with; and nothing in this post seems to be making sense to you so far; would you; dear reader; do me a favor and count the number of business domains that you and your organization may have worked with in the last three years.

If the number crosses a dozen; chances are that your organization or you are a free floating developer with no niche or passion for the problem-domains you work in and you should seriously consider mango-warehousing in the farms of India as your next project.

I've witnessed quite a few consulting and product companies out there venture out into random business domains that have nothing to do with their niche and what most of them indulge in; can be referred to as trying-out-mango-warehousing-of-the-software-development-world. The cycle pretty much goes like this:

  1. You find an industry in a remote corner of the world that no-one seems to be interested in; this gets you very little competition.
  2. You spend couple of months building an application with a few CRUD screens around that industry.
  3. You try to sell your CRUD screens to business folks on this industry; and then you make a truck load of money from those CRUD screens; or at-least that is what you try to do.

Put simply; you focus on making quick-buck by targeting obscure domains that have not been targeted yet; and then you build collection of random CRUD screens and PowerPoint presentations on the industry.

My previous organization for example was a classic example of this mode of working. We woke up one fine morning; discovered that there was a lot of money to made in training and literally ventured out in the business of software training.

A few wannabe-programmers; which no passion for teaching; were hired and turned into teachers.

It worked for a few months. Then we started sucking at it.

It ended with students literally rallying on their doors protesting against the poor quality of training they were providing compared to the money they were charging for these trainings.

Not to mention that in parallel; we has also ventured out into the world of retailing computer peripherals.

While this may sound like an extreme example of an organization trying to make easy money; by doing anything that can get them a quick buck; reflect on just how many absurd industries that you as a programmer might have worked in; for your current or past organizations.

Remember specialized accounting and payroll product for the tea-estates of the world that you organization was working on; or that specialized document repository designed specifically so that the oil mine workers can upload their well-files; or that specialized inventory tracking system that was supposed to help hospitals keep a track of their bed sheets.

You didn't feel anything about tea-estates; oil-mines or hospitals; did you? Neither was it your organization's niche. You were just trying to work for two months; get a few CRUD screens stocked and make a quick buck.

Your organization; dear reader; was indulging in act of trying to start mango-warehousing-in-the-software-development-world.

Genuine Mango Warehousing Happens To Be Hard.

Back to digressions. Remember how my friend does mango warehousing; works for just two months a year and makes a truck load of money?

If you were an average Fred looking at the business of Mango warehousing business from the outside; it seems simple. You work for two months; you hardly do any real work and you make a truckload of money; it seems so very easy.

It is only when you try it; that you realize that mango warehousing in India is serious business. It involves:

  1. Owning warehouses; maintaining them; securing them; running them and operating them. All of it requires truck load of money.
  2. Learning local languages (curious side-note: India; has more than twenty local languages); adapting to the local culture and knowing how local cultures work - not knowing this means you can literally get beaten up by the locals.
  3. Developing a deep gut for how much harvest would happen in any given year.
  4. Developing a gut for what a fair deal is; and then buying at the right price in the right time.
  5. Developing contacts with retailers or people who would distribute your stock when the price is right.

The list dear reader; is endless.

As simple as it seems on the surface; Mango warehousing in India; dear reader; is serious business; it is hard; and can take you a life time to master.

For my friend's family; it took them two generations.

And believe it or not; during those two months; I think he feels really passionately about --- mangoes.

Where I am Going With This.

You see where I am going with this; don't you?

If your objective is to make money; it is easy to think of a thousand unexplored industries where you do not have a lot of companies building software. Then build a few CRUD screens around that industry and hope to earn millions through the collection of half-assed CRUD screens.

Next time you target a business domain; only because there is very little competition there and you think you can get away by not feeling-the-pain or just building a few oddly-stitched CRUD screens that save something to the database and spit out a few reports; think again.

Remember; mango warehousing is hard and the amount of passion and work you need to succeed in it is probably just as much as you need to build a project-path; even if; you do not see it at the surface.

Stop hunting un-explored industries and jumping from one domain to other in a desperate attempt to hit a gold mind.

Find a niche; become the best in the world at it and go build stuff that makes meaning.

I wish you good luck.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Saturday, October 31, 2009 9:14:22 PM UTC  #    Comments [0] Trackback
Posted on: Wednesday, October 28, 2009

At one of our clients; who for the purposes of this post; we shall refer to Multiplitaxion Inc; I sit through a project meeting with a heavy heart.

We are talking about adding features to a product that just does not seem to have taken off or generated any form of revenue, adaption or excitement; after almost two years of hard-work; effort and sweat of more than five genuine builders.

The marketing team still thinks we have a 'great' product that is gaining a lot of 'interest'. We hear sentences like 'our-product-is-getting-noticed' and 'our-product-is-gaining-traction'.

The vice president of technology; thinks the product just needs a little bit of more work and then it will be golden.

The director of marketing feels a few new features would help us sell the product in completely new markets.

Everyone seems to think that the product will eventually cross the Dip if we keep going at it.

Everyone; thinks; and has been continuing to think since the last three months; that we are really close to a version that customers will love and buy.

Something tells me we are nowhere close; we are just what I call --- 'lost'.

I cringe as I sit there and watch people preparing to-do-lists and backlogs of features which they believe will rescue the product and get us adaption.

What I am feeling right now; is what Malcolm Gladwell defines when he talks about Vic Braden who is able to predict with impeccable accuracy which one of the serves by a tennis player will be a double fault; every time he is watching a match. In his book; Blink; Malcolm explains:

Braden is now in his seventies. When he was young, he was a world-class tennis player, and over the past fifty years, he has coached and counseled and known many of the greatest tennis players in the history of the game.

He is a small and irrepressible man with the energy of someone half his age, and if you were to talk to people in the tennis world, they’d tell you that Vic Braden knows as much about the nuances and subtleties of the game as any man alive.

It isn’t surprising, then, that Vic Braden should be really good at reading a serve in the blink of an eye. It really isn’t any different from the ability of an art expert to look at the Getty kouros and know, instantly, that it’s a fake.

Something in the way the tennis players hold themselves, or the way they toss the ball, or the fluidity of their motion triggers something in his unconscious. He instinctively picks up the “giss” of a double fault.

He thin-slices some part of the service motion and - blink! - he just knows. But here’s the catch: much to Braden’s frustration, he simply cannot figure out how he knows.

I can smell something weird. I can tell you with utmost confidence that the project will not get any adoption, excitement or revenue in the years to come.

There is nothing technical that brings me to this belief though. Not the code; Not the implementation.

To be fair; we have a clean code base built to sustain the test of time.

And yet; something seems 'wrong'.

It does not seem like a half done project. It seems like a half-assed project; without any meaning; designed for the soul purposes of 'somehow' gaining revue in an unexplored business domain. Maybe it is the idea; maybe the industry; I cannot clearly lay my finger on the issue or explain it articulately in the meeting; but I can hear myself thinking out loud - 'This thing will not work'.

None of these 'feelings' can be found on the initial project documentation though. The project has an amazing 'Project Charter' document. It has a strong business case document and a flashy PowerPoint presentation which makes the 'marketing' and the 'business' very excited about it.  

And yet; as everyone in the meeting room sits there trying to nudge us to do one more sprint - we; the team building the product know rather well; that another sprint and a few new features will not change anything.

After the meeting none of us speak; we just get to work for the next sprint.

Simple Reality Check; Watch your builders.

Within a couple of weeks; three of the best developers associated with the project contact me multiple times asking me if they can be removed from the project and moved into a different project.

When asked specific reasons on why they wanted to be moved - their responses are nowhere close to specific. Some of them 'think' the product would never get adaption. Others are not 'feeling it' while one goes so far as saying that he feels he is just wasting his time after an idea that would never work.

Years later I got an insight into how Google works on their product portfolio:

Developers can switch teams and/or projects any time they want, no questions asked; just say the word and the movers will show up the next day to put you in your new office with your new team.

I am sure there is some level of exaggeration here; but then having said let us assume that you work at Google and you end up proposing a really lousy idea that you think is great and will change the world.

Now; assuming that you know people in the right places inside Google; even if you were to get the product funded by Google you probably might not find a team to build a product based on this idea; primarily because your builders will probably just move to a new project and a new office before you even know it.

Let us be honest here.

If it is an idea you came up with; unless you are a super-genius-freak; chances are that you are going to fail pathetically at finding out the crapiness of the idea. All your time and energy is probably going in defending the idea from others who feel it is crappy anyway.

You builders on the other hand; are a completely different story.

Watching how happy or frustrated they are as they work on your product is probably the best way to figure out the genuine usefulness or uselessness your product will have when the first release is out.

Builders As Power-Users.

By the time you reach Betas which are stable enough to test out with your first set of sample business users it is probably too late to end the project and surrender gracefully.

Let's face it.

By the time you get to a Beta ready stage you have probably spent too much time, money and ego to come out say - sorry guys; we f@#cked up; lets stop all the work on the project; quit it cold and move on to something more productive.

What most organizations do not realize however; is that they have another set of really powerful users capable of giving them this exact same feedback even before the first line of code if written.

Any guesses on who this set of power-users are?

Your development team.

Yes dear reader. If you have hired seriously; your development team probably has some of your alpha-geeks who have spent years submerging themselves in technology; using software and using websites online.

Letting your builders have an opinion about the product that they are working on; and giving due attention to that opinion is pretty much like having a Vic Braden from Blink on your side and knowing in advance every time your product is going to ship with a result that can be best described as a --- 'double-fault'.

The Power Of Disassociation

Disassociation is the biggest form of dislike and disagreement that you can express towards an idea. When one of your genuine builders walks up to you and says he wants to disassociate and remove himself from a product he is working on; it is time to:

  1. Remove him from the project --- No questions asked. Move him to something that is genuinely exciting; fun and something he believes in.
  2. Question the very premise on which the product is being built --- are there elements of wishful thinking which will make you realize the truth only after you have wasted years of development effort and dollars?
  3. Stop and talk to your team of genuine builders and this time; for a change; listen.

I leave you dear reader; with a thought worth harping on: The team that builds a product is the very first set of users that uses each screen of the product; as it is being built. If they; themselves find your product boring; mediocre and safe; to an extent that they want to disassociate themselves from the product; do you really expect others to adapt and use the product; dear reader?

Go ahead. Try giving your team the power to disassociate themselves from their current project if they do not believe in it; no questions asked. Now; go see how many of your genuine builders stick around; because that; dear reader is a genuine litmus test of how interesting your product really is.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Wednesday, October 28, 2009 10:57:49 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, October 25, 2009

Motivation For Your Genuine Builders.

Steve McConnell in his classic book Rapid Development - Taming Wild Software Schedules describes a typical organization's approach to motivating their teams of builder; and what is wrong with the approach using the following illustration:

In the same book Steve talks about the importance of having some serious story-telling revolve around your project or your product. He explains:

The shared vision can be of something important—such as putting a man on the moon by 1970—or it can be of something relatively trivial - getting the latest update of the billing system out 3 weeks faster than last time. The vision can be virtually arbitrary, but as long as the whole team shares it, it will serve the same purpose of helping to bring the team together.

To have a motivating effect, the vision also needs to be elevating. The team needs to be presented with a challenge, a mission. The Amish farmers responded to the seemingly impossible challenge of building an entire barn in one day. High-performance teams don't form around ho-hum goals.

"We'd like to create the third-best database product and deliver it in an average amount of time with below average quality."

Ho hum. Yawn.

No team is going to rally around that.

Of-course; no vice-president high up in the pecking order will spell out the fact that he wants the boring database product with below average quality; but builders tend to have seriously strong gut-feeling built around reading between the lines and sensing what their organization ultimately wants from them.

If you are a manager; you could be sending out the mediocrity message to your team all the time. Multiple subtle ways of sending this message out exist:

  1. Deadline Driven Development.
  2. Panicking And Policing.
  3. Lack of trust and empowerment.
  4. Demo driven development.
  5. Optimism and inability to accept the facts.

The list is really endless. Reflect; and you might realize that your organization is sending out the mediocrity messages to your right now as you read this. Messages that you are taking and passing on to your team; as you sit and wonder why they are not hugely productive.

Newsflash!

There is a reason why dead-lines; panic; threats and policing does not work in software development - if your team is a team of whiners; you are trying these techniques on them will cause them to break down and black out. If it is a team of genuine builders --- they just do not care about you scoring fouls. Chances are; that they will either not listen; or if they do; they will eventually hibernate.

Most genuine builders that I have seen do not work for a ten-percent salary increment at the end of the year. What moves and motivates genuine builders around the globe are opportunities to make dents in the universe and leave their mark upon those dents.

They want to build stuff which changes things.

They want to work in teams and organizations which add meaning.

It's a purely selfish desire; with huge long-term benefits.

The drive most builders have for this desire is usually much more than a short term ten percent salary hike in a yearly review or a pat on their back from their managers. If these; and the items mentioned in the list above are the only tools that you can offer your builders; you are better off moving or outsourcing your development to a third-grade Indian body-shop.

If on the other hand you are lucky to have landed up with a team of genuine builders and you want them to take your products, business and organization to the next level; may I suggest that you:

  1. Weave a remarkable story around your product and mean it.
  2. Show them how the story impacts them personally and aligns with their long term goals.
  3. Give them the tools to turn the story into a reality.

Now; Get out of their way.

Watch them innovate; contribute and execute flawlessly.

Observe and learn.

I wish you good luck.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Sunday, October 25, 2009 9:03:01 PM UTC  #    Comments [0] Trackback
Posted on: Friday, October 23, 2009

It's Learning Time.

If you have read this blog more than once; you probably know; that as an highly opinionated individual; I tend to express my strong-opinions-weakly-held; rather openly; loudly and boldly.

What you may not know however; dear reader; is that for most of the posts that I write; I try to give a quite bit of time; effort and attention to see to it that as I express my strong opinions openly I do not end up sounding like my self-proclaimed-authority or end up posing as an expert on the craft of building software.

I have very little respect for experts and have no intentions on posing as one. Besides; self-proclaimed-experts shouting at the top of their voice are a dime a dozen and no-one cares about what they have to say anyways.

How I think of myself; as far as the field of programming is concerned; is pretty much on the same lines of how Jeff Atwood describes himself as a programmer:

I'll be the first to tell you that I am not an exceptional programmer. A competent programmer, yes. Always. On a good day, perhaps even a decent programmer. But I don't kid myself, either. I'll never be one of the best. But I have an ace up my sleeve that most don't: what I lack in talent, I make up in intensity.

When you think of yourself as someone who is nowhere close to being an exceptional programmer; coming out saying that you are going to start writing a series of technical posts with a different style of technical writing is hard and might even sound like stupidity.

In spite of that; in one of my earlier posts; I explained my gripes with technical writing and announced that every one in a while; I am going to be trying to indulge myself in some interesting fun filled technical writing on this blog. Technical Writing about developing better code that programmers and even managers who were once passionate about programming can enjoy and learn from.

As I mulishly work on trying to develop a writing style that does not doze you off to sleep while reading a technical article; and continue my research for some of the topics and articles I plan on writing about; here is one question that keeps coming back from people I know personally: 'Why?'

'No seriously; Pops' - people I know or work with have told me recently - 'There are tons of technical books on programming out there; why do you want to write another one?' --- or at-least they have said something to that effect.

On the face of it; the obvious reason; dear reader is that I am not hugely happy with the type of technical books that are being written out there and I want to make my humble contribution to the world of software development. The actual; blunt honest and selfish reasons for attempting to write a technical book; dear reader; are however; very different. They are:

  1. I want to write a book on the craft of building stuff; programming and coding better primarily because that is what I am interested in learning.
  2. I am a loud learner --- what that means is that I like to make a lot of noise when I learn something new.
  3. I have seen that I learn the most when share what I am learning with others and teach them what I just picked up.

Put simply; I learn best; when I learn like a teacher.

It's Teaching Time.

For the first couple of years of my career I happen to teach students who were taking their Bachelors in Information Technology. There were quite a few things I learnt and picked up during those days; ranging from giving presentations all the way to basic concepts used in software development and IT.

Most of it was quite valuable.

The first few months however; were not very present.

Here I was; fresh out of high school; picked after of multiple rounds of interviews; as I wondered what my first assignment was going to be.

It was to teach programming and IT lessons to a bunch of students doing their Bachelors in computer science.

Soon I found myself walking into classrooms with my huge ego when every once in a while; a student would just get on the white-board correct me or just prove me out right wrong; as I watched my ego float and sink to the ground.

After it happened a few times; though; I started turning shameless and started learning from my students.

That is when; dear reader; things got interesting and my growth chart; in terms of what I was learning; started shooting up.  That; dear reader; is also when I was able to keep a class full of students fully involved and connected with the topic. That is when we started having something that was close to 'fun'.

If there was one thing that part of my life taught me it was that the only way to teach something to anyone is by brining yourself on the same level ground as your students and walking the same learning path with them.

Put simply; I  realized that I teach best; when I teach like a student.

You Are Invited.

If you find the whole idea of learning like a teacher and teaching like a student confusing; all I can say is; like the rest of the software development world today it is supposed-to-be-confusing; in a very good way.  Michel Lopp describes this confusion much more articulately than me when nudging managers to write code in his book Managing Humans. He explains:

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-f@ck.

Michael's invitation of joining the massive global cross-pollination information cluster-f@ck is not just limited to nudging young and budding managers  to write code. Take the same idea further and it extends rather well to how the world in general and web in particular is shaping up.

While my early teaching days were painful and merciless on my ego; as I struggled to turn from a teacher into a student; the web today makes it possible for every single one of us to do that much more easily; and this dear reader; is precisely what I intend to do with these series of posts.

With my first book slowly starting to reach an end I will indulge in free-flying and writing about anything that is on my mind; but then every every once in a while; you might end up seeing articles here on how to build stuff better.

You might connect to some of these articles and find them useful if you are a developer; or a manager who was once passionate about development and still wants to remain technical; even if you do not code actively. The other possibility is that you might hate them; find that I am overly simplifying things and adding too much spice to serious technical topics. There might even be times where you might discover that I am talking about things I have no clue about.

As you read these articles; which might show up on this blog every other week or so; please do remember that this is me; teaching as I learn and learning as I teach.

Long story short; I am going to indulge in the act of doing some bathroom singing in a live concert again and you; dear reader; are invited to listen in.

This might be a yet another golden opportunity to come watch me make a fool of myself.

Wish me luck.

By the way; if you find me talking about something that is blatantly wrong; feel free to walk up to the white board; or use the comment field; shatter my ego and tell me how wrong I am. Enlighten me. I will thank you for it. Honest.

posted on Friday, October 23, 2009 10:31:07 PM UTC  #    Comments [0] Trackback
Posted on: Tuesday, October 20, 2009

For those of you who might have noticed; on 18th October 2009; Twitter; posted a short and simple message on their status website. The message read:

'We are currently investigating a problem whereby some Twitter clients in widely scattered network locations are unable to connect to twitter.com'.

Put simply; twitter was down; yet another time.

When the problem was resolved and twitter came back up again; the same message that announced twitter's going down was updated to reflect the fact that the problem had been fixed. The update read:

'Network should be back to normal now. We are investigating the cause of the outage and will update this with more information when we know more.'

If you are an avid Twitter user; this probably does not come out as news which surprises you anymore.

When twitter goes down; we; the faithful twitter users; wait for twitter to come back up; the world moves on; the sky continues to be blue; the birds keep chirping and once twitter is back up again; we get back to using it.

I love twitter. Don't get me wrong; dear reader. The point of this post; is not to pick on twitter's downtime.

We have enough of you out there doing that already.

As far as Twitter's downtime is concerned; my stand on it; is simple - When they go down I wait for them to come back up and when they are up; I get back at using their service. Yes I love twitter; but then; having said that; my world does not revolve around twitter and their going down once in a while does not upset me majorly like it upsets most passionate twitter users.

 Bertrand Meyer; on the other hand; has a different perspective on Twitter or any other public website going down. He explains:

Software disasters continue; they attract attention when they arise, and inevitably some kind of announcement is made that the problem is being corrected, or that a committee will study the causes; almost as inevitably, that is the last we hear of it.

In the latest issue of Risks alone, you can find several examples.

In the past months, breakdowns at Skype, Google and Twitter made headlines; we all learned about the failures, but have you seen precise analyses of what actually happened?

Bertrand compares software development to a disciplined and much more structured industry like the aviation industry and talks about learning 'learning by accidents'. He explains:

Airplanes today are incomparably safer than 20, 30, 50 years ago: 0.05 deaths per billion kilometers. That’s not by accident.

Rather, it’s by accidents. What has turned air travel from a game of chance into one of the safest modes of traveling is the relentless study of crashes and other mishaps. In the US the National Transportation Safety Board has investigated more than 110,000 accidents since it began its operations in 1967.

Any accident must, by law, be investigated thoroughly; airplanes themselves carry the famous “black boxes” whose only purpose is to provide the evidence in the case of a catastrophe. It is through this systematic and obligatory process of dissecting unsafe flights that the industry has made almost all flights safe.

Now consider software. No week passes without the announcement of some debacle due to “computers” — meaning, in most cases, bad software. The indispensable Risks forum and many pages around the Web collect software errors; several books have been devoted to the topic.

A few accidents have been investigated thoroughly; two examples are Nancy Leveson’s milestone study of the Therac-25 patient-killing medical device, and Gilles Kahn’s analysis of the Ariane 5 crash (which Jean-Marc Jézéquel and I used as a basis for our 1997 article).

Both studies improved our understanding of software engineering. But these are exceptions. Most of what we have elsewhere is made of hearsay and partial information, and plain urban legends (like the endlessly repeated story about the Venus probe that supposedly failed because a period was typed instead of a comma — most likely a canard).

Bertrand; in his post; goes so far as suggesting that we start lobbying for Software Incident Full Disclosure Law. He explains:

Progress in software engineering will come from many sources. Research is critical, including on topics which today appear exotic. But if anyone is looking for one practical, low-tech idea that has an iron-clad guarantee of improving software engineering, here it is: pass a law that requires extensive professional analysis of any large software failure.

The details are not so hard to refine. The initiative would probably have to start at the national level; any industrialized country could be the pioneer. (Or what about Europe as whole?) The law would have to define what constitutes a “large” failure; for example it could be any failure that may be software-related and has resulted in loss either of human life or of property beyond a certain threshold, say $50 million.

In the latter case, to avoid accusations of government meddling in private matters, the law could initially be limited to cases involving public money; when it has shown its value, it could then be extended to private failures as well.

Even with some limitations, such a law would have a tremendous effect. Only with a thorough investigation of software projects gone wrong can we help the majority of projects to go right.

We can no longer afford to let the IT industry get away with covering up its failures. Lobbying for a Software Incident Full Disclosure Law is the single most important step we can take today to make the world’s software better.

If you have been reading the blog so far you probably know my take on rules and laws. I am a firm believer of flocking free and yet flocking responsibly. Besides my very own personal disliking for rules; government intervention in Google or Twitter seems to defeat the whole user-driven-democratization of the internet.

The internet; dear reader; has a government and unlike most government out there; this one works.

Remember; the users who decide whether they want their account on twitter or friend-feed?

I think we; as users; are fully capable; of voting a site up by giving it our time and attention or voting a site down by not-giving-a-damn-about-it.

The model works.

It is why nobody uses MSN or why users picked Google over Yahoo and why AltaVista was sent to gather dust in utter silence.

For projects involving lives and public money; sure; but for a private organization offering a free service like Google or Twitter; I would rather prefer to be on the camp that lobbies 'against' the Incident Full Disclosure 'Law' rather than the side that lobbies 'for' it.

Having said that; the gist of what Bertrand says is pristine and pure: Talk about your failures. Investigate the root cause and share this information out.

Take the guys at 37Signals for example. These are guys who genuinely and truly believe in 'Publicizing Your Screwups'. Their famous getting-real book describes the idea rather articulately:

If something goes wrong, tell people. Even if they never saw it in the first place.

For example, Basecamp was down once for a few hours in the middle of the night. 99% of our customers never knew, but we still posted an "unexpected downtime" notice to our Everything Basecamp blog. We thought our customers deserved to know.

Here's a sample of what we post when something goes wrong: "We apologize for the downtime this morning — we had some database issues which caused major slowdowns and downtimes for some people. We've fixed the problem and are taking steps to make sure this doesn't happen again...Thanks for your patience and, once again, we're sorry for the downtime."

Be as open, honest, and transparent as possible. Don't keep secrets or hide behind spin. An informed customer is your best customer.

Even for someone as open; transparent and open as 37Signals; they seem to stop at 'we-had-some-database-issues'. I wonder if someone at 37Signals considers these questions every time their service is down:

  1. Can we explain what this 'database issue' was?
  2. Do the users deserve to know what the issue was and we did or are doing towards preventing the same problem for surfacing again?
  3. Is the root cause and the fix worth sharing; maybe on a separate technical blog?

Put simply; does the screw-up being advertised; as minor as it was; create knowledge that the development community in general can benefit from? 

If yes; why not share that knowledge out to the rest of the software development world as well?

If there was a blog where a project-path developer talked about his screw-ups and gave his insights on the fixes or what he learnt from the screw-ups; I would be the first regular reader there.

If folks at twitter talked about what takes twitter down and how they resolve the issues; I would love to learn from the issues and challenges they face.

If someone at Google talked about how an invalid configuration file that pretty much puts the entire internet to a stop was pushed into their production servers; and what they did to avoid the issue in the future; I would shut-the-f@#ck-up; listen; and learn from their mistakes.

Would you not like to learn from the largest and most remarkable mistakes out there too?

Oh; and while we are at it; what was your biggest screw-up?

Did you share what it taught you by posting it and lessons learnt from it; live; dear reader?

Discuss.

posted on Tuesday, October 20, 2009 10:27:36 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, October 18, 2009

Filters To Keep Whiners Out.

One of my primary job roles at Multiplitaxion Inc; was to interview every single candidate that would get hired into the organization. This meant that if you were thinking of joining Multiplitaxion Inc and got through the technical rounds; I would eventually end up interviewing you.

Irrespective of whether you were a developer; senior developer; architect; manager; creative-user-interface-programmer; IT professional or a database administrator; chances were that you would go through at-least one round of my interview before you were hired at Multiplitaxion Inc.

Your first couple of rounds would be highly technical with the best people we had in the specific area for which you were interviewing. I was supposed to be more of a last minute check to see that you had the overall right attitude and culture to be joining the organization. Put simply; I was being used pretty much like a filter which was supposed to keep the junk from getting into the organization.

Now; if you were a candidate; you would probably be thinking that after having gone through two or three rounds of technical interviews your chances of getting rejected in my interview; at-least for technical reasons; were a bare minimum.

Newsflash!

During my stay at Multiplitaxion Inc; I think I may have rejected more than ninety-percent of the candidates that came to me after having cleared one or more technical rounds. My reason for rejecting them:

Lack of technical competence.

With no intentions of insulting; or undermining the intelligence of candidates who interviewed with us; here are examples of questions programmers interviwing with me have marvelously failed at answering:

  1. Solve the famous Fizz-Buzz questions.
  2. Write a program that prints out numbers from hundred-to-one; leave out multiples of five while printing out the numbers.
  3. Give me one example of a project where you had to write your own interface and why did you need an interface.
  4. How do you assign 2nd of January 2009 to a Date-Time variable Y.
  5. And (believe it or not) How do you assign five to an integer variable Y.

I have had DBA's who have failed at answering questions on the lines of:

  1. I have an employee table with a joining-date column which is of Date-Time type. Get me the names of the employees who joined in the year 2009.
  2. I have an employee table with a joining-date column which is of Date-Time type. Get me the names of the employees who joined in 2nd January 2009.
  3. I have an employee table with a joining-date column which is of Date-Time type. Get me the names of the employees sorted alphabetically.

During my stay at Multiplitaxion Inc; I interviewed IT professionals who had no clue as to what a subnet mask is; and managers who looked at you with completely blank eyes when you uttered the word 'sprint'. I've seen candidates fail at every single litmus-test-question that is out there.

Most of these are individuals; were employed in really-big body shops. To be fair to them; quite a few of them also had years of experience and top-notch-educational qualifications behind them.

At some point the folks in the recruiting department and I myself had concerns around these shocking rates at which I was rejecting candidates.

Were our builders failing that desperately at taking their first couple of technical rounds?

Was I being overly critical of the candidates?

Where were we going wrong; was it at the first couple of technical rounds; or was it at my round; we sat there and wondered for days.

Three Things Your Filters Should Know.

The mystery literally cleared itself out when we decided that we were going to let me sit through the first couple of technical rounds and then if needed let those engineers conducting the first couple of rounds sit through my round as I interviewed the same candidate.

Jack; who was one of our best builders around; started his interview of a candidate; who for the purposes of this post; we shall refer to as Fred; with questions and discussions around difference between abstract classes and interfaces. The answer was flawlessly correct. Then as he meandered from one question to another; the answers came in all right.

Somewhere during the course of the interview a sinister thought crossed my mind. Like all my interviews; I handed Fred my laptop and asked him to show me a real life abstract class implementation or example. What I saw in return was two angry young eyes staring at me in utter disbelief. The guy literally took minutes to figure believe that he had been given a laptop and had been asked to write some code.

From that point on; things went down-hill.

The interview ended with Fred taking over thirty minutes to write a reverse loop that would print hundred to one; skipping all multiples of five in between.

We dear reader; had hit a home run; with a simple realization.

The fundamental issue with Jack's opening question - difference between an abstract class and an interface - and his overall interviewing style - was that it worked under the assumption that anyone who was capable of answering harder questions on object orientation knew what for-loops were; had worked with for-loops and had done some basic programming in his life.

Sadly enough; as far as the state our software development goes that is a slightly unrealistic assumption to make.

We; the collective we that represents the software development world out there; have spent years raising army of whiners who know exactly what to read; how to clear interviews and how to say things that impress folks high up in the pecking order. Put them on the spot with an IDE and a laptop.

Watch them fumble with icons on the toolbar; clueless about short-cuts on the IDE. Watch them fail as they attempt to write the simplest of programs out there; and take hours doing that.

There were three things that interviewing experience at Multiplitaxion Inc; taught me:

  1. Just because someone has a great resume and an impressive background; does not mean that the person is not a complete whiner
  2. Make no assumptions about what the person knows. For all you know; he might know nothing. 
  3. If you want to hire a singer; get him on a stage and ask him to sing. If you want to hire a programmer get him a laptop and ask him to write some code.

Months later as I scribbled the fizz-buzz question in front of a senior programmer; and asked him to quickly solve it so that we can move on to the harder questions; he quite literally retaliated with the objection: 'If I can solve this will it tell you that I am capable of doing my job?' --- The answer to this question as it turns out was rather simple and spontaneous: 'No; but your not being able to solve it will tell me you are incapable of doing your job'.

The next time you conduct interview for your organization; unless your organization is looking for whiners; try to keep one dedicated person in your organization who acts as a filter. When picking a filter; go get someone who makes no assumption and is not afraid or does not get intimidated when looking into the eye of a senior technical architect with nine years of experience and asking him to crack a for-loop.

I wish you good luck.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Sunday, October 18, 2009 9:08:21 PM UTC  #    Comments [2] Trackback
Posted on: Friday, October 16, 2009

Programmer Tip: Differentiating Between Toys And Wisdom.

Have you seen a young and budding programmer flex his engineering mussels?

No; seriously.

If you get a chance to overhear two young and budding engineers bump into each other at a cafeteria or a grocery; chances are that all you will hear is a conversation which revolves around the famous which-technologies-are-you-working-on-now-a-days-question.

Observe.

There is a huge possibility that the discussion will continue forever as both these engineers try to impress each other with the cutting-edge technology they are working on in their latest project

You Don't work on Windows Communication Foundation yet?

Seriously?

Don't tell either one of these engineers.

If you do they might look at you like you belong to another planet.

Every now and then I personally witness the minds of more than one young and budding programmer explode when they hear that I am not working on any project that uses Microsoft Windows Workflow Foundation.

As developers we like to drool over the latest technology that Microsoft, Google or 37Signal throws our way. We crave to put it on our resumes and we get a huge technical-ego-boost out of using it in our real-life projects.

Rarely do we realize that all we are doing is tinkering around; consuming API's; tweaking configuration or should we just say --- playing around with new programming toys that are made available to us; year after year.

Now go grab the same two programmers you were overhearing at the grocery and ask them what Inversion of control is; what dependency injection is; or what liskov substitution principal is and watch them stare at you like you just dropped a stinking rat on the table.

Chances are that most of them will fail at even the fundamentals of object orientation.

Look hard; and chances are that you might even find programmers who cannot program working on some seriously cutting edge technologies out there.

If you are one lucky son-of-a-gun who landed in an organization that works on the latest technologies out there; and you have been busy slamming your fingers on the keyboard; writing code on some of the latest technologies out there and living in a technical-paradise; it is time to take a pause and reflect. 

When was the last time you studied closures as a language feature instead of just focusing on lambda expressions as a cool new C# feature?

When was the last time you picked a book on object orientation or the craft of writing better code and decided to browse through it?

When was the last time you kept some time aside for investigating how big your functions should be; what you should call them; or how you can get better at the craft of working with best invention in history computer science?

While it is OK to go grab the latest-beta-version of windows on your box; play around with ubuntu; and have fun exploring Windows Presentation Foundation; are you; dear reader; also giving in serious and conscious effort at understanding programming languages or reflecting on object orientation?

Are you  browsing through the code-base of open source projects out there and seeing how they lay out code; how they design their applications or approaches they take to solve generic problems.

As far as the world of software development is concerned; if playing with toys is important; developing wisdom and deeper insights about the craft of writing good code is equally important.

Do you actively track; realize and differentiate your playing-with-toy time from your wisdom-development time?

How much time do you spend on a weekly basis to get better at the craft of writing better code or developing deeper insights?

What are the tools you use to develop the craft; pick up deeper insights and grow wiser every day; dear reader?

Discuss.

posted on Friday, October 16, 2009 11:07:18 PM UTC  #    Comments [0] Trackback
Posted on: Wednesday, October 14, 2009

The Requirements Were Not Well Defined.

As a part of my job role; I conduct interviews.

Tons of them.

If you read this blog; you probably know that one of my favorite interview questions is - talk about one colossal failure that you were associated with in your professional life.

The idea is simple: If you have not failed even once; you have not taken chances with your professional life. You have played it safe and you have avoided building remarkable stuff by resting the realms of mediocrity.

Put simply; you are what we call a 501 programmer.

Every once in a while however; I will find a developer sitting on the other side of the table; who; when asked this question; knits his brows; look up at the ceiling; pretends that he is trying to think of a failure really hard and then comes up with a random project name.

Ask him what was wrong with the project and watch him give random excuses with full blown jargon meant to point a finger at someone other than him.

The most common one of them all: 'Requirements were not well defined by the customer'.

Requirements were not well defined by the customer along with lack-of-process continues to remain the biggest and the most convenient excuses for most failures or fu@#kups that we as programmers are involved in.

After all these years of software development; we continue to work with customers who just cannot seem to be able to 'define requirements' for a simple payroll processing system.

Doesn't something about the whole requirements-were-not-well-defined arrangement thing sound terribly strange or fishy every time you hear it?

They Didn't Tell Me What To Build.

If you are a non-programmer; who is not associated with the world of software development; you are probably knitting your brows right now as you read thing and wondering - 'But Pops; if your clients want you to help them with their problem; how can they not tell you what their problem is?'.

To be honest here; the problem usually isn't about the client not telling you what the problem is. The problem is that over years of BDUF development; we as developers seemed to have changed our definition of requirements from a 'definition of the problem that the client has' to 'instructions on the bare minimum that I need to do to make this project successful'.

More often than not; when a young and budding programmer; who has seen his whining seniors do this; tells you that his project failed because the requirements were not well defined; what he is basically telling you; is that his client did not give him a step by step list of the bare minimum task-items that he needs to do to get the project successfully completed.

Seth Godin in one of his recent posts; describes the problem much more articulately than I will ever be able to describe it. He explains:

"What do you need me to do?"

This is a question that defines the person asking it. It is very different from, "here's what you might need..."

If you ask people for the next task on the list, if you allow them to define the thing they are buying from you, you have abdicated responsibility.

Your work product becomes dependent on the insight and guts of the person giving you an assignment. This is especially dangerous for consultants and freelancers, because the answer might be, "nothing." Or it might be a paying gig that's profitable in the short run but a career deadener over time.

Far better to reach a level of confidence and skill that you can describe solutions rather than ask for tasks.

The guys at 37Signals take this concept to the next level. They believe in showing some tough love to their clients by not letting the clients dictate exactly what they want from a product. In their classic book; getting real; they explain:

As a software development company, you have to act as a filter. Not everything everyone suggests is the right answer. We consider all requests but the customer is not always right. There will be times when you just have to piss some people off. C'est la vie.

Related to this, it's critical that you as a development company love your product. And you won't love your product if it's filled with a bunch of stuff you don't agree with.

That's yet another justification for vetoing customer requests that you don't believe are necessary.

Steve Yegge even ventures out so far as suggesting that business requirements are Bullshit:

I learned a lot about the Fine Art of Building Shit that Nobody Wants back at Geoworks, when in 1993-1994 I was the Geoworks-side Engineering Project Lead for the HP OmniGo 100 and 110 palmtop organizer products. Both of them launched successfully, and nobody wanted either of them.

People spend a lot of time looking at why startups fail, and why projects fail. Requirements gathering is a different beast, though: it's a product failure. It happens during the project lifecycle, usually pretty early on, but it's the first step towards product failure, even if the project is a complete success.

Self-professed experts will tell you that requirements gathering is the most critical part of the project, because if you get it wrong, then all the rest of your work goes towards building the wrong thing. This is sooooort of true, in a skewed way, but it's not the complete picture.

The problem with this view is that requirements gathering basically never works. How many times have you seen a focus group gather requirements from customers, then the product team builds the product, and you show it to your customers and they sing: "Joy! This is exactly what we wanted! You understood me perfectly! I'll buy 500 of them immediately!" And the sun shines and the grass greens and birds chirp and end-credit music plays.

That never happens. What really happens is this: the focus group asks a bunch of questions; the customers have no frigging clue what they want, and they say contradictory things and change the subject all the time, and the focus group argues a lot about what the customers really meant. Then the product team says "we can't build this, not on our budget", and a negotiation process happens during which the product mutates in various unpleasant ways. Then, assuming the project doesn't fail, they show a demo to the original customers, who say: "This is utterly lame. Yuck!" Heck, even if you build exactly what the customer asked for, they'll say: "uh, yeah, I asked for that, but now that I see it, I clearly wanted something else."

If there is one thing that is common between advice coming from Seth Godin; 37Signals and Steve Yegge; it is; that you cannot be letting the customer define your requirements. The first step to building a successful product; is living the life of your costumers; feeling their pain and understanding their problems really well; before you even think of building a product for them.

It Is Just A Lame Excuse. Seriously.

Requirements that are not 'well defined' are a convenient excuse for all your failures. As programmers we are so used to blaming the process and the requirement and then believing our own lie; that we rarely look back to reflect on the real cause of our failures; reflect on them; and learn from them. We don't even feel the need to practice the craft of building good software.

Next time you think back on one of your failed projects; if you find yourself blaming the customer or your business-analyst for requirements that are not well defined; stop; and reflect on how you could have understood your customer's pain and given them a genuine solution for the problem.

Saying that the requirements-were-not-defined basically puts you in the same bucket as thousands of other outsourced bodies-with-their-brains-switched-off working out of Indian body shops; and that; dear reader; is something no genuine programmer worth his salt should strive to become.

Next time you are working on a product; either build something which solves a problem you yourself have; or live the life of your client; connect to them; take time to understand their problem; feel their pain and add a little bit of yourself to the solution you give them.

I wish you good luck.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Wednesday, October 14, 2009 9:00:38 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, October 11, 2009

Team Contributions.

In an insanely huge meeting room; at a client who for the purposes of this post I shall refer to as Multiplitaxion Inc; a 'Yearly Status' meeting begins. As an external consultant who has been around for more than six months and has given more than one successful implementations; I am also invited to the meeting.

I look from one end of the table to another; my brain doing some serious soul searching and asking some rather philosophical questions to myself:

  1. Why am I here?
  2. Why are we all here?
  3. What are we trying to achieve?

A vice-president opens the meeting with pep-talk on how team-work is essential for overall synergy and growth of the organization. He then talks about how personal contributions are nothing compared to team contributions and how we are all a big happy family.

I cringe.

Three of us have been working for sixteen hours a day for the last one month.

We are; probably the selected few who have shipped anything; in the last six months.

Something tells me I should talk.

Challenge the concept of team contributions being something larger and divine than our very own personal contributions.

Then I realize; I am not even a permanent employee of this organization.

I keep my gob shut. It is a short temporary hibernation or more of an End-Of-Yes-But-Discussion-Hash-Tag applied mentally.

My eyes reflect clear and open disagreement.

I look from one end of the table to another; looking into the eyes of the team members I've been working with; they are rolling their eyes in disagreement too.

The rolling pair of eyes tell me one thing: right here; in this meeting room of professionals there is a small tribe of selfish individuals who build stuff.

I feel happy.

It tells me that this room has a selected few who; thank god; are not working for the best interest of the organization. Just their very own personal selfish interest of being involved in genuinely successful implementation.

I feel safe.

Individual Contributions

I'm going to spare you the pain of having to go through a thousand words and over a dozen examples pulled out of history; that prove one thing: Almost any innovation worth its salt has been an idea and implementation that emerged out of one single mind.

Remember the Google's proprietary ranking algorithm that set them apart from a dozen other search engines out there? We call it 'Page' rank. Not because it ranks the pages but because it was the brain child of Larry Page.

Linux? Linus Torvalds.

You name a successful website; service or application out there and chances are; that if you look deep down into it's history you will find the single mind that conceived and executed the idea till the point where other builders started joining in.

What Drives Builders To Start Stuff.

Anyone who tells you that he is working for the best interest of the organization; is probably a whiner of the first order.

Anyone who tells you that he is sacrificing his own interests and is building stuff for the team or is doing so to make the world a better place is also a whiner of the first order who knows nothing about building stuff.

Any manager who tells you that teams comes before individuals and gives you a pep-talk on how the-we-comes-before-me is not a manager. Just a whiner who lugged on to the we-wagon and kept taking credit for stuff other builders around him were busy building. Someone who could neither master the art of build nor contribute through genuine story-telling about the product.

Veteran blogger; Jeff Atwood; usually ships one magnificent gem of a post every weekday. Now; if you have never owned a blog; try owning one; and try writing anything meaningful just once a week. I can tell you first hand how hard it is. If you wonder why Jeff spends countless hours writing; it is not to change the world or to help the human race move forward. He explains:

We may kid ourselves into thinking we're writing out of some sense of public good, or to create connections, or contribute some small bit of knowledge to the world. But let's face it. Most of us blog because we're raving egomaniacs. We not only love to hear ourselves talk, we're incredibly eager to hear other people talk about us, and the more the better. I think Dale Carnegie put it best.

Nothing is sweeter to someone's ears than their own name.

So it should come as no surprise that I have an automatic Google ego search set up for my name. Nothing special about that. It is considered neighborly to have your ear to the ground (within reason), and to politely comment on relevant articles mentioning you and your "stuff". All very standard, banal, ego-fluffing stuff.

Ask any genuine builder out there why he does what he does and you will get his reasons: 'because I love doing it'; 'because it is fun'; 'because it makes me happy'; the reasons will continue. Long story short; most genuine builders are aware that they build stuff for their very own selfish reasons.

Most ideas that survive as a platform start as a personal problem.

The story invariably begins like this: someone with an eye for spotting problems has a problem in his real life; spots it; figures out an answer to the problem and starts working on it; for a very long time.

Half way through other builders join in; create what marketing guys and traditional managers like to call synergy and you have a remarkable product that ultimately ends up making small or big dents in the universe.

But Then Why Would Other Builders Join In?

I can almost see a young and budding manager knitting his brows already. 'Great! Now you are suggesting that team work means nothing. That we all focus on individual contributions and forget the whole idea of contributing towards a team' - he says.

Yes; Mr. Manager. That is precisely what I am suggesting.

As someone who has himself makes contributions as patches to open source projects out there; I can tell you that I do not do it for the good of mankind or some other noble agenda of that sort.

I do it purely because I want the patch in the project SVN so that I do not have to worry about making the change every time I upgrade the version of the framework.

The folks who receive the patches are happy to apply them because it makes their product stable gets more people to use their product and gets them more popularity and in some cases an ego-boost.

None of us are working for the divine-goal-of-the-team.

None of us are giving or taking a truckload of crap about keeping 'the-we-before-the-me'.

We have common selfish interest which are aligned; which bring us together.

The teamwork; helping each other or even the so-called-management-buzz-word called synergy results out of these commonly aligned and totally selfish interests.

In fact; these are precisely the cases where the teamwork is the highest; where people from completely different countries, cultures, time-zones and people who do not even know each other; come together and make things work.

Now here is the funny part - you don't hear words like synergy and we-is-more-important-than-me in these environments.

When builders see amazing stuff being made; they will join in. They will join in because they want to be in the flow; they want to be a part of something huge that eventually leaves a mark on lives of people; they want to learn something new; they want to find and create meaning out of their very own lives; they enjoy being a part of it or for countless other reasons all of which are totally selfish.

Make no mistakes about it.

Lets Stop It. Now. Seriously.

Lets work on a project shall we?

Hypothetically; that is.

For reasons that are purely selfish; I will give in complete individual contribution to get my module up and running in time. I will bend over my back to help you integrate with it. As a matter of fact; I will even go out of my way to help you with your module; purely because; one: it makes me feel good about doing that; two: because it establishes me as a really smart person in the team and three: because I don't want a failure against my name.

I expect you do the same; for similarly selfish reasons.

If our interests are aligned; we win.

If they are not; we fail.

It is really that simple.

Can we please stop talking about team-work, synergy and exchanging truck load of crap regarding how the we-is-more-important-than-the-me or how the team-comes-before-individuals. It's boring; hugely artificial and not even funny.

If you run a team; may I suggest; dear reader; that instead of giving your team long winded lectures and speeches on how the-we-is-more-important-than-me; give them a platform where every person in your team can genuinely and truly contribute individually.

Build an environment where they get credit and recognition for their individual contributions.

Find folks who have interests that do not align with yours and get them on projects where their interests have a higher chance of aligning with yours.

Do that and all the pep-talk on teamwork and synergy that you always gave in your meetings; will not even be necessary.

Recognize the important of individual contribution and all of those organization-changing ideas that you had about team work and 'synergy' will start turning into reality; faster than you can think.

I wish you good luck.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Sunday, October 11, 2009 9:09:04 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, October 10, 2009

Climbers.

You are a young, budding and really smart graduate fresh out of college.

You have landed with your first job.

Ambitious; full of dreams and a relentless desire to grow and climb the corporate ladder rather quickly .

More sooner than later you will be faced with a hugely important decision of picking the growth path you want to take.

A choice.

The sky will fall; and you will find yourself exercising frequent skips; playing the blame game; or hinting to your manager how every single f@#kup that happened was not your fault.

You might also find yourself casually hinting to your manager whose fault it was.

When the yearly reviews happen; you would have jumped ahead of all your colleagues; your manager has developed a reputation of your being an alpha-geek who never fu@#ksup and you would have earned your promotion.

You; are a climber.

Choosing to be a climber is a perfectly legitimate career choice; except of-course that there is just one minor hiccup associated with it.

Empathy.

You give none of it; you get none of it.

Yearning desire to indulge in the act of 'climbing' probably creates more asshole than any of the other reasons.

Brief Digression and a quick history lesson.

The battle of Gaugamela is taught in practically every history class that talks about Alexander. An example of amazing planning and war techniques; what only a few history books will tell you; is that this war was also a classic lesson in managing intelligent human beings; growing as a leader and winning wars.

After a fierce battle; execution of an amazing war plan; Alexander is practically minutes away from slaying his arch enemy; the Persian King Darius III; when Parmenion; a general in the army; sends out a distress signal.

The choices Alexander is faced with are fairly simple:

Continue his advance; slay Darius; win the battle or Turn around; move to help Parmenion and let Darius escape.

Alexander chooses his men over victory.

He helps Parmenion; lets Darius escape and eventually wins the battle.

Historians around the world will tell you that what Alexander really won in Gaugamela; more than the battle; was respect and trust of his army; which eventually won him multiple other battles that followed.

The Builders Path.

If you are in any remote way associated with software development; like it or not; the sky will fall; and when it does; I don't care how amazing your work culture or your work environment is; someone high up in the pecking order is doing to ask the question that ultimately destroys projects around the globe:

"Who was responsible for the fu@#ckup?"

When the sky falls; you are left with pretty much two simple choices: you can take the climb path or you take the build path.

The build path happens to be slightly less glamorous.

You find yourself sitting in front of your colleagues monitor; helping them out with threading issues.

You find yourself trying to talk about the problem rather than answering irrelevant questions like who was responsible for it.

You find yourself giving cover fire to your team and every once in a while you find yourself in a heated argument with your manager; which to be honest; is not the best way to get a promotion.

But then; you and your team scores and when the promotion comes and you have a fancy sounding designation on your business card; you know you at-least you didn't 'climb' ruthlessly all the way up to it.

If software development is a war; build stuff that is remarkable; and when given a choice; pick your men over victories.

Successful projects will follow pretty much magically.

I wish you good luck.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Saturday, October 10, 2009 3:20:54 AM UTC  #    Comments [0] Trackback
Posted on: Thursday, October 08, 2009

Your Political Virginity.

I don't care how lucky you are. I don't care how amazing your work culture is. If you; dear reader; have not taken a few punches of office-politics; at-least once in your life; you haven't learnt enough. 

You think that the bully who made you do all the work in the school project and took all the credit for it; when you were in school; was an asshole?

You have no idea what your first political experience at an organization is going to be like.

You; are still a political virgin.

Days move on and then one seemingly beautiful morning; you find yourself in a hostile political environment of a really-shitty-client-and-his-organization.

That's when it hits you; really hard.

Smack on your face.

It is at this point that you lose it --- your political virginity.

If you survive the blow and find yourself reading this; pat yourself on your back.

You are now a 'manager'; for better or for worse depends on the survival approach you picked.

Survival.

For me; my first exposure to the stupidest form office politics was at a client; where I was stationed for a period of three months. For the purposes of this post; dear reader; this small client of mine comprising of around a fifty odd people; shall be called Multiplitaxion Inc.

Multiplitaxion Inc, had a team of three genuine builders who were not just surviving but thriving and getting things done.

I called them the three musketeers.

Three young programmers who were; what Steve Yegge would refer to as --- done and getting things smart.

Fun loving guys; who were good at what they did.

What I found most amusing when I met this team; however; was that they had not just survived the politically hostile environment at Multiplitaxion Inc; for months; but had actually thrived in it.

When I joined their team; they were under the management-microscope.

The mere act of joining the team meant that I would be under this microscope too.

Management Microscope.

Did you push the release on time or were you late by a day?

Did you follow the organizational process and send an internal daily report to your manager?

Did you remember to spell-check your daily status report?

When you are under a management microscope everything you say or do can and will be used against you.

I can give you a thousand reasons about why you might find yourself under the management microscope; but each one of those thousand reasons eventually boils down to this:

Someone up there in the pecking order of your organization does not like you.

You make them feel insecure.

Our microscope at Multiplitaxion Inc; extended all the way; office timings; documentation; discipline; formal attire; you name it and we were being monitored and criticized for it.

The funniest part however; was that none of these three individuals answered any emails pertaining to random irrelevant criticism.

I on the other hand; had an irresistible itch; of providing equally long-winded responses and explanations.

Before I sent out my responses; however; I asked why they did not; and learnt about 'fouls' and 'goals'.

Fouls And Goals.

One of them pointed at a recent email which complained about how we didn't spell-check our status report; smiled and said - 'This right here; is a foul'.

Like all good things; the idea was stupid simple.

Every random criticism being thrown at the team was referred to as a foul.

If there was one fact everyone in this really small team understood it was this:

You do not win soccer matches by fighting over fouls. You win them by scoring goals.

A week before the project ended; we scored.

As a response to a month old email that complained about an internal status report not being spell-checked; one of the three responded with the latest status repot which showed that we were a week ahead of schedule and were done with the project. The report also mentioned that we had a formal sign-off on User Acceptance Testing from the QA department and the business users.

Then; he signed off the email with the words which were on the the lines of:

"This one is spell-checked. Special thanks to you for your continuous support and encouragement during the course of the project".

During the course of the project there were over scores of emails that none of us responded to.

When the project ended I was glad we did not.

This team; dear reader; did not need a manager to sedate the monkeys - we had survived the stupidity of office politics; and we; dear reader had picked the survival path of scoring instead of haggling over fouls and learning the art of whining.

Would I go back to work for this client again?

Absolutely not.

Something tells me none of us from that team would.

Having said that; what this client of mine, taught me was invaluable.

If you happen to be my manager in future; and if you send me an email; telling me how critical it is to use 'Verdana' font in the internal status report; that only you are going to read; please do not expect a response. You dear; manager; just scored a foul.

I am sorry for not responding but I will try my best to respond when I am done with scoring a goal.

Honest. I will.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Thursday, October 08, 2009 1:01:29 AM UTC  #    Comments [2] Trackback
Posted on: Saturday, October 03, 2009

My Gripes With Technical Writing.

My previous blog was all about technical writing. As a young and budding developer; some of the posts out there were aimed at talking about the latest cutting edge technology; flexing my engineering mussel and getting more traffic out of Google.

As I wrote the posts however; I realized that; unless you are talking about the products you are yourself involved in; technical writing is harder than any other forms of writing.

Unless you genuinely believe in the craft of story-telling; the life-cycle of writing a technical post pretty much goes like this: You take a topic; you dissect it; you understand everything there is too understand about it and then you try to pass that understanding over to your readers. It was almost like taking a traditional approach to teaching.

After a while; I realized that there was one word that describes this entire process: Boring.

Don't get me wrong; dear reader. The mere act of writing code or reading it isn't boring. It gets you in the flow and does amazing things to your life. Having said that; the very process of writing about code; or reading about it; is in fact very boring; and there are multiple reasons; dear reader; why this is the case.

I'm going to make a humble attempt at touching some of these reasons and try to figure out why most technical articles or books out there are unable to keep my attention span end-to-end.

Ready?

Let's get started with my gripes on technical writing.

Technical Writing is Based On Facts.

Let's face it; the way most technical writers of today write; Dependency Injection is basically --- dependency injection. That's where most technical writers of today start and stop. Take the Wikipedia definition of dependency injection; for instance. Here is how it goes:

Dependency injection (DI) in computer programming refers to the process of supplying an external dependency to a software component. It is a specific form of inversion of control where the concern being inverted is the process of obtaining the needed dependency. The term was first coined by Martin Fowler to more clearly describe the mechanism.

The very first sentence is a turn off. By the time you near the end of the article; you can hear yourself snoring out loud.

It isn't Wikipedia's fault though.

What Wikipedia is doing; dear reader; is capturing facts and presenting them to you. This is what most other technical writers writing technical books seem to be doing. Most of them; seem to base their books or their writing around facts; and the inherent problem with this approach; dear reader; is that facts; are boring.

Lack Of Spice And Information Surrounding The Content.

Pick a few basic books on neuroscience and they will tell you a great deal about how our brain stores and interacts with information. Neuroscientists; around the world; up-till the recent times believed that information in the human brain is stored in a central location and that lesser the information the easier it is to commit and recall.

Recent opinions however; seem to suggest that information in the human brain is basically stored all over the place; and the human brain uses the 'context' to get you a faster recall. Long story short; dear reader; spice and some amount of irrelevant information; connected with the fact is just as important as the fact itself.

I first understood the importance of this brain-rule during my French-classes.

To illustrate my point; dear reader - I am going to teach you some French.

Ready?

The French word for 'who' is 'qui' - I want you to commit this to your memory - get on with your life and do a recall a couple of months later.

Now; if you are like most of us; chances are that a couple of months later; as you move on with your life you are going to forget this piece of information all-together.

Now; do this - turn the literal fact - "who in English equals qui in French" - into a tiny little sentence with some useless information and some context.

Put simply; just try and remember the English sentence - 'who has the key'.

Now; given that the pronunciation of key and qui are exactly the same; months later; when I ask you the French translation of 'who' - chances are; that you will not just remember the French translation; but you might actually have a faster recall.

Ok; back to technical books on programming. The problem with most technical books today; is that they lack this additional spice and information that is supposed to make it easier for people to remember the facts that the book is presenting.

When it comes to technical writing and reading about code; less is not more. In fact; neuroscientists around the world will tell you that when it comes to storing information about a fact; the more random connected information you have about the fact; the higher your chances of remembering that fact are.

Now; look around. Take a look at all the technical books you have. Also take a look at all the technical blogs that you can find online. How many of them give you this additional information connected with the facts they present? How many of them provide you with additional; hugely interesting information that helps you commit and recall the stuff; faster?

Thought so.

This Thing Is Supposed Be Fun.

I've known some amazing fun loving authors and have had the pleasure with observing them or even remotely working with them. These are seriously fun loving guys who can take a concept and drill it into your head by the time you are done with your lunch with them.

However; when they indulge in the act of technical writing; you somehow seem to get a sense that you are reading a completely different individual all together. Pick their books and you will realize that the sense of humor is gone; the jokes are gone; the funny analogies are gone.

What remains is a me-too book or a me-too programming blog on C# or Ruby On Rails that other C# or Ruby On Rails programmers go to.

Over years; our technical writers and authors around the world seem to have nurtured the thought that a technical book ought to be something 'serious' and 'professional' and therefore it is completely inappropriate to go out and experiment when you are writing a technical book or a technical blog-post. That dear reader; makes most technical books and blogs out there nothing more than material that you reference when you are stuck with a problem.

When was the last time you picked up a book on Design Patterns and had 'fun' reading it?

When was the last time you giggled while reading a book on C# programming?

When was the last time you had a deep realization that triggered a chain of thoughts while reading the explanation behind a code-snippet?

Technical Writing Lacks Persona.

Every book; be it a novel; or book about software development; reflects the author's personality. Most technical books out there however; don't.

We have seen the use of F-word; in books and blogs that are connected to software development.

We have seen management books use words like Asshole.

We have seen books on organizations and entrepreneurship which move and inspire.

The idea is not just to grab the attention of readers with purple-cow words; but to leave a little bit of your daily-persona into the book when you are writing it.

While it is true that no-one cares about you or your product; it is also true that there is a little bit of you in everything that you do and that little-bit-of-you makes everything you do different. Most technical writers however; seem to miss out on putting in a little bit of their personality into their technical writing.

We are Taking It Way Too Seriously.

There are over two hundred blogs that I subscribe too. The ones I love the most are blogs where authors take chances; post something that is wrong; learn from their comments and then go out there and change with time.

While the whole idea that authorship does not mean authority seems like a well known fact in blogs that do not talk about code; the ones that do; still seem to be a little hesitant at being opinionated; passing on their own thoughts and insights about the code they are explaining and making blatant mistakes while they do that.

As a matter of fact; most authors seem to take the easy-safe-boring way out; which is to eliminate this information all together.

As authors and programmers are we taking what we write or read; way too seriously?

Are we missing out on all the fun connected with making mistakes and learning from these mistakes?

After all; there is something to be said about learning with a mind of a child.

As I slowly start nearing the end of my first book and as I find more time to fly-free; every 'once-in-a-while'; I plan on working on an article or two that touches code; programming techniques and even design approaches; to see if I can add a little bit of myself to my technical writing.

The idea; dear reader; is to introduce you to my very own personal code persona that has it's very own approach to dissecting and trying to understand code; programming techniques; and information pertaining to improving your programming skills that is freely available out there.

Maybe; I'll make a fool of myself; maybe the articles will not be 'technical enough' for a few hardcore programmers out there. Maybe they may not fetch me all the Google traffic that my older blog used to fetch me; but I am going to go ahead and give it an honest shot anyways.

If you are a programmer at heart; you should too.

Go add a little bit of spice; fun and yourself to every seriously technical post that you are about to publish on your blog.

I dare you.

Small aside: If there is a book or technical blog out there that you know of; which goes deep into programming; code and design in a way that is fun; if you know a book or a technical blog that has an interesting persona of its own; I would love to read it. If its a blog I would love to subscribe to it. Go ahead; drop me a comment; or send me an email.

posted on Saturday, October 03, 2009 10:09:53 PM UTC  #    Comments [0] Trackback
Posted on: Friday, October 02, 2009

Young Kick-Ass Fire-Fighter.

As a young and budding developer at Multiplitaxion Inc; I took great pride in my fire-fighting skills.

Something does not work?

You need a quick and dirty macro to do payroll processing for the month?

The sky is falling?

I was your man.

Even if the so-called-senior programmers refused, cringed and pull back at the very thought of working under panic or doing something quick-and-dirty; I; dear reader was around to get-stuff-done; especially when the sky was falling.

Remember those visual-basic applications with a lot of hidden text boxes and a lot of public modules?

Heck; I built a lot of them.

But; at the end of the day; I got stuff done --- at the eleventh hour; when people were getting all worked up and wanted the work done.

Crisis As A Way Of Life.

While as developers; we all do crisis-based-reactive-programming or what I have called demo-driven-development; the problem with crisis is that if you allow it to happen; it will. 

All the time.

Humor me; dear reader. Analyze your organization; take a sample size of a few managers in your organization. Chances are that you will at-least find a couple of them whose projects have a track record of people staying late; people working holidays; people making random mistake; people panicking --- people firefighting.

Now; go look at teams within your organization and I'm sure you will find teams that have a track record working in projects which require a lot of firefighting.

No dear reader; I'm not talking about the isolated example of one project where the client was desperate to get things done really quickly or your CTO was desperate to have the next version rolled out before the demo.

I; dear reader; am talking about a life-style; where the team spends every single day working on 'changes' suggested that day and fumbles to get them done by the end of the next day; and they do this; day after day; project after project.

Managers; who know how to create crisis out of every situation.

Teams; which will be the most reactive and productive when asked to firefight; everyday.

Programmers; who crave crisis; because it lets them flex their engineering mussels and flaunt their heroism.

People who get into crisis all the time; and once they are there; they refuse to even think of giving up.

Believe it or not; dear reader; crisis; is a way of life.

Soak Time And The Problem With Crisis.

As I write this I can visualize multiple young and budding managers knitting their brows.

'So Pops; what is wrong with a little bit of crisis everyday; specially if it keeps your team reactive and helps you get stuff done?' --- you ask.

The answer dear reader; is simple:

'No Soak Time'.

Ever passed by a passage of cubicles and observed a few veteran programmers staring intently at their code?

No; they are not working.

They are indulging in the act of; what I call; letting-the-problem-soak-into-their-heads.

Soak time; is usually the time when your brain is making decisions; that will eventually dictate the life-span of your project. It's the time when your brain thinks of taking the bold decision of throwing away code or routing through the shortest and smartest ways of finding the right way when you are lost.

Soak time; is the time when you brain is chirping away at more problems connected to the primary problem are trying to solve. Problems that are not documented as 'exception flows' in your use-case-document. Problems that are only found and fixed during the soak time.

Soak time; dear reader; is the time when your brain decides to take the reporting module of your application out of the core-application-code and package it as a separate component.

It is the time when you take the most critical decisions associated with your codebase; the problem that you are trying to solve or the overall product.

It is the time that ultimately results in the neatest of features which ultimately make your applications tick. The time when you think about dropping features and question if you really need them. The time that decides your burn-down and how long your code-base will survive the test of time.

Observe any genuine builder out there; and you will learn that a decent part of the day for any builder; is his soak-time.

The biggest problem with crisis; dear reader; is that you have --- no soak time.

When you are in crisis mode you are doing only one of the three things:

  1. 'Monkey Attacked, Monkey Fights Back'.
  2. 'Monkey Attacked, Monkey Runs'.
  3. 'Monkey Attacked, Monkey Gives up. Monkey Gets Hurt'.

Ever seen developers in meetings trying to convince their managers why a particular feature cannot be done and then scrambling to do it when their manager refuses to listen or accept the fact that it cannot be done?

If you have, you probably know what I mean by the three monkey-statements I make above.

Irrespective how how amazing a manager you are; crisis situations happen once in a while.

Handle them with Empathy and your team will take you out of them.

Create crisis situation; project after project; and all you are doing is turning your team of genuine builders into monkeys without any soak-time.

Advice For Managers: Think.

The next time; you press the panic button as a manager; think.

Can you prevent it?

Can you focus on the core and have your team build more by building less? 

Are you giving them room to maneuver and giving them the 'soak time' they need to take the right decisions for the project or are you just turning them into monkeys that 'react' to situations and your panic-buttons all the time.

Advice For Developers: Think.

The next time; you decide to indulge in the firefighting exercise as a developer; think.

Is it really as critical as your manager is making it sound?

Is there stuff in there that you can turn around and say 'no' to building?

Are you being asked to solve a problem and add meaning through your work or are you just being made to react to situations and write some random code?

Isolated incidents of firefighting are fine; but if you find yourself firefighting all the time; you might be getting your promotions; hikes and pats on your back; but chances are you are not developing any real roots or doing anything genuinely innovative.

I was a firefighter. I still am; but I don't really go around looking around for crisis situations so that I can flex my mussels and show my heroism or get a few pats on my back.

In fact; as a developer; I try my best to avoid the crisis situations all together if I can. As a manager; creating panic and crisis situations definitely shows up as one of the top items of my not-to-do-list.

Remember those visual basic applications with a lot of hidden text-boxes and lots of public modules?

I try my best not to make them now.

Maybe I have grown older; or maybe that is just a part of growing up; as a developer and as a manager.

The next time you find yourself firefighting take a pause; and reflect. Are you doing it all the time or is this just an isolated incident? If you find yourself firefighting all the time; dear reader; it is time to keep some soak-time aside; figure out what you are going to do about it and then go out and do it.

I wish you good luck.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, October 02, 2009 9:35:28 PM UTC  #    Comments [0] Trackback
Posted on: Friday, September 25, 2009

Watch And Learn.

Early on in my programming career as a student; we worked on a system which was supposedly an intelligent system capable of striking a textual conversation with the end user. This was a small research project at the school level which won accolades at a few local news papers and received a little bit of attention.

The premise of this project was fairly simple. As far as human beings are concerned; most; at-least quite a bit of what we learn; is learnt by aping things. You know; the monkey-see-monkey-do way of learning and doing things.

With my limited reading on neuroscience back in school; little did I realize how wrong I was about the human brain and how it worked. Books like the Brain Rules will tell you that there is a whole lot of preprogrammed intelligence in the human brain besides just an ability to ape and learn stuff. But when you are a kid you do funny but really interesting things which keep you excited and in the flow. Things like trying to emulate the human brain with computer programs.

Having said that; the basic premise on which the system was built does hold true even today. The human brain; at-least a huge part of our brain; evolves by observing the things that happen around us; deducing our own reality out of what we observe and then aping the changed versions of that reality back into our lives whenever we need to or want to.

How do you become a great author?

By reading lots of good literature.

How do you become a great poet?

By reading lots of good poems.

How do you become a good builder?

Now; if you are a normal human being with a functional brain you probably answered instantaneously; - 'you do it by observing a lot of builders @ work'. 

That right there was a live example of learning by aping logic based on the first question and using it to answer the third one. As human beings; we do this all the time and after weeks of observing genuine builders at work; one of the things that I've learnt is that the sooner you start observing genuine builders around you and the sooner you at-least start understanding what they are doing; the better off you will be; as a builder.

Steve Yegge uses his music learning experience to illustrate how can Practicing Programming by observing other programmers. He explains:

The saying "practice makes perfect" is inaccurate, as any music teacher will happily tell you. Perfect practice makes perfect. I'd been practicing sloppily, and had become very good at being sloppy. For one thing, I was tensed up, trying to force my fingers to make the right moves. So I only knew how to play tensed up, which exhausts you quickly. I was actually doing all sorts of things wrong, more than I'd ever have guessed, but the details aren't important. What's important is that I was thinking about it all wrong.

I knew that everyone said you should take lessons, but I had convinced myself that I didn't need them. I was actually a bit afraid to take lessons, because instructors were telling me I'd have to "forget everything I knew and start from scratch." That was a stupid way to attract new students! Nobody's going to want to throw away years of work. It was also incorrect: lots of the stuff I knew carried forward. Learning the proper technique turned out to be more like learning a new song than learning a new instrument. But at the time, I thought: "Screw that. I know how to play guitar. I'm happy with my playing, and I'm not going to change the way I play."

I hope you don't think this discussion is too far afield, because my attitude towards guitar lessons was identical to the way most programmers feel about their technical skills. "I'm already great at Perl, so I don't want to go back to the beginning and learn C, or assembly-language. I like the way I program." Or: "I'm great at Java, and I don't see any reason I should have to learn how to write scripts. I can get by just fine without them."

The thing is: I wasn't a great guitarist, and Perl-only folks aren't great at Perl. But you can't see that until you've done the hard work of learning what your instructors are telling you to learn.

Practice Drill #2:   Make a list of programmers who you admire. Try to include some you work with, since you'll be borrowing them for some drills. Make one or two notes about things they seem to do well — things you wish you were better at. 

Simply thinking about good programmers you know, and what makes them good, is good practice in itself. But we'll also use the results of this drill in some later drills.

Finally, there's music practice. There are sooo many types of practice. The common characteristic among them is that practice has to be habitual. Professional musicians develop daily and weekly practice habits that they keep up for their entire careers. Practice requires a recurring time commitment.

One type of practice is simply to go listen to other musicians play, as often as you can. You'll learn a lot just by watching and listening. The analogs in the programming world are watching other people program, and reading their code.

In his classic video on Attention and Sex; Scott Berkun; describes the same phenomenon and describes the importance of giving attention to how the masters of innovation give attention to things. If you have not seen the small five-to-seven-minute-video I highly recommend you do.

This book; in general and this series of posts about observing-and-understanding-genuine-builders in particular has been all about watching builders @ work and learning from them. If you want to learn the art of genuine innovation; including the craft of building stuff that is genuinely remarkable; you don't start by getting in a meeting room and thinking of a grand idea.

You start by paying close attention to every builder that you can lay your eyes on; every piece of information about every remarkable organization that you can find out there.

Then you study that information.

You squeeze out every practice; every fact and every approach to problem solving out of that information. You dissect that information and you spend a conscious bit of time and effort doing it. You do it consistently; every single day of your life.

Do that long enough and you will learn things that are bound to change your whole perspective of innovation and how stuff gets built in the real life. No; some of the best builders that you will be able to find don't succeed all the time. In fact; they fail early and they fail really often. Genuine builders don't spend a huge part of their lives in meeting rooms. Some of them even prefer to work at the middle of the night in just a towel.

Some of it; like being aware of how important consistency and patience is, when it comes to building stuff; will be learning that will prevent you from bailing out or quitting too early. It might even help you cross the dip and become the best in the world at whatever it is that you are trying to do.

Other facts; might just be a confirmation that you are on the right track.

Some; like knowing how builders hibernate; might just tell you where you are going wrong or how you can fix it.

Whatever be the case; once you are done with this post and before you move on with your life; consider this --- if there is one thing that you take back from this book and this section in particular; it is that when you see a genuine builder around you who is getting things done; you need to stop whatever it is that you are doing as a 'manager' and you need to observe the guy.

See him work.

Watch.

And Learn.

I wish you good luck.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog..

posted on Friday, September 25, 2009 9:12:33 PM UTC  #    Comments [0] Trackback
Posted on: Thursday, September 24, 2009

Where There Are Human Beings --- Shit Happens.

I was once told that the difficult part of story telling is when you stop writing and the story starts writing itself. That isn't really the difficult part of story telling. What I have learnt with this book is that the difficult part of story telling is not just letting the story write itself; but wrapping things up brining them to a graceful end when the story is really busy writing itself.

Yes; there is a lot more to be said about building remarkable work and play environments. We can sit here all day and talk about all the specifics of creating an amazing work and play environment and then you can go out there in the real world and realize that every single problem that you face at your work environment is not even close to the problems that you read in this book.

Or you could spend years of your life as a manager; sixteen hours a day; trying to build an environment that absolutely rocks and then one fine morning be told that even the best of your builders aren't even remotely happy in the environment you've built for them.

This is probably not because you went wrong with or were inattentive to every minute detail that this book talked about.

It is probably because of the simple cardinal fact of life --- where there are people; shit happens.

No; seriously. Before you snicker and smile at that statement harp on its reality a bit.

Human beings by their very nature are complicated creatures moved by different motivations.

The story of a seriously interesting builder who supposedly loved working at Multiplitaxion Inc, comes to mind. The guy was a decently good builder who was pretty good at the craft of getting things done. We had given him all the tools he needed to get things done; got out of his way; gotten him salary hikes; promotions and big fat bonuses.

When the guy left he was in serious need of more funds and a higher salary. Understandable. What was not understandable however; was that as soon as he found a better job offer; he admitted having written two really long and interesting anonymous emails. One consisted of blatant, non-constructive criticism about the organization and how it was a pathetic organization to work for. The other was a blatant criticism for 'the man' who worked for the organization.

We read the emails with a meticulous eye; looking for any piece of constructive criticism that we could pounce on and improve the overall work environment. I even went so far as assuming that he referred to me when he talked about 'the man' and tried to read the email with an objective eye looking for anything where the organization or I; as a manager; could go out there and improve myself.

As far as constructive criticism was concerned - there was none of it.

'Multiplitaxion Inc, was too materialistic to give out employee loans and advance salary to their older loyal employees' --- the email read.

As a matter of policy we did not give employee loans and salary advances back then. Everyone knew it. It was common knowledge.

'The man who works for the organization does not not even like listening to music' --- the email read.

Well as a matter of fact, there were quite a few of us who found the idea of listening to loud music while programming a little distracting. We preferred people used their headphones. We even went all the way; had the organization buy these headphones and gave them out to the music lovers absolutely free of charge.

After reading the emails over and over for a couple of times; feeling down for a few minutes; we decided to leave the emails behind and move on with our lives.

There were multiple reasons why we could do that without having to rage a major war with our guilt or consciousness:

  1. As an organization we; at-least most of us; had been just, fair and open about our policies and everyone who stuck around were aware of these policies. Everyone who decided to stick around had made a conscious decision to stick around. None of it was confusion or deception. 
  2. As managers; we were all learning and we were working our asses at it; giving our level best to our job which included removing impediments from the way of builders. We were serious about creating environments which were great for serious work and play. Yes; we made our share of mistakes; but we learnt from them; and we survived by moving forward --- consistently
  3. When we made mistakes; we said sorry; and we fixed things. Obviously; when we got these anonymous emails with no constructive criticism what-so-ever; just whining; it seemed logical to ignore them and move on. There was nothing to say sorry about; nothing to fix. After all; we had an organization and projects to run and we could not afford to let the bozos get us down.

Every work environment is different and so is every human being that you work with. Yes; when the young and budding engineer you pushed hard to promote turns around and criticizes your whole idea of openness or flatness; it sucks; but at some point in your professional life and even as organization's life; you will have to take a stand and realize one simple fact of life --- you cannot please everyone in your organization.

Funny But Interesting Donkey Story.

It is probably floating around in emails trails somewhere. This is a fable of a man who about to embark on a journey decides that he wants to carry his old donkey on his back.

Somewhere along the trip the donkey slips into a big mud-hole.

The man spends hours thinking of a way to get the donkey out but finding no rope or help near-by decides to put an end to the old-hurt-donkey's misery by covering the hole with mud and cremating the donkey alive before he moves on.

He takes a bucket full of mud and throws it on the donkey's body.

The donkey shakes it off; and steps on top of the mud.

Bucket after bucket; the man keeps throws the mud on the donkey's body to cremate the donkey live.

Bucket after bucket; the donkey keeps shaking the mud off his body and stepping up on it.

Soon; the hole is covered and the donkey walks out alive.

As funny as narrating this story in a book connected with software development seems; it should actually be taught at management and software development schools across the globe.

Why?

Because if you are trying to build truly remarkable work and play environments or trying to bring about any change in your organizational environment, you have to develop an overall attitude that has uncanny resemblance to the donkey's attitude in the story. 

Shake It Off. Get Over It. Move On.

When you are trying to bring about change; or build amazing work and play environments chances are; that you are going to be criticized heavily. Someone somewhere in your organization is going to have serious issues with what you are trying to do.

It is going to hurt even more when the people who you were hoping to become your change agents have serious issues with what you are trying to do.

If you want to have any chance of survival in the long run; remember the three very basic; simple rules:

  1. Do 'not' forget the magic word - 'Empathy' - if you lose it you lose everything.
  2. If you genuinely believe in what you are doing; keep doing it consistently; and hope that people will 'see it' and 'get it' sooner or later. 
  3. When the criticism comes in; analyze it objectively; see if there is anything you can do to improve yourself and if the criticism was just directed to let you down  --- shake it off; get over it and move on; just like the donkey you read about in the story.

Remember; you get just a couple of human beings in a room and shit happens. In a typical organization; you're dealing with quite a few human beings. Having said that; If you remember these three simple rules; improvise and adapt as per these rules; you should go a long way at creating amazing work and play environments.

Of course things will feel shitty at times.

Of course things will feel like nothing is even worth-doing at times.

But stick around and you should be able to build an environment that is different, fun and stands out; despite of all the shit around that happens around you; and then if you are lucky; the shit that happens around you will slowly keep on reducing over time.

Having said that; don't expect all of it to go away completely. It wont. But if you keep showing up; keep doing what you think is the right thing to do; sticking to the three simple rules; you might actually start loving what you do and you might witness change happening. Slowly. Over time.

I wish you good luck.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog..

posted on Thursday, September 24, 2009 7:11:29 PM UTC  #    Comments [0] Trackback
Posted on: Tuesday, September 22, 2009

Relationship Circles.

Relationships and connections that bring people together at work are fairly interesting.

Take a circle; it is time to observe.

Yes dear reader; by a 'circle' what I mean is that group of individuals you see hanging out in the cafeteria; together --- all the time.

Watch them; because 'circles' have the potential of empowering you with the information you always craved for as a manager.

'Circles' can tell you a lot about individuals who constitute them.

Located smack in the center of the 'circle' is the central connector that forms the circle. It could constitute of multiple things:

  1. Human Connectors - What Malcolm Gladwell would 'connectors' in his classic book; The Tipping Point. These; are human beings that bring other human beings together.
  2. Memes And Causes - People in a circle are getting together and talking about their project. With their current project or what-ever-it-is-that-they-are-working-on is going to change the world; make a dent in the universe and show the organization that they have been right all along.
  3. An Asshole - Yes; if you are talking about the world of software development; assholes bring more people together than you can think of. You hate Fred; I hate Fred; so lets hate Fred together. Its so much more fun that way. Of-course Fred; could be a manager or an entire organization. As long as we can get together and collectively hate something together we should be good building a circle around that hatred.

At Multiplitaxion Inc; I had the opportunity of working with a senior manager who actually took pride at being the asshole who connected everyone within the organization. In a direct; open; candid; one on one conversation this gentleman told me he knew how everyone in the organization hated him. He said it in a tone which translated almost like saying he knew how he was actually brining everyone together through a common reason; which was the act of hating him.

Foundation For Long Term Work Relationships. 

While only one of the managers I have worked will till date; was candid or mature enough to admit this; I have worked with a countless number of managers who at some level or the other; knew they were hated by people around them and actually took pride in the fact; or at-least got a very perverted kick out of it.

Talk to most vice-presidents and CEO's around the world and quite a few of them let whiners and assholes stick around in the organization; because at some level of consciousness or other they are noticing first hand how having these whiners and assholes are bringing teams together. Besides; everyone loves a few whiners in the organization.

If you are trying to create an environment which is fun to work in; and produces genuine innovation for years; here is the bad news however --- the whole idea of hatred for assholes acting as the unifying glue that holds your entire organization does not work in the long run.

Why?

Because problems do not tend to exist forever and when your relationships are based on specific problems; with the problems out of your way; you are pretty much stuck in a rather awkward situation.

Another manager; who for the purposes of this post; we shall refer to as Fred; for example; was a universally hated manager at Multiplitaxion Inc. Fred; single handedly formed the central focus point of many circles and the sheer make-fun-of-Fred-task was a project in itself. It was in fact a way of life which brought groups within the organization together @ the Multiplitaxion Inc, cafeteria.

Then one fine morning; when the sky was blue and the birds were chirping; Fred found a better opportunity and left Multiplitaxion Inc.

Just like that;  he wrote a formal it-was-nice-working-with-you-guys email; and disappeared the next week.

You could literally hear the sound of crickets chirping in the cafeteria.

A few younger ones tried continuing the when-Fred-was-here stories even after he was gone. 

It seemed to work for a couple of days.

Then that didn't work either.

This is when; over a period of time; I personally witnessed the ends of multiple 'circles' within the organization. People who were intelligent people; spending hours together; were nowhere to be seen together now.

Walk into its cafeteria and Multiplitaxion Inc no longer seemed like the fun and happening place roaring with laughter it had once been.

Builders who had joined forces to sedate this monkey; found nothing to talk about and went their own way.

All you could hear on any given day in the corridors of Multiplitaxion Inc; was the sound of crickets chirping.

If there was one thing this incident taught me; it was that 'circles' that are brought together by true and genuine fun-loving connectors tend to survive for a relatively longer span of time. Circles that are brought together based on the mutual hatred of a particular asshole or a particular organization; do not tend to survive in the long run at all.

The only circles; however; that stand the test of time are circles which are formed out of mutual desire to create meaning. Circles where the objective is to get together and 'build stuff'.

Next time you notice a circle forming around an asshole; try to penetrate it; and give them a cause; a meaning or a bigger arch enemy. That dear reader; is your only chance at forming long lasting 'circles' of genuine builders and not collective-whining-groups.

I wish you good luck.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Tuesday, September 22, 2009 5:21:23 PM UTC  #    Comments [0] Trackback
Posted on: Friday, September 18, 2009

Building Stuff Is Hard

Virtually every veteran builder that you talk to; tells you the same things about building remarkable stuff. Building stuff is hard; building stuff takes time; building anything means you face a lot of criticism and building stuff requires something that is much more important than just raw talent --- it requires patience and consistency.

Bottom line; you keep jabbing; keep shipping; and keep firing; till the time you cross the dip and hop over the thin line that separates a young and budding armature from a mature veteran.

If building stuff that is truly remarkable is that hard and usually happens after multiple encounters with failure; the question that really kept bothering me; as I worked on this book; dear reader; was that; apart from the Hollywood-Appeal-Factor is there anything else that attracts, nudges and pushes genuine builders around the world to keep building stuff.

The answer as it turns out is --- passion and flow.

Flow

The more builders around the world; I observe; the more I am leaning to believe that passion for what you do and flow are two most important reasons which makes builders put in the tremendous amount of patience, slogging and consistency it takes to make the dents in the universe; that they are trying to make in the first place. 

Wikipedia defines being in the flow as:

The mental state of operation in which the person is fully immersed in what he or she is doing by a feeling of energized focus, full involvement, and success in the process of the activity.

Csíkszentmihályi identifies the following nine factors as accompanying an experience of flow:

  1. Clear goals (expectations and rules are discernible and goals are attainable and align appropriately with one's skill set and abilities). Moreover, the challenge level and skill level should both be high.
  2. Concentrating and focusing, a high degree of concentration on a limited field of attention (a person engaged in the activity will have the opportunity to focus and to delve deeply into it).
  3. A loss of the feeling of self-consciousness, the merging of action and awareness.
  4. Distorted sense of time, one's subjective experience of time is altered.
  5. Direct and immediate feedback (successes and failures in the course of the activity are apparent, so that behavior can be adjusted as needed).
  6. Balance between ability level and challenge (the activity is neither too easy nor too difficult).
  7. A sense of personal control over the situation or activity.
  8. The activity is intrinsically rewarding, so there is an effortlessness of action.
  9. People become absorbed in their activity, and focus of awareness is narrowed down to the activity itself, action awareness merging.

Not all are needed for flow to be experienced.

The software development world as I know it; dear reader; is composed to only two kinds of human beings --- first kind includes one who have experienced the feeling of being in the flow; other includes those who have not.

If you work with me, know me or read this blog regularly, you may have heard or read me describe my first encounter with my first desktop as - love at first sight with no looking back since then.

During those days; picking up a random problem like creating a shooting game with quick-basic and spending hours at it; day after day; without having the need to concern myself with mundane details regarding like if I was going to paid for what was being built; was a relatively easy way to truly enjoy the journey of building stuff and experiencing flow --- without even knowing what flow was.

Then it disappeared as I tried to 'grow up' as a programmer.

It took more than ten years of programming to get a little bit of that same childishness back into my life and to brush against experiencing flow once again.

Today; as someone who toils and labors with his insanely mulish attempts at writing code; posts or anything that is supposed to make really small dents in my very own little universe; dear reader; even I; dear reader; have brushed against the feeling of being in the flow more than once.

If you have; too; dear reader; you know exactly why it makes builders around the world keep craving for more.

If you have not; chances are; that; if keep doing what you absolutely love doing; you will and when you do; you will know exactly what it is all about.

After you have experienced what it feels like to be in the flow for a few times; there is very little you can do; other than fall in love with what you do and continue doing it; day after day.

What are you experiences with getting in the flow?

Does being in the flow frequently make your overall life much more productive and happier?

Do you actually crave the experience every time sit in front of a monitor; dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, September 18, 2009 10:19:22 PM UTC  #    Comments [0] Trackback
Posted on: Thursday, September 17, 2009

Sixteen Captains

Back in my school-days our school had figured out a brilliant plan to keep every student motivated and build an environment where none of us would create a ruckus. The secret to doing this; as it turns out; was --- badges.

The idea was a simple three step approach:

  1. Break the class into groups of 10 to 12 students.
  2. Call these groups 'houses'.
  3. Make two 'captains' and two vice captains for each house.

If you were talking about a class of thirty students; you were talking of two class captains; two class vice captains; and then there were twelve captains and vice-captains at the house level. Put simply; if you were discussing a class of thirty students you were talking around about sixteen guys who were 'in-charge' of maintaining the discipline. If you did not happen to be in this sixteen; chances were; that you were way too dumb to create a ruckus or make trouble anyways.

As funny as this might sound to you; there were win-win elements attached to this arrangement:

The school loved this arrangement because the smartest, craziest, wildest, funniest, loudest trouble-makers; who make dents in the universe and challenge the status quo; after they leave school; would tow the line and would be spending most of their time getting others in the line till they were in school.

The trouble makers loved it because it gave them a head start at introduction with girls at interschool functions.

Look Around.

Before you snicker at the stupidity of the whole arrangement above or wonder how it would ever work; look around your organization and you will figure out exactly how such a funny sounding stupid arrangement works; not just with young immature teenagers; but even with grown up programmers. 

How many "Team leaders" does your organization have?

How many "Module Leaders"?

Vice Presidents?

Directors?

David at 37Signals describes this much more articulately that I will ever be able to describe it. He explains:

The title of vice president must be the most promiscuous of all in corporate America. Everyone seems to be a vice president these days. Some companies having hundreds of them. Are all of these people truly capable of standing in for the president or CEO of the company should it come to that? Are they really just one step below that person?

Of course they’re not. Vice president is mostly an “all title, no lands” concept that serves as a cheap way to make someone feel important without the authority to actually be important. It’s classic over-promise, under-deliver. “You’re oh-so-important, but please fill out this expense authorization report for your laptop”.

Titles are mostly bullshit at the best of times, but “vice president” seems to be bullshit all the time.

Now; go look around how and count how many simple 'engineers' you have in your organization.

Compare that number with all the number of people holding other fancy designations your organization might have.

You might be able to figure out how my school pulled off their funny little gimmick of getting the trouble makers to tow the line.

And Why Do Most Builders Take The Bait And Get Excited?

In my career --- I have been fortunate enough to be able to give promotion letters to quite a few genuine builders. I've seen engineers get promoted from engineers to technical architects; and every time I hand over the promotion letters I see a genuine smile on people's face.

This; dear reader; confused me for months.

For months; I would look at every builder smile when he was promoted; and I would look at them with a blank; confused look.

For months I wondered if every single builder; getting happy at being made fiftieth 'senior' executive in the organization of hundred employees; was an idiot to have taken the fish bait and get all excited?

The answer; dear reader; as it turns out --- is obviously not.

Remember the head-start-with-the-girls-at-interschool-functions part?

That (or something on the same lines) is exactly what is at play here.

Handling Designations

Flashy new designation does not 'exactly' give software developers a head start at conversations with girls at a pub; but it gets them more 'perceived-respect'  and a chance at being heard within the organization.

If you have been with me so far; chances are; that I've sold; two simple facts to you:

First; There are tons of useless designations out there; even in your very own organization.

Second; Irrespective of whether you are a builder or a whiner; chances are that you are going to feel a funny pinch of happiness when you are given one of these funny sounding designation.

What you do with this shinning flashy designation of yours; after that funny pinch of happiness wears out; eventually ends up deciding whether you continue to be the competent builder you currently are or you get yourself promoted to your level of incompetence.

Go ahead.

Reflect.

Are you continuing to be in touch with code or have you decided to turn around and run as far away from it at the first fancy designation you are given?

Do you continue to see the uselessness of the meetings you are now expected to attend?

Are you using your newly acquired title to bring about some positive change within the organization or at-least within your team?

Do you realize what your secret title really is?

And most importantly; do you realize that you are just one of the sixteen captains in a classroom of thirty students?

If you responded with a very confident 'yes' to all of the above questions; you should be just fine with your next flashy promotion.

Go ahead; accept it.

Then; go be the student who is ok accepting with the batch of a vice-captain; and then decides that he wants to continue being the smart, crazy, wild, funny, loud trouble-maker who makes a ruckus anyways.

I wish you good luck.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Thursday, September 17, 2009 5:15:00 AM UTC  #    Comments [1] Trackback
Posted on: Tuesday, September 15, 2009

The Ideas

At any point of time; in Multiplitaxion Inc; we had multiple teams working on a host of ideas that the business had. Ideas ranging from Accounting for oil-and-gas companies to complex 3D modeling.

Like any other company with a good engineering culture the builders played with tools and technologies. Every now and then they would throw out a sprint based on the a business idea; would pat themselves on their back at a job well done and would go have a blast at a party.

We were one happy team of geeks and builders; getting things done and partying after every deliverable went out the door.

But; there was something missing.

The whole pleasure of creating meaning and making dents in the universe wasn't quite there.

The Pain

Do you feel it?

Do you have an arch enemy?

Do you have a Problem that is a part of your very own personal life that you want to personally eradicate from the surface of planet earth?

Steve Yegge describes this phenomenon when talking about why Business Requirements Are Bullshit. He explains:

You can look at any phenomenally successful company, and it's pretty obvious that their success was founded on building on something they personally wanted. The extent that any company begins to deviate from this course is the extent to which their ship starts taking on water.

And the key leading indicator that they're getting ready to head off course? You guessed it: it's when they start talking about gathering business requirements.

Because, dude, face it: if it's something you want, then you already know what the requirements are. You don't need to "gather" them. You think about it all the time. You can list the requirements from memory. And usually it's pretty simple.

From Krishna Bharat designing Google News to keep himself abrest of the news after the September 11 aftermath to the folks at 37Signals working on project path; most things that make dents in the universe are 'not' things where a marketing vice president sits down with his team to brainstorm about some fresh new ideas. They are problems --- craving to be solved; in the life of a genuine builder who has the means and the measures to solve it.

Problems that the builders passionately connect to; problems that builders understand; problems that are problems in the life of the builders who are working on solving them. Problems that the team passionately wants to eradicate from the surface of planet earth.

If you are a consulting firm; chances are you are knitting your brow and going --- 'But Pops. We have to work on projects from multiple verticals. It's our bread and butter' --- and my answer is simple --- 'by all means; please do; but at the same time see to it that you are giving your builders enough free time to solve problems that they genuinely want to solve'.

The next time a builder walks up to you with a problem he has and how he plans on going about solving it; go out for a cup of coffee with him and listen closely --- then question if the problem is a genuine problem that will stand the test of time and is a problem worth solving.

If it is a problem worth solving; let your builders take a shot at it.

Chances are; that they might waste a few days at it and nothing might come out of it; or chances are you might have a life changing product in the making right there; but if you never take the chance and never trust your builders; you will never figure out.

There is only one way to find out --- let your builders take a stab at it --- I wish you good luck.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Tuesday, September 15, 2009 5:44:31 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, September 12, 2009

Builders, Organizations And Stuff That Changes Things.

Genuine Builders embrace change. They are just as afraid of change as anyone else; but then they indulge in the act of building stuff that makes small and big dents in the universe. They indulge in the act of building stuff that changes things. Hire a couple of genuine builders; let them be your seed engineers and chances are; they will attempt to change just about anything that seems 'safe' in your organization.

Organizations; as it turns out; are often not very comfortable with these sort of huge changes or ideas that bring about these sort of changes.

Scott Berkun describes this with the help of; what he calls; a 'bad illustration'.

Scott explains:

The arrows are the paths of different ideas. The box in the middle is the organization.

Whenever leaders want more innovation, they typically start by adding more inputs into the process. They seek out more ideas. Hey, lets brainstorm! Or maybe we should crowdsource! Or how about getting everyone to mindmap!

Executives often do this flinchy sort of thing and it’s big news at many corporations to start “idea programs” to encourage people to submit ideas.

These programs are launched, ideas are submitted, and there is much rejoicing.

But little change.

The reason there is little change is that idea inputs were never the problem. The bottleneck was further upstream. Crowdsourcing, brainstorming, mindmapping, and the dozens of other techniques people obsess about help create early idea volume, but do little to help the curators, the people who winnow down the hundreds of ideas down to dozens, and dozens down to a handful.

It’s much more useful to study where the bottlenecks are, when and why new ideas are killed, and who the people are that are killing them.

When it comes to the software development shops around the world; I've seen countless new ideas by genuine builders; sometimes; even the ideas which are capable of standing the test of time; being killed faster than they are born.

As a builder; when you introduce an idea or build stuff that is supposed to make a small or big dent in the universe; you dear reader; are trying to bring about change; which; as it turns out; is not something that is easy to bring about; at-least not in most organizations.

DeMarco and Lester describe this in their book Peopleware while explaining the 'Resistance To Change Continuum' and how it works. According to 'Resistance To Change Continuum'  your organization can be composed of the following types of individuals.

The 'Blindly Loyal' kind will not force your ideas to go through a 'reality check' and will result colossal life-changing fu@#kups. Every other kind from passive observers to 'militantly opposed' are just equally dangerous when it comes trying to bring about change.

In the above list; the only kind that help bring about change in your organization are the 'skeptics' --- your fellow builders or story-tellers who look up to your; look after you; look at you and have the courage and the spine to tell you where you are going wrong.

Depending on where you work; chances are that more than once; you are bound to see situations in your career; where the ratio of every other kind compared to genuine skeptics is relatively high. Depending on where you work; you are bound to see ideas; even the ones that would have otherwise stood the test of time; die a miserable death in meeting rooms.

Look around you.

Does your organization have skeptics who challenge your ideas in a healthy way or do you often find yourself presenting your ideas to people of every other kind in the 'Resistance To Change Continuum'?

If you are stuck with an organization where the later is true:

  1. Let your ideas stand the test of time.
  2. Run them through a few genuine builders or skeptics you might know and trust.
  3. Throw them out there and let them spread.

Then; if you find your ideas spread and survive; get your partners in crime to join in; and try out implementing these ideas --- in your garage.

Till you can get your organization to 'see it' and 'get it' --- that is where most ideas will have to turn into prototypes and then take the shape of real products.

Unless you work at an organization which embraces change; that; dear reader; might be your only chance to bring about change.

I wish you good luck.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Saturday, September 12, 2009 3:49:38 AM UTC  #    Comments [0] Trackback
Posted on: Friday, September 11, 2009

Partners In Crime.

I am at Jack's organization. Jack is showing me around. The vending machine; the cabins and the laptops.

I can sense where this is going.

It is almost like I am looking at an x-ray copy of his brain that shows me what he is thinking.

I can sense it coming --- and then it happens.

The question:

'Hey Pops --- I think you will like it here. Want to work with us?'

I respond with a grin:

'Not now. By the way; we have an interesting office too; you want to work with us?'

It has been five years since we worked together on a project. Three years since we talked and yet; we talk like we had a fight over a design approach; followed by a long discussion about life in the software development world; yesterday.

We find no need to setup new communication channels for small-talk after three years of zero-conversation.

The channels we established years ago are still open.

The only thing both of us can think of when we meet is trying to get the each other on our team. We are actively attracting each other into our own workplace.

The more I observe builders and story tellers across organizations interacting with each other in conferences; code camps; and even seminars; the more I tend to develop a deeper understand of the reasons why builders who have worked together in the past have a tendency to attract each other.

The Reasons

It is clearly not a conscious stream of thought that a builder is particularly aware of; but when a builder makes an attempt to pull another builder into his team; his mind in indulging in fairly complex reasoning. If you have worked with a genuine builder in one of your past projects; you meet him at the grocery and you feel the need to give him a job offer at your current team or your current organization it might be because of one or more of the following reasons:

Builders Look Up To Each Other

This is very different from saying I-respect-someone-because-of-his-ability-to-learn or I-respect-someone-because-he-is-a-friend-of-mine. This is admitting; blatantly and openly that I-respect-someone-because-that-someone-is-better-than-me.

You look up to that someone because he is better than you; and here is the strange part --- that someone looks up to you because he genuinely believes you are  better than him.

As funny as this sounds; I've seen quite a few teams of genuine builders around the world and if there is one thing that binds them it is this level of genuine competence-based-respect for each other.

Builders Look After Each Other

Software development is no different than being on the battle-field and being attacked by enemies from multiple fronts. Genuine builders know the importance of having allies and they also understand the importance of having other capable builders; who can give them cover fire.

I've seen quite a few teams of genuine builders complement each other; get each other out of fire; and being genuine partners in crime.

It is the looking-up-to-each-other that often results in looking after each other.

Builders Look At Each Other

I am f@#ucking up. I want someone with enough courage; spine and lack of respect for mitigated speech to look at me in the eye and tell me that the project is screwed if I don't get my act together.

I do the same for others around me.

Put two builders in a team and you will see difference of opinions; arguments and sometimes even fights. When a genuine builder looks you in the eye and tells you how much your code sucks; you know that in a world where no-one cares about you; he cared enough to look at what you were doing wrong.

It is the looking-after-each-other that often results in looking at each-other.

Look around you; try to think of all the people you have worked with in the past.

How many of them were genuine builders?

How many of them met the three scenarios above when it comes to your professional life?

Chances are; you will be able to think of a selected few individuals; these are your partners in crime.

If they are not working with you; hunt them down and then offer them a job in your team or your organization.

I wish you good luck.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, September 11, 2009 12:13:59 AM UTC  #    Comments [0] Trackback
Posted on: Tuesday, September 08, 2009

Roots

My first few months at Multiplitaxion Inc were depressing. I was being assigned to every random assignment; ranging from document formatting to reverse engineering. I was working for peanuts; on assignments that no-one else would work on and I was literally slogging.

Floating in the email trails of the organizational mailing list were emails from a genuine builder which would cheer me up. Every once in a while with no reference to the context a message would land up in my mailbox that would have an inspirational proverb:

When the work you do is low and the rewards are few. Remember that the mighty Oak was once a nut like you.

At other times when you received no promotion after a year full of slogging and three successful projects; things would get a little frustrating.

There were moments when I would genuinely wonder if I was wasting my time with an organization that would never be able to understand and utilize my core competencies.

What the 'nerd' in me was doing in difficult times like this can be best described an interesting anecdote one of managers back then told me:

The Olive tree is fairly interesting. For months after planting it you hardly see anything growing. You feel like its growth is slower than practically any other tree out there.

Then something happens --- The tree shoots and grows faster than any other tree.

What the Olive tree is doing during the period of its seemingly slow growth is simple --- it is developing deeper roots that will help it grow really fast when it starts to shoot up.

Besides moving from one task to another without complaining out loud --- An act that was slowly starting to turn me into a one-man-army --- what was also happening in my life during those difficult times was that I was developing deeper organizational roots.

Today; as I observe young but genuine builders-in-the-making function within multiple organizations and grow; the whole idea of continuing to 'show up' consistently and developing deeper roots seems like well formed approach most builders take during their incubation period.

While whiners around the world continue to loop in the infinite loop of failure genuine builders make dents in the universe by settling down; developing deeper roots within the culture chart of the organization and then brining about change.

Seed Engineers In The Making

Jack is a young and budding engineer giving hours of hard work. He is smart and is always up to something interesting. A little rebellious; a little unhappy --- but never whining; Jack continues to show up day after day; adapt and constantly strive to bring about change.

Make him work with an asshole sitting higher up in the pecking order of the organization and Jack will morph and hibernate.

Then; when its safe; Jack with attempt to bring about change again.

Observe Jack closely --- because Jack is your seed engineer.

Work hard to give newer challenges to him; pair him up with a couple of genuine builders so that he blossoms well over time.

Put simply; give him an environment where does not lose his x-factor over time and emerges to be your seed engineer for tomorrow.

I wish you good luck.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Tuesday, September 08, 2009 9:28:59 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, September 05, 2009

If You Can Have Only One Thing.

If you have been reading my advice on building remarkable work and play environments you may have noticed that I have gone all out and have strongly pushed on a lot of different ideas; ranging from hiring all the way to the importance giving out logo-wear.

As I wrote these articles; one question kept coming back --- If there was just one thing that you could do towards building a remarkable work and play environment; when you were starting your organization; what would that one thing be.

The answer; after a lot of soul-searching; observation and research; as it turns out is --- seeds.

Your environment; work-culture; your organizational growth and even the very existence of your team or organization is going to depend on how well are you able to seed it.

What I am talking about here; dear reader; is the selected few you hire to act as 'seed engineers' for your organization.

While I have already talked about the importance of hiring when it comes to building amazing work and play environments; nothing beats the importance of hiring your seed engineers.

Who your seed engineers are will eventually make or break your organization.   

Seed Engineers

Your seed engineers are the people who you look at as the 'core' team within your organization. People who don't just build stuff --- but to a large aspect determine both; the engineering culture and culture chart of your team or your organization.

You quite literally think of them as the seed that is going to define both the 'growth' and the 'character' of your organization.

Seed your organization with a bunch of whiners and chances are high that before you know if your organization would be swamped with whiners and moaners. Seed it with some seriously kick-ass engineers and chances are that you will have an environment full of amazing builders. An environment which actually makes the whiners very  nervous and keeps them out.

The real question; dear reader; is how do you hire seriously kick-ass seed engineers.

The answer; when is comes to hiring; is that you begin by being --- ruthless.

Hiring Seeds And Raw Talent.

Steve Yegge demonstrates a decent bit of this same ruthlessness when he talks about hiring seed engineers in any organization. He explains:

Let me ask you a brutally honest question: since you began interviewing, how many of the engineers you've voted thumbs-up on (i.e. "hire!"), are engineers you'd personally hire to work with you in your first startup company? Let's say this is a hypothetical company you're going to found someday when you have just a little more financial freedom and a great idea.

I posit that most of you, willing to admit it or not, have a lower bar for your current company than you would for your own personal startup company.

The people you'd want to be in your startup are not of the Smart and Gets Things Done variety.

For your startup (or, applying the recursion, for your new project at your current company), you don't want someone who's "smart". You're not looking for "eager to learn", "picks things up quickly", "proven track record of ramping up fast".

No! Screw that. You want someone who's superhumanly godlike. Someone who can teach you a bunch of stuff. Someone you admire and wish you could emulate, not someone who you think will admire and emulate you.

You want someone who, when you give them a project to research, will come in on Monday and say: "I'm Done, and by the way I improved the existing infrastructure while I was at it."

I am sure a young and budding entrepreneur or manager out there is knitting your brows at Steve's advice and getting all sentimental about the importance of 'niceness' and 'willingness to learn' as he reads this.

Am I; dear reader; suggesting that you take every smart; young and raw talent that walks into your interview room and boot him out of there?

Of-course not.

Go ahead and recruit young raw talent who can act as your seed engineers tomorrow but at the same time; realize the importance of hiring your seed engineers for today.

Without a few really strong seed engineers; chances are that the raw talent you hire; is going to lose their x-factor faster than you think.

Remember; having people who are smarter than you; and people who you genuinely admire; on your team; is much more important that having people; who you think admire you.

Now; go out there are hire people who are much more talented than you are; smarter than you are; faster than you are; have stronger opinions than you do and an ever stronger spine to express them.

Put simply; if there is one thing you are going to do to try and build genuinely interesting work and play environments; go out there and hire 'seed engineers' who are smarter; faster and much more talented than you --- people you genuinely admire --- and once you have done that; let these set of genuine builders and story-tellers seed your environment to make it truly remarkable.

I wish you good luck.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Saturday, September 05, 2009 12:07:07 AM UTC  #    Comments [0] Trackback
Posted on: Friday, September 04, 2009

Myth: Builders Are Not Good At Communicating With People.

During my early days as a young and budding developer; I was an introvert.

As I grew up and started observing others developers around me; I started seeing more and more developers; some of them who were even veteran heavy-weigh programming champions; being labeled as introverts who basically keep to themselves.

As developers quite a few of us have been or are labeled as 'shy' --- 'introvert' --- and 'quite'.  In general; we seem to have an image of pesky programmers who are not very good with people.

I dear reader; am here to tell you that; the whole notion of builders not being very good at communication is one of the biggest myths in the world of software development.

So; during my young and budding days as a developer; I was an introvert.Then somewhere along the line; I developed a keen interest in understanding how the human brain and humans beings in general; work. I got interested in management and entrepreneurship. Because of my interest in these topics the scope of conversations I liked involving myself in; increased and I could suddenly strike comfortable conversations with clients and managers.

It was at this point that I realized that I was never an introvert.

The problem with me was never not-being-good-at-communication or not-being-very-outgoing. The problem with me; like most software developers was that I; like most nerds was just not into small talk.

Michael Lopp in his nerd handbook describes this exact same phenomenon:

Your nerd might come off as not liking people. Small talk. Those first awkward five minutes when two people are forced to interact. Small talk is the bane of the nerd’s existence because small talk is a combination of aspects of the world that your nerd hates.

When your nerd is staring at a stranger, all he’s thinking is, “I have no system for understanding this messy person in front of me”. This is where the shy comes from. This is why nerds hate presenting to crowds. The skills to interact with other people are there. They just lack a well-defined system.

In the same article; Michael describes why Nerds are not truly the introverts they are presented to be. He explains:

People are the most interesting content out there. If you’ve got a seriously shy nerd on your hands, try this: ask him how many folks are in his buddy list? How many friends does he have in Facebook? How many folks are following him on Twitter? LiveJournal? My guess is that, collectively, your nerd interacts with ten times more people than you think he does. He can do this because the interaction is via a system he understands — the computer.

Your nerd knows that people are interesting. Just because he can’t look your best friend straight in the eye doesn’t mean he doesn’t want to know what makes her tick, but you need to be the social buffer — the translation layer. You need to find one common thread of interest between your nerd and your friend and then he’ll engage because he will have found relevance.

To be honest; it is not so much about the medium of communication being a well defined system as it is about the very basis of the conversation and small-talk. If you want to understand what I mean; go walk up to a genuine builder deeply submerged in his code and ask him how he was doing or what he thinks about the weather. Chances are the conversation will end even before it begins.

Now wait for a couple of days; and then walk up to the same builder seeking help with refactoring a function you are writing. Chances are; that not only will he fix your function; he will actually spend hours explaining to you why he made the changes he made. Drift the conversation towards whether now; and suddenly you will see this builder that you are talking to also has a strong opinion about whether.

The whole notion that builders are not good at communicating stuff back to the business or their managers is a notion full of a truck load of crap. When you are working with genuine builders what is really most important is the initial connection. Base it on a platform the builder feels at home with and you are in for a deep dive into the builder mind; and there is a lot going on in these minds.

Philosophies ranging from how to build better stuff; to how you should live a meaningful life and why you should do what you love doing or why you should give in a little bit extra. It is a gold mine of information; but the rules of getting in are simple --- you have to either be a genuine builder or at-least speak the language your genuine builders speak.

Every brain in your organization that belongs to a genuine builder is ticking and trying to communicate ---- constantly.

The real question is --- can you; communicate with your genuine builders; dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, September 04, 2009 2:39:21 AM UTC  #    Comments [0] Trackback
Posted on: Tuesday, September 01, 2009

Three Rooms

Of all the organizations that I have seen, worked for or worked at; very few live up to the programmers bill of rights by Jeff Atwood.

Yet I continue to see a few genuine builders; with their thick skins and deep passions; not just survive; but thrive and flourish even in the most hostile of all environments.

In one of my blog posts I tried to study the cubical-farm-culture most organizations out there promote and figure out what is wrong with them. If you are stuck in a cubical farm; chances are that you are stuck in an organization; that does is not really looking to build an environment where genuine builders can thrive and flourish. An organization that is happy in the realms of safe-mediocrity.

In this case; if you are looking at your organization to help you come in flow and be productive; chances are; that you are not going to get all the support you need up-front. To be honest; there is a decent chance that your journey is going to be a slow and painful one; where you find yourself rotting in meeting hell every now and then.

Even if I were to assume that you have what it takes to by-pass committees or the ability to make the difference and that you are willing to rot in meeting rooms so that you can bring about change; if you are working in a cubical-farm; chances are; that radical changes; like your request for a private quite office for every single developer in your organization; are going to come out sounding like a rather funny joke to your management.

Your only ray of hope; at building a genuinely remarkable work and play environment is to begin by demanding; requesting or begging for three basic rooms to be setup within your organization.

War Room

The first time I saw a war room was at a marketing agency for which I was doing a project. The room literally had all four walls made up of whiteboards; which ran from floor to ceiling and had a bean bags.

The first step into the room gave out a general vibe which made it fairly clear that you got into the room if you wanted to brainstorm an idea; throw it out to people; fight over it ruthlessly or get some seriously honest and candid feedback on your ideas or projects.

War-rooms I was told; were common in marketing organizations and yet; I rarely see them in software development firms around the world. In a world; where marketing needs to be baked into what your builders build; and not clumsily glued on as a separate process; even a three year old should understand the importance of having war-rooms in the organizations.

Most vice-presidents; and administration departments; don't understand the importance of war-rooms though. At-least they do not understand it enough to push the idea and get it implemented in their organizations.

If  you do not have a formal 'war-room' you are missing out on the opportunity to let people 'fight' over their ideas and let their ideas battle their way into existence. The very fact that you cannot invest enough into a room of this sort; speaks volumes about your lack of commitment to innovation or it just says --- I-do-not-care out loud.

Fun Room

At Multiplitaxion Inc, it took us months to move to a small game room. All we spent on the 'games' was on cheap dart games and a couple of other indoor games which ended up costing us --- peanuts.

Even with our highly traditional ideas of 'fun' and how much an organization should spend or budget for it; the impact of this small 'fun-room' with cheap indoor games was hugely positive.

People from multiple teams that would hardly have any business to do with each other started flocking together.

Within the first few weeks of the little experiment; Multiplitaxion Inc; saw a major positive outcomes as far as the overall work environment was concerned.

I personally; was fully convinced that an organization which cannot invest a little-bit in 'fun' cannot innovate.

Even till date; I continue to convinced about the importance of having a dedicated 'fun-room' in the organization.

Silence Room

If you cannot have offices for every developer and noisy work environments are what you are stuck with; the least you can do for the sake of some basic innovation; is provide you builders with a silence room within the organization where people who want to 'work together' or involve themselves in 'chit-chat' are strictly not welcome.

Start with a conference room that you might have.

Anyone who wants to focus on something and is sick of the chit-chat can move to this room for a few hours a day.

The rules for this room should be simple --- you shut up and work.

No talking. No discussion. Period.

Use this room as a place where your builders can come when they want to get in the flow without getting disturbed.

If you are doing this right; chances are; that when you do not find your builders in their noisy cubicles; you will know exactly where to find them. They will be in one of these rooms; doing what they do best --- which is to exchange ideas; think; innovate; build stuff and above all; have fun doing all of that.

I do not care what you call these rooms; but if your organization does not even have motivation or dedication to start with three of these rooms to improve the overall work environment; to begin with; chances are that your organization is an army of traditional development sheep; being herd on its way to risky mediocrity; and you are left with only two options --- You can Change Your Organization or Change Your Organization.

Does your organization have one or more of these rooms or at-least an environment that gets you what these three rooms are supposed to get you?

Have these rooms come about from the conscious effort of your organization or have your builders created their own unspoken hideouts to get their work done?

Does your organization play a role is providing all the support at create genuinely remarkable work and play environments or does it just make things worse for its builders by not caring; dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Tuesday, September 01, 2009 9:24:15 PM UTC  #    Comments [0] Trackback
Posted on: Friday, August 28, 2009

Words Of Wisdom From A Story Teller.

At one of the sales meeting during my work at Multiplitaxion Inc; I am seated across a gentleman; who shall be remained unnamed; but who; for the purposes of this post; we shall refer to as Jack. It turns out; Jack has made millions with this marketing and story-telling skills. Jack; besides talking about his project needs; is also passing on words of wisdom like a wise marketing jedi teaching his young Padawan.

He begins the meeting with an answer to the question which is --- why does he want to invest hundreds of thousands of dollars in a project which is basically what he calls a 'fun-project'.

Even though I do not remember the exact words; he answers the question with a rather interesting answer which leaves a deep impact on me. It is exactly the kind of answer I would expect from someone I was working with.

When asked the question; he answers after a thoughtful pause:

I don't want to spend so much money on this project in anticipation of a huge return. I want spend money on this project because it seems like an interesting problem to solve. I want to work with the right people and I want to have fun doing that.

You know --- I don't know why they do; and I do not even know if I am the right person to be answering this question; but every now and then a few college students ask me how I got so successful in my life and I tell them the only way to get successful is to find something that you are really obsessed with doing. Something that you would absolutely love doing and then doing that for the rest of you life.

There are two benefits to doing this. First is that you absolutely love doing it so you will not get sick or tired of doing it for years (which is what it takes for anything to be successful); second is that because you love doing it, you will probably put in a little bit of an extra effort than everyone around you. That 'extra' is what will set you apart and make you noticeable amongst a crowd.

I can't say I agreed to everything the guy said in that meeting; but as far as these words of wisdom were concerned; they were simple; accurate and right on target.  Observe any genuine builder out there and two traits will become rather evident. 

Most genuine builders out there have relentless passion and love for what they do. It is this obsession that makes consistency; which is otherwise a very hard quality; relatively and possibly easy to achieve.

It is the same relentless passion and obsession for what they do that keeps gently nudging genuine builders to strive for more and put in a 'little bit of extra' in everything they build.

A Little Extra

When it comes to software development we all know how easy it is to be ninety percent done. It is completing the other ten percent with class that separates veteran builders from wannabes. It is all about putting in that little-bit-of-an-extra-effort and giving that little-bit-of-an-extra-touch.

This little-extra is what is usually required to cross the dip. It is what results in overnight-success-after-years-of-effort. It is what separates a blu from being yet-another-twitter client; a tortoise-svn-client from being yet another SVN-client and a project-path from being a yet another task-list cum project management tool.

Now; here is a task for you dear reader. Go review your products and try to do an honest self assessment on them.

Are you absolutely loving the act of building these products?

Are you having fun every day at work?

Are you just building me-too products?

Or are you leaving the mark of a genuine builder on your product by putting in a little-bit-extra into it?

Which one of the two approaches does your organization or work environment expect and encourage you to take; dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, August 28, 2009 10:27:50 PM UTC  #    Comments [0] Trackback
Posted on: Thursday, August 27, 2009

Why You Cannot Please Everyone.

At Multiplitaxion Inc; we had a truck-load of serious issues. Starting from the BDUF model for software development to a complicated hierarchal organizational chart where your manager could probably screw you really badly for no particular rhyme or reason; if he felt like doing so. Everywhere you looked; there were issues and problems.

Quite a bit of builders I knew personally had complained initially and had then moved into hibernation.

Even some of the super-heroes were down; lost and tired of trying.

Then something happened.

Random people --- including the whiners --- started quitting.

Loads of them.

New people started joining in.

A couple of us started working without a truck-load of  documentation and started using light-weight processes scrum to produce results which; compared to the results that were being produced by a couple of other teams; were --- lets just say --- noticeable.

People higher up in the organization took notice; listened and helped us spread the culture across the organization.

Multiplitaxion Inc was about to take a new form; shape and a completely new makeover.

In the days to come:

  1. We moved from Rational Unified Process to Scrum.
  2. We moved from doing ad-hoc random consultancy to developing products which made small dents in niche markets.
  3. We moved from 'control' and 'rules' to 'maturity'.
  4. We moved from 'ties' to T-shirts.
  5. We moved from half-baked-multi-layered-official-email-based-announcements to transparency within the corridors of the organization.

When we were on the path where we always wanted to be --- we patted ourselves on the back. The world was going to be a great place to live in; the sky was going to be blue and the birds were going to hum sweet songs now.

We Just Rubbed Someone The Wrong Way.

We had just about started patting ourselves on our backs. It was then that; running in the corridors of Multiplitaxion Inc I heard a builder; who  for the purposes of this post we shall refer to as Jack; whining about the fact that we had gone way too transparent and he did not like the transparency. Jack felt we had lost the 'sophistication' that we once had.

Turns out; Jack actually liked the notion of wearing ties to office and genuinely believed in deadline driven development.

Of all the things here a few things about this feedback that would make you feel completely and totally --- weird:

  1. The feedback was not a direct candid feedback. For days it floated around the corridors of Multiplitaxion Inc much the moans of whiners float around for days; spreading dissatisfaction and lowering the general happiness.
  2. The feedback was not objective about things that could be changed. It involved random criticism about the organization; the management; the marketing and every other department this person could lay his hands on.
  3. The person made a full-time job out of spreading his very own personal dissatisfaction within the corridors of the organization.

What was even more disappointing about the whole episode was the feedback was coming from a genuine builder who was decently good at what he did.

To top off all of this what made the whole episode even more worse; as I observed it unfold; was the fact that the same individual had actually complained and whined about the excessive use of BDUF processes and lack of transparency a couple of years ago.

Love It Or Leave It.

If you are running an organization; and if there is one thing you need to be very careful about; this poster describes it rather articulately.

While Jeff Atwood at Coding-horror proposes the love-it-or-leave-it idea for programming in general; the same idea; dear reader; also holds true within your organization.

Genuine builders; will have gripes about things that they do not like in the overall environment. Genuine builders will also be usually fairly vocal in expressing their concerns; but genuine builders do not make it their full time job to whine; bitch and passionately hate their organizations. They begin by expressing their concerns; becoming vocal; hibernating; getting disconnect and then if things still do not change --- they leave.

The primary rule of blogging or building anything interesting is that you listen to constructive criticism; you discuss things candidly and openly; but when it comes to Bozos throwing random flames on you or your project; you turn a deaf ear and you continue with whatever-it-is that you are doing. If they feel so strongly against what you are doing; they are free to punish you by ignoring you and leaving you alone.

The same rule; dear reader; holds true for work environments.

When you have an isolated team member; whining and making a full time job out of spreading his unhappiness it is time to cut straight through the bone; look at the gentleman in the eye; confront the issue instead of ignoring it and present him with a love-it-or-leave-it option.

Remember; you cannot please everyone and every now and then you are bound to come across some whiners you can never please irrespective of what you or your organization does. The sooner your organization presents the love-us-or-leave-us option to these whiners the better off you work environment will be.

How many whiners who passionately hate their organizations have you met or worked with?

How many of them; instead of having a spine to bring up the problem; hibernating or leaving; continued to bitch; whine and moan in hush-hush mode within the corridors of the organization?

Have you ever presented a whiner with love-it-or-leave-it option in clear terms; dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Thursday, August 27, 2009 7:18:42 PM UTC  #    Comments [0] Trackback
Posted on: Tuesday, August 25, 2009

Logo-wear And Its Importance.

During its glorious days; Multiplitaxion Inc; was giving out amazing logo-wear --- T-shirts; pens; mugs; watches; clocks and toys. As an organization it was interestingly  popular when it came to free logo-wear given out to employees.

Irrespective of who you were; if you worked at Multiplitaxion Inc; there was always enough logo-wear going around and you could grab some too.

Then as we 'grew' in terms of team-sizes and number of employees; something funny happened.

The concept of giving out logo-wear stopped all-together. All of a sudden you could not get any logo-wear --- even if you wanted to buy it.

All logo-wear just disappeared out of the organization.

Not many missed the logo-wear though. Interestingly; however; the few who missed these logo-wear items had one thing in common. They were genuine builders deeply connected to the organization and their projects.

Every single one of them.

The incident was an interesting insight into what alpha-geeks and genuine builders expect out of their organization when it comes to logo-wear and toys.

There Is Something About Logo-Wear.

The whole-logo-wear-not-being-available-within-the-organization-incident happened slowly; but even months after the culture of giving logo-wear had completely stopped; every now and then some of us would talk about the good old days when there was always some logo-wear with cool slogans and wordings on it. 

The cost of these swags in terms of monetary value --- peanuts.

Yet there was something about cool company T-Shirts and logo-wear that was causing the genuine builders to go bonkers and drool over cool logo-wear.

Why?

Because having amazing logo-wear which you can, carry, wear or use says a lot of about the organization that gives it out.

Logo-Wear Reflects Your Organization's Personality.

Remember the famous 'Ninety Hours A Week And Loving It' T-shirt worn by the Macintosh team? All the controversy around that T-shirt apart; the T-shirt was a reflection of Steve Jobs passion towards build amazing software.

Amazing; wild; funny; crazy or down-right-hilarious; the logo-wear your organization gives out; to a large extent; is a reflection of your organizations attitude and personality.

If you organization has no  logo-wear; it has no personality.

Logo-Wear Allows Builders To Be Loud.

As developers we are much more comfortable talking to the compiler than we are comfortable talking to human beings. We are usually not very loud when it comes to marketing ourselves or our organizations.

Go compare the number of posts on Power-shell that are out there and with the number of posts where developers are talking about how much they love their current organization. If you have done your Google searches correctly chances are --- you will find that not a whole lot of developers are talking about how much they like their current organization.

There are three reasons why the post count of how much developers like their current organization is so low:

  1. Most developers do not like their current organizations and are either tagging along as a 501 programmer or looping in the infinite loop of failure.
  2. The ones who genuinely love their organization would rather talk about the work that they are doing in their organization.
  3. As programmers we are usually not very loud of vocal when it comes to complaining or talking highly about the organizations we work for.

While you cannot address the first point by giving out logo-wear; it does help programmers and builders who are quite for the second or third reason to go out there and spread the word about their organization.

A Natural Extension Of Being In A Vibrant Tribe And Flaunting It.

More often than not; Tribes work by exclusion. If everyone can be a part of it; your tribe probably isn't interesting enough to join in the first place. You have built a remarkable work and play environment --- now it is time to give your builders a chance to flaunt the fact that they belong to rare tribe through remarkable logo-wear that grabs attention and makes non tribe members go wow.

If you genuinely believe your organization picks the best of the best; allow the best you have picked to flaunt the fact that they belong to a rather rare tribe.

Logo-wear is a natural extension of being in a vibrant tribe; being able to flaunt the fact that you belong to such a tribe; and use 'exclusion' to spread the word about your tribe or organization's personality so that you can nudge other smart builders to join the tribe too.

Logo-Wear Is Fun.

If all the above reasons do not make sense to you --- this one should.

Everything about Logo-wear is fun.

Designing it; getting it; wearing or using it; giving it out to your team members; all of it is fun. If you organization does not have logo-wear you might be missing out on a whole lot of this fun.

Most genuine software developers out there; are in it; for fun. Most genuine builders notice little things and small things like your business card or logo-wear can have long lasting impacts on your overall organizational environment.

If You Cannot Give It Out The Least You Can Do Is Sell It.

Early on in my career I spent some time in the Microsoft campus. One of the things that I liked about my stay there was that there was quite a bit of free-logo-wear and toys that we received. Apart from that the premise had a special store which sold logo-wear at discounted rate if you wanted to buy more logo-wear than what you were given for free.

At the end of the day; your employees are doing you a favor by wearing your logo-wear and spreading the word about your organization around. If they are genuinely connected to your organization they might even go out there and buy the logo-wear; the least you can do --- is make it available to them when they want to buy it.

The more I look at organizations out there; the more I continue to be amazed by the number of organization that do not even have a decent logo-wear based T-shirt. Quite a few organizations actually have pretty amazing logo-wear but you get some once a year and there is no way for you to get or buy more.

Not having logo-wear or not making is readily accessible to your employees shouts out loud that your organization lacks the passion; the commitment and the zeal to form tribes of truly connected employees.

Remember; logo-wear will not take a screwed up environment and fix it.

They are much like an icing on the cake that is already well baked and delicious. Having said that; I am yet to meet one builder who does not like this icing on the cake of his professional life.

Now go print some T-shirts.

Go figure out how you will make them accessible to your employees or team.

Does Your Organization have Logo-wear you feel good about using?

Does Your Organization give or sell the logo-wear and make the logo-ware readily accessible to you when you need it?

How strongly do you feel about logo-wear and it's impact on how the employees feel about the organization in general; dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Tuesday, August 25, 2009 10:16:00 PM UTC  #    Comments [3] Trackback
Posted on: Friday, August 21, 2009

The Stupidity Called 'Working Together'

At Multiplitaxion Inc, every time I was close to getting in the flow a monkey would pop his head out of somewhere or a bunch of jokers would giggle over a stupidly funny conversation.

Because of the classical cubical-farm design of the office; I jumped from meeting room to meeting room trying to focus and getting stuff done.

As I hopped from meeting room to meeting room there were three things that I learnt about meeting rooms:

  1. Located next to every meeting room are other meeting rooms.
  2. Other than meetings; these rooms are often occupied by teams of software developments indulging themselves in an insanely stupid act; which they refer to as --- 'working together'.
  3. Human being are social animals and when they 'work together' they tend to talk about their wife and their life much more than they talk about their code.

Every now and then I would have a bunch of developers 'working together' in the meeting room next to the one where I was hiding to get my work done.

By 'working together' in a meeting room; I do not mean the regular five minute standup. I also do not mean the famously stupid three hour meeting. These guys were in an insanely fu@#ked up self-organized meeting; eight hours a day; five days a week conducted under the name of 'working together'.

In this eight hour meeting; multiple things ranging from favorite movies of individuals; to what a variable should be called; could be brought up and discussed at length. Somewhere in the middle when when people were tired of discussions and wanted to take a break; the talking stopped. That is when people tried to write some code.

Of-course this was not a real meeting.

These were a bunch of developers taking the initiative of 'working together' --- so everyone actually liked it and encouraged it.

Of all the discussions that happened; one of the discussion that was brought up every now and then was why their project was slow and how it could be speeded up.

Shut the F@#k up and do some work.

To be honest; and candid; any computer science graduate; fresh out of college would have told him why their project was slow and what they could do to speed it up.

What they had to do to speed it up was something rather simple.

They had to --- shut the f@#ck up and work.

Coming from someone like me; who encourages flocking and a strong bonding in a team; asking developers; who sit in the same room and work; to shut up; go to their cubicles and work in their own cubical might sound like contradictory statement; but it is not.

As developers every single one of us needs two fundamental things from our work environments. On one hand we have a strong urge to 'belong'. Put simply this is what Seth Godin describes as building tribes. On the other hand however; what we also need as developers is quite time where we think; reflect; exercise our brains and try to solve really complicated problems by simplifying them.

If you are building a genuinely remarkable work play environment; it is your responsibility to provide your team both of these. Taking your team out to lunch; project dinners; and having x-boxes in offices is important. I have even gone ahead and suggested the nine-ten rule.

Having said that what is also important is that your team members get quite working environments and are mature enough to realize that while parties; games; chats in cafeteria; brainstorming sessions and whiteboard sessions are important; at times it is also important to shut the f@#k up and do some work alone.

Now; stop the chit-chat; go to your cabin; try to focus in a quite environment and do some real work.

Seriously.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, August 21, 2009 10:39:21 PM UTC  #    Comments [0] Trackback
Posted on: Friday, August 21, 2009

It All Begins With A Demo Or A Road Show

'We have an application that does not do much and we have a marketing road show lined up next month. We need to build a few new features quickly.' --- The Vice President of marketing at a fairly famous multi-functional scanner company; which for the purposes of this post shall be called Multiplitaxion Inc; tells us.

When the messages reaches me; my ears perk up.

I can clearly hear and sense the direction of our project changing abruptly and suddenly because someone from marketing pointed in a different direction for the fifth time.

I suddenly become attentive --- in a meeting where I would have otherwise dozed off.

The Negotiation.

You have mastered the art of saying no. With your amazing story-telling and articulate explanations you convince the vice-president that all your team can build till the road-show; is a prototype.

What you mean; when you say all your team can build is a 'prototype'; is that your team needs is a license to build crap that they will neither have to build-on-top-of; nor support in future.

Something that gets thrown away after the demo.

What your vice-president-of-marketing means; when he says you can build a 'prototype'; is that he needs a version-1 of a fully functional product which he can show to potential customers.

Something that gets sold after the demo.

Marketing demos or road-shows alter and change your product backlogs all the time.

Marketing demos or road-shows change priorities all the time.

Marketing demos or road-shows result in creation or 'prototypes' that will be 'thrown after later' all the time.

And there is nothing wrong with that --- till the time you, your team and your organization does not start indulging in what I like to call --- 'Demo Driven Development'.

Demo Driven Development

Every time you are about to do on a product demo or a road show and flaunt your product you will be faced with strong temptations to add new features that might woo your potential customers in the next demo or product road show.

When your vice president of marketing tells you that you have a demo or a road-show coming and that you need to build something really 'quickly' what he is tell you can translate into one or more of the following:

  1. We are now going to move to deadline-driven-development.
  2. Sky is going to start falling and things are going to get ugly.
  3. The famous negotiations between marketing and development teams are going to now begin.

Usually; dear reader; it translates into all three.

The next time your vice president of marketing comes up a set of features that you absolutely must have during the demo; exercise your very own personal judgment and ask yourself if the feature is worth building before you try to 'squeeze-it' into the product backlog.

When you say 'yes' to building something; you accept the responsibility of supporting it for a very long time. We have all seen requests to add features or requests to change things on a prototype that was built to prove a point in a demo and was supposed to be thrown away later.

We have all seen these prototypes snowball into version-1 products and then a three year project needing a lot of fire-fighting.

Remember; you do not 'have to' have every single feature your competition is going to demonstrate in a road-show. There is nothing wrong with going to a demo or a road-show with product that is crappy and incomplete.

If your product is built on a strong idea; if it is genuinely remarkable and if your story-telling is genuinely good; your customers will connect to your organization and flock to product; even if your product has elements of crapiness or incompleteness attached to it.

Don't let 'Demo Driven Development' become the development methodology for your next product; dear reader.

I wish you good luck.

posted on Friday, August 21, 2009 3:17:42 AM UTC  #    Comments [0] Trackback
Posted on: Tuesday, August 18, 2009

The Lame Whiners Programming Universe

The Lame Whiner; who for the purposes of this post we shall refer to as Fred; is at my desk wondering if Multiplitaxion Inc, has signed up any new short term consultancy projects or will be signing up any new ones in the recent future.

I cringe.

Watching Fred at my desk means that he is going to spend a good half hour talking about why Multiplitaxion Inc, should sign up new short-term consultancy projects. Then he is going to cry like a baby.

He is going to cry like his career; his life and his universe depends on Multiplitaxion Inc, signing up new projects.

He equates new and more short-term-consulting projects to 'growth' and wants to work on something 'billable'.

Putting Fred on a research project doesn't make him happy.

The very words --- 'on the bench' makes him feel insure.

Working on an awesome product and giving long term commitment to it makes him feel nervous.

Long story short; he is not happy --- and he is out to spread the viral-dissatisfaction to anyone who has time to listen to him whining.

The lame whiner looks up to his organization, his client, his colleges and everyone else to make dents in his very own personal little programming universe.

He lacks participation; but seeks opportunity on a golden platter; nicely laid out  --- just for him.

The Problem With Whining About Your 'Circumstances'

Hidden deep down in the archives of Joel Spolsky is a discussion where Joel nails the essence of whining about every little 'excuse' for not making a dent in the universe. Joel talks about the problem with whining; finding lame excuses for your being a mediocre-replaceable-developer and then quitting. While answering one such question about quitting he explains:

Although the tech industry is not immune, programming jobs are not really being impacted. Yes, there are fewer openings, but there are still openings (see my job board for evidence). I still haven't met a great programmer who doesn't have a job. I still can't fill all the openings at my company.

Our pay is great. There's no other career except Wall Street that regularly pays kids $75,000 right out of school, and where so many people make six figures salaries for long careers with just a bachelors degree. There's no other career where you come to work every day and get to invent, design, and engineer the way the future will work.

Despite the occasional idiot bosses and workplaces that forbid you from putting up dilbert cartoons on your cubicle walls, there's no other industry where workers are treated so well. Jesus you're spoiled, people. Do you know how many people in America go to jobs where you need permission to go to the bathroom?

Stop the whining, already. Programming is a fantastic career. Most programmers would love to do it even if they didn't get paid. How many people get to do what they love and get paid for it? 2%? 5%?

If you read between the lines; it is not difficult to understand that what Joel is doing here is giving tough-love to his fellow programmers; and nudging them on the side of righteousness.

It is easy to whine about your organization; your manager; outsourcing; recession; or stupidity that surrounds our industry in general and blame one or more of these external factors for your inability to build anything interesting.

It is easy. It is convenient; and if you get your whining-act right; you can even get away with it.

However; there is just one little problem --- it is your first step at becoming what we officially call a --- whiner.

Time To Look At The Mirror

The next time you whine about not being on a billable project or not having enough work to do; get up and go for a walk to a rest-room or any place that has a mirror; once there; look at the mirror really hard.

Staring right at you will be the person responsible for your inability to build or get involved with something genuinely interesting.

If you are genuinely dependent on your organization for giving you quality work --- and are lost when it does not; you are just one of the flock of sheep waiting to be herd.

Have you seen whiners getting lost, confused, scared and not know what to work on when they are on the bench for just a couple of weeks?

Have you witnessed whiners seeking 'opportunities' out of their projects, organization or managers and when then citing that as an excuse for not building anything; when they do not get their dream jobs, dream projects and dream managers?

Have you ever arrived at office; morning after morning; only to see Fred whining at your desk; telling you long winded stories about how his organization is hindering his progress?

Have you ever wondered why Fred doesn't leave and go find a better organization?

How many unhappy whiners surround you; dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Tuesday, August 18, 2009 8:30:24 PM UTC  #    Comments [0] Trackback
Posted on: Friday, August 14, 2009

Builders Lead By Building. Not Managing.

Early on in my days as a young and budding developer at Multiplitaxion Inc; I heard a very mature individual talk about the philosophy of basketball and how that wisdom maps to software development teams.

His observation about the game was rather interesting:

When you are playing with a team size of five you need every player to score.

I've always advised young and budding managers roll their sleeves and continue writing some code. Scoring constant goals yourself is your only chance at keeping a team of genuine builders motivated and gently nudging everyone in your team to score too.

I've observed countless builders and story-tellers around the world and in all these years of observing them I am yet to find one genuine builder or story-teller who doesn't roll his sleeve and gets down to some real work himself.

Having said that; I continue to be amazed and surprised at how difficult most organizations make it for a builder; with just a few years experience; to continue remaining a genuine builder. James McGovern in his post on this topic; explains the issue rather articulately:

Being an architect in a large enterprise, the biggest challenge for most architects is in staying technical and grounded in reality. It is way too easy to become a buzzword parrot where one spends more time thinking of cool phrases that otherwise have empty meaning over focusing on producing credible architectures with integrity. I find it fascinating that we talk about business/IT alignment, cost reduction and other reasonable practices yet no one is asking the more difficult questions.

How can a business be successful in the use of technology if the vast majority of team members especially within IT don't understand it? I bet you work with teams that have one technical person, in the midst of various managers and other “developers” (usually off-shore) and find that one technical person does a majority of the work, takes the blame for the failures (of himself and/or others), yet is rarely credited for success. How come competent developers put up with nonsense and continue to take the rapings?

Should developers challenge their managers to look at their shiny, gold plated project plans that adhere to CMMI level 13, ITIL, Agile, garbage 2.0 and other worst practices and find a single item that someone else could take more than 10% credit for? At the end of the day, the vast majority of projects either still succeed or fail based on heroics. Sadly, we have realized that heroics are not the way an organization should be run, so instead of working on repeatable, sustainable practices for software development, we have morphed into repeatable, sustainable ways of doing perception management and throwing developers under the bus.

James ends his post with an interesting note:

I am proud to say that none of my reviews in the last ten years have ever had a single negative comment regarding my ability to deliver high quality work, in a timely manner and within budget. Much of the feedback is based on perception management.

The thing I think about almost daily is how I can live up to a  high standard not because of just personal motivation but because others are watching. This is the essence of leadership.

I don't want to be a manager nor should others be forced to report to one.

Early on in my career at Multiplitaxion Inc we ended up with a situation that was not planned. It was completely co-incidental; but then; having said that; the happening of the situation resulted in an observation that taught me the deep dark secret of management.

Smack in the middle of multiple projects; Multiplitaxion Inc; realized that a few of its managers were not working out well and got rid of them. Panic stuck and other managers; left on their own. In about three months since the firings happened; Multiplitaxion Inc; was a 'zero manager' company.

When I say 'zero-manager' I mean literally a zero-manager company. There was no-one in office who had a business card with the word 'manager' on it --- except one Quality Assurance Manager who was an amazing guy doing some serious hands-on testing himself. Given his way of leading a team; he had recently been promoted to the designation of a manager. People; including his own team; hardly knew the fact that his business card included the word 'manager'.

Other than this Quality-Assurance-Manager of ours; who continued to be a very technical-hands-on manager; developers at Multiplitaxion Inc, woke up one fine morning and literally discovered that all their 'managers' were gone. Just like that.

Any guesses on what happened when they realized that they suddenly had no managers?

The answer is what each one of us; as programmers; developers; builders or story tellers know deep down inside; but are too afraid to discuss or even say it out loud --- what happened is that the developers became much more effective and productive at what they were doing.

Things; dear reader; started getting done.

Am I saying that you go on a firing spree and fire all managers in your organization?

Of-course not.

Having said that; if you; dear reader; are a manager; try to see to it that when folks walk into your office wanting to discuss a problem; your monitor has a code-window open and not a Microsoft Project Plan.

If you want to lead a team of builder; you'll have to stand of the front lines of the battle march.

You can only motivate a team of genuine builders by building stuff and scoring goals --- consistently.

Remember; Builders lead by inspiring others to build stuff; not by managing them; and the easiest way to inspire others to build stuff is to build remarkable stuff yourself.

Now; dear manager; close that project plan of yours; open the integrated-development-environment and start talking the language the rest of the builders and story-tellers in your organization are talking.

I wish you good luck.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, August 14, 2009 10:50:03 PM UTC  #    Comments [2] Trackback
Posted on: Thursday, August 13, 2009

Builders Fail --- All The Time.

"Let us talk about any one task or project which you consider to be your biggest failure" --- I ask a veteran programmer who; for the purposes of this post; we shall refer to as Fred.

Fred stares at me with questioning eyes wide open; as if I just asked him the famous-inappropriate-are-you-a-virgin-question.

Throughout the interview Fred takes great pride and speaks at length when asked to discuss his success stories but but behaves like he has been put on spot and asked things he cannot answer when asked about his failures.

After taking over a few hundred interviews and observing countless genuine builders at work if there one thing I have learnt about genuine builders who make small or big dents in our universe; it is that they  --- fail.

They fail all the time.

Genuine builders do not think of themselves as seriously kick-ass-rock-stars who can churn out zero defect code every time they are asked to. Most genuine builders indulge in decent amount of soul-searching; and have some a decent level of self loathing for themselves.

Most genuine builders aren't ashamed to openly discuss; analyze and learn from their failures.

If there is one video that describes the idea of flaunting your failures openly with class and glamour; it is the Nike-Commercial on Failure:

"I've missed more than 9,000 shots in my career. I've lost almost 300 games. 26 times I've been trusted to take the game winning shot and missed. I've failed over and over and over again in my life. And that is why I succeed." - Michael Jordan

If you haven't clicked on the link of the video you should.

As 'grown-ups' our fear of failure and the tendency to see it as a negative experience comes from the sheepish desire of being 'safe' and mediocre.

Michael Hunter; takes the remarkable lesser walked path. He nudges professionals around the world and encourages them to fail early and fail often. He explains:

If you're lucky, however, your family encourages you to fail early and often. If you're really lucky your teachers do as well. It takes a lot of courage to fight against this, but the rewards are great. Learning doesn't happen from failure itself but rather from analyzing the failure, making a change, and then trying again.

Over time this gives you a deep understanding of the problem domain (be that programming or combining colors or whatever) - you are learning.

Exercising your brain is good in its own right ("That which is not exercised atrophies", my trainer likes to say), plus this knowledge improves your chances at functioning successfully in new situations.

Has it been a very long time since you last failed?

If you answered that question with a 'yes' --- you need to find a problem bigger than what you are currently working on.

Get out of the boring territory of 'safe' --- fail like a child and learn like one; dear reader.

I wish you good luck.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Thursday, August 13, 2009 9:53:38 PM UTC  #    Comments [0] Trackback
Posted on: Tuesday, August 11, 2009

Let's Empower Teams To Have Fun.

During our early days at Multiplitaxion Inc some of us got a little excited about our work-culture and thought of taking it to the next level by introducing a little bit of a 'Google effect' to our very own work environment.

We tried to strive for an independent 'budget' that could be allocated to each project manger to use as he sees fit. Like all beautiful ideas, the concept was simple, pure and clean at it's very core. Every month, team leaders would get a certain budget which they could use to boost the morale of their team in whatever way they see fit.

Ways in which you could use it could include:

  1. Buying gifts for top performers and genuine rock-star builders.
  2. Organizing project parties.
  3. Buying a X-Box for the team so that they could kick some alien-ass if they were tired of coding.

I could probably go on with that list forever but I am hoping; dear reader; that you get the general idea.

Assuming that Multiplitaxion Inc, was made up multiple Multiplitaxion Inc's that happened to be successful, we thought we aught to give some empowerment to the teams and see how they end up finding innovative ways of maximizing fun with a limited budget. This was an idea that would let us do just that.

The idea would also allow us to see how teams of genuine builders like to have fun; instead of taking them to a party and then 'hoping' that they enjoyed themselves when the dinner was over.

Lets Shit-Can The Shitty Empowerment Idea.

So a bunch of young and budding managers; me included; conceived the whole idea of this independent; 'fun-budget'. Three weeks later; we were sorry we had anything to do with the idea.

We were rotting in meeting hell and attending one meeting after another where we were answering what the basic idea of this 'fun-budget' was; what the scope of the budget was; what were the kind of expenses it was supposed to cover and what were the kind of expenses it was not supposed to cover.

After three months of conversations; the idea was finally approved.

Here are the specifics of the approval --- As managers each one of us were now allocated with three-dollars-per-team-member-per-month with which we were free to increase the team morale and make the environment (and the world) a better place to live in.

If you still did not get the ironic-humor in this; dear reader; allow me to explain. What this effectively meant was that if you had a team of five developers you had a full fifteen dollars a month to treat them, give them iPods, T-Shirts, organize project parities for them or even get your team a common X-Box.

None of us talked about the 'budget' after that day.

The budget that was allocated to us was never used and we decided to shit-can the idea.

Fun Is Serious Stuff --- And It Is Not Cheap Either.

The awesome part about being in a kickass team is that you do not need a lot of organizational funding to build great relationships with team members. Leave a kickass team of genuine builders and story tellers alone and they will attract other builders and story tellers.

Get enough insane trouble makers or rule breakers in your team and they will find out ways to have fun --- with or without the organization's involvement.

The interesting thing about hiring intelligent people is that even if they are not very articulate and expressive about what they see, observe and realize most of them understand the organization at a level that is much deeper than their managers even think they understand. So when the once hyped up morale budget was shit-canned by us; no-one in the team talked about it.

Everyone understood.

We just decided to forget it almost like failed childhood ambition.

Even though we lacked words to explain what had gone wrong with the overall idea; everyone in the  team; including the junior most engineer who knew about the idea; understood exactly what had gone wrong with the idea.

What this incident really did was teach me the level of importance most organizations out there give to the idea of 'fun' in the work environment. Some of the best organizations out there might spend hours talking about the idea of creating 'fun-filled' environments but talk about expenses associated with 'fun' and chances are that you might hear the sound of crickets chirping.

Fun Is Not Very Expensive Either - The Nine Ten Rule.

"So Pops; are you by any chance suggesting that we spend millions creating a fun work environment" - you frown.

What I really learnt from the whole 'fun-budget-episode' at Multiplitaxion Inc, was that there is a price associated with creating remarkable fun filled environments. It does not come cheap.

Having said that is it not the Hollywood-Dream that most organizations discard as unachievable.

To prove my point; dear reader; allow me to propose the Nine-Ten-Rule.

If you own an organization; or are responsible for budgeting; might I suggest that for every ten employees that you need:

  1. Don't hire the tenth employee; just hire nine.
  2. Take the average salary of the nine employees; consider it the salary of the tenth employee and add that to your overall 'fun' budget.
  3. Allow the team of nine to decide what they want to do with this budget.

It's not exactly the programmers bill of rights but it's a good start.

Sometimes; Nine Is Much Better Then Ten.

Happy builders; build more and if you have spent enough time and energy at hiring the right people for the right job; chances are that with the fun element thrown in; your team of nine; will be much more productive than a team of ten mediocre programmers.

I don't know about you; dear reader; but I would rather have nine really happy tribe members over ten unsatisfied grumbling disconnected average employees.

At Multiplitaxion Inc; we were a closely knit team; having fun; meeting on weekends; going out together; but the passionate idea of adding fun to the overall 'organizational' environment was just not there.

With three-dollars-per-employee-per-month; we had seen; first hand; how seriously Multiplitaxion Inc; took the idea of 'fun' --- and having seen that first hand --- when it came to having fun at an 'organizational' level --- we hibernated.

The soul of this entire post; dear reader; if squeezed in a couple of lines; would come to this --- Two roads diverged in the yellow woods; and given the choice between a mediocre work environment of ten average employees and a seriously kickass fun filled environment of nine tribe members; Multiplitaxion Inc, walked the easy-safe and boring first path.

Which path has your organization taken?

Do you think your organization is 'man enough' to adapt the nine-ten-rule?

How seriously; does your organization take the idea of 'fun'; dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Tuesday, August 11, 2009 9:35:29 PM UTC  #    Comments [1] Trackback
Posted on: Friday, August 07, 2009

The Skip

Fred is at my desk on a Monday morning.

Fred; as usual has a problem with his manager.

I cringe.

What Fred is indulging in right now; can be otherwise referred to as a 'skip'. Put very simply; skip --- is a time when you decide to stop reporting to your boss and 'skip up' to your boss's boss.

 

Whether you are a manager or a young and budding engineer; chances are that you have either used 'skips' or have witnessed a couple of skips being used in your professional life.

Who has the ability to exercise 'skips' in your organization; to a large extent; will eventually define the whiner to builder ratio that ultimately prevails in your organization.

Positive Skips

During my young and budding days as an engineer at Multiplitaxion Inc; we worked on countless weekends and late nights for more than a year; only to discover when the year ended that no-one other than our reporting manager knew what we were working on. Turns out; this young and budding manager of ours had a history for quietly absorbing every single drop of credit without passing a single iota of it over to anyone in the team.

Months later; me along with a couple of engineers decided to exercise the 'skip' when our manager was out on vacation.

We slogged countless hours to finish a project three weeks before it's finish date; purely because we wanted to send the completion email before our manager returned from his vacation. Doing that allowed us to strike a conversation with a technical director of the organization and open up a new communication channel that did not exist before.

Put simply; it allowed us to ship; and show rather evidently; that we actually functioned better as a team without this manager of ours.

It worked.

Within weeks we had a lot more flexibility of taking decisions; dropping features and doing what worked best for the product. 

If I can think of the number of times I've exercised a skip in my; I would consider skips as 'isolated' and a rather rare events in my life. If I'm reporting to you; the only quality I expect out of you; for me not to even think about exercising a skip is --- empathy.

Unless you are a downright asshole; skips are off-limits in my professional life.

However; If you are an asshole and if you give me an opportunity to exercise a skip --- I will.

Negative Skips

Today; every once in a while I see a young and budding engineer like Fred; trying to exercise a 'skip' on his manager. Skips; which were a rare incident; and a rather powerful tool in the hands of builders when we were growing up as young and budding engineers seems to have transformed into a tool to jump up to the next level for ambitious but incapable programmers in the software development world of today.

I've seen:

  1. A young and budding engineer take a shot at estimation where he was merely a part of an email alias that was CC'ed when a vice-president asked a technical architect to do the estimation. Turns out; the architect was off for a day and this young and budding engineer couldn't resist sending a 3x higher man-hour estimate only to make a fool of himself.
  2. A young and budding developer gate crash into a Vice President's room to introduce himself and talk about what he was working on; only to find out that his manager had already kept the vice-president well informed about the great job this developer was doing.
  3. A young and budding developer seeking help and advice from a technical director ever time he had any difficulties with an implementation; only to be gently requested by the technical director that it would be good if he asked his team lead before he approached someone else.

Handling Skips

If you manage managers; or team leads; chances are that every once in a while you will see someone attempting a 'skip'. Which skips you entertain and which ones you do not; will eventually decide who thrives in your organization --- builders or whiners.

Not entertaining a positive skip of a genuine builder is seeking due credit and recognition for his work can have long term catastrophic effects on your organization or your team.

Entertaining too many 'skips' or encouraging them as a general practice; can be equally catastrophic and destroy the very team spirit that is the secret sauce for success of your organization or your team.

I cannot give you rules to help you decide which skips you should entertain and which you do not; but every time I see a manager exploiting his team; I feel like gently nudging a member or two to exercise a 'skip'.

Every time I see a Fred; who isn't seriously a kickass builder himself; trying to exercise a 'skip' on his capable manager; by giving me details of every single line of code he wrote --- I cringe.

Skips are powerful tools; use them wisely and teach your team to use them wisely.

How many examples of skips have you seen in your professional life?

How many of them have been positive and how many of them have been negative?

Have you ever felt the need to exercise a skip yourself; dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, August 07, 2009 10:25:03 PM UTC  #    Comments [1] Trackback
Posted on: Tuesday, August 04, 2009

The First Baby-Steps At Prickdom.

You've hired a young and budding engineer and made him a part of team of genuine builders.

This young and budding engineer; who for the purposes of this post we shall refer to as Jack; is serious raw talent --- gold waiting to be polished. He is working hard; putting his sweat and mind to what he does.

He is slowly becoming the young and budding rock-star of your team.

Jack earns his first round of salary hikes and promotions.

You are starting to feel a little proud of your pick; the rate at which he is growing within your own team and your organization.

Then; something creepy happens.

Things change as far as Jack is concerned.

Not the quality of his work.

The quality of his work is just fine.

He is still amazing as far as his work is concerned; but hidden admist the layers of complicated human behavior; you find that Jack has suddenly lost the innocence and the X-Factor that made him a rock star in the first place.

Slow subtle chances are becoming noticeable.

You are starting to see Jack have minor issues with people in his team.

Ego-tussles; really small ones --- sometimes with other developers; sometimes with with the office administration and HR guys.

An email or two where he criticizes and demolishes someone in his project team for their mistakes in front of everyone else.

The reasons could be numerous; but Jack; dear reader; is taking his first steps baby-steps to becoming a fully-qualified-asshole.

Professional Puberty.

Personally; I like prefer calling this process -- Jacks-Professional-Puberty.

Much like puberty --- professional puberty is process when a lot of confusing changes happen to people.

Take Jack's case; for example. During his professional-puberty Jack is delivering; he is becoming successful and to add to it; he is starting to get a sense that he is 'important' without having any true idea of the level of his importance in the larger scheme of things.

Professional puberty is a hard time; that most engineers or veteran engineers go through in their lives. Most people act really stupidly in this phase of their time. Even I did.

Here is the sorry part however --- a very few of us who go through the phases of professional puberty emerge as better human beings. Most others; turn into regular assholes and pricks that flock our world under fancy titles and designations.

Asshole Not Allowed.

How your environment deals with someone who is going through their professional puberty will to a large extent define the kind of culture that eventually prevails at your workplace.

When a young and budding engineer takes his first step on the path of prickdom do you have veteran builders who can confront the issue head-on or does your organization avoid the issue; hoping that the issue will fix itself?

Does your environment have experienced veteran builders who can help Jack grow out of his professional-puberty into a better human being?

Does your environment have builders who are experienced and strong enough when it comes to getting straight to the bone and explaining the No-Asshole-Rule to Jack in terms which are simple and clear.

If change in attitude not happening after continuous efforts; is your organization; strong enough to pay the price and gently nudge Jack out of the organization; or does your organization take the safe-mediocre path of tolerating assholes just because they are rock-stars at what they do; dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Tuesday, August 04, 2009 9:06:02 PM UTC  #    Comments [0] Trackback
Posted on: Friday, July 31, 2009

Where Saying 'No' Is An Option.

Do you know who the 'idea man' in your project is?

Usually this is going to be a manager who doesn't do any real work or a business analyst who doesn't do any real or even un-real work.

Identifying the idea man is easy:

  1. Idea man does not like to be associated with one project for a longer duration.
  2. Idea man is bubbling with ideas that he 'thinks' your clients 'must have'.
  3. Idea man understands the culture chart and knows the people high up in the pecking order well enough to pull a few strings and get his  ideas of '(not so) nice to have' features or suggestions magically transformed into 'must have' requirements overnight.

Now; the idea man might work with multiple motives; some of which include:

  1. Working for the best interest of the organization and the client ---  You may have click the link to capture the underlying tone of sarcasm here.
  2. Desperate attempts of finding his place in the larger scheme of things --- and an inability to find healthy ways to over come his insecurities.
  3. Showing those pesky programmers their real place.

One of the major thing that differentiates a remarkable environment from a mediocre one is the number of strings the idea-man can pull on genuine builders and story-tellers.

Joel Spolsky's rather famous post on the topic; where he talks about his experience of being attacked by a bunch of these idea-men as a manager on the excel macro team; is rather fascinating. Joel uses his post to tell a fascinating real story:

My first assignment at my first job was working at Microsoft, where I was told to come up with a new macro language strategy for Excel. Pretty soon, I had the first draft of the "Excel Basic" spec (which later evolved into Visual Basic for Applications, but that's another story). Somehow, this mysterious group of people at Microsoft called the "Application Architecture" group got wind of my spec, which must have concerned them, because for some reason they thought that they were in charge of things like macro language strategies, and they asked to see my spec.

I asked around. Who's the Application Architecture group? Nobody seemed to think they were very serious. It turns out that they were a group of just four people, recent hires with PhDs (very unusual for Microsoft). I sent them a copy of my spec and went to meet them, in case they had something interesting to say.

"Blah blah!" said one of them. "Blah blah blah, blah blah blah!" said another. I don't think they quite had anything interesting to say. They were very enamored of the idea of sub-classing and sort of thought that people making macros in Excel wanted to subclass a lot of things. In any case, one of the fellows said, "Well, this is all very interesting. What's next? Who has to approve your spec?"

I laughed. Even though I had only been at Microsoft for a few months, I knew that there was no such thing as somebody approving my spec.

The same story describes the whole string pulling exercise which is a rather common trait amongst idea-men:

This seemed to piss off a guy named Greg Whitten who headed up the App Architecture group. Now, Greg was something like Microsoft employee number 6. He had been around forever; nobody could quite point to anything he had done but apparently he had lunch with Bill Gates a lot and GW-BASIC was named after him.

Greg called a BIG MEETING and proceeded to complain about how the Excel team (meaning me) was screwing up the macro strategy. We pressured him to come up with some specific reasons but his arguments just weren't convincing. I thought it was nice that here I was, a new hire pipsqueak right out of college, arguing with employee number 6 and apparently winning the argument. (Can you imagine that happening at a Grey Flannel Suit company?)

My programming team, headed by Ben Waldman (now a VP at Microsoft) backed me up completely, which was all that really mattered, because the programming team wrote the code and thus had the final say on how things got done.

Joel effectively goes on to describe what made Microsoft a special environment to work at in the very same story:

I was sitting at lunch with some coworkers, in the Redmond sun, when Pete Higgins came up to me. At that time Pete was the general manager for Office -- I knew who he was, of course, but didn't expect that he knew me very well. 

"How's it going, Joel?" he asked. "I hear you've been having some issues with the App Architecture group."

"Oh no!" I said. "Nothing I can't handle."

"Say no more," he said, "I understand." He left. By the next day the rumor had gotten back to me: the App Architecture group was disbanded. Not only that, but each member of the group was sent to a different department at Microsoft, as far apart as possible. I never heard from them again.

While the story is a fascinating example of a work environment where eventual builders are given room to maneuver it is also an interesting case-study of what results in the development an environment where genuine builders who indulge in the act of building stuff can flourish and innovate.

If you've been in the business of building software for any period of time; you've probably found yourself demoing your product to the-idea-man.

The idea-man is usually not an involved client; he is not a regular user; he is not even an active team member --- because all three of these require time and commitment and a typical idea-man has neither time nor commitment.

Chances are; that the idea-man will not even log-in in to your application after you are done with demoing your application to him --- but based on his infinite wisdom and experience --- he is going to leave you with a few ideas that your 'absolutely must' implement.

Once you spot an idea-man; be informed; that he will pull any strings he can to get his ideas implemented.

When that happens:

Does your work environment leave you with no other option besides; dealing with the idea-man diplomatically?

Do you have enough genuine builders or story-tellers around you who are masters in the art of sedating monkeys and getting them out of your way?

Is saying 'no' even an option in your environment; dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, July 31, 2009 9:13:36 PM UTC  #    Comments [0] Trackback
Posted on: Thursday, July 30, 2009

 Following The Rules Vs. Acting Responsibly And With Passion.

If you have been a reader for this blog for any period of time; you probably know how much respect I have for Processes and Rules.

On one hand; I detest nine-to-five organizations with rules or policies for everything.

On the other hand however; when it comes to my own project; I spend countless hours tweaking my code; fixing the casing of my variable names; measuring lines-of-code-per-function; constantly looking the cyclomatic complexity of the functions; desperately trying to bring the complexity down and indulging in dozens of other painstaking exercises which might sound un-necessary to a young and budding developer.

I even push the idea of constantly following 'DRY' and 'YAGNI' --- sometimes a little too strongly to disappoint others.

Isn't all of what I do in my projects a classic illustration of me contradicting myself?

Am I not going against the very core thought-process of having little or no respect for rules?

While I go out there; comment and claim that contradictions do not exist; isn't my behavior on my projects a classic example me contracting my own thought-process of having very little respect for rules and the status-quo?

Of-course it is not.

Allow me; dear reader; to put my point across to you using a rather inspiring post written by Jurgen AppeloJurgen describes the idea of following rules using the example of driving. He explains:

I love driving my car. It’s a male thing, I suppose. It’s somewhere in my Y-chromosome. I embrace every opportunity I can find to hop in my car and start driving.

And (like every other male on the planet) I think I’m a good driver.

You see, I always watch the other cars around me on the road. When changing lanes I check all sides and mirrors. My distance to the cars in front of me is enough to allow for occasional extreme speed reduction.

I match my speed with the weather conditions. I play music in my car (loudly) but I don’t wear headphones. I don’t use my mobile phone while driving. And, as far as I can tell, I am the only person in the world who is able not to cross the lines that mark my lane while taking a curve to the left or the right.

I have adopted this behavior myself.

I might have copied some stuff from other people, but it was my choice to learn these rules and use them, always.

Jurgen illustrates the difference between following-the-rules and acting-responsibly. He explains:

Only thinking and talking about something doesn’t make it so. Just like making up official rules won’t turn your business into a success, traffic signs won’t make you a good driver.

In fact, I often don’t notice many of the signs.

It is my attitude and actual behavior on the road that makes all the difference.

Craftsmanship is something agile doesn’t introduce by itself. And just thinking and talking about it doesn’t give you successful projects.

Managers who want better results must acknowledge that they have to actively change the attitudes and behavior of their people. They must stimulate craftsmanship and discipline. Or else...

Or else accidents will happen.

They say changing people's behavior starts by giving them a good example. So let the world know that yesterday night, while many people were watching the Champions League Final, I myself was learning how to do test-driven development with Python.

I hope to have inspired you.

If you live in the same planet as I do; you will be given rules at every step and corner of your personal and professional life. Every time you are given a rule; you can do multiple things with it. You can follow it; question why; bend it; tweak it; work around it or sometimes even break it outright blatantly and shamelessly.

Remember; what you do with your rules will *not* decide anything --- your attitude; passion for what you do; wisdom; competence; ability-to-make-good-judgment-calls and responsible behavior will.

Go break the rules that don't make sense to you and make new ones that do.

If nothing makes sense fly free --- but flock responsibly.

I wish you good luck.

posted on Thursday, July 30, 2009 10:36:41 PM UTC  #    Comments [0] Trackback
Posted on: Tuesday, July 28, 2009

Stupidity Is Not Always Loud And Clear.

Of all the seemingly harmless things that destroy projects in general and organizations in particular; thoughtless optimism mixed with wishful thinking is one of the items that tops the chart. Every year countless startups fall flat on their face and every year new startups with more thoughtless optimism replace them.

The amazing story of the shut-down of fly-clear by Joel Spolsky is a classic tale of thoughtless optimism gone wrong. The story is Intriguing of multiple fronts. The first front is the actual service that fly-clear was providing; which Joel describes rather well. He explains:

Here's how it worked while it was in business. You paid $200 for a one-year membership. You underwent a big, complicated background check to prove that you were extra-super-trustworthy.

In exchange, in a few big airports, you got to skip to the front of the TSA line for screening.

Now, you didn't skip the screening itself. You still went through the X-ray machine and had to remove your shoes, belt, pocket contents, laptops, and plastic quart zip-lock bag of toiletries.

You just got to cut to the front of the line.

A few people signed up. In certain airports, it was, indeed, worth actual money to cut to the front of the line.

This wasn't Clear's actual business plan. The actual business plan was that Clear would do detailed background checks on travelers, who would then be trusted to bypass security completely because they were extra-super-trustworthy

When TSA rejected the whole idea of skipping the security check and only allowed fly-clear users to just move to the front of the security check line; still leaving the requirement of a security check mandatory; Clear continued with their initial plan --- which was to charge money for their service and continue to do detailed background checks on all their users before they registered them.

Joel describes the stupidity rather articulately:

At this point, and here's the interesting part, at this point, a rational businessperson would say, "Well, does the Clear idea still make sense if we can’t actually let you skip the screening?"

OK, maybe it still makes sense to charge to skip to the front of the line. Maybe there's a business model in that.

In that case, though, why did they still do background checks? It doesn't make any sense.

The environment changed. It turns out that Clear's business model of prescreening wasn't going to be possible. But they kept doing it anyway. What kind of organizational dysfunction does it take to completely ignore the changed circumstances and keep at a money-losing business?

Joel ends the post with a note of wisdom and sarcasm:

What's even funnier is that Clear could probably have been profitable if they had just skipped the one unnecessarily stupid part of their business model: the detailed background checks on all their customers.

Nobody at Clear did any thinking.

They had a business model, the business model wasn't actually possible, everybody knew it, and they still plugged away at it. Thoughtless optimism. I don't know whether to salute them or laugh.

I find these stories really fascinating because based on the little facts that we as outsiders are privy to; these stories allow us to do black-box-investigations into huge colossal fu@#kups-ups orchestrated by smart people who had the means and the measures to organize fu@#kups of this magnitude.

Joel does his fascinating and thought provoking analysis of the story and comes to a simple logical conclusion --- Nobody at clear did any thinking.

Take that analysis one step forward and you realize that thoughtless optimism in real life; isn't as simple as a team of lousy-thoughtless-bozos coming together; moving into a dark cave and writing random software after they have lost all touch with reality.

Put simply; thought-less optimism is a slow process that happens over time; and by the time it takes it's toll on your organization; your organization; in all probabilities; has already lost the sight of the stupidity that surrounds it.

While it is easy to conclude that everyone working at Fly-Clear was a bozo indulging in thoughtless optimism; my guess; is that like any other typical startup out there Fly-Clear had its bunch of builders, story-tellers and whiners.

Now; if you assume that Fly-Clear was a decent startup like any others with an idea and an implementation --- it makes you wonder what got them from the great-fun-filled-start-up days to a miserable shutdown.

Multiple possibilities exist.

Maybe the leadership at Fly-Clear was too arrogant to consider the idea of surrendering; giving-up and starting something else.

Maybe they started off with smart and talented employees who lacked the spine to come out and announce that the king was in fact, naked.

Maybe the young and smart employees in the corridors of Fly-Clear spoke their mind but then decided to hibernate while the folks higher up in the pecking order could not care less.

Maybe just one senior vice-president high up in the pecking order at Fly-Clear believed that he could still get TSA to agree at skipping the security checks and then all those background checks they did would suddenly become appropriate.

Sometimes you need a team of monkeys to turn a project into a failure or shut-down an organization; sometimes; just one monkey left un-sedated is enough to bring an organization to a shut-down.

Maybe it was just mitigated speech and complete in-ability to accept; that the whole idea of continuing background checks; even after TSA refusing to skip the security check; was; as a matter of fact; fu@#ked up that brought them where they are today.

Maybe; and here is the creepy part; maybe it was all of the above in small dozes which were barely noticeable.

While it is easy to read stories of failure and discard them as --- Oh-they-were-stupid-we-are-not --- why these stories of failure with very little forensic evidence to base your analysis on; are still useful --- is because they show the level of fu@#kup-ups some decently intelligent teams; sometimes even having a few really smart people; are capable of orchestrating.

Remember; the problems that eventually cause your project or your organization to fail are much more subtle than we think.

Every time you read a story of failure; take a deep hard look at your organization; your team and your project.

Random acts of stupidity might be happening; really slowly; around you; right now as you read this.

Being consciously aware of the fact and knowing that a fu@#kup as big as some of these glamorous fu@#kups could be cooking right in the corridors of your organization is your only chance at avoiding these fu@#kups.

When you are on the look-out for stupidity in your very own project, team or organization; keep your eyes open dear reader; because total random stupidity is not usually very loud and clear.

It all begins with one isolated act; and then it grows from there --- usually in small doses and unannounced till it becomes big enough to cause your entire organization to go-down; without any prior warning.

Next time you look around you and see what is going on in your project, team or organization; keep your eyes open; really wide.

I wish you good luck.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Tuesday, July 28, 2009 10:01:03 PM UTC  #    Comments [0] Trackback
Posted on: Friday, July 24, 2009

Years ago at Multiplitaxion Inc, I witnessed a project which was a collection of multiple source frameworks out there; that were somehow held together with band-aids. When the final product evolved by the virtue of hooking up random open source frameworks; we called it our 'Intellectual Property'.

Soon the band-aid wore off and our product crumbled to pieces before moving to a stable production environment.

Any engineer with an eye and taste for genuine software would clearly seen the different components oddly stitched together by interns fresh out of college and laughed at the idea of calling it our Intellectual Property.

Here is the tragic truth however; we were neither able to sense the oddness in the whole design nor question how you can create intellectual property by hooking up five open source components out there together with weak a band-aid. Anyone who was intelligent enough to understand the oddness of the design decided to keep their gob-shut and tactfully disassociated themselves with the project. 

After multiple man-months of efforts; a huge team slogging away trying to contain and control components which were like beasts running in different direction; started facing and ignoring small broken windows which soon snowballed into an explosion that destroyed the project.

The stitch-and-go approach to intellectual property destroyed the project.

Years later; at work; in my current organization; I was asked to build a system which would allow us to build applications for our clients who had a lot of long-running workflows and wanted to take these workflows online. That is when Crux was born.

Even today; I am viewed with paranoid eyes of capable programmers when I tell them that Crux includes a custom-made application framework along with a light-weight, open source workflow engine that I wrote using new language features of C#.

'But Pops, why didn't you just use windows workflow foundation' --- is one of the most common question that comes up during training session for Crux.

A part of me; which is a pragmatic programmer answers this question with logic and reason --- we have used Windows Workflow Foundation for months; found it to be a decently good workflow engine but it is way too complicated for the kind of long running workflow requirements most of our clients were are going to have. Besides the learning curve associated with it is steep and the benefits gained out of using it for what we were trying to do; aren't high enough.

The real answer however is deeper than that. The real reason for not using Windows-Workflow-Foundation in Crux was the fact; that Windows-Workflow-Foundation in it's current version needs 'stitches' and 'compromises' all over the place to be hooked on to anything.

Put simply; Windows Workflow Foundation; in it's current version; is a beast in itself which requires feeding or caring and that feeding or caring; dear reader; was too much of a price to pay for the simple web based long running workflow systems we were trying to build.

This post dear reader; is not about me trying to illustrate how a product that tried to hook on multiple components out there failed and how me deciding to not use Windows-Workflow-Foundation in Crux ultimately gave us multiple successful client implementations.

This post; dear reader; on the other hand addresses an aspect of software development that is much larger than the two examples I talked about.

Talk to most CTOs, Vice Presidents and even consultants around the world and it is not un-common to come across words like 'leverage and re-use of components out there'. Talk about building something which sounds a little off-track; in-house and it is not un-common to hear the sound of fifty thousand heads of programmers exploding all at once.

While I am all for the idea that we as developers are code addicts who are constantly wanting to bull-doze what exist and start from scratch; it is also important to realize and stop; particularly when your desire to 'leverage' the components starts taking you down the slippery slope of creating Software that can be best described as Frankenstein's monster. A monster that will eventually chase it's developer and make his life miserable.

As a general rule; if you are trying to roll out something that is going to be your core-intellectual-property you are better off building the stuff yourself; or at-least working at a level of abstraction where you can control and tweak every minor detail; rather than trying to hook up multiple ready made components out there in to get something out quick and dirty.

The Stitch And Use approach to building intellectual property is highly overrated.

On the other hand if you are just trying to get a processes automated or get a solution implemented that does not involve your core intellectual property you might be better off buying the stuff that's already out there. When it comes to tools; which allow you sufficient level of abstraction that you need; again; you are better of buying than building.

Either way; always remember - if buying is an option; building is an option too --- even if your Vice President looks at you like you just dropped a filthy rat on his table when you utter the words 'build'.

The next time you are faced with the question of building vs buying or using something already available; keep your biases aside and take a pragmatic decision based on your past experience; logic and your very own gut-feeling.

I wish you good luck.

posted on Friday, July 24, 2009 10:44:30 PM UTC  #    Comments [2] Trackback
Posted on: Thursday, July 23, 2009

As I continue to struggle mulishly towards writing the book I started to set out months ago I am starting to realize that there is a lot more to be read; researched and said on the topic of how genuine builders and storytellers function. The 'Random Thoughts On Builders At Work' series of posts is supposed to help me organize of some my random thoughts for inclusion in the book without feeling the urgent need to organize them sequentially.

All of these posts; will be eventually added to the book; but for now; dear reader; you can read them as isolated blog posts without any direct sequential connection with the post that came before it or the one that will follow.

So; dear reader; here is one such random thought of genuine builders.

Why We Build Stuff Decides How Long We Continue Doing It.

Early on; in my post on consistency; I announced that consistency is one quality present in all genuine builders and storytellers. Having said that I continue to be disappointed by the lack of overall consistency in the world of software development in general.

You don't have to take my word for it; dear reader. Go look for:

  1. The number of abandoned blogs on word-press or blog-spot that never crossed the post count of ten.
  2. The number of abandoned open source projects on source-forge.
  3. The number of software programmers who upload and update their resume on a job portal every year.
  4. Number of startups that come to an end each year.
  5. Number of ideas on which work is started and then abandoned each year.

Somewhere deep down inside;  the question that really kept bothering me was this --- Does this mean that we are all quitters and whiners who start things which we neither want to finish nor support; in the long run.

After a decent bit of soul searching; reading; and one flash of lightning later; I figured out that the answer to these questions; dear reader; really lies in 'why we indulge in the act of building stuff'.

As it turns out; most people; indulge in the all of the acts mentioned above; starting from launching their blog to signing up for an open source project; for the same reasons that crack dealers indulge in the risky business of selling crack.

Steven D. Levitt and Stephen J. Dubner explain the phenomenon in their book; Freakonomics. They explain:

A 1-in-4 chance of being killed! Compare these odds to being a timber cutter, which the Bureau of Labor Statistics calls the most dangerous job in the United States. Over four years’ time, a timber cutter would stand only a 1-in-200 chance of being killed.

Or compare the crack dealer’s odds to those of a death row inmate in Texas, which executes more prisoners than any other state. In 2003, Texas put to death twenty-four inmates—or just 5 percent of the nearly 500 inmates on its death row during that time.

Which means that you stand a greater chance of dying while dealing crack in a Chicago housing project than you do while sitting on death row in Texas. 

So if crack dealing is the most dangerous job in America, and if the salary is only $3.30 an hour, why on earth would anyone take such a job?

Well, for the same reason that a pretty Wisconsin farm girl moves to Hollywood; for the same reason that a high-school quarterback wakes up at 5 a.m. to lift weights. They all want to succeed in an extremely competitive field in which, if you reach the top, you are paid a fortune; to say nothing of the attendant glory and power.

Analyze the life cycle of a typical young and budding blogger bubbling with enthusiasm about to sign up for a free word-press or blog-spot account and you will realize the similarities. You will also realize this is why a huge number of bloggers never cross the three post count. Here is pretty much how the life of a typical blog works:

  1. Bubbling with enthusiasm and encouragement Fred starts a blog; which he believes will make him rich, famous and so-very-sensational.
  2. Fred does three posts in a month; only to discover that no-one cares about him, his blog or his product.
  3. Fred silently and subconsciously decides that the world doesn't deserve his blog and quits; till he finds something else which seems amusing and exciting.

If this describes your mental process as you sign up for a blog; do your first open source check-in or share your idea with your friend; it just means that you may have striking similarities with the Wisconsin farm girl who moves to Hollywood or the drug paddler who risks his life at only $3.30 an hour.

The problem with that sort of motivation; is that; it doesn't last very long. Once you realize that getting to the top is painstakingly hard and there is nothing much to be obtained by staying at the bottom or in the middle; you are left with no other option but to quit.

Conan O'Brien describes how he avoids this risk very articulately in his interview with the A.V. Club. He explains:

There's a temptation to over-think the whole thing. I've had a Field Of Dreams philosophy to this: If you build it, they will come. I still have no idea.

I don't look at research. I don't look at who's watching, or when they're watching. I've never been interested in any of that. I'm interested in doing what I think is funny.

For the last 13 years, that seems to have worked for me.

If I go to 11:30 and do what I think is funny, and someone comes and tells me it isn't getting enough people in the tent, I'd say, "Well, that's all I can do." If I'm looking at spreadsheets and time-lapse studies of viewing patterns, I think I'm wasting my time.

What I should be worried about the first night I host The Tonight Show is, "How can I make this a funny show?"

The second night, "All right, let's make another funny show doing some different stuff." You do it one show at a time.

And if you're lucky, eight years later, you've alienated a nation.

Whether it is your blog; your open source project or your next big idea; if you have the slightest element of Hollywood-Baby-Dream about the fame and money that is going to come out of all your efforts; chances are that your efforts are going to have take a nose-dive on the path of failure and you are going to quit; whatever-it-is-that-you-are-starting; in the next few days.

On the other hand; if you realize up-front that your blog, open source project or your ideas are not going to make you rich or famous; and decide to do is anyways; for the pleasure of doing it; chances are that you will find it that much more easier to survive as a low maintenance software terror cell and continue doing what you love doing; for a very long time --- consistently.

Remember; why you start something often governs how long you continue doing it.

So before you start; answer the why; very carefully.

Remove the Hollywood element of success out of your idea; right upfront; before you even start.

Stop fooling yourself.

Ask yourself if you will genuinely; truly still love the idea after the money, fame or other Hollywood-Dreams contained in the idea are shattered and removed.

If the answer is 'no' --- drop the distraction and go find something that you genuinely love doing.

If the answer is 'yes' --- start slogging on your idea now.

Either ways; I wish you good luck.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Thursday, July 23, 2009 9:52:26 PM UTC  #    Comments [2] Trackback
Posted on: Tuesday, July 21, 2009

Honest confession: I love twitter.

Having said that; twitter is by far the loudest when it comes to flaunting your so-called-social-networking-mussel-power on the web. Placed smack in the middle of every user's home page is what I like to call the 'Twitter Power' Dashboard.

As humble and low profile as this dashboard looks; it is one of the features that drives countless users to twitter and keeps them motivated for months as they work hard to 'collect' what twitter calls their 'followers'.

Put simply; the concept of 'followers' and the idea of flaunting the number of followers that follow you on your twitter-home-page is by far one of the biggest psychological gimmicks that I have witnessed in my entire online life till date; and guess what --- it works really well for twitter.

The reasons why it works are pretty obvious.

Joshua Porter in his blog-post on the topic; describes rather articulately why Twitter strikes a note with a huge audience and how it en-cashes on simple fundamental human nature; big time. He explains:

Here’s a question: how would Twitter change for you if you didn’t know how many followers you have? What if the designers at Twitter removed the number from all screens/APIs and forced you to rely on replies or re-tweets to let you know what was going on? Would that be OK with you? How would it change your behavior?

Humans are hard-wired for attention. My newborn girl, for example, cries when she’s not getting attention. My 3 year old, who isn’t used to not having attention, is going through a major psychological shift in her life because she’s realizing that she isn’t the only child in the universe... she now has a sister who will be getting attention as well. Attention is a core human issue for all of us. As designers we need to keep this in mind.

What is actually scary about a feature of this sort is that even someone like Joshua; who is smart enough to understand the whole point cannot help but use the meta-data on every user that twitter flaunts on their twitter-home-page to come to his conclusions about the person. He explains:

I use follower numbers in several ways to judge the type of person who is on the other end. If I’m followed by someone who has very low following/follower numbers, then I know they’re probably new to Twitter.

If someone has really high following/follower numbers, then I know they’re probably an auto-follower, which suggests they might not focus on quality conversation as much as attention.

If someone has high follower numbers and low following numbers, then I know they have an audience for some reason (it might not be a good reason). Obviously, these numbers don’t tell you everything… but I use them to give me an idea. When metadata is available… humans will look at it.

While the analysis seems reasonable enough at the first glance; the fundamental issue here is realizing why twitter decided to throw the Twitter-Power dashboard on your face in the first place.

It was a design decision.

One that benefits Twitter tremendously.

The real question; that you; dear reader; need to ask yourself now is this --- how does it benefit you?

Does it nudge you to go out there and push meaningful content or does it nudge you to increase your follower-count by indulging in the You-Follow-Me-I-Follow-You funny dance that a huge percentage of twitter users dance?

As anyone who has run a blog for more than a year and has had more than a handful of subscribers will tell you; constantly peeking at your traffic and writing with the sole purpose of increasing it; is highly overrated.

Jeff Atwood describes this much more articulately than me:

There's certainly value in audience metrics. But it's easy to overanalyze, too. Instead of obsessing over who does and doesn't link to you, concentrate on writing a blog entry you'd like to read. Instead of worrying about audience feedback, focus on delivering a presentation you'd like to attend.

You should trust your gut more than any metrics. Build it, and they will come.

With it's one-forty-one character limit; twitter makes writing something you would yourself like to read later really hard; With it's constant display of your statistics or traffic-meta-data; it makes worrying about the number of followers you have really easy.

If you; dear reader are on twitter; the real challenge is not how to increase your follower count.

The real challenge; dear reader; is in-fact; to turn a blind eye to your 'twitter-power' dashboard and focus on adding content that your readers and you yourself will love reading.

Now; go visit your twitter home page.

This time; try not to look at your follower count.

Focus on your past tweets section instead.

See if you can read through your very own twitter home page; read it; not get bored and get some genuine value out of it.

If you can't --- the number of followers you have; is just meta-data that doesn't mean a thing.

The whole idea of measuring 'Twitter Power' through number of followers is highly overrated.

Now go find meaningful ways to participate and contribute using that small one-forty-one-character text-box.

I wish you good luck.

posted on Tuesday, July 21, 2009 10:52:20 PM UTC  #    Comments [0] Trackback
Posted on: Friday, July 17, 2009

Let Your Corridors Carry Your Stories.

During the early days of my career as a programmer; I was hired at Multiplitaxion Inc; where; besides doing my job as a programmer; I was given random chores that other 'respectable-programmers' of the organization found too insulting to take up. The chores ranged from formatting documents; cleaning up HTML; uploading build files on production servers; to ordering food for programmers who were going to work late and fixing lose network cables for people.

Chores that laid the foundation for; and helped me understand the importance of becoming a one man army.

Time moved forward; one day at a time and I found myself working on these chores besides honing my programming skills.

Then one fine morning; years later; I found myself leading a team.

This was soon followed by leading multiple teams.

It was on another fine morning; that I was told that I someone who was very 'senior' and then a quite few people at work started listening to me.

Years later; every time I discussed those early painful times; what I learnt from those times and how those times changed Multiplitaxion Inc; forever; with young and bugging engineers; I started getting funny glances from senior-programmers and managers alike.

Some mildly hinted that the young-and-budding-developers working in teams that report to me might start respecting me lesser if they came to know of my humble starting; stupid failures and the deep scars I had received early on in my career.

Others felt it might have an impact on the overall organizational image.

'Why share stories of your or your organization's humble past with someone who is reporting to you?' --- some wondered.

Rosa Say describes the idea of sharing your own and your organization's past through stories much more articulately than I will be able to describe it. She explains:

Every company has a storied past. Are you aware what yours is?

More importantly, do you know why your stories are so important?

When old timers tell the newbies stories about “the good old days,” or “how it used to be here,” or “the first time we ever did this” what are they so fondly recollecting? Why in the world do they keep talking about past events, often making the retelling far more wonderful sounding than you remember actually living the experience of them?

Is there any value in this memorable nostalgia?

When stories are told in the spirit of retelling your company history, your storytellers are often capturing the memorable parts; what they remember is largely what they want to keep alive because it felt very good to them at one time.

Stories of what had been give us a look back at those things we once believed in, and want to keep believing in. They reveal the values which had bound us together and still do, and why in the aftermath of the story’s events we kept pushing upward and onward.

They often chronicle successes and achievements, and tell of what people feel was a victory, because by nature we want our stories to be good ones; no one likes to recount their failures.

However whether victory, mistake, or outright failure, our stories undoubtedly recount lessons-learned too important to be forgotten. We feel we can keep learning from them, and we tell the story to re-teach the lesson.

Stories from your organizations past and sometimes your professional past can be humbling and painful. When you lead a team and find a few people listening to you; it's easy to put yourself in an ivory tower; shit-can; hide and never talk about all those humbling experiences from the past that taught you so much or made your organization or your team what it is today.

Not sharing these stories; is safe.

Not sharing these stories ensures that everyone in your team continues to respect you and your organization.

Not sharing these stories allows you to continue depicting yourself as this super-successful-guy-who-never-gets-anything-wrong and your organization as the-place-that-was-always-perfect.

This approach; dear reader; has just one problem however --- it is your first step to becoming a genuine prick who is always busy protecting his and his organization's so-called-always-successful-image.

Accept it or not; every organization has stories --- stories of success; stories of pathetic failures; stories of things done right; stories of things done wrong; stories of victories; stories of failures; stories of shipping crap; stories of not shipping crap and sometimes even stories of colossal fu@#kups or total disasters.

How many of these stories make it to the corridors of your organization and flow through them; letting your builders; learn from your organization's past?

Accept it or not; every manager has stories from his professional life --- stories of doing a few things right; stories of doing a few things wrong; stories of heroism; stories of pathetic failures and even stories of colossal fu@#kups orchestrated by his very own self.  

Look around you.

How many of these stories about your organization, your team or your managers are you aware of?

If you answered 'none' you might be working with a bunch of pricks trying to protect their 'so-called-successful-image'  by shit-caning their failures.

Remember; management is all about no secrets and an environment where stories don't flow through the corridors; cannot be a fun filled environment for genuine builders.  

Which stories about your organization and your managers are you aware of?

Do these stories give you a clear picture of your organization's and manager's professional past?

Do these stories tell you about organizations culture chart?

How many stories of your own professional successes and fu@#kups that happened in the past; are you comfortable telling people who work with you?

What's your story; dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, July 17, 2009 10:19:00 PM UTC  #    Comments [0] Trackback
Posted on: Thursday, July 16, 2009

Honest confession: I am not exactly a rock star when it comes to spelling.

To be honest; I suck at spellings and I make random typos all the time.

The very idea of writing a post without a decent spell-checker makes me cringe.

Why?

Because I hate typos; specially when I am the one who is making them.

Spell-checker for me are a profoundly important.

I consider spell-checkers to be an invaluable tool for both amateur and veteran writers.

Having said that; anyone who writes; knows that spell-checkers are far from perfect. Which is probably why; every post I write; goes through more than one round of editing followed by a huge deal of proof reading. Typically; the branding; formatting; editing and proof reading of each post on this blog takes as much time as the process of writing the post itself takes.

While all veteran bloggers will tell you that spell-checking and proof reading everything you post; meticulously; is hugely important; after a point of time in your life when ideas start torturing you till you set them on a concrete post you begin to wonder just how much effort should you be putting into proof reading of each post when the same time could have been used writing about new ideas that will not let you go till you turn them into a fresh posts.

Long story short; publishing a post is pretty similar to shipping software. You have to walk the fine line between quality and shipping. Of-course your posts are shitty; but if they sit on your hard-disk gathering dust waiting to become perfect 'one day' they are worse than shitty.

Penelope Trunk describes this much more articulately than me in her post on typos while writing blog posts. She explains:

Will everyone please shut up about the typos on blogs? Show me someone who is blogging every day and also complains about someone's typos. Just try. See? You can't. Because anyone who is trying to come up with fresh ideas, and convey them in an intelligent, organized way, on a daily basis, has way too many things on their plate to complain about other peoples' typos.

Penelope's argument against spending time on spell-checks and countless rounds of proof reading stands around five simple pillars:

  1. Spellchecker isn't perfect.
  2. Spelling has nothing to do with intelligence.
  3. You don't have unlimited time, so spend it on ideas, not hyphens.
  4. Perfectionism is a disease.
  5. Use the comments section for what matters: Intelligent discourse (not parsing grammar).

If you are someone who posts using a WYSIWYG editor and doesn't even bother finding a decent blog writing tool; the discussion on Penelope's post or this post is clearly not for you.

On the other hand if you are someone who spends a huge deal of time worrying about typos on his blog posts and does multiple rounds of proof reading followed by editing; I would highly recommend Penelope's Post on this topic.

It is worth a read.

Shipping regularly; whether it is in your project, code or blog-posts; is a rewarding and fun filled exercise.

Much more rewarding than constantly worrying about perfection and playing it safe by writing less and writing perfect.

Remember; 'Don't-Worry. Be-Crappy'.

Put a decent bit of effort behind editing, proof reading and spell-checks; but don't be obsessed with these.

After all; your participation and contribution is much more important.

Besides; once you have shipped; you can always Rinse and Repeat.

If you have posts sitting on your hard-disk gathering dust because you are going to 'make-them-better', proof reader them, or spell-check them 'someday'; may I suggest; dear reader; that you ask yourself if they represent an idea worth sharing; and if the answer is yes; consider posting them out.

Not doing so can make your blog safe-and-boring.

Then continue to fix your posts as you move forward.

I do it all the time; and if people complain about their RSS Readers showing an old post as un-read when I fix it later it's easy to blame it all on Pops.

On a side note dear reader; if you find a typo on this post or anywhere on this blog; please do continue leave me a generous comment or email just like some of you have done in the past. I assure you; that the typos will be fixed and you will be thanked sincerely.

After-all; I hate typos; as much as you do.

Honest.

posted on Thursday, July 16, 2009 10:59:45 PM UTC  #    Comments [0] Trackback
Posted on: Tuesday, July 14, 2009

Software Terror Cells.

Jeff Atwood at Coding Horror had a hard time understanding how open source projects work when he found out that the five thousand dollars he donated to ScrewTurn Wiki was lying idle and unused in the bank; while Dario Solera; the product owner couldn't think of one way to spend money in over four months.

John Galloway elaborates this phenomenon using a unique perspective on open source software development. John explains:

Open Source is to Traditional Software as Terror Cells are to Large Standing Armies. if you gave a terrorist group a fighter jet, they wouldn't know what to do with it. Open source teams, and culture, have been developed such that they're almost money-agnostic. Open source projects run on time, not money. So, the way to convert that currency is through bounties and funded internships. Unfortunately, setting those up takes time, and since that's the element that's in short supply, we're back to square one.

What's interesting; however; is the fact that these 'software-terror-cells' are now rapidly becoming a part of everyday life; and that dear reader; is a good thing.

The idea of guerilla warfare isn't something that is now isolated to open source. It is rapidly becoming; and to a large extent; has already become a part of everyday organizational life.

One 37Signals

It amuses me to just count the number of discussions revolving around 'how-does-37-Signals-make money' that I have with folks from multiple organizations around the world. As much as I enjoy these conversations; there are three things that are really amusing about these conversations.

  1. On one hand you have the whole wide world of software development and the organizations in it wondering how 37Signals is making money.
  2. On the other hand you have 37Signals who with their team of eight developers doesn't really 'have to' to make millions in order to survive.
  3. Every 'enterprise' out there; that needs a couple of million each year just to keep it's payroll moving; wants to be the next 37Signals.

What is amusing is that while the rest of the software development business world is busy trying to figure out the business model of 37Signals and how 37Signals makes millions; the guys at 37Signals are; maybe not through a deliberate strategy; engaging in what Joel Spolsky calls Fire and Motion. Joel talks about the basic idea using his experience as a Israeli Paratrooper. He explains:

When I was an Israeli paratrooper a general stopped by to give us a little speech about strategy. In infantry battles, he told us, there is only one strategy: Fire and Motion. You move towards the enemy while firing your weapon. The firing forces him to keep his head down so he can't fire at you. (That's what the soldiers mean when they shout "cover me." It means, "fire at our enemy so he has to duck and can't fire at me while I run across this street, here." It works.)  The motion allows you to conquer territory and get closer to your enemy, where your shots are much more likely to hit their target. If you're not moving, the enemy gets to decide what happens, which is not a good thing. If you're not firing, the enemy will fire at you, pinning you down.

Clearly; 37Signals is pretty much electing to be a software-terror-cell by choosing to grow by not growing. If you gave 37Signals a hundred programmers they probably wouldn't know what to do with them. Put simply; 37Signals is a self sustaining team of seriously kick-ass programmers or genuine builders and story-tellers rolled into one; who can organize themselves and function as a software-terror-cell. A software-terror-cell.

A terror cell that continues to confuse the rest of the world in general and their competition in particular by constantly engaging in fire-and-motion.

Six Thousand Microsofts

Early on in my career we did some work at the Microsoft silicon valley campus. During my short stay at Microsoft I learnt something which was later articulated by another Microsoft employee. The statement was profound and left a deep impact on me --- Microsoft isn't one company. It is just a collection of six thousand Microsofts; and a majority of these Microsofts happen to be successful.

How Many Terror Cells Does Your Organization Have?

Once you've gone out there and hired some seriously kick-ass programmers; your job as a CTO; Vice President; Manager or whatever fancy designation you hold; dear reader; is to get out of their way and let them form self-sustaining-terror-cells which can continue to fire-and-motion day after day.

Try to organize your genuine builder in large standing armies and chances are; you lose.

I don't care how big your organization is; how big your team is; or what 'vertical' of enterprise software development your organization deals with - if you aren't letting your builders organize themselves into small; low maintenance software-terror-cells specializing in genuine innovation with constant fire-and-motion; chances are that there is a huge body shop out there somewhere in India which can take your organization and all it's jobs sitting ducks.

Not to mention of-course that every time you try to organize a large standing army; you screw up your chances of building a remarkable work and fun environment; just a little bit more.

Now go hire some seriously genuine builders and story-tellers. Then once you've hired them go form your own software development terror cells and learn how to fire-and-motion.

I wish you good luck.

How many successful self-sustained software-terror-cells does your organization have?

How many large standing armies is your organization feeding?

Are you indulging in fire-and-motion on your competition or are you being taken down by your competition sitting ducks; dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Tuesday, July 14, 2009 9:08:23 PM UTC  #    Comments [0] Trackback
Posted on: Friday, July 10, 2009

Criterias For Hiring Genuine Builders Who Can Create Remarkable Environments If Left Alone.

Recruiting individuals for your team and organization is an art. An art at which I've seen so many different Vice Presidents, Senior Managers, Directors, Team Leaders and Developers suck that you begin to wonder if we are basically an industry of the incompetent recruiting the incompetent.

With this post my intent and attempt; dear reader; is not to teach you how to hire better people for the job. That; is a topic that can cover a book in itself.

What I intend on doing with this post however; is giving you a few qualities you need to look out for in your candidates while you are interviewing them. Keep these qualities in mind and work hard to develop your very own personal litmus tests around these basic qualities. Do this and you should have a good shot at eliminating most programmers-who-cannot-program; whiners and the fake rock-stars before it is too late.

Ready for some qualities you need to look out for in the candidates you interview?

Good.

Let's begin.

Thick skinned and down-right shameless.

Qualities of shamelessness and thin-skinned-approach-to-professional-life are things which usually take less than a few minutes to figure out.

As you talk to candidates try to drive the discussion to a point where they need to talk about a couple of failed projects from their career. How does the candidate talk about failures; is he objective about what went wrong; is he pointing fingers; did he learn something from his colossal failures; does he seem interested in sharing what he learnt or is he just interested in shit-canning his failures and hiding them from you.

Most great builders are down right thick-skinned and they fail often. They are often completely shameless about their failure and carry it with a sense of humor. After technical competence; this is the first quality that I tend to look for in people I hire.

Genuine Builders Are Nice When The Sky Is Falling

Ever been late to an interview? I've been there; you know the typical bad day where you are running late by a few minutes and you start the interview with an apology for being late. I stared in awe as the candidate; with multiple years of development experience; reminded me thrice that I was late and continued to give me a rather intimidating look.

If you cannot be nice to me when I start the interview five minutes late; it is safe for me to assume that you cannot be nice when the project is running late by a couple of weeks. 

I'm not saying that you go in five minutes late during every interview; but figure out a litmus test that tells you if a person is just nice; or he is also nice to work with and nice when the sky breaks lose.

Genuine Builder Know Not; And They Know That They Know Not.

Ask difficult questions. See how frequently you hear the words 'I do not know' during the interview. Most candidates find it difficult to even utter these words once during an interview. Others utter these once or twice but start lying and bitching the third time on.

Remember; genuine builders don't know a lot of things and they are rather well aware of their own weaknesses or limitations.

One of their major strength is that they know that they know not. 

Body Language

The art of observing candidates using thin-slicing is a technique described in books like Blink. Of-course you don't have to make split second decisions but anyone who he constantly avoiding eye contact; giving you shitty indignant looks when you correct them at their answers or looking at the cell phone screen as you speak to them in an interview is clearly not someone you want on your team. 

Agree To Disagree 

During every interview I try to make it a point to play the devil's advocate and disagree to the candidate on at-least one technical or design related topic. Disagree; then observe how the candidate handles disagreement.

Does he argue objectively; are there elements of contempt in his expressions as the disagreement continues.

If you were to hire him; there are going to be many heated arguments which are work-related. At the end of the day you want to hire people who have strong opinions weakly held; people who can agree to disagree and people who do not indulge in acts of bozoism.

Critical and Open but Not an Asshole

People who can provide constructive criticism are rather rare. Assholes who randomly criticize things without rhyme-or-reason are a dime a dozen. Unfortunately there is a very thin line that differentiates builders who can provide constructive criticism or whiners who specialize in de-motivating and shattering individuals.

Drive the discussion around the candidate's current project. Try to find out what he feels about the implementation. Anyone who feels that they are doing everything correct is a blatant-compulsive-liar. Anyone who provides random criticism without also mentioning what could have been done to avoid or fix what is wrong; is a down right whiner.

Anyone who is overly critical and wants to change everything in one day is a whiner too.

Track Record

I continue to be amazed at just how many companies ignore this. When one of my bosses told me a deep dark secret of figuring out a candidates possible duration in the organization if you were to hire him; the idea sounded absurd. Like all good ideas; it was absurd but true.

"Anyone who has changed a job each year; for the past three years is not going to stay in your organization for more than a year." --- I was told.

As stupid as it sounds; look at most resumes and you'll see patterns around how frequently people leave jobs. How frequently they hop from one project to another. Unless you are a one in a million example; chances are that you are not going to be able to change this track record. So; if you are looking for a candidate who can be seriously committed; anyone who has changed three jobs in last three years; at the rate of a job a year; is out.

Reason For Leaving

This is one thing that says a lot about the person you are interviewing. I continue to be amazed at just how many candidates lie blatantly when it comes to their reasons for leaving their past job. I also continue to be amazed at how easily they get caught.

I'd have a lot of respect for anyone who leaves a job because of difference of opinion. Much more respect than I can have for someone who leaves for a slightly higher paycheck and does that year-after-year. Build some simple litmus tests around reasons for leaving and you'll discover that finding out true reasons for leaving is not hard.

Passionate About Something

As they say --- passion is something that cannot be faked. You either have it or you don't. Ask the candidate which technology does he absolutely love working on. Then let him speak about it and hear him speak.

Passion is easy to detect. Having said that; the paradox of detecting passion is simple --- it takes a passionate programmer to detect and understand passion in another programmer.

If you are yourself a pay-check-programmer whose resume is floating in job portals around the year; and you believe in 501 programming spotting passion is going to be very difficult.

Genuinely Interested And Connected

Most programmers don't read books. Having said that; when I come across a programmer who hasn't read a single book on programming in his entire life; do I really want him on my team?

A programmer who doesn't read programming books is much like a movie actor who doesn't like watching movies. Disconnected and Disinterested.

Does your candidate have a favorite author? Does he work for an open source project? Does he read technical books? Does he have an active blog that he updates regularly with meaningful content? Does he answer forums?

If the answer to most of these is no; he's probably not genuinely interested or connected to programming.

You'd actually do him a favor by gently nudging him out of your office and if possible; nudge him to a different profession.

How much time has the candidate spent on your corporate website? That tells you something about his interest level in the organization. Even today; I continue to be amazed by the number of people who come down for an interview without even taking a quick glance at the company's website.

Both of these are clear examples of the candidate not being genuinely interested in programming in general and your organization in particular.

Weird But Acceptable

Genuine creativity is un-conventional; sometimes even ugly and down right weird. During my course of interviewing career I've interviewed and hired candidates ranging from folks who could barely speak English to folks who were so disappointed with BDUF approaches to software development they just couldn't stop talking.

If there is something weird or unconventional you can spot in a candidate during the small duration of an interview and it is not a harmful weirdness; embrace it. People who get into office at nine and have utmost respect for all the rules; do not know how to bend them and make small or big dents in the universe.

My work experience ranges from working with people who talk about drinking "one gigabyte of alcohol" in an office party to poets who are passionately inspired by other poets. I've always embraced weirdness and have considered it a part of the whole creative process.

Of-course; I've seen a couple of managers have their share of one or two isolated bad experiences where they landed with a kleptomaniac; without knowing they were hiring one; but then that doesn't make all forms of make diversity or even weirdness --- bad.

Wearing slippers to office is acceptable; stealing client's headphones is not.

Unless the weirdness is bad; harmful or un-acceptable --- embrace it.

Nothing Beats A Genuine Builders Recommendation

With all these criteria I might have already started sounding like someone who has years of wisdom at the whole recruitment process. But clearly all this wisdom doesn't work all the time. Which is why; when a candidate referred by one of the top-most-builders in my team fails my interview criteria; but the genuine-builder who referred him has worked with him in the past and is willing to vouch for him; here is what I do --- I shut up and recruit him.

Remember the good old saying that they used to teach you in junior school - 'birds of a feather flock together' --- Your hugely underpaid school teachers knew nothing about the importance; what they were teaching you; would have in your professional life.

If there is something that I've learnt about recruitment after being involved in recruitment for years; it is that idiots usually tend work with idiots and idiots to have friends outside work who are also idiots and they tend to refer these idiots for interviews.

Having said that the same lesson also applies to genuine builders. Builders; usually tend to hang out with other genuine builders. When wondering what you should do with a candidate one of your best builder worked with in a previous organization and has recommended --- remember --- chances are that the seriously kick ass builder who recommended him probably enjoyed working with the candidate because the candidate in question was a seriously kick-ass builder too.

You are never going to find out enough about a candidate during an interview.

When your top most performers refer someone and are willing to vouch for them; shut up; and hire them.

I do not claim of this list being an extensive list of 'all' the qualities you need to look out for; but look out for candidates who do not have most of these qualities and you've filtered a huge part of shitty-whiners out which just makes your chance of recruiting genuine builders that much better.

What are things; besides technical competence; that you look for in a candidate before you bring them on to your team?

How many of these criteria were you actively monitoring or trying to access during interviews you conducted in the past?

Which other criteria do you look for in your candidates, dear reader?

Discuss.  

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, July 10, 2009 10:58:12 PM UTC  #    Comments [0] Trackback
Posted on: Thursday, July 09, 2009

Microsoft Solutions Framework Essentials: Building Successful Technology Solutions - a book on Microsoft Solutions Framework (MSF)  by Michael S. V. Turner talks about the Standish Group 10th Annual (2003) CHAOS Report which mentions that only 34% of the projects in a sample size of 30,000 projects are successful. A staggering 51% are badly challenged --- the kind I like to call 'successful failures'.

To add to that 15% of them take a nose-dive to a down right catastrophic failure.

When I was doing a post on the fact that the success or failure of your project depends on the competence of your team and not other complicated factors like 'lack of a systematic process' one question that kept pinching me was why didn't project managers around the world just 'get it'. Why did they keep finding refuge in complicated terminology and jargons.

To find the real answer to the question; dear reader; you have to dive in the human mind and how it works. Besides the fact that complicated reasons give young and budding managers a curtain of crap to hide behind; I am also starting to believe that there is more to this phenomenon that just the prickdom of the young and budding managers or the desire of developers to save the skin of their other fellow developers.

Study how the human mind thinks or works and you'll find that there are two primary reasons why project failure analysis never produces any real concrete reasons for the project's failure.

The first one being; the fact that the human brain is often incapable of comprehending the implications small things can have on our lives and our projects. Malcolm Gladwell describes this phenomenon in his book - The Tipping Point - where he offers his readers a simple hypothetical puzzle:

Consider, for example, the following puzzle. I give you a large piece of paper, and I ask you to fold it over once, and then take that folded paper and fold it over again, and then again, and again, until you have refolded the original paper 50 times.

How tall do you think the final stack is going to be?

In answer to that question, most people will fold the sheet in their mind's eye, and guess that the pile would be as thick as a phone book or, if they're really courageous, they'll say that it would be as tall as a refrigerator.

But the real answer is that the height of the stack would approximate the distance to the sun. And if you folded it over one more time, the stack would be as high as the distance to the sun and back.

This is an example of what in mathematics is called a geometric progression.
---
As human beings we have a hard time with this kind of progression, because the end result — the effect — seems far out of proportion to the cause.

Bring this to the world of software development; and we often tend to miss out of the ramifications of slightly in-competent programmers in our teams or organizations. Anyone who reads legendary author Steve McConnell knows that a competent programmer is ten times more effective than an incompetent one.

Having one ass-hole or a monkey is enough to screw up your next project.

So; that lowering of the selection criteria during your interview process obviously has a impact which is large enough to cause your projects to go for a catastrophic nose-dive while your brain struggles to comprehend how relaxing the selection criteria in an interview 'slightly' can cause projects to fail.

The other part of the answer; lies in the fact that that human beings by their very nature are pathetic risk assessors. Steven D. Levitt and Stephen J. Dubner describe this problem much more articulately in their book Freakonomics. The explain this phenomenon using two simple examples. In the first example they site the example of deaths caused by having guns in home; vs. deaths caused by having swimming pools:

Consider the parents of an eight-year-old girl named, say, Molly. Her two best friends, Amy and Imani, each live nearby. Molly’s parents know that Amy’s parents keep a gun in their house, so they have forbidden Molly to play there. Instead, Molly spends a lot of time at Imani’s house, which has a swimming pool in the backyard. Molly’s parents feel good about having made such a smart choice to protect their daughter.

But according to the data, their choice isn’t smart at all. In a given year, there is one drowning of a child for every 11,000 residential pools in the United States. (In a country with 6 million pools, this means that roughly 550 children under the age of ten drown each year.) Meanwhile, there is 1 child killed by a gun for every 1 million plus guns. (In a country with an estimated 200 million guns, this means that roughly 175 children under ten die each year from guns.)

The likelihood of death by pool (1 in 11,000) versus death by gun (1 in 1 million-plus) isn't even close: Molly is roughly 100 times more likely to die in a swimming accident at Imani's house than in gunplay at Amy's. But most of us are, like Molly's parents, terrible risk assessors. Peter Sandman, a self-described "risk communications consultant” in  Princeton, New Jersey, made this point in early 2004 after a single case of mad-cow disease in the United States prompted an anti-beef frenzy.

"The basic reality," Sandman told the New York Times, "is that the risks that scare people and the risks that kill people are very different."

Bring the idea over to your project and evaluate what is more likely to kill your project; having incompetent assholes; no customer feedback and a thousand other really small things or lack of a 'formal communication plan and scope control document'.

Most so called traditional project managers around the world will give you hours worth of free lecture on why a Process (with a capital 'P') is vital to your project.

Why they do this can be best explained with the whole idea of perception of control called the 'control factor'; described rather articulately by Steven D. Levitt and Stephen J. Dubner  in Freaknomics. The book explains:

But fear best thrives in the present tense. That is why experts rely on it; in a world that is increasingly impatient with long-term processes, fear is a potent short-term play. Imagine that you are a government  official charged with procuring the funds to fight one of two proven killers: terrorist attacks and heart disease. Which cause do you think the members of Congress will open up the coffers for?

The likelihood of any given person being killed in a terrorist attack are infinitesimally smaller than the likelihood that the same person will clog up his arteries with fatty food and die of heart disease.

But a terrorist attack happens now; death by heart disease is some distant, quiet catastrophe. Terrorist acts lie beyond our control; french-fries do not. Just as important as the control factor is what Peter Sandman calls the dread factor. Death by terrorist attack (or mad-cow disease) is considered wholly dreadful; death by heart disease is, for some reason, not.

Obviously; the young and budding manager is more concerned about the 'Process' than he is concerned about 'hiring'. 'Change of Process' and 'Control' mechanisms happen now. Besides; the standard issues that most BDUF processes try to address are just an inherent part of software development. The chaos can hardly be eliminated.

Trying to do formalized 'Change Control' mechanism instead of embracing change and focusing on quality people; is much like trying to control terrorists when the French-fries of simple and subtle incompetence might be destroying your project right now as you read this.

Understanding the human mind has huge implications on how we run and manage our projects. Understanding three things when analyzing project failures is hugely critical:

  1. Our brain has a hard time relating to how small things; like lack of customer feedback; slightly lowered selection standards etc. can have huge impacts on the project.
  2. We are terrible risk assessors; what seems to be the most probable cause of failure for project to us; most probably; isn't.
  3. The 'control factor' can make you do stupid things and lose focus on the much bigger problems at hand.

Now; you can go there and spend thousands of man-hours and dollars defining a 'Process' (with a capital 'P'), a formal 'scope control' document, a formal 'change management' document, and a formal 'risk assessment plan' followed by a million other documents which make you feel in 'control' or you can hire a team of seriously kick ass programmers; set them lose and spend your time listening to your customers.

The complicated reasons why you were told your last project failed; probably aren't true.

With this post; all I am trying to do; dear reader; is suggest that maybe; just maybe; your project failed because of completely different reasons which were not as 'sexy'; not as 'urgent' and not has 'seemingly big' as 'A Formal Process'.

Now; you can get back to watching the CNN report on terrorism on Television as you munch on super-sized packet of french-fries and then when you get a heart attack go blame the terrorists. As absurd as that sounds; and as unlikely it is that you will do that in your real life; that is precisely what most managers do when it comes to project management.

I leave you; dear reader; with a thought worth harping on.

Go take a journey into the depths to time and try to figure out why; any project that you may have been a part of or you may have witnessed failing; failed.

This time; for a change; try to be completely honest to yourself.

Maybe the real reasons for the project failure were not all that complicated after all.

Remember - behind every failed project are reasons which are simple and straight forward; sometimes so simple that our brain has a hard time comprehending them.

posted on Thursday, July 09, 2009 11:46:24 PM UTC  #    Comments [0] Trackback
Posted on: Tuesday, July 07, 2009

With only three visitors; my mom, me and you dear reader; this blog is a highly unlikely target for threats and intimidation. Having said that; what I often have a problem with; is the fact that; every now and then; I find myself defending my ideas from countless seemingly harmless attacks of Bozoism. The count of these isolated incidences seem to be slowly creeping up with every passing month.

While I completely believe in having strong opinions which are weekly held and the idea of having direct open arguments; it is when these arguments become completely illogical, baseless and turn into personal attacks; they start stressing you out emotionally.

Given all the incidents, emails, conversations, discussions and a few flame-wars that I've witnessed in the last one month I think it's time to wear the gloves and take up a stance that is both defensive and aggressive when it comes to the ideas and opinions expressed on this blog.

This post is about building a few of these psychological constructs that allow me to take that aggressive stance but then switch over to a defensive mode and escape without getting burnt when the flame-wars begin.

Acts Of Bozoism

When I started this blog; and started writing about my thoughts on software development; the idea was to turn my personal experiences and random thoughts into a coherent stream of ideas that others can connect to.

Doing that; has been fun.

It has taught me more than I ever hoped to learn and introduced me to a small number of really smart people I feel lucky to have known. The very start of this blog is an interesting story of me meeting and interacting with a bunch of really smart programmers; that I would have never had the opportunity to work with otherwise. I should probably do a separate post on that story sometime later.

To be honest; the tiny little blog with a small readership; has even brought me professional opportunities which I humbly and politely turned down. This was something I hardly expected could happen. Even though I write for none of these benefits; getting these as a free bonus has been a fun experience overall.

Having said that; lately; I've also started realizing that the act of turning your ideas into something that you can ship out to the world; gives any anonymous bozo out there the right to email you and pass random judgments on not just your work; but your thought process and even your way of life.

This post is supposed to give me some psychological constructs to dodge these random acts of Bozoism.

The Argument Continues

Besides the random acts of Bozoism; another form of argument that I am starting to have serious questions on; is the perfectly-logical-but-never-ending-type.

This is the kind where someone starts a discussion around a seamlessly harmless topic like:

'Hey Pops; do you think we should have detailed project plan for our project?'.

That's when you explain how utterly meaningless and over-rated the whole idea of project-plans is.

'Yes; but you know; this project is different; it's huge; we're building an enterprise system.' --- you are told.

Yes; we've all seen that horse-shit before.

You try to explain that; but it hardly helps.

It just results in another 'Yes-but' argument.

Now; don't get me wrong; there is absolutely nothing wrong with 'Yes-But' discussions. It is just that; when they cross thirty emails back and forth; or five hours of conversation in a cafe; without any clear indicating of coming to an end that they start stressing you out; mentally and emotionally.

You want to help the other person. You want to influence him; which is why you decided to participate in the discussion in the first place.

Having said that; it's when the 'Yes-But' discussions start stressing you out and you find yourself defending your ideas; you realize; that maybe the other person wasn't looking for help. Maybe he was looking for confirmation of his own ideas. This is when you realize that; maybe his ideas mean to him what your ideas mean to you.

That's when you realize that maybe; having a formal Microsoft Project Plan is as important to him as having kick ass developers in your team is important to you.

He is just not ready to throw his project plan out of the window yet.

Put simply; that's when you realize that maybe this isn't just a friendly battle of really strong opinions weekly held; it's a completely different thought process; a different core value or totally different way of life.

When this happens you want to give the person due respect for having a different opinion; wish him luck with his thought process and find an escape route to get out without getting burnt mentally or emotionally.

Besides the random acts of Bozoism; this post is supposed to give me some psychological constructs to end the 'Yes-But' arguments which otherwise have a tendency to continue and end up causing everyone involved a lot of stress.

Twitter Tags To The Rescue.

For all those of you who have been watching my twitter account (@Thousandtyone) activity; I am clearly becoming much more alive and involved at twitter. One thing I find really amusing about twitter is the whole idea of Twitter-Hash-Tags.

The whole embedding of Hash-Tags in Hundred-And-Forty characters is such an amusing idea that we would all be so much happier if; besides using it in twitter; we used the same approach in our lives.

Going forward; dear reader; I would like to propose the use of a few Hash-Tags which I will be using in verbal discussions; emails; twitter and sometimes even comments of this blog.

Put simply; these tags are supposed to provide you ammunition against random acts of Bozoism and Yes-But arguments and allow you to dodge them peacefully without get burnt in a flame-war. 

Lets talk about these tags.

End Of Bozoism - #EOB

If you find this tag embedded in an email; a comment or a twitter message that I send to you; this is my humble way to tell you that I think the argument is turning into a personal attack or a flame-war and that I am pulling out.

When this happens; you are free to continue to flame me; however; you will not hear back from me on the topic.

As far as I am concerned; even if I have arguments to present and more logical thoughts to discuss --- I am done.

End Of Argument - #EOA

If you find me embedding this tag in an email; a comment or a twitter discussion this is my humble way of telling you that the discussion is perfectly logical and that I am loving the ideas and opinions presented.

Having said that; I do not agree with them.

Yes; I do have some more logical arguments; but If you disagree with my ideas with points presented so far; it is highly unlikely that presenting more logical arguments will help.

The discussion has turned into a Never-Ending-Yes-But-Discussion where both of us seem to have not just different opinions but a completely different thought process or completely different set of core values and continuing the discussion on this topic; in all probabilities will not bring us to a conclusion.

I respect your ideas and I hope you respect mine.

You are free to continue the discussion and present more of your ideas but you will not be hearing from me on this discussion even if I may be tempted to present just one more 'Yes-But' argument from my side.

When I include this tag; I'm just saying; as far as this discussion is concerned --- I am done.

Peace.

Alternately; I will also be using the End-Of-Yes-But-Discussion (#EOYBD) which means the same thing.

The Real Intent of These Hash-Tags

While #EOB, #EOA or #EOYBD sound rude the very first time you hear them; but I assure you dear reader; they are not. The intention here is not to prove that the other person is wrong; or too stupid to argue with. The intention is to give him due respect for this thoughts; acknowledge that there is a difference of opinion on one topic; that we can let the difference of opinion stay and get along really well by talking about other areas where we tend to agree more.

You're Welcome To Use Them Too

Going forward; every time I see myself getting into a argument that seems to be going nowhere or when the situation demands; I might be using these tags. You; dear reader; are free to use them too.

I am hoping that these tags allow you to hugely lower the need that you feel to indulge in discussions and arguments; specially when they become emotionally stressful; mentally tiring or seem to be having no definite end.

Go ahead; fell free to use them in your e-mails; twitter discussions; blog comments and any other arguments from which you want to back out; and quit by wishing others 'Best-Of-Luck'.

Go use them and have a stress free online existence.

I wish you good luck and just in case; if you do not agree with the whole idea of creating these twitter hash-tags; here is all I can say:

#EOA.

Peace.

I wish you good luck.

posted on Tuesday, July 07, 2009 10:14:05 PM UTC  #    Comments [3] Trackback
Posted on: Friday, July 03, 2009

Screen And Pick People For Your Team Like Your Professional Life Depends On It.

A very senior manager at Multiplitaxion Inc, has picked a few candidates from the cream colleges out there based on IQ tests and Math questions. He expects me to on-board them on my team and begin their training.

I am looking at his condescending eyes as I speak the unspeakable - "I'll need to interview them again before they join my team. Not all will qualify."

Suddenly I find myself involved in an argument where I'm being asked if I feel that the selection criteria of Multiplitaxion Inc isn't good enough.

Breathe --- I tell myself.

My professional career as a manager at Multiplitaxion Inc, depends on who works on my team and who doesn't.

This is one thing where intimidation and pressure techniques will not work easily. 

No-one is joining my team; not till they give another interview and pass the team's selection criteria. Not till they convince me that they 'fit' and that they have at-least one super-power.

Of-course; they are all 'good' --- I am sure some even smarter than I am; but the question that is on my head is different.

How many of them can clear the litmus tests? --- I find myself thinking aloud.

The Litmus Tests

During the course of working with multiple teams which worked on some decently interesting products; we came out with a set of litmus tests.

Before we go ahead with the whole idea of litmus tests; it is hugely important; dear reader; that you know and understand one dirty little secret of recruiting genuine builders.

This is big.

So big that most managers go into denial when they are told this secret of recruitment.

Steve Yegge; explains this deep dark secret of recruiting genuine builders with true competence in his post on Smart-And-Getting-Things-Done. He explains:

The second prong, that of the ability to recognize true competence, has major ramifications when we conduct interviews. That's what Joel was writing about in Smart and Gets Things Done, you know: conducting technical interviews.

How do you hire someone who's smarter than you? How do you tell if someone's smarter than you?

This is a problem I've thought about, over nearly twenty years of interviewing, and it appears that the answer is: you can't. You just have to get lucky.

So you can go out there; 'formalize' your interview process; conduct five rounds of interviews; check all the past experiences, educational background and take all the IQ tests you want but if interviews are your only means of selection; chances are; that if you are not lucky; you can land up with a hardcore whiner.

Now that you know you cannot pick the most genuine of builders without getting lucky; the best approach; to take; dear reader; is to eliminate as many whiners and the assholes as possible and throw them out of the pool before you get yourself blind-folded and throw the dart.

The more whiners you have been able to weed out before you take your pick; the higher your chances of picking the genuine builders will be.

This is precisely where the litmus tests of recruitment come in.

If you really want to understand what Litmus Tests are take a look at some out there. A very famous example of a litmus test for programming logic is the famous Fizz-Buzz example illustrated at ImranOnTech.com. Imran explains:

So I set out to develop questions that can identify this kind of developer and came up with a class of questions I call "FizzBuzz Questions" named after a game children often play (or are made to play) in schools in the UK. An example of a Fizz-Buzz question is the following:

Write a program that prints the numbers from 1 to 100. But for multiples of three print "Fizz" instead of the number and for the multiples of five print "Buzz". For numbers which are multiples of both three and five print "FizzBuzz".

Most good programmers should be able to write out on paper a program which does this in a under a couple of minutes. Want to know something scary? The majority of comp sci graduates can't. I've also seen self-proclaimed senior programmers take more than 10-15 minutes to write a solution.

While FizzBuzz questions act as a good litmus test for programming logic; multiple other litmus tests exist which can help you cover areas ranging from design; testing to general work interest and enthusiasm. Here are some examples of litmus test questions that you; dear reader; can use out of the box to access the overall technical competence, approach and attitude of the candidate.

Tell me any three technical questions that you can answer and then answer them.

Is the candidate lost; can he think of three questions he can answer confidently. Does he stick to simplicity or does he pick a complicated set of questions to impress you and then ends up blowing it. Based on the questions candidates pick; probe deeper and you know who not to hire.

Talk about three of your strengths and three of your weaknesses.

Most candidates when asked these questions describe their strengths rather articulately but come up with ridiculously stupid and artificial weaknesses; the I-cannot-lie weakness being the stupidest example. When you cannot talk about your weaknesses openly it just tells me that either you haven't done any soul-searching what so ever in your career; or you are a blame driven asshole who points a finger at others every time the sky starts falling.

Talk about one project where you were hugely successful and one where you failed miserably.

Any candidate who tells you that he hasn't ever failed falls in either one or all of these categories:

  1. He has never taken a chance and has always remained in the realms of mediocrity.
  2. He is a compulsive liar.
  3. He goes in denial mode every time he encounters a failure. Chances are that he loops in the infinite loop of failure all the time.

Failures in your professional life are just as important successes. After all if you haven't had seriously colossal fu@#k-ups and failures chances are; that you haven't learnt enough and that you're not going to be successful.   

The Thing About Litmus Tests.

"Ok Pops. I get the idea." --- you say.

Good.

Now you can go out there and create a few of your very own litmus tests. The one thing to remember about Litmus tests is that they are not supposed to help you pick the genuine builders for hiring. All they are supposed to do is weed the whiners out. Put simply; the fizz-buzz question; for example; will not tell you if a candidate is a good programmer; but it'll tell you if he is a bad one.

Go prepare your own set of litmus tests that are based on your selection criteria and weed out as many whiners as you can. Then take a chance and hope that you get lucky.

I wish you good luck.

What do you do to weed out whiners and pick genuine builders who; if left alone will automatically create remarkable work and play environments?

How many times have you been successful in picking genuine builders and how many times have you failed?

What litmus test questions do you use while interviewing candidates, dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, July 03, 2009 9:26:24 PM UTC  #    Comments [0] Trackback
Posted on: Thursday, July 02, 2009

Hiring - Where It All Begins And Ends.

Recruitment Managers at Multiplitaxion Inc, look at me like I am an alien talking a different language all together. I've interviewed a hundred people; rejected all of them and have proven beyond doubt that there is something wrong with my eyes and scanning abilities.

All hundred of the candidates interviewed cannot be idiots after all.

Or can they?

Sadly enough no one out of those hundred candidates seemed to fit the criteria of people I would love to work with or even closely match people I was already working with.

'If you take this approach we are never going to be able to hire anyone.' --- I am told.

A subtle nudge that is supposed to tell you that it's OK to lower your criteria and pick the best from what you are getting. We would then go out and make a big noise about hiring the best of the employees.

That is exactly what most organizations do.

Put simply; this is one phenomenon Joel Spolsky describes rather elegantly in his post on hiring the best. Joel explains:

Now, when you get those 200 resumes, and hire the best person from the top 200, does that mean you're hiring the top 0.5%?

"Maybe."

No. You're not. Think about what happens to the other 199 that you didn't hire.

They go look for another job.

That means, in this horribly simplified universe, that the entire world could consist of 1,000,000 programmers, of whom the worst 199 keep applying for every job and never getting them, but the best 999,801 always get jobs as soon as they apply for one.

So every time a job is listed the 199 losers apply, as usual, and one guy from the pool of 999,801 applies, and he gets the job, of course, because he's the best, and now, in this contrived example, every employer thinks they're getting the top 0.5% when they're actually getting the top 99.9801%.

In the same article Joel also introduces you to the notion that genuine builders are not really going to be sending out their resumes and applying for a job:

In fact, one thing I have noticed is that the people who I consider to be good software developers barely ever apply for jobs at all. I know lots of great people who took a summer internship on a whim and then got permanent offers. They only ever applied for one or two jobs in their lives.

On the other hand there are people out there who appear to be applying to every job on Monster.com. I'm not kidding. They spam their resume to hundreds or thousands of employers.

A lot of times I can see this because there are actually hundreds of "job" aliases in the "To:" line of their email. (Some evil part of me wants to "reply-to-all" the rejection note I send them, but I usually overcome the urge).

What Joel is doing is pushing the idea of reaching out to really smart college interns and hiring them before they get a job opportunity anywhere else.

He is also pushing the idea that in case of genuine builder it is often your organization that might have to approach and quite literally beg them to join. Waiting for the resumes to show up in your inbox is not going to work. Neither is looking out for resumes on job sites going to be a very effective technique.

In multiple organizations around the world I've seen selection criteria come down merely by the virtue of the fact that a hundred candidates have been interviewed and none have been selected. When you cross the magical figure of hundred or more; suddenly; panic strikes. This is when organizations go out there and hire the 'best' out of the pool of idiots they interview.

Having your selection criteria crystal clear and not compromising on it is the first step to hiring a team of seriously kick-ass builders. Of-course Recruitment managers; and teams responsible for hiring candidates; are supposed to pressure you to go out and hire from the bucket of mediocre idiots that are being thrown your way. Providing these gentle nudges is a part of their job.

Most recruitment professionals and placement consultants are evaluated by the number of people that they place. It is therefore no surprise that the expert in them want you to lower your criteria. Most organizations out there actually have a whiner recruitment plan so they want you to lower your criteria as well.

Your job on the other hand is simple --- don't panic.

Hiring people who you are not fully satisfied with is your sure shot step to creating an environment that needs to be managed and anything that needs to be managed actively does not sustain itself in the long run.

Whatever it is that you do; don't panic; don't compromise.

I see multiple versions of the whole 'talented guys are limited'; 'we cannot be hiring all rock-stars'; 'we will never be able to hire at this rate'; arguments being thrown by multiple individuals and organization. Any organization that knows anything about software development turns a deaf ear to these arguments. Steve Jobs; for example; explains the process of hiring and how painful it can be rather articulately in his interview at business week:

Yes, it is. We've interviewed people where nine out of ten employees thought the candidate was terrific, one employee really had a problem with the candidate, and therefore we didn't hire him. The process is very hard, very time-consuming, and can lead to real problems if not managed right. But it's a very good way, all in all.

Most Recruitment professionals will frown when they read this. Steve Jobs; on the other hand; also has a reaction to the argument of managers and organizations not having the time to recruit people at this speed; which he describes rather articulately in the same interview with business week. He explains:

I disagree totally. I think it's the most important job. Assume you're by yourself in a startup and you want a partner. You'd take a lot of time finding the partner, right? He would be half of your company.

Why should you take any less time finding a third of your company or a fourth of your company or a fifth of your company? When you're in a startup, the first ten people will determine whether the company succeeds or not. Each is 10 percent of the company.

So why wouldn't you take as much time as necessary to find all the A players? If three were not so great, why would you want a company where 30 percent of your people are not so great? A small company depends on great people much more than a big company does.

Remember; of all the things that you are going to do to build a genuinely awesome work and play environment where builders thrive and flourish; recruitment is the most important.

It is so important I could quite literally do a complete book on it; but the whole point here is rather simple --- recognize the importance of hiring the right people; have a clear criteria for the team and whatever it is that you do; do *not* compromise on the people you hire.

If you can do that; most of the great work and build environment is pretty much going to happen automatically. If you don't you have lost the battle before it even begins.

Taking the simple approach of We-have-to-live-with-what-we-get does not cut it. All this approach does is create an army of whiners; faster than you know it.

What is your interview to ratio of candidates selected to the number of candidates rejected?

How many times have you been pressured or gently nudged; to settle for less when it comes to selecting candidates for your team?

How many times have you given in to the pressure, dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Thursday, July 02, 2009 10:02:18 PM UTC  #    Comments [1] Trackback
Posted on: Tuesday, June 30, 2009

One of the thing that fascinates me is an environment and the vibe that I get from an organization when I walk into it.

As a consultant I've worked at countless client offices around the world. During this period of my life as a consultant I have seen a few environments that are capable of housing genuine builders and giving them room to maneuver; thrive and flourish. I've also seen a few environments that would make a genuine builder uncomfortable to an extent that he runs and never comes back.

The fact of life however; is that most environments fall somewhere in the middle. Smack in the realms of mediocrity which is good enough to get your work-at-hand done but not cross the chasm of innovation and build something that is genuinely remarkable.

This is why most software companies; irrespective of where they are located hardly do anything which makes big or small dents in the universe.

When I talk about your organizational 'environment' I'm not just talking about how your office looks; how big it is; or what your decor looks like.

Environment is more a state-of-mind; a reflection of your organization's personality.

From the very first vibe that you get when you walk into an organization to the feeling that you develop for the organization after working there for a couple of months --- that's what I like to call your work environment.

That is exactly what I've been interested in observing for quite some time.

Observe a wide range of organizations long enough and you can't help but ask a few simple questions:

  1. Why do some environments have the best of the builders; while others struggle to find even decently good candidates?
  2. Why are some organizations able to make really big dents in the universe; while others are unable to make even a tiny dents on their own backyards?
  3. Why do some organizations need teams of just three builders to change the world; while others find it hard to survive even with armies of consultants?
  4. Why do some organizations have builders sticking around year after year; while others struggle to keep their revolving doors from stopping for sometime?
  5. Why do some organizations have style; finance and brand loyalty; while others are just cheap body shops selling cheap brainless bodies?

These are questions; most managers and organizations; have been trying to answer for a very long time. The answers I believe lie in observing some of these teams and organizations very-very closely. 

Everything you will be reading in this section of this book comes from an exercise which involves taking three simple steps:

  1. Studying companies that are successful and observing individuals who have been able to made a big dent in the universe.
  2. Observing the organizations that are getting it wrong and trying to figure out why they are going wrong.
  3. Trying to figure out what is so hugely different between these two organizations or should we just say --- trying to figure out what's wrong in the underlying approach of the two organizations.

Google is often regarded as the holy grail of software development world. It is one company that has undoubtedly changed the face of the world and how we interact with the internet. 

Stories, articles and videos of the great work environment at Google are littered all over the bathroom walls of the internet.

CEO's; CTOs and Vice Presidents look at these stories, videos or pictures littered all over the place and cringe at the mere thought of spending millions in trying to build environments which can compete with Google environments.

The safe line of defense you hear these folks speaking is --- 'We're not Google'.

Now that is one line I've heard from friends, acquaintances and sometimes even professionals in offices of the clients I have worked with.

If you've said this before; I've got to be completely honest with you dear reader and give you a little secret you can use.

Ready?

You do not have to be Google.

In fact; you should strive really hard to see to it that you do not become Google.

The Google element of charm and surprise is  taken. It's old. Trying to mimic Google is going to get you nowhere. 

As a matter of fact; trying to mimic any work environment is stupidity at its height.

When I say that; I also mean that trying to mimic the typical-factory-floor model of how people do stuff in 'big companies' and 'body shops' is also something you might also have to consider stopping immediately.

What you need to do is think and come up with ideas that will work in your organization.

Creating work environments for builders is easy. Whether you are a CEO; a Vice President; a Manager; a Programmer or just another employee; I am here to tell you; dear reader; that you can make a difference in the overall thought process of the organization and the overall work environment by making small changes at your very own personal end.

What I intend to do in this section of this book; dear reader; is show you how easy it is to create an environment where builders can not just thrive; flourish and grow but also feel proud enough to spread the word and attract other genuine builders to join in.

It goes without saying that as we move along I will be expressing my ideas and proving my points through the act of story-telling.

The intention here is not to try and preach the list of 'N' things they can do to create awesome work environments.

I wish it was that easy as that and I wish I had the list of those 'N' things but I am really sorry; I don't.

When it comes to creating the best of environments I personally believe that there is no one right answer. My intention here is to give you an insight into the builders mind and what makes a builder happy; motivated and productive not just to stick around but to rope in other builders he knows.

At the very grass-roots level; creating an environment of this sort requires three fundamental things:

  1. Time.
  2. Thinking like a true builder and having genuine empathy for your employees. 
  3. Common sense.

That's easy Pops --- you say. Well personally I believe that getting your organization to genuinely adapt to these three simple bullet-points is going to be the hardest thing you might every do in your current job.

During the course of this book we'll look at some obvious common sense driven aspects most organizations; managers and HR professionals seem to miss out on completely. We will also talk about a few things everyone sees but no-one cares about; even when some of these things are hugely important.

Before we start with these stories in the posts that follow; lets end this one with three simple questions for you to think about.

Do you look forward to going to office on a Monday morning?

How would you rate your work environment on a scale of one-to-ten?

Is your organization even interested in collecting your rating and then acting on it, dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Tuesday, June 30, 2009 10:29:47 PM UTC  #    Comments [2] Trackback
Posted on: Thursday, June 25, 2009

Selfish, Lazy And Not Big On Being Ethical.

I'm the Frankenstein's monster.

I'm talking about downloading office space trailers from you-tube using the office bandwidth.

A 'Few Good Men' working for the best interest of the organization stare at me like I've just dropped a stinking dead carcass in a meeting room.

"But that is not very ethical" --- says someone.

This is it.

The moment when the room fades into the grayness and you can clearly see the white differently from the black.

This is when I am hit by an instant flash of lighting.

I know exactly what I want from the candidates I interview to join my team. Besides, technical competence and a truck load of qualities I already talked about in this book; I am going to pick my builders based on three simple additional qualities:

  1. Laziness.
  2. Selfishness.
  3. Does not bitch about ethics.

Of-course; I know you're knitting your brows already. I know I owe an explanation to what I just said. So; let's get on with the explanations.

Get Me Someone Who Is Lazy.

I'm staring in awe at Fred as he demonstrates his sort-able grid view. He spent months building it. He is flexing his engineering mussels. He is one proud hard working builder.

I'm sorry.

I would prefer someone lazier.

Someone who would just go out there and... buy a sort-able grid.

Honestly.

I have no problems with you building stuff; but going out there and building the thousandth sort-able grid isn't my idea of innovation --- unless of course you are in the business of building grid views.

If you're not you might consider not flexing your engineering mussels of heroism and you might consider buying that freaking grid-view out there.

Having said that; genuine builders love the idea of building stuff. At work; when we landed up with an application needing fifty reports we decided to get lazy and build an ad-hoc reporting system which would allow the end-users to do their own reporting.

Genuine innovation doesn't happen by building the same grid view, reports or CRUD application a thousand times over.

It happens by indulging in the act smart laziness.

Get Me Someone Who is Selfish.

At work my every single day revolves around my selfish interest which over a period of time has co-incidentally intertwined really well with my organizational interest.

When that happens and interests intertwine builders stick around. 

During my days as a young and budding engineer; I was conducting three trainings a week on topics ranging from .NET to usability. Even today I try my best to conduct regular trainings at work.

Anyone who tells you that he is conducting these trainings or knowledge sharing sessions for the best interest of the organization is giving you a truck load of horse shit in it's rawest form.

I conduct trainings because:

  1. I get to learn new things which I am going to train others on.
  2. I get better at communication.
  3. I get to flex my engineer mussel and show-off how smart I am.

Training; is just an example. I pick it because conducting a knowledge sharing session seems like the most selfless of acts. I am here, dear reader, to tell you that it isn't.

Nothing is. 

Builders don't work under the false pretence of doing a favor to the organization or working for the best interest of the organization.

Anyone who does that is a hardcore whiner.

Make no mistakes.

Every single genuine builder out there who is worth his salt; is going to work for his very own selfish interest.

Organizations that align themselves to the best interests or their genuine-and-totally-selfish-builders; win.

The famous twenty percent time at Google is just one over hyped example of this happing in the real life.

There are tons of others out there.

Keep your eyes open and you can come up with your very own remarkable ways of taking the most selfish interest of your builders and aligning them with the interest of your organization.

Try to make your builders work for the best interest of your organization and you will end up doing is indulge in the act of sending your organization down the boring road of mediocrity.

Someone Who Does Not Bitch About Ethics.

Genuine builders tend to love what they do.

Besides their life long passion for their work and a consistent commitment; most builders that I have worked with are amazing fun loving people who do crazy fun loving things.

Walk into a software 'thinking' development shop and it isn't unusual to see a few programmers with their head buried deep in their monitor; their ears stuffed with head-phone.

Quite a few of the builders I have worked with have varied kinds of music they like to code by.

Others have a hilarious collection of funny videos.

Some of into Sudoku.

Others are into X-Box games.

In fact; even when it comes to software development and work; most seriously kick-ass developers live outside their cubical.

If you're going to be constantly bitching about how much of your time and bandwidth usage is for work and how much of it is for personal reasons like fun and growth; software development isn't for you.

What you need to do is get a job at the car-factory-work-shop or an Indian-call-center.

Now stop hitting that stupid ALT+TAB window and switching from you-tube to the code window every time your manager passes by.

Try not to obsess about what is ethical and what isn't. Instead; consider having a blast and shipping some seriously kick-ass innovation.

Seriously.

At the end of the day it's like this --- those who bitch the most about ethics; have very little of it.

Now; go hire a few selfish programmers who do not constantly bitch about the best interest of the organization or ethical code of conduct. All they focus on is just their very own selfish interest of growth; building stuff and having a good time doing that.

I wish you good luck.

Oh; and one more thing --- if you are reading this from your office don't forget to watch the office space trailer on you-tube using your company bandwidth --- parts of the movie are what I call utterly hilarious.

How many times do you hear big words like, right, wrong, discipline, ethical and unethical in your workplace?

How many times does your organization expect you to work for the best interest of the organization and not give a shit about your own interests?

Does your organization work on factory rules and no trust; or is it an environment where builders are genuinely empowered, dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Thursday, June 25, 2009 9:39:21 PM UTC  #    Comments [2] Trackback
Posted on: Tuesday, June 23, 2009

I'm Just Working For The Best Interest Of The Organization.

"All I am trying to do is work for the best interest of the organization."

The next time you hear those words --- run.

As fast as you can.

And whatever it is that you do --- Don't look back.

If you just heard those words from someone you know; with all due respect to this acquaintance of yours; chances are high that he is either of these three:

  1. A certified prick who utterly and thoroughly enjoys being an asshole. 
  2. A Hardcore whiner who is also a self proclaimed well wisher of the organization.
  3. A cheap Indian programmer who in all probabilities is working off a cheap Indian outsourcing shop.

"But Pops; you are hyping this up" --- you say.

No I'm not.

I know what I am talking about.

Trust me.

I've heard these words countless number of times and every single time I've heard them; the bearer of these words have fallen in one of these three categories.

Still knitting your brows; are you?

It's time you take you back in the depths of time and dig from ages that have rolled behind a few stories from the war fronts of software development; that shall illustrate my point dear reader.

Flashback time!

I Removed The Reporting Server

Multiplitaxion Inc, is a new client of ours; their product is struggling to cope up with the traffic during afternoons. We have been called in as a consulting organization to figure out how we can speed up the performance of the application.

The programmers are introducing level-2 caching into the system; the DBA is tweaking the stored procedures.

We've spent days analyzing at our end. Our findings are simple --- the afternoon loads are heavy; the system could do with another reporting server having a specialized reporting database.

Here is the creepy part however --- buried deep down in the physical architecture diagram of the system created a couple of years ago; is a box called 'reporting server' which stands proud and tall. 

Confused; we decide to interview the entire team including the Database Administrator who is working on tweaking the stored procedures.

'Oh the reporting server --- that was costing us a lot of money. We got rid of it. We can get this to work by tweaking the stored procedures'. --- it is the database administrator speaking.

Silence.

Sounds of crickets chirping.

I turn around to the CTO; suspecting the highest in the pecking order of usually being the asshole in these cases; throw a simple question --- 'Did you ask them to do this?'

The answer is a cold --- 'No'.

More silence.

More crickets chirping.

"What? I still feel we can run without spending money on the reporting server. All we need to do is tweak the stored procedures" --- we are hearing the database administrator speak; but a very few people in the room understand the language he is speaking.

You have to give the guy some credit.

After all; he was indeed working for the best interest of the organization.

We're just trying to make sure we utilize the company bandwidth for official purposes only

I can't seem to figure out how I got here.

I am staring at a snickering system administrator who finds the idea of downloading videos from you-tube using office bandwidth as grossly unethical and amusing at the same time.

There is one little problem however; the video is a hilariously funny and inspirational; I want to share with my team.

"We're just trying to make sure we utilize the company bandwidth for official purposes" --- I am told.

I hail to the self proclaimed well wishers of the organization.

Then I buckle up to take this further with people in the organization who have the enough power and common sense to understand.

We can reward him by giving him more challenges.

Jack is working hard. Seriously hard.

We've been struggling to get this release out and Jack has been up practically all weekend.

The project has just shipped; the sky is blue and the birds are singing.

His project manager gives him a complementary leave to rest and heal from the bruises of a difficult war. 

In the copy-list of the email are a few others higher up in the pecking order.

Someone responds --- this gentleman who is responding after removing Jack's email from the trail; thinks that we cannot be giving off complementary holidays as easily as this. He proposes:

  1. Cancel Jacks complementary holiday.
  2. Offer him more 'grow opportunity' by giving him more challenges; spelt ---- "more work".
  3. We all collectively work for the best interest of the organization even when rewarding team-members.

I'm not directly connected or concerned.

I decide to shut the fu@#k up.

The Late Marker And The Break Time Calculator

Fred is interviewing with us. Here are his achievements besides work:

  1. Suggested development of a 'late marker' that marks employees late if they get in after nine in the morning. Three late markers results in a leave getting deducted.
  2. Suggested development of a break time calculator that is going to track the number of minutes individuals spend during their break time.
  3. Developed the perfect Frankenstein style - 'employee cloning system' and cloned a couple of hundred micro management zombies.

Well actually, he didn't mention the third one; but while he was at it; working for the best interest of the organization; he might as well have designed a Frankenstein Employee Cloning system used to clone a few micro-management-zombies like himself.

Self Proclaimed Moral Police

I could go on with the stories for ever. In fact, given my observations I could probably write a dedicate hilarious book on this but it would mostly end up having a Daily-WTF flavor to it. 

For the time being however; let's not even go there.

Lets focus on the point here.

Every organization that I've visited, worked for, worked with, built a project for or observed has a few whiners who like to think of themselves as the 'well wishers of the organization'. People who have a 'job' of defending the organization from the scum of other employees.

I like to call them the 'self proclaimed moral police'.

They individuals; will try to protect every single square inch of the organization they can; starting from the internet bandwidth; the disk space on individual hard disk of developers; to printer paper by monitoring the number of printouts each developer is firing on a daily basis.

After observing countless number of these guys; screwing organizational morale; in my career; if there was one thing I learnt; it was how to spot these whiners in an interview; keep them out of your team and keep then out of the organization.

Spotting them is easy.

All you have to do is keep your ears open and look out for the golden words --- "for the best interest of the organization".

And when you hear those words, run.

As fast as you can.

Whatever you do --- Don't look back.

How many Daily-WTF-type examples under the name of the best-interest-of-the-organization have you witnessed?

How many whining self proclaimed moral police have you had a pleasure of working with?

How many of these decisions taken for the best-interest-of-the-organization ultimately ended up fu@#king up the organizational morale and eventually nudging it in the realms of mediocrity where cheap Indian body shops haggling over per-hour-billing-rates reside; dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Tuesday, June 23, 2009 8:59:22 PM UTC  #    Comments [2] Trackback
Posted on: Friday, June 19, 2009

What You Think

Don't be a bullshit passer.

If you are having a bad day as a manager --- deal with it --- without passing on the badness to your team.

'Yeah Pops' --- you say --- 'easier said then done. I've got a angry client or a lose tempered vice president to report to and he wants the application done before the road show. What do you propose I do?'

Surprise.

That is supposed to be a question you needed to answer the day you accepted your promotions and became a manager.

That's when your team expected you to know what to do in situations of this sort.

Having said that, the real question here isn't about what you do.

It is about what you 'think'.

Do you 'think' what your client or your vice president expects out of your team is justified or is he just being an asshole?

If he is just being an asshole for the sake of being one; your job is simple. What you hear in these meetings where the vice president or your client decided to throw a truck load to shit on your backyard; should *not* translate into action items or an unrealistic dead-line for your team.

How you do it is your seriously problem.

Look at him in the eye. Talk to him. Breathe. Convince him. Beg. Weave a story. Tell him what the word 'quality' means. Tell him why you are different from a million Indian programmers sitting in funny body shops running out of India. Kidnap his child.

I don't care.

Ok; the kidnap-his-child bit was a joke that wasn't even very funny --- but you get the idea. 

If you 'think' he is being unrealistic and acting like a prick --- don't let the shit run downhill.

Just because you are stuck with a bad boss or a bad client doesn't mean that your team needs to open their IDE and start slamming their keyboards to write some code that will get the application to crash on the day of the big road show.

If you 'think' however that your boss or your client is acting like an asshole but what he expects out of your team is realistic and what he wants will genuinely help the product --- you and your team need to open that development environment.

Long story short, whether your team opens the IDE or not should *cannot* be decided by how big an asshole your manager is.

It has to depend on what you 'think' about the requirements at hand.

Remember; before you go up to your team --- think.

Do you think what he is telling you to do is going to help the product?

Have you decided that you are going to ask your team to open that development environment and write some code?

Wait.

Before you ask them to do that; you've got a few humbling exercises you need to indulge in.

Get Naked.

The --- "we're working weekends because we need to get this done by Monday" --- doesn't cut it.

No, it's not 'all they need to know'.

You need strip naked.

Tell them everything. The story so far; who wants it; why does he want it; who is being the asshole; why you think it will genuinely help the product; how will it save your job; why you want them to work weekends; why you want their help. Everything.

You cannot be keeping secrets and expecting people to give you cover-fire in battles.

Remember; this is a save-our-souls signal you're sending out and you're the one who is being rescued; so get the perspective correct when you go out to 'request' your team and ask them to work weekends or push seventeen hours a day.

The getting naked part is hard.

As someone who has requested his team to work in pressured situation more than once; for years; and have been lucky to have the best of builders on my team; I can personally tell you how hard it is to get naked the first time you do it.

What I cannot do however; is teach you how you can do this without feeling a little embarrassed.

If you're going to learn how to lead a team of genuine builders; you're going to have to learn this getting-naked part; by doing it yourself.

I can't tell you exactly how to do it; but If there is one thing I can tell you; it is that bossing around and being an asshole does not work.

If We Fail No-one Gets Killed

Say it.

Mean it.

Even when you know that if it doesn't work out; the sky will fall on your head and you will be left to die under a scrap load of shit.

When you're naked your builders can sense the importance and what the stakes are. The whole idea of If-You-Are-Not-Able-To-Do-It-Someone-Is-Going-To-Get-Hurt helps no one.

If you lack insight into your builder's brain I'm going to lead you into another little secret here which is going to be a life changing moment in your profession; particularly if you are managing a team of genuine builders.

Ready?

When your genuine builders walk up to you and start a conversation around how important the task is and ask you if they 'really' have to get it done by the end of that day; they are not looking for an escape route so that they can go home and sleep with their wives. They are just telling you that they are going to pull of a serious productivity stunt here; a magic trick that might fail and if it does; they want you by their side.

They aren't looking for an escape route when they ask you if they could ship on Monday instead of Friday.

All they are looking for is a safety net; and room to maneuver.

On a subtle; subconscious and psychological level they are testing if you are in it with him.

If they fail; and get stuck; are you going to give them cover fire or are you going to turn around and run like a rat.

I've had multiple cases of Can-We-Ship-Monday on a Friday evening. Some of them have been embarrassing. Walking up to a client and apologizing isn't easy. Having said that most of them times when it has happened - I've  said "sure" - and meant it.

The result?

We've either shipped on Friday itself or we've shipped something better that the client absolutely loved on Monday.

We've technically failed more than one dead-line so far; sometimes by a day; sometimes by a couple; but here is the funny part --- the sky is still blue; it's still up there and no-one has got killed. 

Learn How To Say Sorry Followed By Thank You And Mean It Too.

Somewhere along the line; after spending countless weekends and late nights in office; I ended up telling myself that I would try my best to see to it that my team members 'can' get out of office by six thirty. If they 'want to' stick around and work --- we're good --- but they shouldn't have to.

The reason to take this stand and to try to make it possible for them to get out by six-thirty is simple; every time I get an assignment done by requesting people to stay late, push harder or work weekends, it just means this:

  1. I fuc@#ked up at planning. 
  2. I was incompetent at talking to the client or my managers and getting more time.
  3. I expected them to complement my lack on planning and incompetence with my team's added effort.

If you find yourself in this situation as a manager; remember;  pushing the idea that the sky is falling and if the team does not push harder, work late-nights or work weekends, everyone will get screwed isn't going to help.

Let's face it dear manager; you fuc#@ked up and unless you work with a team of idiots chances are that they know that it was you who fu@#ked up.

You might as well come out and say it.

Try topping that with a sorry; followed by a thank you.

Then try meaning both the sorry and the thank you.

There are multiple ways of 'meaning' it.

For me; if you usually work a holiday; it is followed by a couple of complementary day offs when you do not have work.

I usually like to top that off with a team lunch or a party that's on me; not on the organization.

It doesn't compensate for my screwing up; but it's my way of saying three things:

  1. I fuc@#ked up.
  2. I am sorry.
  3. Thanks for the rescue and the cover fire when I was stuck.

You might have your very own style of saying sorry followed by thank you; but if you aren't saying it; and then 'meaning it' using concrete actions not just words --- you're just trying to pretend you're this big highly competent manager who is making an incompetent team 'push harder' when all you are doing is being an asshole and not even knowing it.

You're what we call, a whiner; a bullshit passer and a mail server.

How many times have your team performed a rescue operation for you?

How many times have you genuinely admitted your fu@#cking up followed by a genuine thank you; not just by words but through actions?

Do you have managers for whom you would happily indulge in rescue operations; or do you just do them because you have to; dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, June 19, 2009 9:41:13 PM UTC  #    Comments [2] Trackback
Posted on: Wednesday, June 17, 2009

The Problem With Being A Bullshit Passing Whiner.

"My manager is a pompous asshole in pressure situations." --- you say.

That's a lame excuse for taking the shit and passing it over to your team when you find some on your own backyard.

Remember; organizations are all about observation.

You see, the whole act of morphing into an asshole that your boss pulled off when the sky started falling; you were watching that.

Closely.

Weren't you?

Now; just in case; if you didn't realize here is another secret.

The builders in your team; they were watching it too.

Not just watching your manager; they were watching you as well; to see how you are going to deal with the shit that your manager threw at you and which is now safely lying out on your backyard.

Unless you have observed organizations and builders at work very closely; let me turn you on to another secret you may not already know --- ready?

They expect the worst.

Your builders; I mean.

Time has taught them to expect the worst. They're prepared; waiting for you to throw the shit in their backyard and get on with your comfortable life.

You can do it right now. Take the truck load of crap --- throw it over the fence straight at their backyard and forget that the problem ever existed. Be rest assured they have both; the competency and the courage to clean up the mess for you.

There is just one tiny little problem with doing that however --- at the first act leaving the shit in their back-yard you've just disassociated yourself from the team of builders; you have just sent out a very subtle, silent It-Is-Not-My-Problem message to your team.  

Do it just a couple of times and your team will start perceiving you as a 'manager' followed by an 'outsider' --- not an integral part of the team who is support to play definite role in the larger scheme of the team dynamics. 

Do it a little more frequently and you are not even a 'manager' or an 'outsider' any more. You are now just a 'problem' that the team needs to 'deal with' --- just like hundreds of other problems they have to deal with while they indulge in the act of building stuff.

You are no longer a partner in crime.

You are this pompous prick the team needs to 'take care of' or handle.

By indulging in the mere act of passing shit from your manager to your team; you go from a team member --- a friend --- a partner in crime --- to a being a problem that the team needs to deal with; in one simple and easy step.

Of-course; there is no secret builder's meeting where they officially denounce you as a pompous prick and a problem they now need to deal with.

It all happens with silent clicks-and-ticks in the minds of builders as they observe; watch and draw their own conclusions from what they see.

As smart and sleazy as you might try to act; depending on what you might have learnt from your past experiences; be rest assured; a tightly knit team of builders will have tools and mechanisms for finding out if you're a part of the team; a genuine supporter or a random outsider who is going to run at the first sound of trouble.

During my early days at Multiplitaxion Inc, we worked with quite a few of these bull-shit passers.

We had a name for them --- we called them "mail servers"

All they did was take a flame mail from a vice president, change a few words here and there and passed the message on to the rest of the team. We did their shit cleaning for them. When the shit was cleaned up; they took our emails, added a few more words to make the message as vague as possible and passed the message along to the vice president.

During my early days at Multiplitaxion Inc, I've been with a team where we've lost track of the hours or days spent at office; we have also seen an instance where one of the individuals actually ended up having a physical nervous breakdown followed by a hospitalization; because of the amount of shit was thrown on our backyard.

Did we die?

Heck, no.

All that happened was simple --- we got stronger.

Our bonds as a team grew deeper.

As far as my life is concerned; most individuals from those times, including the builders and bullshit passers have gone their own ways.

We meet every now and then; accidently; in a cafe or a restaurant.

As strange as it might sound, even today, the presence of a colleague from an old time who happened to be a bullshit passer, in the same cafeteria or restaurant makes me feel a little uncomfortable.

On the other hand, let the restaurant, have a team member, a builder or a partner in crime and I would have changed my table faster than you can think. Before you can realize, you will see us laughing and talking about the times when we went from "we're screwed" to "we made it" --- together.

In all probabilities; you will; almost invariably see us giving each other offers to join the organizations we currently work for; because working together again; is something we look forward to.

After all, who doesn't like a partner in crime, watching over his back and giving him cover fire on the battle field especially when you are building remarkable and fun products together.

If you're a young and budding manager; who accidently landed with a team of builders; you can take all your shit and pass it over to their backyard. Be rest assured; they will clean it up for you; before you even notice. There is just one tiny consistent backside to doing this however. You will go from a manager; to a problem passer; to being the primary problem of the project in on simple step. 

The next time you are having a bad day --- remember --- if your boss is a pompous asshole -- it is not your team's problem.

Letting the shit run downhill; is clearly not a 'management style' that works; specially when you are working with a team of genuine builders.

Of-course; you're having a bad day.

Of-course the sky is failing.

Having said that; at the end of the day; if they find out the magnitude of the 'badness' of your day --- you are not a builder --- just are just a bullshit passing whiner and just one of the countless problems your builders have to deal with when they indulge in the act of building stuff.

Have you worked with a manager who expected your team to work harder by forwarding a flame mail from your boss over to your team?

Have you worked with a manager who gets a strange perverted kick in ordering your team to stay late?

Have you worked with a manager who prefers to go home and get a 'status update' in an email while the rest of the team works late night?

Have you worked with a manager who thinks that he can get more output by pushing the team harder?

Have you ever had a bad day just because your manager is having a bad day, dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Wednesday, June 17, 2009 8:29:37 PM UTC  #    Comments [2] Trackback
Posted on: Tuesday, June 16, 2009

When The Sky Is Falling.

There is something to be a said about a shitty day when things get ugly.

I'm talking about the day when the sky is failing and it is time to take a deep breath.

The day when someone in your team gets up and says --- 'we're fuc@#ked!' --- and everyone connected to the project pretends things are still fine; every single one of them realizing deep down inside; that we are in fact; badly fuc@#ked.

That's when everyone panics and the blame game begins.

This is the time to observe people in your team, your managers and yourself; closely.

Very closely.

As closely as you possibly can.

That is the time when your manager who was always a nice and friendly individual turns into a pompous asshole and your team members who were your bosom-friends turn into incompetent idiots.

Michael Lopp explains this situation rather articulately using the example of firing in his book Managing Humans. He explains:

Panic backs a person into a corner and their only means of getting out of that corner is relying on skills that have worked for them in the past. This is how a normally friendly manager can turn into a backstabbing asshole when it comes to a layoff. See, they were an asshole before; you just weren’t there to see it. If you are lucky enough to see this behavior as well as make it through the layoff, well, you learned two things. First, this guy I work for degrades to jerk when the sky falls. Second, he values me enough to keep me around. The question remains: are you going to hang around waiting for him to be a jerk to you?

At the end of the day; it isn't just about firing.

It's also not about finger pointing.

It is about the shit that was thrown into your manager's backyard, straight over his fence.

It is time to observe him closely; because what he does with the shit; to a large extent defines his character and your working relationship with him.

Given his position in the pecking order; he presumably has the keys to your professional backyard.

Is he going to add his own crap load of shit and leave it in your backyard?

Is he going to clean up his backyard himself?

Is he going to get the shit to the junkyard himself?

Are you even going to notice that he is having a bad day?

Are you going to find out the magnitude of badness of his day?

Is he just going to talk about it; or is he going to try and pass over the badness to you because he can?

If you do find out when he is having a bad day; and you can find out the magnitude of the 'badness' of his day; and you can suddenly see shit being thrown over to your backyard; it is time to rethink your relationship with your manager and your organization.

Nice Guys

Story-Time.

Flashback!

Jane has found a new job.

She seeks my advice on if she should leave the five years of roots she has developed in her tiny amazing startup; behind. She is a little reluctant about moving on to a newer environment. She is a little insecure; and rightly so.

Jane is a friend; I want to give her the best possible genuine advice I can.

"I know him personally. He is a really nice guy." --- Jane explains --- while talking about her new CEO.

I hear her talk for hours and my suggestion to her is simple. It's a suggestion I've given to a couple of other people in the past.

"Nice guy" is different from "Nice to work with" is very different from "Nice to work with the sky is falling".

Jane really needs to find out if her CEO is nice to work with when the sky starts falling; because just "nice guys" with weak spines often morph into dangerous, ugly and sometimes even political monsters when things start getting ugly.

Nice Guys Or Potential Ass-Holes Waiting To Happen.

The problem with "nice guys" is that they are dime a dozen. Another problem with nice guys is that it's easy to be "nice guy". The most critical problem with "nice guys" however, is that most of them morph into serious assholes when the sky starts falling; and when they do turn into pompous assholes none of them realize that they are turning into one.

If you are working with managers or team members who are just "nice guys" capable of morphing into assholes when the sky starts falling --- it is time to consider making a few changes.

If you have other reasons for sticking around --- the overall environment; the team you are working with; a management that understands software-development; other managers you work with; growth; whatever be your reason; it is time to take your CYA arrows out of your quiver and watch your step.

When you suddenly see a truck load of shit coming your way; be prepared to see these so-called-nice-guys on the other side of the fence; throwing the crap in your direction.

An ugly day when the sky is falling is important; because it helps you find out the 'nice-guys' who are potential assholes waiting to happen.

You may not see the complete transformation from a nice-guy to an asshole; but a slight glimpse of shrugging their responsibility; not listening; not have consideration for all the effort the team is putting in; not caring what is do-able and what is not etc. are trait-enough to tell you all you need to know. 

Nice, Nice To Work Or Nice To Work With When The Sky Starts Falling.

What differentiates a builder with spine and conviction from a gutless whiner is their reaction to fire. Tell a 'nice guy' about a fire on your project and watch him run.  Tell any genuine builder worth his salt that there's a fire on your project and he runs too --- only in a slightly different direction.

Isolate a fire incident and observe a genuine builders worth their salt run; straight in direction of the fire to rescues their team out of it.

Staying late --- just happens.

Working weekends --- give them a hint and they will show up on a Saturday morning. 

Cancelling personal commitment --- no bitching or whining. It is not even a problem.

Heated arguments with your vice president of marketing --- there is more than one person willing to bell the cat.

Defending the team even if it means taking up the blame --- sure. 

Of-course, they are having a bad day; but they are having a bad day as a team --- as partners in crime who are in it --- together.

Throw shit their way and they will blatantly and openly refuse to take it; as a team.

Ask nicely; and they will go a great length to get your project through.

Being a "nice guy" is easy.

Every whiner that I have ever worked with has been a "nice guy".

It's the "nice to work with" that is harder and the "nice to work with when sky is falling" that is the hardest. What you really need to have is a team where people who are nice to work particularly when the sky is falling; that's you know you are working with a team of genuine builders.

Builders don't make dents in the universe and change cultures by being nice guys.

They do it by being nice to work with; and above all they do it by being nice to work with when the sky starts falling.

How many nice guys go you have around you?

How many of them are nice to work with?

How frequently does your organizational sky start falling?

How many of them morph into monsters when the times are bad and the sky starts falling?

How many of them stick around to rescue the team, dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Tuesday, June 16, 2009 6:52:35 PM UTC  #    Comments [2] Trackback
Posted on: Friday, June 12, 2009

Don't Let The Bozos Grind You Down.

In my previous post we introduced you to Bozos. Bozos are individuals who out of genuine concern or an unstoppable spontaneous funny little itch want you to walk the lines they walk and remain in the realms of 'normality'. The one thing they forget however is that normal is boring. The problem in surrounding yourself with Bozos is that if you let them grind you down, they will.

Given the fact that not listening to the Bozos is such an important characteristics of genuine builders around the world, I thought it might make sense to bring to you, dear reader, a few genuine builders or amazing trouble makers on the web and present to you, their thoughts on how they deal with the Bozos trying to grind them down.

Guy Kawasaki, an evangelist, an entrepreneur and a venture capitalist, explains why you should not let the Bozos grind you down rather articulately in his video on Evangelism at Comdex:

You cannot let the bozos grind you down; because I tell you; the bozos will grind you down; especially if you have something revolutionary.

Now, I wish I could tell you that, if somebody says you'll fail it means you'll succeed. It's not that simple either; but if somebody tells you you'll fail and you listen to them and don't try, for sure you will never know.

Guy's idea is simple. Don't Listen to a Bozo and don't be one yourself. At best --- ignore the Bozos when they try to grind you down. You can literally hear the same thoughts resonate in how veteran blogger Jeff Atwood addresses the issue of Bozoism in his post dedicated to criticism of blog posts. He explains:

If you think something sucks to the extent that it's actively harming the world and you want it to go away, leaving comments to that effect is not the way. I know, because I bear the psychic scars of a million online flame-wars, dating all the way back to 300 baud dialup modems and BBSes. I've been doing this a very long time. I've seen what works, and what doesn't.

One of my favorite books as a child was the Great Brain series, the story of a family in rural Utah, set in the late 1800s. In these books, there was a strange punishment the parents doled out to their children when they seriously misbehaved. For a period of a week, or longer -- depending on the severity of the misbehavior -- nobody in the family would talk to, acknowledge, or address in any way, that particular boy.

It was called "The Silent Treatment".

This didn't seem like much of a punishment to me. In fact, as an introverted kid who loved solitary activities like computers and reading more than anything, it seemed kind of like a .. reward. I couldn't reconcile this feeling with the semi-biographical reality depicted in the books. To the Fitzgerald boys, the silent treatment was the worst possible punishment, far worse than a physical beating. They would go to incredible lengths to avoid getting the silent treatment. As punishments go, it must have been a doozy, though I couldn't quite wrap my geeky, socially maladjusted young head around exactly why.

The silent treatment was a punishment I didn't fully understand until years later in life. That's how you change the world. Not by arguing with people. Certainly not by screaming at them. You do it by ignoring them.

And if you feel strongly enough about me and what I do here, you can begin by ignoring this.

Seth Godin, a renowned marketer and author, explains the phenomenon of ignoring the Bozos and not letting them grind you down much more articulately in his post where talks about why you should ignore your critics. He explains:

If you find 100 comments on a blog post or 100 reviews of a new book or 100 tweets about you...

and two of them are negative, while 98 are positive...

which ones are you going to read first?

If you're a human being and you're telling the truth, the answer is pretty obvious: you want to know which misguided losers had nasty things to say and you want to know what they said. In fact, if we're being totally truthful, it's likely you're going to take what the critics had to say to heart.

That's a shame. The critics are never going to be happy with you, that's why they're critics. You might bore them by doing what they say... but that won't turn them into fans, it will merely encourage them to go criticize someone else.

It doesn't matter what Groucho or Elvis or Britney or any other one-name performer does or did... the critics won't be placated. Changing your act to make them happy is a fool's game.

Scott Hanselman, a veteran builder and story teller rolled into one; describes his take on Bozos trying to grind him down in one hilarious tweet that made me roll over laughing as I read it.

The tweet: --- "@shanselman I learned that some people don't like my sense of humor. Poop on those people. #standup"

Jokes aside; consider anyone out there who has shipped anything to the world --- an open source product, a paid product, a blog post, an article, an opinion --- anything. If you have or are shipping anything what-so-ever that is worth noticing, it's usually easy to Google yourself or what-ever-it-is-that-you-are-shipping and see some flames being thrown your way by random Bozos or critics out there. 

Even with this little blog that is visited by just three people, my mom, me and you dear reader, I have had my share of grinding from random criticisms here and there from both; well-wishers and random commenters.

My criticisms have raised from; simple difference of opinion from colleagues or acquaintance where someone thinks I am seeking heaven on planet earth;  to slightly personal remarks from absolute strangers where someone thinks I am soft skill retard.

Every once in a while, a couple of individuals; ranging from a well wisher to an anonymous commenter; will have a general passing remark; starting from an email or a remark on the lines of your-blog-is-becoming-boring going all the way to leaving a comment on the lines of I-am-not-going-to-read-your blog-starting-today.

To be honest, this is not about maintaining a live inventory of flames being thrown my way and linking to them.

Neither is it about how boring, stupid, odd, wearied or evil I am.

This post, dear reader, is about builders.

If there is one thing I've learnt by observing genuine builders for years; it is this --- The bozos out there are supposed to grind you down and nudge you to the safe boundaries of 'mediocrity'. Listen to them and you are going to practice safety by 'doing nothing'. After all, it's easy being a leach, shutting up and contributing nothing --- the problem with that however; is that it's boring.

This is serious stuff; you can go from a contributor trying to share his ideas, perspectives, products or stories to a non-existent non-participant just by listening a couple of Bozos. 

Most genuine builders that I have observed in my very own personal life; and the ones I've observed through their work and web presence follow three simple steps when it comes to dealing with Bozos trying to grind them down. The three steps are really simple:

  1. Ignore. 
  2. Move on.
  3. Do it anyways.

Once you've done step three and have decided to do whatever-it-is-that-you-were-doing anyways --- push a little harder than you did last time; get louder and do it in ways that are bolder than the ones you have used ever before.

If your idea or message is sufficiently strong and you have started with conviction, ignoring the Bozos is easy.

Most genuine builders do it every day of their life. They don't just ignore the Bozos; sometimes, they even listen to what the Bozos ask them not to do; and then they go out there and do just that.

You'll never be able to shut the Bozos up. What you can do however can be summed up in two simple words --- "don't listen" --- and if they go out of their way to make you listen --- "don't care".

Like most genuine builders; indulge in strong opinions weakly held; entertain all thoughts; but accept only the ones that you genuinely agree to and believe in.

I wish you good luck. 

How many examples of the Bozos trying to grind you down have you witnessed?

How many times have you proved them wrong by not listening to them?

What do you do when you encounter Bozos trying to grind you down, dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, June 12, 2009 10:12:58 PM UTC  #    Comments [0] Trackback
Posted on: Wednesday, June 10, 2009

That Is Exactly What I Want To See.

"But She is going to Fail." --- for the last hour; Fred has been on the other side of my cell phone; convincing me; wanting, expecting and demanding me to interfere and pursue Jane to use technologies out there rather than the self-made component she is planning on using for the project.

He wants to hold her hand and guide her to a safe and successful completion of the project. Jane on the other hand doesn't seem to care about safety. She doesn't seem to need any hand holding either. Offer her your hand or some safety and she shrugs.

She seems to know what she is doing.

Like a genuine builder, she is walking without a safety net of lame excuses. She is taking her own decisions; sometimes succeeding; sometimes failing; and most of the times recovering gracefully out of her failures. She has been doing a great job in the last couple of months since she was promoted. 

"Do you want to see her fail?" --- Fred questions.

I cringe.

It is a spontaneous response - "Actually, Yes; that is exactly what I want to see."

The statement is followed a long silence from the other side of the phone making me feel like I just turned into an alien with five eyes.

I explain - "She is entitled to her share of successes and failures. We need to give her a fair chance."

Long silence.

The sound of a click.

Fred is a Bozo; or at-least he is acting like one.

Builders And Bozos.

Genuine Builders don't sit around whining about external factors or giving lame excuses.

Genuine builders ship.

Continuously; shamelessly and consistently.

If there is one thing I've learnt by observing genuine builders at work and around the world it is that they have thick-skins, short-memories, the minds of a child, scarred careers which are full of new or remarkable failures and very little respect for status quo. They walk on the fringes, waiting to risk it all for remarkable results and for the sake of testing their limits along with losing their fears or insecurities.

All these qualities apart; there is yet another critical quality that forms a genuine builder.

Genuine builders know when to turn completely deaf and not give a rat's ass about what 'the crowds' in general and 'the bozos' in particular think or say.

Every dent in the universe; small or large; is an example of genuine builders gone deaf.

Builders are highly opinionated and picky when it comes to beliefs and ideas. Once the beliefs and ideas survive their idea-test however; most builders turn a deaf ear to the crowd or the bozos who tell them they should stop. From that point on they have the spine to follow their own convictions and beliefs.

If you are reading this; chances are that you have been through this moment of clarity in your project; your work or your life where you knew what you had to keep doing irrespective of what others told you to do.

From the folks at Apple refusing features in the iPod to the folks at 37Signals refusing more functionality in Project Path and all their other products, builders work by entertaining all thoughts but accepting only the ones that they want to accept.

Most builders out there are not just thick-skinned or stubborn; they often turn deaf and sometimes even rebellious to what the crowds or the bozos have to say.

Meet The Bozos

Bozos are usually your so called well-wishers.

They can be your distant relatives; your colleagues; your acquaintances; your bosses; your organization and sometimes even your clients or followers.

They mean no harm.

All they want to do; is keep themselves; and you; in the safe territories of --- mediocrity.

Writer Elizabeth Gilbert explains the phenomenon in her classic presentation at TED:

They come up to me now all worried and they say, “Aren’t you afraid? Aren’t you afraid you are never going to be able to top that? Aren’t you afraid that you are going to keep writing for your whole life and you are never again going to create a book that anybody in the world cares about at all? Ever; again?"

So, that’s reassuring, you know.

But it be worse except for that, I happen to remember that over twenty years ago when I first started telling people; when I was a teenager; that I wanted to be a writer; I was met with the same kind of; sort of fear based reaction and people would say, “Aren’t you afraid that you’re never going to have any success? Aren’t you afraid the humiliation of rejection will kill you? Aren’t you afraid that you are going to work your whole life at this craft and nothing is ever going to come of it and you are going to die on a scrap heap of broken dreams with your mouth full of bitter ash of failure?”

Long story short, Bozos want you to be 'normal', 'good' and 'safe'; just like everyone else. If you think about it Bozoism-Through-Genuine-Concern-Of-Well-Wishers dates back to pre-historic days when Little-Jack-The-Cave-Kid was living on trees with Uncle-Freddy-The-Cave-Man. That was when it was Uncle-Freddy's responsibility that Little-Jack does not do something stupid; like get down of the trees and get himself killed.

That is when Little-Jack's mistake would have ended up costing him his life and Uncle-Freddy was supposed to teach Little-Jack the 'normal' route to survival; which was to stay up on the trees.

But then a weird thing happened. Someone got down off the trees; no-body was killed and then the entire human race followed. 

Today, we live in a world where all a mistake will usually cost you is a minor slap on your self esteem and a little bit of humiliation.

In today's world your professional mistakes will usually not kill you. They will just make you stronger.

Here is the sad part however --- The Uncle-Freddy-Attitude still exists amongst the Bozos who walk your planet; in the form of distant relatives, colleagues, acquaintances, bosses, organizations, client and followers. 

Long story short; just in case you didn't look and notice already; the Bozos are all around you.

Bozos In Action - Gentle Nudges Towards Mediocrity.

Experiment One:

Go and announce to your personal friend circle that you are quitting your job and are going to be an independent consultant. Tell them that it means a lot to you and that you really want to do it.

Observe.

The Bozos will kick in trying their best to nudge you back to the safe and established territory of your job life.

Experiment Two:

Suggest a radically new and different corporate website for your organization.

Observe.

The Bozos will kick in trying their best to nudge your back to the safe and know path of a simple, safe looking corporate website.

Experiment Three:

Have a slightly different hair style or follow a slightly different dress-code to office.

Observe.

The Bozos will kick in trying their best to nudge your back to the safe and know territory of the 'old you'.

Do you understand exactly what it is that is happening here? If you don't --- understanding the Bozos around you might help.

Understanding Bozos

Bozos aren't bad people. They aren't whiners. Just 'normal' people living a 'normal' life and having 'normal' fears of failures along with a lot of preconceived notions.

What they feel; is a subtle and indescribable fear of change. If there is one property that describes their behavior the best it is - Homeostasis

Bozos usually have a 'fear' that you or your organization might make a fool out of yourself.

To be fair to them; some of them might be your genuine well wishers.

In a few cases the fear may be a result of 'genuine concern' for the organization or for you as a colleague.

There is just one tiny little problem in listening to them however.

Listen to them and you will remain safe in the realms of mediocrity for the rest of your life. A realm which builders leave as quickly as they can in search of remarkable outputs and results.

Every single genuine builder that I have seen has thrived, not by confronting or trying to convince the Bozos but by turning a deaf ear to them.

If there is one secret, builders know as a part of their very nature or as a lesson acquired from a difficult experience it is that what ever you do, if you want to build something that makes a big or tiny dent in the universe, you do not let the Bozos grind you down.

If the Bozos get louder; all you can do; dear reader; is turn deaf.

Look around you, how many Bozos do you see in your professional life?

How many of them do you think are your well-wishers?

Do you have stories connected to Bozoism, dear reader?

Discuss.

posted on Wednesday, June 10, 2009 7:26:21 PM UTC  #    Comments [0] Trackback
Posted on: Friday, June 05, 2009

“That is exactly why I decided to build it”.

Jack is this young and budding developer; I inherit him with the project where Fred suddenly disappears.

He is going around with the right guys in the culture chart, he seems to like lying low, seems to be working abnormal hours and occasionally hides in the meeting rooms and conference rooms in search of silence. 

Sometimes he even disappears out of office and works at a local cafeteria.

You can see him working in the strangest of places.

I don't see him in any meetings.

In a very healthy and positive way he does not seem to have a life outside work. He seems to love what he is doing.

Put simply, everything about him tells me he is a builder.

Having said that, there is a little problem --- I don't know what Jack is up to.

The “Project Plan” shows him assigned to “invoicing enhancements”.

He's checking in his code on time, but he's up to something mysterious.

Nah! --- I tell myself --- Changing labels on Data Entry forms; couldn’t be keeping him busy.

But then we’ve been working on firefighting multiple issues and I don’t have a lot of time to check on Jack. He could be underutilized; we could be wasting his talents or he could be genuinely up to something interesting; but I have bigger problems at hand.

The code generator that Multiplitaxion Inc, is planning on buying; for example; is a big problem needing immediate attention.

I spend a few weeks evaluating various products in the market. Nothing seems to fit our requirement.  Soon I am struggling with every single commercial code generator out there. I’m working hard and staying late.

That's when I realize that Jack and I are the only two ones usually in office past midnight.

"Labels changes on data entry forms keeping him up?" --- I wonder.

Funny.

Our initial conversations start with simple interactions - “Hey you want to order something? I'm ordering food.”

Then; we talk; about the project --- and what each one of us thinks will kill the project.

Jack thinks, code migration is going to kill us; customized code generation using templates and custom code, is the only thing that can save us.

"What the… this guy knows about the code generation approach?" - I am thinking to myself.

How could he?

What does “invoicing enhancements” have to do with code generation and the most critical aspects of the project?

Surprise.

Not only does he know about the code generator, he knows that looking for commercial code generators is an approach that is not going to work.

More talking --- now he has my attention.

It is late night. Seriously late.

Jack in on a white board, explaining the design of this customized code generator he has been writing without talking to anyone.

Then he's running me through the code.

Then of course the weirdest thing happens --- he shows a working prototype he wrote in his last three months of spare time; without talking to anyone about it.

Everything seems ordinary till this point. However the chain-of-events take a weird turn.

Here is the creepy part – his prototype does exactly what we need.

Silence; followed by a very short conversation.

The discussion was about Fred, the PM, who decided to disappear after rubbing every single builder the wrong way.

Pops: Why didn't you tell us you had a working prototype?

Jack: I asked him if I should give it a shot and he said I should focus on my current tasks. He said I am incapable of building something this complicated.

Pops: You decided to build it anyway?

Jack:  Actually --- that is exactly why I decided to build it.

Pops: When were you planning on showing this to everyone?

Jack: I wasn't. Just wanted to see if I can build it.

Long silence.

Pops: Can you demo this to everyone tomorrow?

Jack: If you think it's good enough; I still think it needs a few days of polishing.

Pops: It's good enough. Seriously. Do you think you can demo it?

Jack: Sure. If you think it will help.

Pops: Thanks. Let's go home now.

Since then every time I witness a “builder-hibernation” in an organization, I feel sorry for the organization.

When your builders hibernate, they don't lose their consistency; neither do they stop building stuff.  That is their very nature. The behavior is hardcoded in their geans. They can’t help but build stuff.

When they hibernate, they just stop building stuff ‘for you’.

Why?  --- Because they think you don’t care one way or the other.

The next time a junior programmer tells you he has ideas do not ask him to focus on his assignments.

Do not tell him to ‘do his job’.

Shut up. Stop. Listen.

The next time you are stuck between doing something that needs your 'immediate attention'; for example; evaluation of a commercial code generator; or having a conversation to someone who seems like a genuine builder in hibernation, remember; the conversation is much more important.

Do not tell yourself you have other important things to address.

Chances are that the solution to the other important things that you are trying to address is lurching in your very own organization and you aren’t even aware of it.

Have you ever seen a builder being told what he cannot do?

Have you seen him go ahead and do it anyways?

What other stories of relentless stubbornness have you seen from your genuine builders, dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, June 05, 2009 6:50:45 PM UTC  #    Comments [3] Trackback
Posted on: Wednesday, June 03, 2009

Hibernation Through Thanks But No Thanks.

Jane is doing an amazing job at shipping some serious backend code. She isn't doing it under the temporary fit of impressing her manager. She has been consistently shipping for the past couple of years and yet you see her working away late nights; supporting issues when things break and getting things done by silently attacking one problem at a time without breaking down.

She is passionate; she is consistent and as she runs forward she is taking the team along with her.

She isn't even burning out.

She; is a builder.

Then you realize that when she politely requests other builders to do things, things get done. Just like that.

She isn't just shipping or building stuff. She is leading. She is leading without whining or bitching. She is doing it at a time when your organizations needs builders who can lead.

Desperately.

You weave an amazing and remarkable story around her capabilities. The story of the quite builder being a hero spreads amongst the corridors of your organization. She can now be 'officially' promoted. More power can be vested in hands of someone who is not desperately seeking power.

Life is good.

"I prefer to do my job rather than leading a team. I like to code. Anyways, thanks so much for asking." --- she tells you.

You are hearing words all right but you can hardly understand them.

That's right --- what she is telling you, is that she does not want a promotion.

Yes; builders say that kind of things and here is the really creepy part - sometimes they mean it too.

You need to take a deep breath.

Don't Panic.

Maintain eye contact, talk; listen very intently and learn.

Very closely.

What's happening here?

Why doesn't she want to take the lead?

The entire pecking order of your organization doesn't know what is going on here. Even Jane herself is clueless. But she is telling you something she cannot put in words. She is saying it through her refusal to accept the promotion and she is giving you her reasons very articulately, maybe not through her words, but through her actions.

Can you hear it?

If you care; I'm going to help you understand what she is telling you.

Her unspoken message has both good news and bad news.

Good news is that she still loves the work she is doing in her team. Her talents are not yet getting utterly wasted in your organization. Jane, as an engineer is highly effective in your organization; and that dear reader is a good thing.

Ready for the bad news?

She knows how promotions and leaderships work in your workplace.

She is developing a disconnect with the way promotions and leaderships work in your organization.

All those whiners that were leading your team and were getting away with promotions and pats on their backs --- she was observing when that was happening.

Now she feels threatened at the idea of being promoted to her level of incompetence.

She associates leadership in your organization with whining and she in her own unique way; has figured out how she can continue to add genuine value rather than turning herself into a whiner.

What she is doing, is simple:

First, she is writing amazing code.

Second, she is avoiding anything that brings her in the limelight.

Put simply, she is lying low.

Unlike fire and motion; a technique well known the world of army; she is using a technique I like to call 'fire and duck'.

What she is telling you is that she has no political skills to match the skills being demonstrated by the whiners leading teams in your organization. She prefers to ship, then duck and hide --- like she does not even exist.

She wants to lie low and keep shipping.

This form of disconnection in builders is so common; and yet most organizations hardly understand it.

The purpose of this post, however is twofold.

First,  is to germinate the idea that most builders survive hostile environments by 'fire and duck' or by lying low. When you see whiners talking about how your 'developers' are not good at communication or how your builders need to be managed; more often than not your builders are actually spending extra effort making sure that you think that they do not exist. They might be leading your teams already; they just don't want you to find it out and make it 'official'.

It's a technique which allows them to lead teams without indulging themselves in bureaucracy.

They are indulging in fire and duck; because they don't trust your organization and leadership to come out in the open and take charge. They are afraid you'll promote them to their level of incompetence and that they will rot in meeting-hell.

The second purpose of this post; is to bring to your notice; dear reader; that the disconnect that your builders have with the promotion and leadership; has probably transformed into disconnect for the entire organization. If not, it will; soon; especially if you leave it unattended.

It is important that the next time you talk to Jane you get her to accept that promotion you are trying to give her. 

Getting her to accept that promotion is important; because by doing that you are sending out a very clear and honest message to your builders. You are telling your genuine leaders that it's OK to get noticed. You're telling them that it is OK to lead and that it is OK to drive the organization; because if they don't; your whiners will.

What examples of builders indulging in fire and duck or lying low have you seen?

Have you ever seen genuine builders in your organization refuse leadership roles and promotions?

Why do you think they refused the leadership roles when they did, dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Wednesday, June 03, 2009 10:07:10 PM UTC  #    Comments [2] Trackback
Posted on: Friday, May 29, 2009

Getting Genuine Builders To De-Hibernate.

When Fred, the young and budding manager disappears, and when you have spent your first few days trying to replace Fred fully and undo the crap he littered all over the place, you realize that it is already too late. The 'builder hibernation' has already begun.

Most of your genuine builders have left.

The ones who are capable of fixing things, don't care.

They've moved to a I'll-Follow-Orders mode.

They've gone silent and the whiners in your organization have taken over.

You can here them loud and clear through the silence and the sounds of crickets chirping.

Hollywood style inspirational speeches will not work here.

When this happens you are left with only two things do so.

The First Thing To Do --- “Listen”

If we were to take three most important things that you should know about hibernation here is what they would be.

One, there is a possibility that your system is being screwed big time right now as you read this.  There could be a dozen things that could be messing things up; Artificial deadlines, monkeys, mitigated speech --- the list is endless but if the builders don't speak up, chances are, you'll never find out.

If your builders are in hibernation they don't care enough to gate crash into your office with a big fat red light in their hand to have a fight with you to save the project, the team or the organization from absolute stupidity.

They've had it.

It basically means, you've been cut off from the sound-non-whining-genuine-feedback-loop of your organization or team.

Two, most builders are still going to give in reasonable effort to try and fix things even after they have moved into hibernation; the only difference here is that their opinions are going to be very soft whispers; not the loud shouts that they once used to be.

Why?

Because they have lost their 'attachment' with the organization, team or project.

There's a lot to be said about attachment; but the bottom-line is simple --- If you can't get them to feel the attachment again, you are going to lose your builders.

The third fact is most interesting however --- If you genuinely want them to feel attached to the project, the team or the organization again, they will.

Eventually.

All you need to do really is illustrate one simple quality consistently --- empathy.

Jack, is in hibernation. He hasn't quit.

Hibernation is Jack's way of telling you that you need to stop and listen.

When I say stop and listen I do not mean Lets-Have-A-Project-Status-Meeting approach to stopping and listening.

I mean Lets-Go-Out-For-A-Cup-Of-Coffee-And-Talk-Openly approach to listening.

If you are facing a hibernation and your organization, team or project is struggling through problems; chances are that every single problem that your organization, team and project is facing right now, has been solved.

There is a fully-working solution, or an individual fully capable of providing you one, lurching somewhere in your corridors. Solutions to the so called huge organizational problems your senior management is so worried about right now; have long been found and are being discussed in your cafeteria.

The questions you need to ask yourself are simple:

One, are you listening?

Two, do you have the power and the intention to do anything, even if a genuine builder was to tell you the solution?

The two questions are important; because here is the tragic part --- in most cases only one of the answers is a 'yes'.

That is what screws up most projects, teams and organizations out there.

Scott Berkun describes this inability to 'listen' in his classic post on fighting management incompetence. He explains:

The big incompetence crime committed by VPs is leaving incompetent managers in place for too long. My theory: by the time the CEO knows a VP stinks, the whole org has known about it for months. The smart people have been making plans to leave or are working to cover their assses. By the time the CEO gets around to taking action, it’s way too late. And often the action taken is whitewashed: no mention is made of how the VP or middle manager utterly failed (e.g. “Fred has decided it’s time for something new.”) The denial lives on, the lie propagates, making it easier for more denials and lies the next time around

If you genuinely want to do something about your organization, team or project, learn to talk a walk down the corridors and when people look like they want to have a talk with you, strike a conversation; and listen.

Then either gather enough power to do something about it; or you weave a remarkable story of how important it is to fix the situation and convince the big bosses in your organization to help.

Listening is the first thing you can do to de-hibernate your builder.

Ready for the second thing?

The Second Thing To Do --- Act.

“Dude, we have seriously cramped cubicals around here in the new office.” - Jack tells you.

“Half the time Fred doesn't know what he is talking about.” - Jane describes her current manager.

Jack and Jane are seriously kick ass builders.

You cringe.

You're sorry you even asked for then genuine authentic blatantly honest feedback.

This is a serious nightmare.

Why?

Because you know you're not going to be able to do anything. You're going to try your best to fix things. You're going to take it up with your Office Administration department and your senior management. Then you're going to die in the meeting hell.

You know deep down inside, that neither are the cubical going to change, nor is Fred going to be replaced.

That's how organizations handle feedbacks from builders.

Peopleware by Tom DeMarco and Timothy Lister describes this so much more articulately. The book explains this through a real life incident:

A California company that I consult for is very much concerned about being responsive  to its people.  Last year,  the company's management conducted a survey in which all programmers (more than a thousand) were asked to list the best and the worst aspects of their jobs.  The manager who ran the survey was very excited about the changes the company had undertaken. 

He  told me  that the number two problem was poor communication with upper management.  Having learned that from the survey,  the company set up quality circles, gripe sessions, and other communication programs.

I listened politely as he described them in detail.  When he was done,  I asked what the number one problem was.  "The environment,"  he replied. "People were upset about the noise."  I asked what steps the company had taken to remedy that problem. "Oh, we couldn't do anything about that," he said. "That's outside our control,"

Which is why when you have organizational meetings to discuss the direction and the vision statement of the organization, no genuine builder ever has a question or a feedback. Which is why when you do a meeting to talk about a project that's failing you hear the absolute silence.

The next time no-one emails you their feedback after a meeting, the next time no-one has a question after a presentation, the next time no-one in your team files in their feedback on the corporate intranet, the next time you hear the sound of the chirping crickets and “something” doesn't seem right, you know what's happening.

Your genuine builders are hibernating and you are either not listening or you don't care enough to act.

The next time you see a genuine builder-hibernation, avoiding the problem will only make it worse.

Listen. Act.

Get them to De-Hibernate.

Because if you can't --- you are screwed.

Have you ever worked with a team of hibernating builders and got them to connect back to the organization, the project and the team?

Did genuinely listening and acting on what they told you help?

Do you have a story to tell about your experiences on this front, dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, May 29, 2009 9:14:13 PM UTC  #    Comments [0] Trackback
Posted on: Wednesday, May 27, 2009

The Hibernation

You join Multiplitaxion Inc as a young and budding manager who is consulting for them.

Here's the story so far: The team you are being asked to lead was being led by a a certain Fred. Half way through the project Fred decides that the project is officially screwed. Then one fine sunny morning when the sky was clear Fred decides to disappear and does.  He doesn't disappear completely though. He leaves some part of his culture behind.

You are called in.

"He was making stupid mistakes" – you tell yourself - You can do better.

Then when you spend a couple of days at the client's office you realize something else.

He was the last one to leave.

Before he left he had ego tussles and power struggles with any genuine builder who could have fixed anything. Most of them left before he did. Others have been rubbed the wrong way and have gone into what I call the builder's-hibernation.

None of the genuine builders at Multiplitaxion Inc, care anymore.

As a manager, the 'builder-hibernation' is a phenomenon difficult to explain.

You know what it is when you see one in action

How do you know when it happens?

You know when Jack, a seriously kick-ass builder who used to gate crash into your office and shout at you, asking you to get the monkeys out of his way, stops showing up.

Or when Jane, who was working on your other branch office, stops giving you the direct-to-the-point brief calls when she feels something isn't going right.

Genuine builders will usually take a lot of abuse and continue to work silently. Incompetent managers, loud work environments, unreal schedules --- genuine builder tend to notice this details rather well but they are too busy to react to take any of this seriously.

Then the stupidity keeps piling up.

Slowly.

To a point where something happens and the thin thread snaps.

To be honest, beyond a certain point; where a lot of organizations and so-called-managers go; a lot of things can make the thread snap.

For example, this young and budding manager you hired last month rubs a few of your genuine builders in the wrong way; or says something that is intimidating and down right insulting.

Snap.

The thread breaks.

And then there is silence.

Followed by chirping of crickets.

You continue to get the long-winded status reports; that say nothing; by your so-called-managers. But you suddenly stop seeing Jack; your core engineer.

Jack is the guy who used to gate crash your cabin with one single sentence - “we need more time to ship quality; we are delaying the sprint by a week; can talk later if you want or I can give you more details in an email if you need that but we can't ship crap.” - and then he used to leave without wasting a whole lot of your time.

When Jack does not gate-crash anymore and you have to turn to that status report to see what the team is up to;  it might be an indication of Jack moving to a hibernation.

The builders slowly switch to a mode where they do exactly what they are told to do. They cover their ass and become disinterested to even care or give a rat's ass about the project or the organization that they once felt so very passionately about.

They start 'doing their job'.

Put simply, they go into a full fledged 'hibernation'.  The feedback loop snaps and all you are left with is cries from whining employees.

“Do you want the system to remember the last time the user logged in” - specific questions of this sort, by Jack and Jane; as they build; stop.

Suddenly Fred is telling your clients and stake-owner what the problem is - “The requirements of the login use-case aren't yet clear and they are constantly changing; we need to have a meeting to freeze the requirement because if we don't it's going to be really hard to start construction”. 

When that happens, you know you've lost it.

When that happens, Dot-com companies wind up.

Your job as a builder, story teller, manager, vice president, director, chief executive officer, board manager, entrepreneur or whatever it is that you are, is to avoid this hibernation from a ten mile radius.

If you don't understand how lethal it is you should.

It's lethal for three reasons.

First, the chances of any builder quitting and joining another company are huge during his hibernation period when compared to his chances of leaving when he is genuinely connected to the pond, feeling the ripples and taking corrective action. Genuine builders usually do not quit for factors like a small hike in salary; but make them feel disconnected and you've just multiplied their chances of quitting.

Second, it contagious. Builders usually work in closely knit team. The young and budding manager may have rubbed one genuine builder the wrong way; but  chances are high that others that work closely with him are going to disconnect and hibernate sooner or later.

Third, it stops genuine complains by genuine builders and amplifies the voice of the whiners. Those meetings where 'requirements are frozen' and 'use cases are finalized' suddenly become important. Processes and rules become important. Deadlines become important. Then slowly, showing up at nine in the morning becomes important.

Jack and Jane go from loud warnings, to whispers, to silence.

They are hibernating.

When you start losing touch with Jack or Jane and when they stop showing up, it's time to react like the life of your project, team and organization depends on it --- because to a large extent, it genuinely does.

When was the first time you witnessed a genuine builder or a team of builders go into hibernation?

What caused the hibernation?

Did they come back and feel connected again or did you just lose them?

What brought them back?

Have you ever disconnected or hibernated, dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Wednesday, May 27, 2009 8:48:44 PM UTC  #    Comments [3] Trackback
Posted on: Friday, May 22, 2009

Nine AM.

There is something about Nine AM.

It's the time of the day when something amazing happens.

A time when any organization is vulnerable to someone like me, who is trying to study it and get loads of information about the organization, the people who work there and the culture chart that prevails in the organization.

Seriously.

"But Pops, why is Nine AM so important?" --- you ask.

OK, do this --- walk into any organization you want to examine at nine AM sharp and observe.

Watch everything that goes on; closely.

Chances are; here's what you see --- tons of people dressed in formals, getting in, grabbing coffee and settling down to work. If you are in a larger organization and have a good imagination you'll be able to draw your very own personal parallels.

Now, here's the secret --- rare exceptions apart, that crowd that you are watching as it gets in to work, dressed in all formals, is exactly that --- 'a crowd'.

Remember the Pereto Principal they taught you in management schools when you were a young and budding student?

It was the little lesson where they taught you how only twenty percent of the people do eighty percent of the job in any organization.

Remember that? 

This 'crowd' rushing in to office at Nine AM with ironed shirts, ties and suits; is that other eighty percent of the people the Pereto Principal did not explicitly mention just for the sake of being nice to them.

A very few exceptions apart, they are the boring mediocrity and potential-current-or-future-whiners.

The Nine AM observation is one quick and easy way to spot whiners.

On the other hand, here's how you spot potential genuine builders:

  1. Drop in to office at five in the morning and you'll see a couple of heads popped up in the vacant cubical farm; deeply immersed in serious work. You have a few genuine builders who are showing up early to get some real work done.
  2. Drop in to office at eight evening and you'll see a couple of heads popped up in the vacant cubical farm; deeply immersed in serious work.  You have a few genuine builders who are staying back late to get some real work done. 
  3. Of the Nine-AM-Crowd, try to spot the slightly strange guys; the strangeness can manifest itself in subtle ways - for example, some of these guys might be coming in with slippers, others with undone hair; some might be wearing jeans; some T-Shirts or some even shorts. You would find clear violations of organizational rules conducted with absentmindedness and humility. These guys will not even realize they are violating your organizational policies and rules.

If you can't find any of the above three in your organization, it's bad news.

Seriously.

My point?

Real builders are not just ugly; they are often slightly weird and lack respect for rules.

Of all the things that describe genuine builders 'normal' is one word which does not even come close to describing what genuine builders are or what they do.  

Here is the ironic part, however --- Most organizations out there seem to have a serious passion for hiring 'normal' people who do 'normal' things, including following 'normal' office timings, adhering to 'normal' office dress code and organizing 'normal' meetings for having 'normal' discussions.

Guess what?

These 'normal' employees, indulging in 'normal' activities; results in --- 'normal' products --- and unfortunately 'normal' products are utterly boring.

'Normal' is not remarkable.

'Normal' doesn't work.

When it comes to genuine creativity --- it is the weird and ugly that often do the job.

Yet, most organizations out there continue to chase the 'normal'.

Scott Berkrun, describes this organizational mistake in his excellent essay on why ugly teams win. He explains:

We love the simple idea that only a beautiful person, or a beautiful team, can make something beautiful. As if Picasso wasn't a misogynistic sociopath, van Gogh wasn't manic-depressive, or Jackson Pollock (and dozens of other well-known creative and legendary athletes) didn't abuse alcohol or other drugs. Beauty is overrated, as many of their works weren't considered beautiful until long after they were made, or their creators were dead (if the work didn't change, what did?). Most of us suffer from a warped, artificial, and oversimplified aesthetic, where beauty is good and ugly is bad, without ever exploring the alternatives.

Scott takes the concept of our leaning towards the safe and beautiful and attacks it heads on:

Pop quiz: given the choice between two job candidates, one a prodigy with a perfect 4.0 GPA and the other a possibly brilliant but "selectively motivated" 2.7 GPA candidate (two As and four Cs), who would you hire?

All other considerations being equal, we'd all pick the "beautiful," perfect candidate.

No one gets fired for hiring the beautiful candidate. What could be better, or more beautiful, than perfect scores? If we go beneath the superficial, perfect grades often mean the perfect following of someone else's rules.

They are not good indicators of passionate, free-thinking, risk-taking minds. More important is that a team comprising only 4.0 GPA prodigies will never get ugly. They will never take big risks, never make big mistakes, and therefore never pull one another out of a fire. Without risks, mistakes, and mutual rescue, the chemical bonds of deep personal trust cannot grow.

For a team to make something beautiful there must be some ugliness along the way. The tragedy of a team of perfect people is that they will all be so desperate to maintain their sense of perfection, their 4.0 in life, that when faced with the pressure of an important project their selfish drives will tear the team apart. Beautiful people are afraid of scars: they don't have the imagination to see how beautiful scars can be.

Most genuine builders are nowhere close to 'normal' or 'safe'.

Amongst all the other things they are ugly, shameless, loud and weird; they have beautiful scars which they carry with elegance and humility. They take risks, bend the rules, fail and continue consistently even after being told countless times they should consider stopping or changing their path. 

Fred; gets in by Nine AM sharp; he's out at six; always adheres to the official dress code; always fills his timesheet on time; never has a fight with his manager; never goes around the official company policies; never breaks rules; never fails and is one hundred percent professional.  Even your HR department loves Fred. You should not be having Fred in your team and if you can influence the decision, you should not be hiring Fred in your organization.

"But Pops, the guy is just following the rules. What is the problem here?" --- you ask.

That dear reader, is precisely the problem.

Chances are, that Fred plays equally safe when it comes to his work.

"It's not my fault. The use-cases aren't clear about that" --- ever heard that?

Chances are, that, this is exactly what you might hear from Mr. Fred.

Chances are, that Fred; dear reader; is not a builder.

He is yet another boring employee and a whiner; at least a potential one.

While your organization might be busy looking at time registers to see who is coming early or late; if you are looking for genuine builders in your organization; all you need to do is be careful of is the Nine AM employees; who wear a tie to office and get everything right.

They are your whiners.

A few others troublemakers that remain contains all your builders.

If you want to genuinely monitor how well your organization is doing, how many whiners and how many genuine builders you have --- observe your organization at Nine AM.

What is the number of Nine AM Employees compared to the early comers and late goers in your organization?

How many individuals can you think of who break your organizational rules like timing and dress code without even realizing they are breaking rules?

How many weird and scarred employees does your organization have, dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, May 22, 2009 10:20:43 PM UTC  #    Comments [8] Trackback
Posted on: Wednesday, May 20, 2009

Observing Builders

If you really want to understand builders and what makes them survive, tick and thrive; observe what they do.

During my professional life, this is one thing I've spent hours doing whether it is observing a young and budding engineer I might have hired for the organization I work for or observing the famous online-success-stories through their blogs and through what they ship.

Grabbing my attention is easy. All you have to do is mention a genuine builder and if I can observe him personally, through his work or through his blog; I will.

As it turns out, builders come in all shapes and sizes. They have different ways of working. Some of them prefer to lie low and ship while others thrive by selling the achievements of their team to their organizations. Some prefer talking to the compiler and shipping amazing stuff, while others weave remarkable stories and make small dents in the universe with their very own unique perspectives. 

After working with multiple genuine builders and observing countless others online, if there is one conclusion that I've arrived at, it is that each builder is different from another. Yet the fundamentals that make these individuals builders generally the same.

One of my objectives of writing this book was to turn this personal observing exercise into a coherent stream of thoughts that allow me to not just observe builders; but actually dissect their actions and arrive at my very own conclusions regarding the people who build organizations, teams or bring amazing products and services into our life.

What follows are common traits I've seen in every single genuine builder I've observed or worked with in my life.

Consistency.

It's not that whiners don't have amazing ideas or cannot do great stuff. It's easy to write off whiners as people who whine, bitch and waste everyone's time but that is clearly not the case. Some of the whiners that I've observed are fairly intelligent and smart people; yet they are unable to deliver anything that makes any considerable impact on the organization, the team or the project that they work on.

So, what is going on with the whiners?

Why can't whiners get to ship something that has any impact on anything or anyone's life?

The answer to this question lay in my interactions with Fred and Jane.

I met Fred and Jane back the days when I was working at Multiplitaxion Inc.

Fred like most whiners, was big time into bitching, moaning and Resume Driven Development.

After a few days of observing Fred, I realized that Fred was not a bad guy after all.

Slightly political --- definitely.

Naughty --- sure.

Stupid --- not really.

Fred often did have his share of amazing ideas which were genuinely all right.

Fred however, had a problem.

You couldn't get Fred to work on a single project for more than a couple of months. Fred was a classic parasite, that overwhelmed the project team with the list of cutting-edge technologies they aught to use and when he had made it amply clear to people sitting high up in the pecking order of the organization that he had contributed sufficiently by providing 'thought leadership' or by doing a dozen 'proof of concepts' he would jump over to another project. 

Fred was what I called the 'Idea monkey' back then.

You could allocate Fred to the most comfortable of all the projects and be rest assured things would start going wrong. You would start having communication issues, issues with timelines and issues with shipping.

Jane on the other hand, happened to be a quite builder who was slightly reserved and liked doing her work quietly in a corner cubical. You hardly ever saw her laughing or hanging out with people; not even with her own team. She was a quite, intellectual who liked to be alone and write code.

There was something strange about Jane though.

If you had a project that was stumbling or failing all you had to do was to put Jane in the project and then slowly things would start falling in the right place.

It wouldn't happen overnight though.

It would take weeks, sometimes even a few months before a late project would come back on time or a project littered with bugs and broken windows would suddenly start meeting the quality standards.

By that time Jane would have developed really strong hold on the project and would have settled down with one track focus of shipping, sprint after sprint. Ask her if she wanted to move to a different project and she would look at you with eyes which would made you feel sorry you asked.

Here is the spooky part however --- if you were to compare the years of experience, educational qualifications, designation or even genuine technical competence and talent of Fred and Jane, Fred would beat Jane hands down. Yet, Fred, somehow managed to screw up project after project when Jane led even the most screwed up ones to a successful end.

What was happening here?

It took me a couple of months to figure this one out. On the surface Both of these talented individuals were awesome guys and equally fun to interact with.

On close observation for a couple of months however, you would notice that there was one thing that separated the two however. While Fred, was seriously interested in 'proving' his abilities and chasing one successful project after another; Jane was interested in getting into a project, understanding the issues, developing firm roots on the project and then working on solving one problem after another --- consistently.  

Project after project, If there is one thing I've learnt, it is that consistency is one quality which differentiates genuine builders from whiners. Not talent, competency, caliber or anything else. Irrespective how much much talent, intelligence, competence, smartness or IQ you have if you are not consistent, chances are that you either are a whiner or will turn into one pretty soon.

Seth Godin for example, differentiates performers from ones who forever remain the realms of mediocrity using the concept of Dip. He uses the following diagram to illustrate Dip:

Seth explains:

Almost everything in Life worth doing is controlled by the Dip,

At the beginning, when you first start something, it's fun. You could be taking up golf or acupuncture or piloting a plane or doing chemistry-doesn't matter; it's interesting, and you get plenty of good feedback from the people around you.

Over the next few days and weeks, the rapid learning you experience keeps you going. Whatever your new thing is, it's easy to stay engaged in it.

And then the Dip happens.

The Dip is the long slog between starting and mastery. A long slog that's actually a shortcut, because it gets you where you want to go faster than any other path.

The Dip is the combination of bureaucracy and busywork you must deal with in order to get certified in scuba diving.

The Dip is the difference between the easy "beginner" technique and the mare useful "ex-pert" approach in skiing or fashion design. The Dip is the long stretch between beginner's luck and real accomplishment. The Dip is the set of artificial screens set up to keep people like you out.

The Dip, according to Seth is the point where excitement of doing something new dies down. If you are a blogger, Dip is the point where you realize that no-one cares about your blog and that your blog with three entries about your cat will not make you the most popular blogger on planet earth. If you are a software developer writing an open source application, Dip is the point where you realize that you are just not getting more than ten downloads a month.

If you are a young and budding entrepreneur trying to build a business around an idea which you once thought will change the world, Dip is the point when just ten unique visitors show up on your website on the launch day and no-one is willing to buy your universe changing product for just ten dollars.

Long story short, Dip is the point where the excitement of starting something new dies down and the realization that you are not going to change the world with whatever it is that you are doing, as easily as you had expected you would, sets in.

That's when most whiners jump on to something else.

That's when a whining blogger starts a new blog; a whining entrepreneur thinks of a new idea; and a whining programmer hops over to a new project or a new job. Genuine builders however, ask themselves if they genuinely love and believe what they are doing.

They ask themselves if they can spend rest of their life doing it.

If the answer is no, they surrender shamelessly and then then learn to work hard to avoid things they do not genuinely enjoy doing.

if the answer is yes, however; they continue working at what-ever-it-is-that-they-were-working-on.

Consistently.

The same ruthless consistency holds true even with genuine story teller Elizabeth Gilbert. In her PowerPoint-less-presentation about the 'Genius' at TED, which is one of my favorite talks ever, she talks about her life as an author, the reason behind her success and how she continues to overcome her fears:

If we think about it this way it starts to change everything. You know, this is how I've started to think and this is certainly how I've been thinking about in the last few months, as I have been working on the book that will soon be published as the dangerously, frightenly, over anticipated follow up to my freakish success and what I have to sort-of keep telling myself when I get really psyched out about that is "don't be afraid", "don't be daunted", just do your job.

Continue to show up for your piece of it; whatever that might be.

If your job is to dance, do your dance.

If the divine cockied genius assigned to your case decides to let some sort of wonderment be glimpsed for just one moment through your effort, then Ole! And If not, do your dance anyhow and ole to you none the less. I believe this and I feel that we must teach it. Ole to you none the less just for having the sheer human love and stubbornness to keep showing up.

Jeff Atwood from coding-horror is no different. He describes the success behind his amazing blog and gives sound advice on how to ahieve ultimate blog success in one easy step:

When people ask me for advice on blogging, I always respond with yet another form of the same advice: pick a schedule you can live with, and stick to it.

Until you do that, none of the other advice I could give you will matter. I don't care if you suck at writing. I don't care if nobody reads your blog. I don't care if you have nothing interesting to say. If you can demonstrate a willingness to write, and a desire to keep continually improving your writing, you will eventually be successful.

But success takes time --- a lot of time. I'd say a year at minimum. That's the element that weeds out so many impatient people. I wrote this blog for a year in utter obscurity, but I kept at it because I enjoyed it. I made a commitment to myself, under the banner of personal development, and I planned to meet that goal. My schedule was six posts per week, and I kept jabbing, kept shipping, kept firing. Not every post was that great, but I invested a reasonable effort in each one. Every time I wrote, I got a little better at writing. Every time I wrote, I learned a little more about the topic, how to research topics effectively, where the best sources of information were. Every time I wrote, I was slightly more plugged in to the rich software development community all around me. Every time I wrote, I'd get a morsel of feedback or comments that I kept rolling up into future posts. Every time I wrote, I tried to write something just the tiniest bit better than I did last time.

If there is one thing that connects every single genuine builder that I have studied, observed, looked up to, seen or worked with, it is relentless consistency to keep showing up.

Your girl-friend dumped you?

Feeling low?

Having problems at work?

Guess what --- no-body cares.

Unless of-course you have a something remarkable in it for them which makes them care.

To add to that, neither of these are reason enough not to ship on your own self picked schedule. 

If you haven't picked one thing that you absolutely love doing, and are not giving it your consistent focused attention day-after-day relentlessly; for years; you probably are just wasting your time, whining away to glory.

If you are going to stop reading this book, right now, right here, remember this before you do - builders ship; consistently.

Oh and that product that your organization might be shipping out successfully --- it is *not* shipping because your young and budding managers who are awesome at organizing meetings and talking big are going on a white-board or brainstorming about cutting-edge ideas.

Chances are, that it is shipping because, a few builders in your organization, who you may not even know have been slogging away, quietly; for years; without looking for a new opportunity, a new project to jump on to or something new and exiting to hop on to. It's shipping because of tremendous amount of commitment, hard work and the will to 'show up' day-after-day which is often characteristic of genuine builders.  

That's consistency.

Of all the traits of genuine builders, this is one that all genuine builders I have seen so far; demonstrate; consistently.

posted on Wednesday, May 20, 2009 9:41:56 PM UTC  #    Comments [2] Trackback
Posted on: Friday, May 15, 2009

Let's Strike A Deal

For the sake of story telling; we're going to strike a deal; you and me dear reader. The deal is simple --- from this point on unless I say otherwise every time I refer to 'builders' I mean 'builders' of stuff and people who 'build' remarkable stories.

You; are going to humor me; and I; drear reader am going to try and convince you that people who build and ship; irrespective of whether they build stuff or stories pretty much use the same techniques for survival, growth and getting things done at work.

Everyone else whines.

During my software development career if there is one thing I've studied rather closely it is the mind of all three kinds. Builders of stuff and genuine story tellers have striking similarities in the way they work, think, behave and connect to one another. From this point on, because of these similarities I'm going to put them in the bucket with a label 'builders'. 

Whiners get their very own special bucket though.

Long story short, builders equals builders of stuff and stories; whiners are whiners. You are supposed to remember this for the rest of the book as you read along.

Deal? 

Good.

Let's get on with the post.

The Whiner Recruitment Plan

The point I intent to make with this post is rather creepy. I, dear reader, with this post, am going to suggest that your organization has a concrete 'recruitment plan'; but this is not the conventional recruitment plan that you were taught to write up in management school. This is a special recruitment plan where your organization works really hard to maintain the constant ratio of whiners in your organization.

I like to call this the 'whiner recruitment plan' and the best way to explain this is through a story.

Ready?

Flashback.

I'm a young and budding engineer at Multiplitaxion Inc, learning my first lessons of software development.

Unless you got lucky somewhere and were suddenly born in programmer heaven, each one of you reading this; may have learnt this lesson the hard way.

I am sure you have your very own interesting stories surrounding this but this is probably the one thing that you learnt after your first six months into your first job --- most organizations out there have way too many assholes.

The number is much larger than what you anticipated when you walked into the office on the very first day of your first job.

Of course your school had its share of stupid teachers, and your college was swamped with professors some of whom some were hardcore idiots but nothing beats your first six months in a typical software development shop.

The first week usually begins well. You develop a decent amount of respect for your managers as they introduce you to the organization and paint a picture the HR wants them to paint. Then you see them work; take stupid decisions and do funny things.

Unless your managers are genuine builders or story tellers; three weeks down the line the question starts to take shape.

You still can't state the question articulately though.

It takes about three months for the questions to take concrete existence in your brain when you suddenly realize that you can now express the questions rather articulately in your mind. Then all of a sudden; you find yourself asking these questions in the deep corners of your mind --- How did these idiots get here? Who hired them?

For all those of you who are in this incubation period, it takes you about a year to come to an answer. Before I continue with the story, I'll do my good deed for the day and make your life easy by giving you the answer.

Ready for the answer?

Other whiners who preceded them hired them.

The whiners who hired them have been now hired by other whiners in other organizations and they have moved on; because that's what they do; they hop jobs. Most organizations out there pretty much replace all their whiners with fresh new whiners every three years. Only a few of these whiners who are very high up in the pecking order manage to stick around.

Only a few of these organizations manage to reduce the number of whiners while replacing them with new ones. Most others pretty much maintain a steady ratio of whiners is to builders --- it is almost like there is a  'whiner recruitment plan' at the organizational level. Seriously. Study a standard software development shop out there for three years and you realize that ratio of whiners to builders pretty much remains the same; year after year.

Do you know what makes the 'whiner recruitment plan' tick at an organizational level?

In my very first job, in a company I shall call Multiplitaxion Inc, we had meetings every-time a couple of 'big' projects failed. Lots of ugly finger pointing happened --- back then the blame game was played under the name of 'root cause analysis'.

Then we picked a couple of whiners who could be let go.

Six months down the line, the whiner count would be the same.

For almost two years, this little ten person startup was under a constant layoff mode.

But Pops, that was just a small startup; you say.

Guess what, it usually takes you another five years to figure the real answer --- the 'whiner recruitment plan' works pretty much the same way even in the biggest of the organizations that you'll see.

What makes it tick is simple.

The board. The Investors. The Vice Presidents. The Directors. The Senior Managers.

Any one of these guys can make it tick.

In order for the 'whiner recruitment plan' to work all you need is a couple of very senior individuals who often wake up after two years of hibernation and realize - 'We are fu@#ked. Nothing is getting done. If we don't do something about nothing getting done we are screwed.'

Then a master 'clean up plan' is devised; things are made difficult for the whiners and whiners hop. If they don't ugly layoffs occur. Usually they do. Automatically. Most whiners are surprisingly good at the art.

The new environment, changes and development suddenly starts making other whiners who are high up in the pecking order really uncomfortable and they go out and start recruiting fresh whiners for their teams.

They do this relentlessly of course; till the exact same 'homely' cozy environment of mediocrity returns.

The 'whiner recruitment plan' isn't an excel file.

You will not find it attached to any mails that blaze through your mail server; but it doesn't matter where you work; I am here, dear reader to tell you, that your organization has an implicit, sub-conscious 'whiner recruitment plan' which has targets for the numbers of whiners your recruiters need to find and the number of whiners your interviewers will be letting through.

It's a flawless piece of machinery; requiring no lengthy meetings; no discussions; no mail trails --- it doesn't even require management approvals.

Watch closely. If you are recruiting, the 'whiner recruitment plan' is at work; in your very own organization; right under your eyes.

The numbers are different, the specifics might be different, but the machinery is at work --- with the silent precision of an unspoken agile process which never fails to achieve it's objective, which in this case is to keep the ratio of whiners and builders constant across time. 

Of-course, if your projects followed the flawless perfection with which the 'whiner recruitment plan' works, you organization would be the perfect programmer hangout place --- but then successful projects mean more work, more change and things which makes organizations nervous. The 'whiner recruitment plan' on the other hand; offers no such threat. It's one of the riskiest safe things most organizations out there indulge in. 

Do you find your organization changing policies every year?

Do you feel that a few things "will never change" in your organization?

Do you find your organization hiring a lot of 'senior managers' or 'top level leadership' every year?

Do you find your organization undertaking serious restructuring activity every year?

How has your builder or story teller to whiner ration changed over the last five years, dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, May 15, 2009 9:37:47 PM UTC  #    Comments [0] Trackback
Posted on: Wednesday, May 13, 2009

Your Organization Is Seeking Whiners.

If you have an organization or work for one; you are going to a have few whiners who slip in through the cracks of your recruitment process.

"I don't know about that one Pops. He seemed to have some skills but I am not sure if he will be able to deliver. Overall he is really smart; good communication; good educational background. I think we should go ahead."  --- Fred who has conducted a smart whiner's first round of interview, tells you. Fred as it turns out, has a huge collection of stupid puzzles and math questions which forms his selection criteria of excellence.

The same set of funny puzzles and questions constitutes Fred's criteria of who you should hire in your organization.

That is how it begins --- you listen to Fred and hire your first whiner.

Then before you know it you have an army of whiners being interviewed and getting in your organization.

I've seen dozens of whiners getting recruited in dozens of organizations around the world and there is one conclusion I have personally come to. It is the darkest secret most organizations do not have the spine or the audacity to admit. Whiners know this secret. All of them do. As a matter of fact, whiners en-cash on this dirty little secret every time they interview. It's insanely weird but true.

I'm going to do my good deed for the day and break this dirty little secret to you.

Ready? 

Organizations are looking for whiners.

Believe it or your, your organization might be spending a whole deal of time, effort and money looking for whiners.

In fact, most organizations out there love whiners.

That's right. You heard me.

Organizations want  whiners so badly that they go out of their way to recruit them.

Of course you are knitting your brows.

"Pops; why would anyone want whiners?" --- you ask.

Simple. Because whining is safe. It's easy; and it's also fun.

Seriously.

Try it.

Go to your friend across your cabin and talk about how overworked and underpaid you are. Go talk about what an asshole your boss is. It is fun. Do it a couple of times and you'll realize it's actually more fun than slogging away at a piece of code or writing your own blog post. Actually, it's not just more fun; but it is also much more easier than doing anything else.

Here is how it works --- 'everyone loves whining' --- you do; your boss does; his boss does; the whole pecking order in your organization does.

Builders and story tellers realize the perils of whining and make a conscious effort to stay away from it; but what about the good old Fred who just cannot seem to connect to the team of builders and who has just been promoted to the designation of a manager? What about your Vice President of Marketing who is a road warrior and on the move for most of the month?

Whining employees give these individuals an opportunity to catch up with events that happen in the corridors of the organizations. It lets them figure out what the builders are working on or what they are up to. It allows them to know about every insignificant ripple that takes form in the organizational pond.

Do me a favor; read this:

Three developers go in a meeting room; they argue; they fight; they kill each other and they come up with an amicable solution which is best for the product.

I'm sure at-least one young and budding manager yawned somewhere as he read this.

Now read this:

An official meeting request went out. Joe couldn't make it to the meeting because he had another meeting. A long meeting was organized. Wilma and Smith completely disagreed on the various approaches discussed in the meeting.

Two approaches were selected during the meeting out of which one would be finalized. A mail thread followed the meeting. Senior members across the organization were copied on the mail trail. Some of them responded expressing their concerns around both the approaches.

Three of these senior members proposed their ideas and each one of them thought the other two ideas would not work.

The mail thread continued for two weeks.

Now we're talking!

You now have all the interest of the young and budding manager you just hired to 'manage' the project and the team. He is not yawing any more.

See what is happening here? Your boss, his boss and the whole pecking order of your organization is feeling the pulse of the pseudo-work. They are getting involved.

Now they suddenly feel that the young and budding manager they hired last month to 'manage the project' is doing an amazing job. He is helping your developers who were incapable of communicating.

Very soon your organization realizes that it needs more young and budding managers who can initiate discussions; put simply your organization feels a strong need for whiners. 

See the point?

Most organizations out there want more whiners; and they want them desperately.

'Some discussions are important' - you are told - really important. Planning, Organizing, Architecture, Scalability and Brainstorming are words words which are often used to disguise the time that is getting wasted in pseudo work where nothing is getting done. Most organizations love wasting time behind these words because it gives them a warm and cozy feeling inside.

It makes them feel safe.

It makes them feel like they are in control.

Whiners know this fully well.

They are aware of the power of whining fully well.

They also know the dark little secret that everyone wants to whine.

Maybe this is why most employees in any organization get away with 'discussions'; 'giving ideas' that die in the walls of a meeting room; or make it their profession to come in the way of genuine builders; while only a small number indulge in the act of doing some real work and shipping stuff or remarkable stories.

Unless you are one lucky son of a gun who happened to find the rare breed of organizations that understand innovation inside out, chances are high that your organization is looking for whiners. Even now as you read this whiners are getting interviewed; and they are getting selected.

Whiners with years of whining experience behind them. Whiners with solid educational background. Whiners who can solve virtually any puzzle or funny math question out there; and yet the fact remains that they are whiners --- incapable on building stuff, weaving stories or shipping anything consistently.

What questions do interviewers in your organization ask the candidates?

Do you depend on Math puzzles and IQ tests for selecting candidates?

How much time are you encouraged to do real work and ship?

How much time does your organization and your managers expect you to be talking and updating them with the status?

Are you being giving reasons to indulge in the acts of bitching and whining even if you do not want to?

Is the overall environment of your organization in general and your team in particular giving you reasons to become a builder or a whiner?

Is your organization actually looking for more whiners right now as you read this dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Wednesday, May 13, 2009 8:36:55 PM UTC  #    Comments [2] Trackback
Posted on: Friday, May 08, 2009

Your Organization Is (Not) Hiring Story Tellers

Storytellers build remarkable stories about awesome products built by genuine builders. Stories which change the world. Stories which build tribes. Stories which add a soul to a product; stories which add a purpose to the team's effort and meaning to an 'organization'.  

They are mavens, leaders of tribes and masters at the art of remarkable story telling.

Much like builders realize that their every existence depends on the awesomeness of products that they build; story tellers realize their their very existence depends on their stories being built on the foundations of genuine truth. Strong foundations of honest stories is what storytellers often stand on.

This of course; means that an amazing storytellers usually ends up doing three things:

First - they weave remarkable stories with strong foundations.

Second - they work hard to turn those stories into realities.

Third - they build even more remarkable stories based on strong foundations of their older stories.

It's the second item that makes story-tellers the official trouble makers of the organization and a pain in the ass for the more traditional departments in the organization.

Here's how it works.

Your vice president addresses the entire organization in an 'all staff' meeting. Here he gives a rather motivational speech --- he goes ahead and says that yours is a company with a difference. It is an organization which trusts people to take calculated decisions and judgment calls rather than relying on stringent policies.

He goes ahead and says rather clearly that each one of you is a talented mind who is better than the best available out there. You are not just a 'resource' --- but an innovator. The organization believes in you.

Now if you've ever been to one of these meetings --- here is what happens --- people listen, people wonder how all this impacts them. People yawn. People doze off with open eyes wondering when the speech will end.

But the story tellers in your organization are listening. Listening to every words. Once the meeting ends they get down to the work of weaving remarkable stories around each word. Stories which can add cause and meaning to your organization. Stories that your team genuinely 'wants' to listen and care about. Stories that they themselves genuinely believe in.

Then something remarkable happens. Something that very few organizations understand.

What started with a boring all employee meeting; turns into small yet remarkable stories. Then these stories that are told by story tellers start spreading within the corridors of the organization. People genuinely start making small judgment calls and start taking decisions pertaining to their projects.   

A small tribe of proud employees is formed. Employees who genuinely want to believe that they work for an organization with a difference --- an organization that trusts individuals to make decisions and judgment calls for the best interest of the organization.

What started off as a boring speech, turns into a way of life.

The story tellers aren't lying. They aren't cheating your team. All they are doing is adding purpose, meaning and passion to a story that was told in the speech. That and they are working on turning the story into reality.

This is where you start seeing issues though.

Before you know it, there is someone who is talking to the office administration staff about making office timings flexible or buying a few X-Box consoles and the guys at administration department are freaking out. They are looking at him like he has a third eye.

That's when the new-flash happens.

Of course the Vice President said those things and of-course he meant it. But he didn't "absolutely-mean-it-mean-it". He didn't want you to 'act' on it. He didn't intend to start a tribe of employees who are 'proud to belong' --- it was just a speech.

Then the bunch of whiners flow in with ideas about discipline, threat to the corporate culture, employees not being mature enough and what started as a remarkable vision from your chief executing office or vice president turns into dirty war of 'everyone trying to do their job' and a joke where everyone pretends to be working for the 'best interest of the organization'.

Whiners whine. Mail threads are started. Meetings are organized --- and nothing happens.

If change is something organizations in general and whiners in particular are scared of, remarkable visions or stories with concrete actions to turn them into reality are much like nightmares to organizations.

These are exactly the moments that a small number of really smart organizations often grab. They hold on to these moments. They give the story tellers every tool to turn the vice president's speech into a reality that is exciting and a culture that is full of fun. These are organizations that give story tellers every tool they need to weave genuine and remarkable stories. These are organizations that give their builders every reason to belong.

These are the organizations that become remarkable.

Other organizations; however; are just shit scared of story tellers and their stories --- much like they are scared of builders and what their remarkable 'stuff' does --- primarily because all of these things result in 'change'

After all it is easy to organize a meeting with inspirational speeches. As long as the general mediocrity of the organizations aren't threatened with concrete change no-one will have a problem with it. Storytellers are trouble makers because they weave remarkable stories and then work on making them real. They threaten the comfortable mediocrity most organizations are so used to.

Which remarkable stories have you heard in your organization?

Which one of them were killed by whiners who claimed that they were trying to work for the "best interest of the organization"?

Does your organization have flexible timings, work from home and x-box consoles?

Do you have tribes of employees who feel proud to belong?

Do you have whiners in your organization who believe that your employees aren't mature enough to be trusted with work hours and video games in offce?

How many times do you hear the words 'maturity' and 'discipline' at work, dear reader? 

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, May 08, 2009 9:02:14 PM UTC  #    Comments [2] Trackback
Posted on: Wednesday, May 06, 2009

Your Organization Is (Not) Hiring Builders.

When builders indulge in the act of building stuff what they are actually doing is building foundations of the organizations in which they work.

Given the fact, that remarkable products and services are the very basis of a successful organization you would think that most organizations out there would be going out of their way to hire the best builders that they can get hold of much like tea pickers pick the best tea leaves they can find.

Most organizations however, are not looking for the best of the builders.

The "not" in the above sentence is intentional. It is not a typo.

It is a rather important fact. A fact that you must know and understand fully well --- particularly if you are a builder, someone responsible for hiring others or an entrepreneur starting your own organization.

As a part of my professional and personal life, I talk to countless engineers and managers around the world. Strike a conversation around their recruitment drive and any budding manager will tell you that his organization is on the lookout for the 'best talent' that is available out there. Put simply, he will tell you that his organization is looking for some seriously talented, kickass builders.

This post is about shattering the dreams of that young and budding manager.

Irrespective of what your organization announces in those weekly newsletters --- Your organization is *not* looking for seriously kickass builders.

Knitting your brows already?

Ok, story-time!

Ready?

Let's have a quick flashback.

As young and budding builder at heart when I am asked to lead a team it seems like a simple task.

Leadership, I tell myself, means that you work harder; you take up bigger problems and if people are stuck they come to you for help. If they are not stuck; they go about doing their work and you go about doing yours.  If you're leading a team of seriously kick ass developers; every once in a while, your team also expects you to build something which inspires them. That's pretty much it --- leading smart engineers is simple --- all you need to do is help and inspire.

At-least that is what I tell myself.

Two weeks down the line I find myself looking back and reflecting on just how wrong my definition of leadership had been.

As it turns out, organizational definition of leadership, is different. Very different. 

In the real world where 'shit happens' --- leadership; has a completely different meaning than the meaning it has in your very own personal world.

Your being promoted to a leadership role means you will now be sending weekly documents called 'reports' to people who have no direct involvement in the project and are often referred to with fancy names like 'senior management' or 'stake holders'. People who can do nothing other than making things worse when your project starts failing.

In my case, leadership came with it's baggage of 'weekly status reports' which I was expected to send to my immediate manager who happened to be a part of the 'senior management'.

Week 1 --- I am excited about this whole leadership thing. I send out a neatly formatted, status report which takes me more than a couple of hours to write. 

Week 2 --- More formatting, more words, lesser real work; yet another status report goes out. 

Week 3 --- The status reporting thing starts sounding boring. Downright boring. I find other important things to do; like helping team members who are stuck and making sure that a fully functional build gets uploaded to a test environment so that everyone in the organization can try it out.

A day later I get an email from the 'Senior management' telling me that I had missed sending out my status report and that it was unacceptable for someone as senior as me to just miss sending out reports.

Week 4 --- I'm back to boring status reports again. The status report ships on time.

Week 5 --- I am stuck by a realization; a question and a curiosity all rolled into one. A couple of subtle questions are gnawing away at the back of my head. 'Do they really read this crap?' --- 'what do they understand about the project health by reading this crap?' --- Then a personal tiny little experiment is devised.

Before I describe the experiment may I suggest that you do not try this at your workplace. It is clearly an experiment which can get you fired if it fails. Ok, ready for the experiment? Here's what the experiment I decide to try out after five weeks of boring status reporting.  

On the fifth week I take a copy of the report I had sent the week before that. I attach it to the email; cross my fingers; and hit the send button.

The next day is fairly interesting. I look at my mail box, only to find out that life is good. No-one complains. No-one even realizes that it is the exact same file as the week before. No-one, is reading those status reports.

Week 6- The same document that was sent for the last to weeks is taken; the file name is changed; the file is sent. No complains.

Week 7 - Status reporting is now suddenly becomes really easy for me.

Sending a weekly status report from then on is easier than most young and budding managers can think. For as long as the project lasts, I send the exact same status report and no-one even notices.

Then the project ends. We ship the build, everyone loves it; the project is a success --- and the reports?

Question: Do you think this manager of mine wanted me to send the reports because he was going to read those reports or do anything with them?

End of flashback.

Let's snap back to life.

A simple dissection of the story and picking up the nuggets of lessons learnt of it will help. After all, if we don't do that, we are just as guilty of whining as professional whiners.

If there was one thing I learnt from the event; it was that most of the people from the so-called 'senior management' are often afraid of change. Change that threatens their existence. A team of three young and budding developers self sufficient at shipping is every whiners nightmare. It is in fact every organization's nightmare.

Why?

The reasons are two fold.

Firstly, because the pecking order has been genuinely made to believe that whiners have a specific function in defining the existence of the organization; that 'developers are not very good at communication' --- that builders need to be 'managed'. When a couple of genuine builders show up and challenge the conventional beliefs not by empty meetings and discussions but by consistently shipping concrete deliverable results; it is natural for whiners to feel threatened.

This highly respected project manager of mine for example, liked to believe that the project was on track because the team was aware of the fact that he 'might' be tracking the project through the status reports. He genuinely believed that the status reports were keeping us on track when in reality all these status reports were doing was wasting a lot of my time.

His role and function in the project was redundant. Removing him from the project would have helped us ship faster; and yet this dear manager of ours believed that he has a definite function and a concrete role in the project. He was the self proclaimed, 'project policeman'. 

Secondly, organizations like to believe that the whole 'organizational' arrangement of things is what causes projects to 'tick'. 'Always think of the team first' - 'you can hardly do anything alone' - 'team achievement is much more important than individual contribution' - 'we need to document stuff so that people are replaceable; after all someone might fall sick; decide to leave or might get his by a bus' ---  ever heard these statements in management meetings?

Organizations like to believe that it is the organizational structure that is hugely responsible for innovation; not individuals that they hire; while in reality the reverse is often true. We like to refer to our most remarkable builders as 'resources' and then we like to go out and prepare 'project plans' and 'resource management reports'. We like to naively believe that it is these reports and processes that make the organization tick.  

A couple of builders, shipping successfully without any organizational intervention feels scary to organizations which do not believe in the idea of individual contribution. Most organizations and managers alike; find it difficult to leave a team of builders alone.

This; dear reader; is why most organizations and even the so-called-managers out there are *not* looking for genuine builders who can build remarkable stuff silently; this is why most organizations out there are looking for professionals who can be programmed to follow processes and believe that they are just a tiny drop in the larger 'organizational' scheme of things.

If you work in one of these organizations; irrespective of what your Human Resource department tells you, chances are high that your organization is not looking for genuine builders. In fact, in all probabilities, your organization is shit scared of builders or anything that brings about any form of change. Chances are high that you organization is in fact, looking forward to hiring whiners and maintaining the whiner recruitment plan.

How many genuinely deserving candidates have you seen getting rejected in the interview process?

Why did these candidates get rejected? What reasons were sited by the whiners who rejected them?

How many genuine builders or story tellers are leading teams in your organization?

How many whiners that have been promoted to their level of incompetence?

Is your organization letting the builders take the back-bench and letting the whiners drive the organization, dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Wednesday, May 06, 2009 9:05:06 PM UTC  #    Comments [5] Trackback
Posted on: Friday, May 01, 2009

Ok, soul searching time.

Are you a builder?

Are you a story-teller?

If you are neither a builder; nor a story teller --- you are a whiner.

It is really that simple.

You can defend yourself with a piece of paper called your business card and claim that you 'manage projects'; that you are good at 'client interaction'; that you are a 'people person' and that you have fifteen years of experience in building enterprise applications but none of that changes the fact that you are a whiner.

Maybe a very powerful whiner sitting high up on the pecking order of your organization. So high up that you will never be reminded of the fact that you are a whiner and you might have blissfully forgotten it; but you are a whiner none the less.

In the world of software development, there are pretty much only three things you can be doing and I'm going to tell them to you. Ready?

One, you could be helping build stuff, through your skills of a programming language; through your testing skills; creative skills or whatever 'concrete' skills you have. Two, you could be helping people who build stuff in the first place by building remarkable stories.

Three --- you could be whining.

Whiners are interesting individuals though. They are what can be referred to as thermometers in an organization. Seth Godin in his book, the Tribes describes the difference between a thermometer and a thermostat. According to Seth while thermometers; tell you what is wrong; they are use-less primarily because they are incapable of changing things. Thermostats on the other hand, change things, silently --- and almost automatically.

Whiners feel they are in control. They often have 'revolutionary' ideas to change the organization. They indulge in a lot of meetings to that effect. They get very excited when you invite them to meetings and ask them their opinions. Whiners neither connect to story tellers nor do they connect to builders and you will often here them pass remarks on the lines of - 'developers are not very good at communication'.

Whiners love sophisticated tools and systems. Tell them of an organizational problem and they will start talking in terms of systems you are going to need.

Whiners are also hugely insecure about their jobs and will hardly ever take independent decisions or judgment calls. Whiners are notoriously famous for organizing meetings and inviting huge audiences in them; to take everyone's opinion. Having said that you will see no decisions emerging out of those meetings.

If you have heard yourself or someone complain about the lack of process, lack of documentation or lack of discipline in your organization, the individual; in all probabilities, is indulging in the act of --- whining.

Builders don't bitch. They fix things. Sometimes they do it so silently, it's creepy.  

As we move on through the book you will meet a few whiners and learn techniques of avoiding them. Having said that, this is not their book --- so let's keep their introduction as short as possible. Let's just wrap up for the time being by stating a general fact.

Builders make organizations, whiners break them.

How many whiners do you see around you?

Are there interesting, funny stories about whiners that you know of, dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, May 01, 2009 8:09:20 PM UTC  #    Comments [5] Trackback
Posted on: Wednesday, April 29, 2009

Builders are guys who build stuff.

Software. Bridges. Cars. Roads --- Stuff.

For the early part of my engineering career this is the only kind I respected.

Then I met the other kind who are just as good at building and shipping. These individuals however, do not ship 'stuff'.

Storytellers, build, ship and spread --- stories.

Remarkable stories.

Stories built on strong honest foundations of truth.

'But Pops, you're talking about marketers' --- you say.

No I am not.

If you are working for a software development shop; look around.

Observe. 

Chances are that you will find them in all walks of software development. Some of the best story tellers I have seen have played absurd roles --- project managers, team leaders, catalysts and even evangelists. 

Honest, genuine, good story telling, done even at simple levels can make or break projects. 

Flashback time --- here is one example.

At Multiplitaxion Inc., two projects are over budget with similar variances from the initially budgeted timelines.

Fred is leading Project 'A' - a few of us in innocent fun; decide to name it Project Rocket Science.

Fred, after flexing all his management mussels, his state of art 'resource management' techniques and his proven 'processes' is not being able to keep the project from falling apart.

Weeks into the project the team has lost faith and has started shipping crap.

Months later the management looses faith and pulls the plug.

"Funding" --- we are told. We run out of funding. 

Project Rocket Science is officially dead.

Project 'B' on the other hand has similar issues of bad estimations.

The project however had more than one story tellers involved and connected with the project.

Project B's team does not embark on a project. They embark on a story which they have been told. A story built on truth with larger than life elements to it.

As the ramp up for the project is happening, every single member of Project 'B' is hand picked. They are told in clear teams that they are being picked because the project is special and that they are the best. They are told that they have been picked, to create meaning; to shape the future of an organization. To build a remarkable product that will change not just an organization but an entire industry.

It takes time, but the story is told remarkably; from one story teller to another; until it spreads through the corridors of the warfront where the development is done.  Everyone; including the story tellers themselves; believe the story.

When we slip deadlines we are told that we were making history; we could not ship crap. We're told not to lose patience. Not to panic.

Half way down the project we are convinced that there is no reason to panic.

Then as the project proceeds; something creepy happens --- the story slowly and steadily starts to turn into reality.

We start shipping stuff that was genuinely remarkable. Stuff that very slowly and steadily starts making it's slight dents in the overall industry.

Flashback over.

Ok, here's the million dollar question --- where did we go right with Project 'B'.

First thing where we went right was of-course the fact that we had amazing builders. To add to that, what we had was an amazing story. A cause. A meaning. A purpose. The project wasn't something we shipped to get our job done or to get our salaries. We connected to the project. We connected to the story around the project.

The outcome? 

No-one stopped the project.

We shipped a product which was not just profitable; but remarkable in it's own way.

True, we were as over budget just like Project Rocket Science; but if there is one thing that you can take from this story; it is this:

No-one; I repeat --- No-one cares about the budget.

Neither your team, nor your management, nor your client.

One way to look at your budget and deadlines, is to see these as commandments you absolutely must follow.

But, in the long run, that does not get you anywhere.

If that is your line of thought, you will continue to build mediocre products that can be otherwise defined as 'successful failures'.

Story tellers have a slightly different way to look at budgets and deadlines. They see them as mundane numbers; nothing but boring facts. Story tellers know that people who sign the paychecks and the clients; look at these boring numbers 'only' when they have nothing more interesting to look at.

In the case of Project 'B'; the 'story' was larger than the boring facts. It was much more interesting, exciting, evolving, fun filled and remarkable.

The outcome of the story, the product itself, was even more remarkable.

Obviously, no-one looked at the boring facts.

We shipped. We made a dent in the universe; in our very own small way.

We were successful.

Story tellers, as it turns know that a lot of their story telling depends on stuff the builders ship. This is why genuine story tellers show a lot of honest respect for builders. They use their art of story telling to get the crap out of the teams way. They use their art to glamorize projects; products and even team members who deserve to be glamorized. They use their stories as bullshit busters; and to change stuff; for the better.

Story tellers, besides respecting builders and hanging out with them connect to them; genuinely; and naturally. They stick their neck out for people who build stuff. This is because genuine story tellers know fully well that without remarkable products and remarkable stuff there can be no remarkable stories which are built on foundations of honesty.

Without amazing builders, the role of an amazing story teller does not exist.

Good story tellers know this fact and aren't ashamed to admit it. Openly.

Story telling is hard.

What is in-fact not hard, is wearing the badge of a pseudo-storyteller.

Now, that's easy.

To do this you go around building a lot of political relationships with people high up the pecking order in your organization. Then you play the nice guy with your team and when hell breaks lose or when you get pecked on by the peckers high up in the pecking order you peck on your team.

Here's another way to pseudo-storytelling.

Go to a client meeting --- when the client questions you about a feature you don't have and they are wondering if you can build it by the trade show which is going to happen next month; nod your head and say yes to everything; hoping your development team will build it by 'staying back a little late' or by 'pushing harder'.

Remarkable Story Telling as it turns out, is much harder than being a pseudo-story teller or a whiner.

Are you a manager --- Weave a remarkable story around your teams; get a few genuine builders promoted and a few whiners removed from the project. Weave a remarkable story to calm down a panic stricken client, director or vice-president.

Are you a Vice President --- Weave a story to add meaning to a product or an entire organization.

Marketer --- Get just a hundred mavens who are genuinely interested and will spread the word to sign up for an awesome service your builders have built.

Writer --- Try to get a thousand unique returning visitors per day on your blog.

Indulge and aim at either of these and you will learn first hand how hard story telling really is.

It's hard.

Really hard.

It is in fact as hard  building stuff; because when you weave a story, you are in fact, indulging in the act of 'building'; even if it is not 'stuff' that you are building.

If you are a pseudo-story-teller you are just another whiner.

If you are a genuine story teller; you are important. We need you.

Are you a story teller?

What are some examples of story tellers you have worked with dear reader?

How have storytellers improved your work-life, dear reader?

Discuss. 

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Wednesday, April 29, 2009 5:10:42 PM UTC  #    Comments [0] Trackback
Posted on: Friday, April 24, 2009

Of all the people I've worked with in my software development career; every single one of them; in terms of what they do; can be grouped into one or more of these three categories:

Irrespective of where you work, what you do, what your business card reads, what your designation is or what your role is --- you fall in one of these three categories: builders, story tellers, whiners.

After years of analyzing people; especially people who work in software development; that is the conclusion I have arrived at. 

Everyone is one of these three.

It is that simple.

You may have traits of one or more of the three but overall you are one of the three.  If you are going to read through this book, it is important that you understand these three personalities well; really well.

Learning from builders and story tellers is what this book is all about; so it makes sense to introduce you builders first.

Ready?

Read on.

Builders.

Builders build stuff. Amazing stuff. They ship.

They are the ones who might be making your life interesting with remarkable and innovative products or services and you may not even know it.

Christopher Baus learnt the importance of being a doer while making a career choice. He explains:

Software isn't about methodologies, languages, or even operating systems. It is about working applications. At Adobe I would have learned the art of building massive applications that generate millions of dollars in revenue.

Sure, PostScript wasn't the sexiest application, and it was written in old school C, but it performed a significant and useful task that thousands (if not millions) of people relied on to do their job.  There could hardly be a better place to learn the skills of building commercial applications, no matter the tools that were employed at the time. I did learn an important lesson at ObjectSpace. A UML diagram can't push 500 pages per minute through a RIP.

There are two types of people in this industry. Talkers and Doers. ObjectSpace was a company of talkers. Adobe is a company of doers. Adobe took in $430 million in revenue last quarter. ObjectSpace is long bankrupt.

That is exactly what builders do to organizations.

They build stuff; which invariably ends up building organizations.

They change crappy organizations into productive ones.

Silently. Innocently. Sometimes, even unknowingly.

If you've ever stumbled upon a team of genuine builders and you are a smart individual, there are a few things about builders you tend to learn rather quickly.

Most builders as it turns out, are quiet; very quiet --- at-least that's what most 'managers' will tell you. The notion of the introverted programmer who is so busy talking to the compiler that he loses touch with reality and stops talking to human beings is the stupidest stereotype painted by classical managers who for reasons more than one cannot seem to connect to builders.  You will of-course find builders to be incredibly quiet; but only till the time you connect to them.

If you've ever stumbled upon a team of genuine builders and have connected to them you probably know rather well that there are exactly two ways of connecting to builders.

The first one is so simple; it almost sounds stupid to write it down; and yet it is so important that I am going to indulge in the act of stupidity and write it down.

To connect to builders, you need to be a builder yourself.

That is correct. Builders, as it turns out, can smell stuff getting built from a ten mile radius. If the stuff that's getting built is genuinely remarkable they can sense it from a different planet or even a whole different universe. Your best chance of connecting to a team of builders in your organization, while you work with them, is to indulge yourself in the act of building and work with them; hand in hand.

Put simply, roll your sleeves and do some real work if you can.

The second way to connect to builders, is easier and harder that the first approach. Easier because you can walk into office tomorrow morning and do it; just like that. No special technical training required; no classes required; no special sixteen hours a day of slogging required. Harder because you won't do it. It is in fact so darn simple, I can spell it out in two small sentence for you; which is exactly what I'm going to do.

Ready?

Get out of their way.

Then when you have learnt how to do that get the bullshit out of their way and let them build stuff; even if it gets you fired. 

Doing both of these things is hard and they don't even teach you how to do these in management schools.

Actually, it is as hard as being a builder. It involves putting yourself in the line and taking all the crap that is redirected to them with one isolated focus - that the builders in your organization do not lose their focus. If you can genuinely and honestly do this, and can continue to exist in your organization, without actually getting fired; the builders will connect to you.

Once you connect to genuine builders in your organization though; either by the virtue of the fact that you are yourself a builder or by the virtue of the fact that you are a bullshit buster there are things you will learn about building stuff; about innovation; about how a builder's mind works and about how things get done.

Things most organizations and individuals do not care to know about. Things that are often not published by the articles that tend to talk about the labor and toiling of builders as a glamorous overnight success stories. Besides trying to study builders at work, this book will attempt to describe, as articulately as it can, some of these things, that I and others were able to learn by connecting to genuine builders and watching them in action.

Are you a builder?

Do you work with a team of builders?

What have you learnt by connecting to and working closely with a team of builders; dear reader?

Discuss.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Friday, April 24, 2009 10:30:45 PM UTC  #    Comments [0] Trackback
Posted on: Wednesday, April 22, 2009

"What are you up to these days?"

Throw this question to people you meet and observe.

I threw the casual question at an acquaintance working in a large IT department of an organization. From then on, he took over the conversation holding me hostage to his story as he described his recent tour to Australia; his recent promotion; how he now had seven people reporting to him and a truck load of crap which was supposed to make me look at him in awe as I heard him speak.

If you ask me honestly though, he was boring.

If I could have yawned without insulting him, I would.

The same question led to a very different answer from a passionate developer whose organization had just removed him from a project that he had started a year ago and had asked him to work on another project which, according to his organization, was much more critical.

He held me hostage too. He talked about how his management didn't understand software development, how is boss was an ass-hole and how nothing ever worked out as well as expected in his organization.

Frankly, he was equally boring.

If I could have yawned without insulting him, I would.

The same question asked to a distant relative also working at a software development shop; resulted in boring stories of his a vacation with his wife and his friends. He held me hostage as he gave me a boring account of how he and his wife did a lot of shipping during this vacation and how they managed to land up with the best prices.

Yawn.

That same day, around a thousands of individuals answered the same question on my RSS aggregator; without even being asked to answer it.

Some of them talked about a nugget of wisdom they picked up in their management life; some of them shared their neat code; some published a tool; some talked about an open source framework they were releasing; some talked about a neat idea which would make their build and deployment process better; a couple of them had read a book and were recommending it with a warning about specific parts which they found slightly boring.

A huge number of these discussions were remarkable

None of them bragged about their promotion; their position in the official pecking order of their mediocre organization; their salary and how they saved a few dollars during a boring vacation.

Even when they indulged in rants, they did it in an uncanny classy style brimming with passion, cause and described the lessons learnt along the way; rather elaborately. They took their rants, made them interesting, packaged them with humor and shipped them with an intent of passing on what was learnt from a rather ugly or painful experience.

There were no boring monologues.

I did not know any of these individuals personally.

Honestly, I wasn't interviewing them. They were not answering my question.

They were building stuff; remarkable stuff; software, stories, experiences and communities. They were creating remarkable tools; building applications that would change the world; tweeting nuggets of wisdom; writing articles, doing blog posts and then when they are done; they were pushing whatever it is that they were building live.

They were building stuff; and shipping it. Without whining; without excuses; without cribbing, bitching or moaning. 

Some of them worked at prestigious names like Microsoft and Google; some were independent consultants; some were working in insignificant companies that you wouldn't be able to locate on the map if you tried to; some were leading teams; some were managers; some merely college students and a couple of them were even single moms; but none of that mattered.

What mattered was that they were building stuff in ways more than one.

What mattered even more; was that they were having fun.

They were having a party and anyone who cared to join in --- was invited.

These were not whiners; talkers or boring employees who do what they are told to do. 

These were relentless workers, story tellers, rule benders and people who make small and big dents in a really large universe of 'normal' human beings that is generally hostile towards the idea of things changing. They were what I like to refer to as --- builders; and they were at work.

Look around you; and if you are lucky; you might have a few of these amazing builders sitting around you.

Think of people you work with; and you might know a few of these guys yourself. 

This dear reader; is their book.

If you are one of them, dear reader, then this, is a book about you.

These are the gripping stories from the strangest corners of organizations where remarkable things get built by builders who indulge in the process of 'building' for two reasons in particular --- because they love building things --- and because they 'can' build things which are genuinely remarkable.

Note: This article is a part of a Work In Progress Book. To Read connected articles read the Builders At Work category of this blog.

posted on Wednesday, April 22, 2009 8:09:23 PM UTC  #    Comments [0] Trackback
Posted on: Friday, April 17, 2009

In my earlier post, I talked about one reason why you should write an e-book. In the same post, I talked about how blogging is more like bathroom singing and writing a book is more like performing in a live concert.

For the past few days I've been stuck with this idea that will not let me rest in peace till I work my ass off on letting the it gain a form and an independent existence. I've written a couple of posts on the idea, but somehow like an ignored child, the idea seems to demand more of my attention; which I plan on giving it for the next couple of months; and I plan on doing this by writing a dedicated e-book based on the idea.

I love blogging.

I love everything about blogging; There is nothing more rewarding than seeing a meaningful idea that I really believe in, taking a shaping of its own and coming into existence. There is nothing more delightful than pushing the publish button on a post that is about something I genuinely believe in.

The only thing that tops that delight is your involvement, dear reader, through comments, when you go out and post some of these on other sites, when you blog about them, cite them or send emails to me about a post that was written with hours of thought and effort.

This blog, dear reader, is my third place and I am more 'me' here than I am myself in most places including places where I work.

Because the idea of undertaking the e-book has everything to do with fun; done in my free time; it therefore makes common sense to publish the e-book content out on my third place. The e-book therefore, dear reader, will be published out to you; as it takes shape and form.

Going forward I will be publishing posts that I write for the e-book under the category - My books. Because it is going to be mostly unorganized bathroom singing; the posts that will be published will be in no particular sequence. I am hoping that as we move forward the idea will come out in the open; make itself crystal clear and will resonate with you; dear reader.

As always, I would love feedback, criticism and participation from you dear reader. In the weeks to come I will publishing the book here, post by post as it starts taking shape. You reactions; I assume will be on the following lines:

  1. Hate the posts.
  2. Love the posts.
  3. Want to suggest something else I should be covering.
  4. Want to point out typos and stuff that should be edited out.
  5. Want to contribute and help the discussion grow.
  6. Have similar experiences.

The thing to do in all these cases is simple --- drop a comment; blog about it; drop me an email and express your opinions.

Remember, anything that is published here can still change in the book when it is finally published.

Put simply --- participate and contribute.

If blogging is like bathroom singing and writing an e-book is like singing in a live concert; I am going to get up on the stage of a live concert and do some bathroom singing.

This is your chance; dear reader; to boo a bathroom singer in a live concert.

You're not going to miss it; are you?

Looking forward to your participation and contributions.

Oh and before I forget --- wish me luck.

posted on Friday, April 17, 2009 9:59:43 PM UTC  #    Comments [0] Trackback
Posted on: Wednesday, April 15, 2009

If you have ever been held hostage by an idea which will not set you free till you work on bringing it into a concrete form of existence, you probably know why the act of blogging is serious painful work and at the same time an addictive; highly rewarding and fun filled exercise.

Having said that, for me, writing blog posts is pretty much like free form dancing or bathroom singing.

You don't have to worry about every single idea resonating with your readers. If one doesn't work, they will show up; again; the next day for a completely new idea; a completely new perspective; this time, they may agree to agree and absolutely love your post.   

Writing your own book however, is different.

For a book to succeed; or for you to even attempt to write a book; you need to be hit by a a single insanely strong idea and then work your ass off at it. You need to put the idea on a test of its limit as you probe deeper with a coherent yet remarkable stream of thought.

If your idea is flawed; or not remarkable; you are basically screwed; big time.

You end up making a fool of yourself; after days of writing, editing; re-editing; proof-checking and toiling.

Put simply, if writing a blog is like bathroom singing; writing a book is performing for a live concert.

True it has its glamour associated with it; but along with the glamour; it involves a lot of work; risk of making a complete fool out of yourself and above all, some serious commitment.

Google the topic of writing your own e-book and you'll get a gazillion articles; describing the glamour associated with writing your own e-book and how you can be an overnight success and an instant millionaire by writing your own e-books. Only a minuscule number of these articles talk about the hours of hard work the usually go into this sort of an initiative before anything you write is read by more than an audience of one called you.

Amongst the hundreds of boring self article which are not even worthy of being linked of plugged from this post;  I happened to bounce on one that resonated with me or moved me positively. It was a post by Seth Godin and his advice on writing your own e-book.

It's technically easy and when it works, your idea will spread far and wide. Even better, the act of writing your idea in a cogent, organized way will make the idea better. You can write an e-book about your travel destination, your consulting philosophy or an amazing job you'd like to fill.

Seven years ago, I wrote a book called Unleashing the Idea-virus. It's about how ideas spread. In the book, I go on and on about how free ideas spread faster than expensive ones. That's why radio is so important in making music sell.

Anyway, I brought it to my publisher and said, "I'd like you to publish this, but I want to give it away on the net." They passed. They used to think I was crazy, but now they were sure of it. So I decided to just give it away.

Writing; is much like singing or exercising your mussels. The harder you work at it, the better you become. That dear reader, is the only true reason why, if you write for your blog and if you have an idea which you believe is worth sharing, you should try your hand at writing a book. You should do it because it gives you an opportunity to do more writing; which is what you love doing.

That, dear reader, is why you need to write a book.

Not because of the five figure income or that celebrity status the millions of readers who go gaga over your book are going to bring you.

You should write a book because you have an idea that will not let you rest in peace till you work on bringing it into existence and the idea or story demands more than just an isolated blog post in order to conveyed articulately.

Writing an e-book is easy. Writing a good one is hard. It's like climbing a mountain. You should try writing an e-book because it lets you see if you 'can' climb the mountain; and once you know you can; you should do more of it.

Why?

Because you can.    

It is really that simple dear reader; it's that simple.

No, you are not going to have a million users drooling over your book.  No you are not going to be a best selling author with a five figure income.

Wake up time. I hate to break the news to you but, that overnight success you might be looking for through your book doesn't exist.

To be honest, you'll be lucky if you don't end up making a fool of yourself with zero downloads.

If you've never done it before chances are high that you'll get sick or tired of it and quit in the middle.

Remember, there are only two reasons why you should write your own e-books; because you really want to; and because you can.

Now; do you want to write your own e-book?

If you said yes, you probably know what it is that you are getting into.

If you said yes, chances are high that I am going to enjoy your reading your book after it is done.

If you said yes, you should write an e-book.

I wish you good luck.

posted on Wednesday, April 15, 2009 7:16:35 PM UTC  #    Comments [0] Trackback
Posted on: Friday, April 10, 2009

If you've ever been involved in a sales chase for a million dollar project you probably know that folks who market consulting services and software products will go quite far to sell their products or  services to you and close the deal. The whole act of lying about quality of people working for the organization, timelines and above all features that the product being sold has, is an age old Adam's apple folks in the business of marketing software have been tempted to bite for years.  

After all software marketers are experts and their interests revolve around selling you their services. If you have a problem and they have a hammer; they are notoriously famous for making your problems seem like a nail.

Seth Godin in his book titled All Marketers Are Liars describes how all marketers are supposed to indulge in the act of story telling:

Marketers are a special kind of liar. Marketers lie to consumers because consumers demand it. Marketers tell stories, and consumers believe them. Some marketers do it well. Others are pretty bad at it. Sometimes the stories help people get more done enjoy life more and even live longer. Other times, when the story isn't authentic, it can have significant side effects and consumers pay the price.

The reason all successful marketers tell stories is that consumers insist on it. Consumers are used to telling stories to each other, and it's just natural to buy stuff from someone who tells us a story. People can't handle the truth.

Seth in his book describes how marketers make consumers and even veteran wine tasters believe that the same wine actually tastes better when tasted in a better glass. The book has other examples including that of a real estate marketer who takes customers around the neighborhood and talks about the various other houses including the lives of people living in those houses.

Seth describes how the individual selling the house is not selling the property he is supposed to sell. He is selling a story.

The book is all about successful story telling.

Story telling that can genuinely create win-win situations both for the marketers and the consumers.

Then there are times when the story telling isn't authentic. The foundations, framework and the very core of the story is built around a lie. That is when Seth warns that the consumer ends up paying the price.

With software however; there is one more group of individuals who end up paying the price of lousy story telling built on utter lies ----- the development team.

My first successful failure was a classic example of the marketing team promising too much with little or no respect for the iron triangle under the influence of wishful thinking and the we-have-a-great-team-that-can-do-it story.

Apart from a few folks, like 37signals, Google and a handful of others who have a great story to tell; almost all other software marketers; especially the ones selling consultancy services; are down right lousy story tellers who don't have anything new to say. Most stories revolve around the same old rather lame ideas:

  1. We can meet your deadlines.
  2. We can build something really cheap (by outsourcing most of the project).
  3. We can deliver quality.

Of course if you pay us more we can do all three and vaporize the iron triangle into thin air; just for you.

If software marketing, for you or your organization, is just about one of these three lame old stories or their combination, your marketing efforts; just like your product website and descriptions; might be downright impotent.  

Pawel Brodzinski describes his rather honest and candid approach to software marketing:

I often try to bring this kind of approach to the table. Too often. You shouldn’t be surprised if you’re a customer and I ask you: “We plan to develop this product for you, does it makes any sense for you or is that just a brain dead idea?” I may also state: “This function would make both your and our lives easier, although I don’t believe they’d allow me to do it for free. Would you find some budget for the feature? I promise the price will be good.”

On the side note, if you ever worked with me as a salesperson I know, you already hate me. I guess I must live with that.

This approach may weaken negotiating position of my party. Sometimes it is considered as pretty harsh by customers since you occasionally don’t wrap up the truth with nice marketing blah-blah (“No, we won’t build and deploy complex telecommunication solution in a month”). That isn’t playing by the rules and from time to time people find it hard to deal with it at the beginning.

However the thing I found out is that when a relation with the customer is already built they start to appreciate this attitude. Having an honest source of information on the other side is quite a valuable thing. Even when the guy is sometimes too honest and too straightforward.

Marketers are supposed to be story tellers. If you are in the business of selling; you need learn the art of story telling and weave stories that are completely new, remarkable and built of a strong foundation of facts; not the same old lousy stories woven around disrespect of the iron triangle. Software marketing guys have been telling these same old stories for years and honestly we're all a little sick and tired of these.

Even if you not a master story teller and can't tell a win-win story which is completely new; you still have a trump-card up your sleeve --- move over to plain old honesty; because honesty in the world of software marketing; as it turns out; is sofa king --- [to be read loudly and very fast] --- extinct that the mere act of being honest will make you a remarkable purple cow and help you not just close your deals or win customers; but have long lasting business relationships.

I wish you good luck.

posted on Friday, April 10, 2009 8:56:01 PM UTC  #    Comments [0] Trackback
Posted on: Wednesday, April 08, 2009

Sometimes what you want to be is best defined by what you do not want to be.

Success-Factors CEO Lars Dalgaard has a passion for developing a company where employees are nice to each other. This point of course, is described much more articulately by his passionate hatred of ass-holes than it is by his love of niceness in the workplace.

The folks at 37Signals define this as picking a fight. They explain:

Sometimes the best way to know what your app should be is to know what it shouldn't be. Figure out your app's enemy and you'll shine a light on where you need to go.

When we decided to create project management software, we knew Microsoft Project was the gorilla in the room. Instead of fearing the gorilla, we used it as a motivator. We decided Basecamp would be something completely different, the anti-Project.

They explain why picking a fight helps:

One bonus you get from having an enemy is a very clear marketing message. People are stoked by conflict. And they also understand a product by comparing it to others. With a chosen enemy, you're feeding people a story they want to hear. Not only will they understand your product better and faster, they'll take sides. And that's a sure-fire way to get attention and ignite passion.

Jeff Atwood refers to this process of picking up a fight as having an arch enemy.

Overall, advice from Jeff and the folks at 37signals is just as relevant to career building and life as it is for product development.

As a part of my day time job, I interview countless young and budding developers around the world. Honestly, even today, after years this excersise, I continue to be amazed by the level of indifference most candidates demonstrate during their interview. They will move from .NET to PHP and Scrum to CMM Level 5 implementations, with no personal preferences what-so-ever, only if you were to hand them the job they seem to need so desperately.

In a world where most programmers can't program, and only a minuscule number of them are capable of forming their own opinion on anything; asking them to feel so passionately about a way of building software, a technology or any idea for that matter; that they start considering it their arch enemy or friend might be too much to ask for them.

On the other hand, if you are reading this blog; chances are high that you do not fall in this category of programmers. Chances are also high that you take your work passionately and consider it more than just a way of earning your lively-hood; and that dear reader, implies that you need to find your arch enemy.

During the early days of my career, I lived the life of a conventional good programmer climbing the ladders of promotion year after year with a passion for programming and a will to learn whatever it takes to get those promotions. Life was both comfortable and highly boring; till the time my first successful failure defined my arch enemy for me. Honestly this project did the job of defining my enemy much more clearly than I would have hoped.

Since then I've passionately hated all forms of stupidity that happens in the name of organized process and corporate culture.

My name is Pops, I write shitty code with bugs and my arch enemies include stupidity, lame conventional management ideas and incompetence camouflaged under jargons, the pretense of so-called 'serious software development' and 'process'.

It is of-course a hugely big enemy to pick; as it turns out, there is more stupidity in the world of software development then there is common sense. Take a quick look; chances are high that you'll find it all around you.

Picking up fights with this mammoth arch enemy has allowed me to bring about small changes in my universe. It has taught me more about being a better software developer, a better manager and above all a better human being. Much better than what I would have ever learned to be had it not involved working passionately at learning how to beat this arch enemy.

As far as the fight is concerned; it is far from over yet.

Have you picked your arch enemy yet dear reader?

Which fights are you fighting? 

If you have no enemies and no wars to fight, you might be missing out on a whole of lot exciting challenges, passionate struggle of thoughts and above all an ability to be 'remarkable'.  

Whether you are building a product, building a career or building a life; having an arch enemy is much more important than most people think. 

Pick a colossal arch enemy and then work passionately to wipe out it's existence from the surface of this planet.

I wish you good luck.

posted on Wednesday, April 08, 2009 9:09:44 PM UTC  #    Comments [0] Trackback
Posted on: Friday, April 03, 2009

As a project manager, team lead or someone who works with a team what is your biggest nightmare?

When a couple of your smartest developers agree to disagree on something stupid and none of them is willing to give up or let go.

In the interest of keeping this post short, allow me to use my artistic skills to represent the scenario.

At my early days at Multiplitaxion Inc, I saw countless young and budding managers avoid these situations and issues like a plague.

Their excuse --- "I think I will let them sort this out mutually".

The reality --- "Are you mad? I am not sticking my neck into this mess; specially for the salary I get".

A major part of your job as a manager is to differentiate healthy arguments from never ending deadlocks.

You are supposed to spot deadlocks from a ten feet radius and make sure people do not stall and thrash their brains over never ending deadlocks.

You may not have the right answer. No one in your team might have the right answer; but anything close to the right answer is better than nothing.

Situations like these are precisely the kind that will require you to put your foot down and take a stand. This is exactly the kind of thing which requires your involvement, judgment, decision making capabilities, straight forward feedbacks, a strong spine and conviction.

Go ahead, make a call; take a stand. 

Then take responsibility for any failures if you encounter hiccups when your team moves forward based on your judgment.

Show us what you're made up of Mr. Manager.

I dare you.

On a side note, as far as that picture above is concerned -- we're just going to go with five for the time being.

posted on Friday, April 03, 2009 9:47:28 PM UTC  #    Comments [0] Trackback
Posted on: Wednesday, April 01, 2009

As acquaintance, who for the purposes of this post we shall refer to as Fred, cried on my shoulder about his incompetent team-lead earning more than double his salary; I was pleasantly surprised at the openness of his organization. It seemed like it would have taken a lot for his organization to make him privy to information that most organizations consider confidential - his immediate reporting manager's salary for instance.

From the tone of authority with which he flaunted the facts and figures pertaining to his organization; it sounded like this was one open organization that had no secrets.  It sounded like his organization was built on a very open culture.

His professional world, seemed like it was made up of what can be generally described as 'transparent'.  

It was after around an hour long conversation that I finally figured out that his professional world was in fact, nowhere close to transparent. The facts and figures Fred was flaunting to me were figures picked up from the gossips that flowed through the corridors of his organization. Questions flashed through my mind as I heard Fred complain away to glory. I didn't think about questions aloud but they were pretty much on these lines:

  1. How did Fred know if any of this information was accurate?
  2. Did his managers even know he had inaccurate information picked out of empty gossips; information that he was using to make judgment calls as important as deciding if he should continue with the organization or look for a different job?
  3. Did Fred himself know the true source of the information; and much more importantly; did Fred even care if the information was accurate or not?

This was clearly a case of the a modern day so-called-flat organization that wasn't quite there. An organization that read a few articles about Google, said - "sure, we can be like that" and then went out and missed the whole point.  After listening to Fred for almost an hour, more than I felt sorry for Fred, I felt sorry for his manager and his organization.

What I was witnessing first hand was what can be otherwise described as lack of information resulting in information being 'constructed'.

Jurgen Appelo in his post on Why Great Managers Have No Secrets describes this phenomenon itself, how it works the dangerous of 'constructed information' and how to prevent it, rather articulately:

When people lack good information, they will invent some information themselves. When they don't know how well their project is doing, they will try to guess. When they don't know how other teams are performing, they will make assumptions. When they don't understand what their colleagues contribute to the organization, they will invent their own reasons. And when they don't know about their manager's personal life, they will gossip about it.

To prevent bad information from flowing through the organization you have to give people good information.

In the same post, Jurgen gives sound advice to managers wanting to push for an open culture and avoid un-necessary gossip or randomly 'generated' information. He explains:

Managers should strive to have no secrets. In our organization I made sure that a lot of information is available for everyone. They all can see who is working on which projects, which features, bugs and issues are being handled, and what the team members' evaluations are of those projects. Our people's personal time sheets are public for all, and so are the ratings they give to indicate how happy they were with their projects.

My next step will be to share more financial details about costs and revenue for each of our projects. In tough economic times it is particularly important to make everyone understand what the organization's financial performance is. As Jack Stack wrote in his book: only when employees care about financial figures, they will think of ways how to improve them.

Some great managers (like John Mackey, Chairman and CEO of Whole Foods Market) even argue that people's salaries should be made public, including their own. After all, if you cannot explain some employee's salary to everyone else in the organization, then how can you expect people to trust you as a manager?

I can agree with that. But I also understand that you cannot change an organization's culture overnight. It would be very unwise to start publishing everyone's salaries when there's no culture of doing so. But you have to start somewhere.

As managers we love the idea of the team being completely transparent. When something is broken, we want to hear it; when things don't work we want to be involved; when a team member is thinking of quitting we want to be informed so that we can make alternate arrangements.  The problem with transparency however; is that it doesn't work one way.

You can chose between a transparent flat culture and a highly political one; but if you pick transparency the same employees who look at you in the eye and tell you how badly broken their project is; over a cup of coffee; will ask you what your salary is over an informal lunch.

It doesn't stop there. If these guys are smart, besides being open, they will also form their own opinions on how much you should be paid and then make intelligent mental judgments on whether you justify your salary.

Before you go out there and blow your trumpet of transparency; what I intend to do with this post, is to tell you dear reader, that it is perfectly healthy for this to happen in your organization; if you consider it transparent. If you have a kick-ass team of developers; and a huge part of your team cannot justify your salary; you probably don't deserve it.

The short point of the long winded is simple; you can't pick the direction and the exact level of transparency you want to have within an organization. Open transparent culture is something that you need to inject in the DNA of an organization. It is a road on which organizations choose to travel life-long and get better over time.

If you're going to take your first three steps of on the path of transparency and then stop; may I suggest, dear reader, that you do not waste your time trying to being about 'some' level of transparency; because your team will have the fundamental building blocks of 'constructing' information and will make educated guesses leaving you in no better position than the hugely political environment full of random gossip your started off with in the first place.

If however, you are going to go all the way eventually and are willing to walk this path with life-long commitment you just might see the passionate commitments developers have for their jobs, their teams and their workplaces.

Transparency is not something that you can just expect as a manager but not give back. It is not something where you can freeze the exact level of transparency you want. You can't have some of it and then stop; because if you do than what you are basically left with is a culture that's not transparent; a culture where constructed information and random rumors are given room to flourish.

Put simply, transparency comes at a price and is often rather expensive. It is a commitment; a way not life; not just a buzz word you put on your website. 

If you've taken your first steps towards walking the life-long path of transparency; but are not quite there yet; all you have to do is keep nudging yourself and your team to get a little more transparent each day; each year. Very soon you'll see a level of maturity from your employees that you never even dreamt of. I wish you good luck.

If you're not walking down the transparency path; I wish you good luck anyway. You're going to need it. Lots of it.  

posted on Wednesday, April 01, 2009 9:32:49 PM UTC  #    Comments [0] Trackback
Posted on: Friday, March 27, 2009

Go to your organization's website; How many of these words can you find there: ROI, Quality, Scalability, Security, Reliability, Extendibility, Enterprise. How many other hollow words lacking meaning, purpose and any form of originality can you find on your website or your corporate blog? If you can count more than ten occurrences of those words, here's my ten-to-fifteen-year-prediction for your organization.

Obviously, it won't happen overnight; but it'll happen.

That or your organization will forever remain in the realm of mediocrity; much like the Taxi cabs waiting outside the airport; all of them looking exactly the like other; competing for the same set of customers and landing on their customers by random co-incidences.

Guy Kawasaki in his book The Art of Start gives advice to young and budding startups on how to differentiate themselves. He explains:

Most companies use the same terms to describe their product or service. It's as if they all believe that their prospective customers have been living on a desert island and have never before heard a product or service referred to as "high-quality," "robust," "easy-to-use," "fast," or "safe."

To see what I mean, apply the Opposite Test: Do you describe your offering in a way that is opposite to that of your competition?

If you do, then you're saying something different. If you don't, then  your descriptions are impotent.

Much like the crappy jargon guys; organizations that use these words are flaunting the fact that they know nothing about making these words a part of their life-style. It's an open invitation to any mind with two brain cells or an iota of common sense to land on these websites and call the bluff.

Putting words like quality, ROI, security, salability, enterprise on your corporate website while describing what your your organization does; is like introducing yourself to a stranger who you meet for the first time, with one of the the following lines:

  1. Hi; I am Fred and I am clean. I have a bath every day.
  2. Hi; I am Fred and I wash my hands after when I leave the toilet.
  3. Hi; I am Fred and I wear clothes to office.

I could go on forever, but you get the idea. Making a big noise about Quality, Scalability, Reliability is like considering your having a bath every day your core strength.

It's stupid. Insanely stupid.

On the other hand; look around and you'll notice quite a few organizations using these words rather generously. Reasons; as stupid as they may be; are rather obvious. If you find more than ten noise words on your corporate website or product description it's probably because of one or more of the following reasons:

  1. Your organization has little or no respect for users. Most software companies tend to think their customers are idiots anyways.
  2. Your organization is busy playing it safe and actually enjoy being the white cows instead of working to become a purple one.
  3. Whoever owns the content for your website is either way too conventional; or just doesn't get it. 

All you do by using these words on your corporate website, is flaunt that you have a marketing team that thinks your customers are idiots. That or the fact, that your organization knows nothing about these words; because those who do; make it a part of their life; just like they have a shower every day. These individuals and organizations alike; do not make a big noise about it.

Hollow random big words on your public website end up being nothing other than an advertisement of your organizational ignorance and immaturity.

Avoid random marketing words that lack any clarity, meaning or originality on your website and while speaking to your customers.

If you happen to have random hollow words on your product website them consider removing them.

Long story short, don't create product descriptions and websites that are, as Guy Kawasaki articulately puts it --- impotent.

Don't bastardize your content; whether it is for your public website or your blog.

Give your website content and your product descriptions an impotency check today.

Tell us something different.

Tell us your superpower.

We won't mind if you're crappy; talk about what is it that makes you 'remarkable'.

Tell us why we should care.

Seriously.

posted on Friday, March 27, 2009 9:46:07 PM UTC  #    Comments [0] Trackback
Posted on: Wednesday, March 25, 2009

There is a certain sense of pride and joy you can get out of having an idea that will not let you go till to work on bringing it into existence. Then you work on shaping it into form; turning it into something concrete; in the form of an application, a website, content or what-ever-it-is that you work on; that can be shared with the rest of the world. It is much like the act of giving shape and figure to raw sand, shaping a mud vase or drawing on a blank canvas.

As a perfectionist; you enjoy the art; and you want to give whatever-it-is-that-you-are-working on the final touch of a specialist before you show it to anyone.

If you have been a part of any product team and have gone through a few releases, chances are high that you have been a part of release meetings where even the most kick-ass developers are arguing and trying their best to delay the release of the product. They feel they need more time for finding and ironing out every little bug that exists in the system. I wrote about this in one of my earlier post.

This is where most start-up companies, young budding programmers, big software shops and even the so-called-veterans of software development tend to go wrong. If the fundamental premise on which your product is built, is remarkable, your audience really doesn't care if the first version of the product is --- crappy.

Guy Kawasaki explains how to address the dilemma of when-to-ship in his book, The Art Of Start:

A You can spend hours discussing these questions with your team. It won' t be easy to reach a conclusion, and there is no "right" or "wrong" answer. Another way you can approach this dilemma is to ask yourself, Would I let my mother or father use the product or service in its current state? If the answer is yes, ship it.

Guy literally refers to this as the 'Don't Worry; Be Crappy' rule in his live presentation when talking about his Macintosh evangelism days:

So, Don't worry be crappy - the concept there is, if you wait for the perfect world; if we had waited for chips to be cheap enough, CPUs to be fast enough, color display, Ethernet port, slots; if we had waited for everything to be ready for Macintosh, we would have never shipped.

We would have 'never' shipped; and so, as long as you are truly making meaning; if you've leaped curves; if you have a revolution; I think the market will accept elements of crapiness to a revolution.

I am not saying ship crap. I am saying ship something that is revolutionary with elements of crapiness to it. Very, Very different; and I truly do believe that in high tech the way it works is that you ship and then you test. Other than life sciences; you ship and then you test.

Dave Winer, in his blog, takes pride in building software that is made up of shitty code with bugs. He explains:

An old software slogan at Living Videotext: "We Make Shitty Software... With Bugs!" It makes me laugh! We never ran this slogan in an ad. People wouldn't understand. But it's the truth. We make shitty software. And so do you!

Software is a process, it's never finished, it's always evolving. That's its nature. We know our software sucks. But it's shipping! Next time we'll do better, but even then it will be shitty. The only software that's perfect is one you're dreaming about. Real software crashes, loses data, is hard to learn and hard to use. But it's a process. We'll make it less shitty. Just watch!

It is easy to knit your brows at Guy's thought process and Dave's thought process on this topic; but if you give a little bit of time and effort to read between the lines when you read Dave's post or the Art of Start; you realize that what Dave and Guy are taking pride in, is not the shitty-ness of their code, crappiness of their product or the fact that their application and products have bugs.

They are in fact taking pride in the fact that they worked on applications and products which were built on a beautiful idea capable of defending itself, which were brought to existence.

That and the post is a subtle reflection of the sheer human stubbornness to keep showing up, sticking to it and make things better with time. 

You really don't need to worry about how crappy your application is before showing it off to the rest of the world. What you need to worry about is the basic premise of thought on which the application is built. What you really need to worry about is - Will that thought endure the test of time and keep you involved even after the big-bang-hype of your release dies.

Everything else; is secondary.

For almost a year, this blog suffered from starvation of content because of my desire to meticulously spell-check and grammar check every post; polish each picture; constantly question if the post met the quality of something that can be published. Once in a while; people were kind enough to give me gentle nudges and tell me that I need to write more often; and I agreed; but I hardly ever reacted by taking corrective action.

Then something happened. It wasn't a Hollywood-type-flash-of-light-realization, but it was fairly close.

I realized that it was okay to have a couple of typos here and there; as long as the premise on which the posts were built had the potential to make a small dent in my world and yours, dear reader.  I realized that I could come back anytime and fix the typos; which I often do. As a matter of fact, I continue to scan my own posts for typos even after publishing them.

I had similar realizations with striking similarities even in the world of shipping working software.

If there is one thing you take away from this post it is this: Don't waste time chasing the desire of getting it right the first time. If there is something you want to chase, chase the sheer human stubbornness of continuing to show up. Everything else is secondary.

Whether it is your new product, blog or your life; Guy's advice holds true.

Don't Worry. Be Crappy.

I wish you good luck.

posted on Wednesday, March 25, 2009 8:34:54 PM UTC  #    Comments [0] Trackback
Posted on: Friday, March 20, 2009

I spend countless hours out of my job life trying to interview managers who try to draw strict boundaries between personal and professional life. 'Don't take it personally', seems to be the management advice we seem to be giving our young and budding managers, as if it were some management mantra of success we are whispering down down their ears.

We train them to become oblivion to what can happen over a cup of coffee or a glass of beer; where else what we should be teaching them is The Godfather

If there is one thing I've learnt after years of working with small, yet closely knit teams of kick-ass developers, it is a lesson The Godfather inscribes rather clearly and articulately --- "In business, everything is personal".

In his book, The Art of Start, Guy Kawasaki, advices young and budding entrepreneurs to 'make it personal' when pitching their idea to venture capitalists:

I recently met an entrepreneur who wanted to start an online service to enable people to create trusts for their pets. She was concerned that sometimes people died before their animals. Her pitch hinged on the fact that nine million pets are euthanized every year in the United States.

My first reaction, as a venture capitalist, was that nine million pets may get euthanized, but not all of them because their owners died. Few are probably euthanized for this reason, so the market isn't as big as she thinks. My second reaction, as a dog owner (Rocky Kawasaki, boxer), was that she was right: What will happen to Rocky? He wasn't included in any of my family's wills and trusts.

The lesson is this: Position your product or service in the most personal way that you can. "What happens to Rocky?" is much more powerful than "What happens to the nine million pets?" If you hook  me with a personal concern about my own dog, I can extrapolate this to the millions of other people who are concerned about their pets.

For someone who told you dear reader, why no-one cares about you, your product or your blog, asking  you to add 'personal touch' to your work life might sound contradicting; but it isn't. It is the very fact of how the craft of building awesome software happens around the globe. The personal touch with each other, is, as a matter of fact, the secret sauce of hugely successful teams. An innocently unplanned team dinner is often the best project management tool ever.

Investors worth their salt knew the importance of personal touch even in a field as detail oriented, based on facts and numbers as financial investment. Steve Yegge  describes the warren buffet rule of investment in his rather long winded post on requirements.

The rest of Steve's post of-course is irrelevant to the context of this post, but what strikes me most, is Steve's description investors like Warren Buffet and how importance they give to the 'personal element' while deciding their investments:

Let's say, for instance, that you hear that Subway (the sandwich franchise) is going to do an IPO. They've been privately held all these years and now they're going public. Should you invest? Well, let's see... the decision now isn't quite as cut-and-dried as it was in their rapid-expansion phase, so, um, let me see, with current economic conditions, I expect their sales to, uh... let me see if I can find their earnings statement and maybe some analyst reports...

No! No, No, NO!!! Bad investor! That's the kind of thinking that loses your money. The only question you should be asking yourself is: how many Subway sandwiches have I eaten in the past six months? If the number is nontrivial — say, at least six of them — and the rate of sandwiches per month that you eat is either constant or increasing, then you can think about looking at their financials. If you don't eat their sandwiches, then you'd better have a LOT of friends who eat them every day, or you're breaking the cardinal rule of Buffett and Lynch.

Snap back to the world of software development. Diving into the depths of time, back in the days of Multiplitaxion Inc, I witnessed a senior manager being accused of granting a junior developer high ratings on his appraisal because he had better personal touch with the individual. This senior manager spent a decent amount of time trying to defend himself and ended up proving how the individual was way more efficient than others in question.

As I watched the incident unfold, I worked hard to figure what was so grossly evil about giving someone a high rating because he had a strong personal relationship. A strong relationship that had resulted out of mutual respect for each other's competency. A relationship formed out of working closely together during; and even after work hours. What was so wrong with honoring a strong comradeship based on mutual respect for each others quality of work.

During my course of software development, I've seen people lose their jobs for personal reasons, people get promotions for personal reasons and projects getting stalled because of relationships gone sour with clients because of personal reasons. I have been a personal witness to a rather crappy code base getting accepted because the client liked us, during the early part of my life as a developer. That's how powerful personal things are; even in professional life. 

You can sit here, bitch, moan and cry about how all of that is unfair; or you can embrace the fact and connect to your customer, clients and readers on a personal level; because if you do, they will reciprocate; and that, dear reader, will be a genuine relationship.

A relationship where you will earn, not just a customer, a client or a reader, but an honest well-wisher, who, in the long run, will care; not about you; but about whatever-it-is-that you have to offer them and the value it adds to their life.

In the world of software, much like pretty much everywhere else, everything is personal and if you don't get that, I'm going to have to call you an blooming-idiot and assume you don't take it 'personally'.

On a serious note, realizing how small personal touches and relationships have large impact on everything, is a crucial first step to understand software development in general and project management in particular. Connect with your team, your clients and your readers at a personal level; after all;  when it comes to business or your professional life, everything is in fact personal.

posted on Friday, March 20, 2009 8:58:36 PM UTC  #    Comments [2] Trackback
Posted on: Wednesday, March 18, 2009

Crux was developed at work; but as far as act of writing code was concerned, it was basically me; as the only human being; slamming away at the keyboard during the middle of the nights to deliver a project which would help one of our customers track their inventory as it moved across various departments. The code that went in the codebase and eventually in the base framework followed one simple thought process. This post is about that approach or way-of-life.

As a trickle of few downloads happen on the CodePlex SVN and as a small team of rather talented programmers starts looking at it; some interesting ideas have started emerging. Every time however, an idea for a new massive feature is thrown in, over a casual discussion, I tend to take on a rather defensive stance.

It is not because I doubt the team's ability to shape the idea into reality.

It is merely because --- I hate code.

For someone who loves programming enough to write romantic poetry on it, the claim of hating the idea of writing code, sounds like a joke; even to myself; as I write this; but it is, as a matter of fact, true.

There are cases where I hate the idea of writing code; from the core of my heart; particularly when the idea of writing a class, a function or a page cannot catch me by my collar and convince me that it needs to turned into reality that exists in the form of a framework or application feature.

For months, I considered it something that was under the YAGNI label and felt rather passionately about it or synonymous to making-each-feature-work-hard-before-you-implement-it thought process; but it is in fact more than that. It is indeed a way of life described rather well by Richard Bach in the Foreword of his book Illusions - The Adventures of a Reluctant Messiah. Richard explains:

I do not enjoy writing at all. If I can turn my back on an idea, out there in the dark, if I can avoid opening the door to it, I won’t even reach for a pencil.

But once in a while there’s a great dynamite-burst of flying  glass and brick and splinters through the front wall and somebody stalks over the rubble, seizes me  by the throat and gently says, “I will not let you go until you set me, in words, on paper.”

That’s how I met Illusions.

At the first sound of it, the idea might sound like a poetic exaggeration; but the approach has, in its own subtle way, become an integral part of my thought process. If an idea doesn't haunt me enough it doesn't get translated into C#.

If a thought doesn't haunt me enough, it doesn't get translated into a blog post and doesn't show up here. 

Whether you are a developer, a designer, a writer or whatever-it-is-that-you are; develop a love-hate relationship with your ideas. Entertain thoughts without accepting them; give them room and environment to flourish or grow but when it comes to nurturing them or standing behind them pick the ones which are strong enough to catch you by your collar and not let you go till the time you take them up.

If you have to convince yourself consciously about the strength or effectiveness of an idea, it is not good enough to bring you happiness and satisfaction in the long run. Next time you get an idea that needs to turn into code, a blog-post or take any other form of existence; try ignoring it; and see if it gets strong enough to strike back and remind you of its need to exist.

If it does, you'll begin to genuinely love and enjoy the process of seeing it come into existence.

If it doesn't, it was just a distraction or just something that wasn't worth wasting time on.

posted on Wednesday, March 18, 2009 8:22:01 PM UTC  #    Comments [0] Trackback
Posted on: Friday, March 13, 2009

If you're associated with software development and you haven't seen the movie office space you should. The particular scene in the movie to watch out for is the one where Tom Smykowski, the business analyst is questioned about his role and what it is that he does in the organization.

If you are content with a low-resolution version of the scene just so that you can get the reference-to-the-context of this post and follow along, there is a rather ugly version here. Having pointed you to that, I highly recommend, renting a DVD and enjoying it in the comfort of your couch.

The question the business analyst was asked in the scene might sound hilariously funny; but is, in reality, a rather profound question every business analyst out there should be made to answer:

What would you say you do here?

Ask this question to a truck load of business analysts around the world and I'm sure you'll get similar versions of the answer, that you heard in the movie. That and you'll get a truck load of similar crap about:

  1. Developers not being good at communicating with the client.
  2. Developers not being good enough to understand the business domain and the problem.
  3. Developers not being expressive or articulate enough.

For the truck load of answers I tend to get, I usually have one standard reply that fits them all: Bullshit.

At Multiplitaxion Inc, projects with one or more dedicated business analysts who did nothing else, had a notorious history and reputation of failing miserably. Somehow our resource management group leaned towards believing that having a dedicated business analyst associated to a project has nothing to do with it's success or failure.

The resource management group, of any organization, however, is not exactly the kind of people expected to be following up project management, software development, or for that matter, how the craft of software development is evolving over time. Put simply there are not the group of people expected to be following up on process mavens like Scott W. Ambler or questioning the very existence of the role of a business analyst. Scott in his rather elaborate and pragmatic article explains:

You definitely need to do analysis, but whether you need someone who just does that is a really big assumption.  Agile developers are generalizing specialists, people with one or more specialties, a general understanding of the software process, and a knowledge of the domain.  One of their specialties might be in analysis, or then again it might not.  It is unreasonable to expect everyone to be an expert at every aspect of software development, but it is reasonable to expect IT professionals to have some analysis skills and for some people to have deep skill in this activity (amongst many of their skills).

You need to do analysis, but that doesn't imply that you need analysts.

The article is full of warnings, which are not just based on personal opinions or random theory; but based on real life experience instead; quite a bit of which I've personally been a witness during my years of association with software development. Scott explains:

A business analyst (BA) is a poor substitute for developers who have both ready access to actual stakeholders and agile modeling skills. Remember, BA is also the abbreviation for band-aid.

It is a rather long-winded, pragmatic and objective article, not just interested in nailing the role of the business analyst, but trying to understand pragmatically where a role of that sort fits in the larger scheme of things. It is an article every person, responsible for making hiring decisions, in any organization that wants to do anything meaningful other than what a typical body shop out there does, should read.

I've never been against the idea of doing analysis; but working under the assumption that people who are capable of building the entire system, testing it and taking it to a production ready state are incapable of understanding what it is that they need to build sounds a little over-the-top and absolutely stupid.

Every time I get into a discussion with folks who are still into Big Design Upfront approaches of software development or people who draw their inspirations out of Indian body shops, that sell bodies, pull frauds and offer no meaning to the larger scheme of things; the importance of the role of a dedicated business analyst just keeps coming up all the time.

If you are trying to run a project with programmers who are fundamentally incompetent, have no talent or desire to communicate and if your selection criteria of programmers is based on principals formed during the cheap outsourcing era, throwing a business analyst in the equation will not set things right. If you have a kick-ass team of one man armies, removing a business analyst from the equation will hardly make any difference.

Some of the best business analysts that I have met and worked with, have been people from the development or testing team. They  are people who rise to the occasion of doing analysis when required and then get back to participating in the development or testing once the analysis is done; rising up to the occasion every time it is needed in the course of the project.

Long story short, most kick-ass business analysts that I've worked with have been development leads, QA leads or project managers, who have coupled up as a business analyst. So much so that I've started believing that you 'find' a business analysts in teams of kick-ass individuals. You don't hire one.

I'm sure I'll have quite a few knitting your brows as you read this; quite a few of you, dear reader, are already thinking of telling me about that ninety page requirement document that the developers cannot prepare is really important; or you are flexing your management mussel and thinking about telling me telling me how developers are not good with UML.

You know what --- don't even bother.

I've been there and done that.  The documentation that you are thinking about, if you are thinking about one, is nothing more than CYA.

During the early part of my career, my role was to reverse engineer 'use cases' and UML models out of C++ code base which had been written by a team for literally more than fifty lousy individuals who had been outsourced purely for cost reasons.

If there is one conclusion that I came too, after brining some sense, into that specific project; collectively screwed by fifty developers and a very senior business analyst; it was this: CMM, other process or UML will not result in a successful project. Hiring a kick-ass team of competent individuals will.

Besides, Stewart Armstrong in his article where he questions if we should shoot the business analysts, seems to suggest that, eighty percent of the errors which cause projects to fail happen at the so-called requirement-gathering stage.

Analyze That!

Now, go ahead; get a full time Business Analyst for your project if you must, but before you do; ask him the million dollar question:

"What would you say you do here?"

If he is able to give you a convincing answer; by all means, hire him; but if he can't; and gives you the I-can-help-you-understand-the-requirements-because-your-developers-can't-or-I-can-help-you-draw-up-your-specifications-because-your-developers-cant crap consider not hiring him.

If you do end up hiring him, chances are high that you're not just wasting your money; you are, as a matter of fact, risking your project by introducing an additional monkey that'll have to be subdued and sedated as your project moves on and the rest of your team starts doing some real work.

posted on Friday, March 13, 2009 9:35:25 PM UTC  #    Comments [0] Trackback
Posted on: Wednesday, March 11, 2009

If there is external factor that I've seen destroy organizations and careers, preventing, whether it is individuals or teams, from doing things which are remarkable and having fun, it is --- distraction.

Paul Graham, in his list of thirteen things that he wants to tell each startup warns startups against distractions:

Nothing kills startups like distractions. The worst type are those that pay money: day jobs, consulting, profitable side-projects. The startup may have more long-term potential, but you'll always interrupt working on it to answer calls from people paying you now. Paradoxically, fundraising is this type of distraction, so try to minimize that too.

With 'business propositions' from three different individuals and three rather tempting job offers in last year alone, for someone like me, who isn't even looking for business propositions or random job offers, distraction definitely seems to be one of those things that is not that easy to avoid. Paul Graham, while talking about disconnecting distraction, explains this much more articulately that I will be able to explain it:

Procrastination feeds on distractions. Most people find it uncomfortable just to sit and do nothing; you avoid work by doing something else.

So one way to beat procrastination is to starve it of distractions. But that's not as straightforward as it sounds, because there are people working hard to distract you. Distraction is not a static obstacle that you avoid like you might avoid a rock in the road. Distraction seeks you out.

Chesterfield described dirt as matter out of place. Distracting is, similarly, desirable at the wrong time. And technology is continually being refined to produce more and more desirable things. Which means that as we learn to avoid one class of distractions, new ones constantly appear, like drug-resistant bacteria.

But distraction isn't just about technology. Distraction has an uncanny ability to morph into multiple forms and disguise itself before it strikes you and your rather fun filled life which is moving in one direction. If you are a programmer or involved with the craft of building software, this post, dear reader, is my humble attempt to present to you multiple forms of distractions which might be working on keeping you from doing things which are 'remarkable'.

May I suggest, dear reader, to use this list as a reality check of just how many distractions you have in your work life and decide for yourself if those distractions might be preventing you from coming out with results that make small dents in a large universe.

Distraction #1 - Television And Technology.

Seriously. There are dedicated posts and entire sites dedicated on this topic and how big a distraction these are. Television, video games and random social networking websites are the single largest distraction to programmers that I've ever seen. Wasting countless hours writing on the scrap book of your class two friend, now barely an acquaintance, might be a really healthy way to pass your time but does not get anything done in the long run.

If you've seen your Yahoo messenger and email notifications popup as you try to focus on getting some real work done, you probably do know exactly what I mean.

Television and technology that is addictive and disturbing is nothing more than a random distraction.

Distraction #2 - Job Offers And Business Ideas.

Last year alone, I was given three fairly tempting job offers without even applying. More than three groups of people, including a medical teacher, wanted me to hear him out, listen to his business proposition and give 'due thought' and consideration to his business idea.

Considering job offers, listening out business ideas and giving them 'due thought' is mentally stressful and distracting, particularly when you are settled and moving in one direction where your life seems to be taking you naturally.

Unless you have genuine problems with your work-life, try to find a second home, away from home and settle down. Then gear up for some real work. This stuff is supposed to be fun; and every job change demands you spend another six months to a year, to get people around you; get people to respect you and get people give a rat's ass about what you think or have to say.

In any organization, irrespective of how awesome or kick-ass it is, it takes time to create room for yourself, get people to listen to you, give you freedom and trust to maneuver. Earning this trust and room to maneuver is a 'means' towards products and outcomes which are remarkable; it's not an end.

If you've been lucky enough to have found an organization that gives you trust and room to maneuver; stay put and utilize your time to create long term win-win situations for your own career and your organization. Jumping from one job to another in these cases, is nothing more than random distraction.  

Distraction #3 - Travel And Changing Cities.

When you begin you career as a young and budding consultant, travel seems like fun. You get to see new places; meet new people and learn from different cultures. After you've done a decent amount of learning that is necessary for your life; travel quickly becomes a major distraction. Hotel suites and plane flights are not the best places to give focused effort towards what you love working on.

With a home and family, you build a support system so that you can focus on doing whatever-it-is-that-you-love doing. Constant travel takes that support system away faster than most consultants think.

Settle down. Focus. Work. Avoid travel. Do it only if you 'have to'. Travel, is nothing more than a random distraction.

Distraction #4 - Taking 'Help' A Little Too Far.

If the can-you-help-me-fix-my-machine-this-weekend questions sound way too familiar to you, you might be vulnerable to distractions. There's nothing wrong with helping as long as you can draw your lines and know when to stop.

A couple of months ago, for example, I received a call from an acquaintance who hadn't called me in the past three years. Thing gentleman wanted me to help him with his inventory control only to find out later that he was expecting me to design and build an entire freaking system for him under the banner of 'help'.

As much as you would like to be nice to everyone, especially, your child-hood friends and acquaintances, it is a sorry fact of life that the kind of people who make you feel like wearing that no-I-will-not-fix-your-computer t-shirt all the time, do exist on the same planet as we do.

There is nothing, I repeat, nothing wrong with going out of your way to help others; but knowing when the expectation of 'help' is being stretched a little too far and knowing when to stop is equally important.

Help, taken a little too far is nothing more than a random distraction.

Distraction #5 - Hot Technologies Out There.

Everyone has a product which will change the world and every product out there fits your need and your requirement; but that doesn't mean you need to care.

Yes, cloud computing might be the hottest freaking technology out there, but for your own sake, figure out how much relevance it has in your life, your organizations life before you start spending countless number of hours on it.

Not to single out just cloud computing, we spent some amount of time doing a small project in Windows Workflow Foundation; the next time on when we needed simple long running workflows, we just built a small XML based workflow engine to give us everything we need.

Just because a technology is 'hot' and it's 'out there' the experts, for obvious reasons, will exert some amount of pressure on you and make to believe you really 'need to' spend time on learning it. Time spent learning tools and technologies that have no relevance in your life, what so ever, at the cost of being mediocre at your core competencies, can be devastating for your career in the long term.

Resume Driven Development is harmful; not just for your organization but even your own career. It is in fact, nothing more than a random distraction.

Distraction #6 - Generalization Taken Too Far.

This might sound paradoxical to my advice of becoming a one man army but it's not. Turning yourself into a 'generalizing specialist' is good; but not knowing when to stop and forgetting what your core competence; in order to achieve generalization is stupidity.

When you are consulting; and you have Oracle certifications, your continuing with Oracle projects, especially when they are billed at a higher rate, might make much more sense to your organization than it might make sense to you. After I did my Oracle certifications and one small project on Oracle I had to pull the plug and detach myself from Oracle Development and database administration.

For me, understanding how the oracle architecture works was a way of improving my design skills; not a career change. I had fun learning; but it was 'not' what I wanted to spend the rest of my life doing. The same of-course, in my case, also holds true for system administration, my MCSE certification and the one year part-time system administration that I did.

Being a one man army is good; but know what you love doing; and when it's time; pull the freaking plug and stop doing things which are not equally important in your life. Be a generalizing Specialist, not a multi-purpose tool.

Generalization taken too far is nothing more than a random distraction.

Distraction #7 - Meetings And Committees.

Meetings are heroin of the software development world and committees aren't just lame - they are dangerousI've personally been drawn in the meeting-culture once, only to realize how much time and energy it can take away out of you without even making you realize that. When you are in a meeting, you are not productive. Meetings and committees are distractions of the highest order, particularly when it comes to software development and your career.

Each one of these, deserve a post by themselves, but this is not a post about these specific distractions.

The list is, indicative but not exhaustive.

Some of you, dear reader, may not even recognize these distractions as things that might be doing you a disservice. They may be intertwined with your life, but remember, if you are indulging in them they 'are' consuming more time and energy from your life and preventing you from doing what you really love doing. They might be wasting much time out of your life than you think.

Take the Steve Jobs approach to life and figure out the things that you would do if you were going to die tomorrow.

Everything else is a distraction; treat it as such and give it as little time and energy out of your life as necessary; leaving you with room, time and energy for what you truly love doing. Avoid time and energy drains.Then go out there and do what you truly love doing. I wish you good luck.

posted on Wednesday, March 11, 2009 8:12:04 PM UTC  #    Comments [6] Trackback
Posted on: Thursday, March 05, 2009

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.

posted on Thursday, March 05, 2009 9:56:22 PM UTC  #    Comments [3] Trackback
Posted on: Friday, February 27, 2009

What is worse than a meeting where everyone sleeps while the meeting-man talks?

A meeting where everyone has a different opinion, everyone talks and everyone is busy being nice to one another.

If that picture from Don't Make Me Think by Steve Krug looked familiar when you glanced through it, and it felt like deja-vu; it is probably because that is exactly how a lot of critical user interface, software development and sometime even organizational decisions are taken in a lot of places.

During a recent conversation with an individual, while talking about his company, he ended up describing the whole idea; co-incidentally; but much more articulately than I might have explained it myself. I might not be remember the discussion to the minute detail of every thing that was said to be able to quote it word for word, but here is how it pretty much went:

Individual: You know, in general I have nothing against my company; we are all amazing individuals working really hard and doing all we can do to get the right thing done or the right decisions taken; but every time it looks like something is going to work out really well, we work hard; collectively; as a group, to screw things up real bad.

Me: Interesting. Am I allowed to use that sentence on my blog?

Individual: Sure. Why?

Me: It's an interesting sentence. You might read this sentence again on my blog; sometime soon. Seriously.

Individual: Sure. Go ahead. Use it.

The whole a-group-of-really-nice-people sitting in meeting rooms and screwing things up seems to be a recurring theme that happens to manifest itself again and again, so many times that you start to question, if there is something fundamentally wrong in the idea of getting things done by perfect consensus.

Turns out, that there are times in software development when 'Committee Driven Development' as we shall call it, starting today, is down right in-effective. Scott Berkun in his presentation on how progress happens describes how democracy is bad in software development:

Committees by definition prevent change. The whole idea is to try and get consensus and consensus will always lead towards mediocrity because you are averaging out decision making. So one of the most interesting stories to me about Rome; this is a picture of the emperor Constantine.

[picture of Constantine on a projector]

He was a later emperor and one of his claims to fame... if you remember the early history of the Christians in Rome; they didn't like the Christians so much; like the whole 'throw them in the lines thing'… that is not a story; that was true.

There are catalogs of all the things they would do with Christians and Jews and slaves and other things. There were hundreds of years of horrible treatment for Christians; and then one day Constantine decided - 'You know what? We should be nice to Christians'.

Boom!

Edict of Milan, believe it was called.

Edict of Milan.

And now, next day, everyone's nice to Christians.

Boom! Like that.

That could never ever, ever, ever happen in a democracy; ever. It's designed to prevent that from happening.

But if you're talking about change and I'm not really trying to get into a debate about political structures and tyranny and what not but if you are talking about change; autocracy and solidified centralized power is actually a much more effective way to make immediate change happen.

This opinion from Scott  might be subject to a lot of criticism, by people who are firm believers of democracy, but anyone who has been in a meeting where a bunch of people, having equal or similar power, just cannot get to agree on anything, knows exactly what Scott is talking about.

'Power' by it's very nature is something that sounds like a thing the micro-managers crave and the ones who are into the modern-management, shun; but power itself, is neither good nor bad. In the ideal world power is supposed to be just a quality which enables you to get things done. That's what we mean when we say - you're-being-empowered-to-do-this - It is invariably handing power in the hands of people who crave for it the most, that results in disastrous situations. 

Where most organizations tend to miss out on, is finding the right Constantines who are capable and will indulge in using this power to bring about meaningful change. Quite a few organizations often fail at trusting these Constantines after they have been found, simply because they lack trust. Trust, is indeed, a difficult thing to give to your employees after all

People in favor of democratized software development often tend to cite open source projects as an example of development by mutual agreement and consensus; but anyone who has been associated with open source for more than a day knows how the function of a gate-keeper and how important it is to the success of any open source project.

Recent discussions around GNOME user interface that a small team changed, without the community consensus, and then presented these changes back to the community, forms an interesting read. The explain their stand while presenting the final changed to the community:

Although the changes aren't nearly as radical as the original mockups, they are a big change from the current GNOME panel menu. If we had proposed the changes on the mailing lists, it would have started a huge discussion about what people hated about the design ("you can't make the panel menu depend on beagle!!!") and how it should be different.

And then we could have either (a) completely ignored everyone and done it ourselves anyway, or (b) had a long conversation about the merits of the design and then not actually finished the code in time for NLD10.

So we did it ourselves, and now either GNOME will like what we did, in which case, yay, free code for GNOME, or GNOME won't like what we did, in which case, no harm no foul for GNOME, and yay, brand differentiation for Novell. (And anyone who yells "fork" deserves to get one stuck in them.)

An equivalent answer to the question is "because you can't do design by committee". Everything good in GNOME is good because one person or a small number of people working closely together made it good. Much of what is bad in GNOME is bad because lots of people have contributed without having a single vision of what the end result is supposed to be. 

This is just another aspect of the UI "simplicity" thing. We like UIs that try to do the right thing (metacity, epiphany/Firefox, evince) rather than UIs that try to make every possible user happy (enlightenment, mozilla, gpdf/acroread). If you try to design something by committee, you either have to end up with the latter sort of messy does-everything UI, or you ignore and hence piss off a large chunk of the committee.

In the same discussion, the developers submitting their changes, thrash the whole design-by-committee approach rather ruthlessly and end up with a conclusion the individual I quoted at the start of this post had landed up with. The developers who made changes to the Gnome user interface without community consensus explain:

But some people will still say "But couldn't you have discussed it with the community before doing it?"

No, we couldn't.

If we had, it would either not have happened, or it would have sucked. It's inevitable. It's not a problem with he GNOME community, it's a problem with communities in general. The wisdom of crowds [4] only works in situations where there are clear right and wrong answers. If you try to apply it to a design problem, where there are many entirely different right answers, then you end up with a wrong answer. Always [5].

So to sum up: design by committee is bad, endless debates that result in code not actually being written are bad, design by very small teams is good, software with a unified vision is good, trying out cool new UI ideas is good, free code at least doesn't suck, and of course, for Novell, not shipping NLD10 is bad. I don't think there's anything we could have done to get more of the good without also getting more of the bad.

From what you've read so far, it might sound that committees in general just prevent change from happening and slow down things. 

Committee Driven Development is definitely the sure-shot path to avoiding change. It prevents both you and your organization from doing anything remarkable; but it doesn't stop there.

I am here, dear reader, to tell you, that blown out of proportions, high volumes of overlapping responsibilities and having too many committees in place, is single handedly capable of destroying your next project or even your entire organizations faster than most programmers and organizations think. Committee Driven Development is not just lame; it's dangerous.

The next time, when you're thinking about your company, and feel that you're all amazing people, doing the right things individually, but tend to screw things up when you get in meeting rooms and talk for long hours,  maybe it's because your organization has failed at picking the right Constantine's and giving them enough power and trust to get things done.    

Your job, in some of these situations, is to see if you can become that Constantine.

Don't know how? Go read the James Shore's Change-Diary or see Scott's video on how to make change happen and prevent committee driven development.

I wish you good luck.

posted on Friday, February 27, 2009 8:18:52 PM UTC  #    Comments [0] Trackback
Posted on: Wednesday, February 25, 2009

The idea for this post happened when a few of us sat at a local cafeteria and discussed where most ideas come from. We talked about random dreams; deja vu and other creepy things.

Some of us believed that solutions to most complex problems happen in the strangest and least expected situations; for example, when we are either asleep or about to fall asleep; having a shower or exercising.

Turns out, the funniest and the creepiest one of them all was the one factor that was common to some quite a few people in that cafeteria. Believe it or not; some of us, weird programmers; thought that we think better on a toilet seat; much more than we do when we were at our desk in those noisy crappy cubicles at offices around the world.

Now you might be knitting your brows at the mere thought of most thoughts emerging out of rest-rooms; but think about it. Quite a few ideas that you may have had; may have actually started or originated there. Quite a bit of what you read on this blog definitely does originate there.

I've grown so used to the concept of getting sudden light bulbs going on in the middle of the night, when I am about to head off to sleep, that I often keep my PDA handy so that I can email the idea to myself before I fall asleep; I like to capture the thought the next day when I get to checking my email.

We like to think that innovation and creative software development happens when people in their suits sit around in meeting rooms projecting serious power-point presentations on the wall.

Beautiful personal toys like suites and ties or professional toys like projectors in meeting rooms make us 'feel' important and gives us a 'perception' of being productive or innovative.

If you think about it though, these tools, in the real world where we live, have nothing to do with genuine innovation or for that matter being productive.

Paul Graham, in his forward for Founders At Work by Jessica Livingston, describes how successful startups work and what sets them apart from the stupid-out-sourcing-consulting-body-shops:

The effort that goes into looking productive is not merely wasted, but actually makes organization less productive. Suits, for example, do not help people to think better. I bet most executives at big companies do their best thinking when they wake up on Sunday morning and go downstairs in their bathrobe to make a cup of coffee.

That’s when you have ideas. Just imagine what a company would be like if people could think that well at work. People do in startups, at least some of the time. (Half the time they’re in a panic because their servers are on fire, but the other half they’re thinking as deeply as most people only get to sitting alone on a Sunday morning.)

Ditto for most of the other differences between startups and what passes for productivity in big companies. And yet conventional ideas of “professionalism” have such an iron grip on our minds that even startup founders are affected by them. In our startup, when outsiders came to visit we tried hard to seem “professional.”  We’d clean up our offices, wear better clothes, and try to arrange a lot of people to be there during conventional office hours.

In fact, programming didn’t get done by well-dressed people at clean desks during office hours. It got done by badly dressed people (I was notorious for programming wearing just a towel) in offices strewn with junk at 2:00 in the morning. But no visitor would understand that. Not even investors, who are supposed to be able to recognize real productivity when they see it.

Even we were affected by the conventional wisdom. We thought of ourselves as impostors, succeeding despite being totally unprofessional. It was as if we’d created a Formula 1 car but felt sheepish because it didn’t look like a car was supposed to look.   

Scott Berkun in his presentation on how progress happens and 'tools for innovation' also talks about the most important tool of innovation: people. 

People who can genuinely innovate tend to use the most basic and fundamental tools at hand to come up with genuine innovation. Most of the times these tools are crude and at times they are even down right ugly. Pack a bunch of genuinely innovative developers in noisy cubicles, for example, and they will put the rest-rooms of their own homes to good use.

When we see a beautiful application we tend to glamorize its build and development process and draw our own conclusions on how the teams must have had regular status meetings and how well defined their process may have been.  What we often miss out on, is that Innovation happens in-spite of these these regular status meetings and their well defined processes; not because of these things.

When we see a product that is remarkable; We tend to visualize, guess and talk about how smart everyone in the development team may have been. Hardly do we tend to think about innovators as normal human beings, who were willing to take up countless nights of head-aches, the countless days of self-discipline and the countless small self-scarifies that any form of creativity and innovation demands.

We tend to turn a convenient blind eye to inherent ugliness and pain associated with creativity and innovation; ranging from birth of a life form to shaping of a new idea into something concrete and truly remarkable. creativity, Innovation and success usually involve a decent amount hard work and usually has a decent amount of ugliness associated with it.

Of-course in a world where most developers, bloggers and managers can't even stick to one thing for more than a couple of weeks; glamorizing innovation as something that only the super smart people can do because of their smartness which manifest itself only during work hours, sounds like a convenient way to think about innovation. There is only one problem to this approach however: innovation and creativity does not happen to be that systematic and 'beautiful'.  

The next time you see a beautiful user interface in an application; see if you can picture a programmer in the middle of the night in a towel or someone seated alone in his quite dark office, pulling his hairs out of his scalp, coding away to glory. The next time you see a decently average blog, picture a person passionate about writing, seated on his toilet seat, deeply immersed in writing; working away at his keyboard at four in the morning.

When it comes to innovation, things more often than not, get ugly.

Not a whole lot of us seem to get that though. We read inspirational posts; think of changing the world and when the ugliness starts to kick in; we chicken out; or move to something else; which; more often than not, turns out to be something that makes us feel 'safe'.

Innovation is by it's nature, is inherently ugly; It is accepting this ugliness, seeing the beauty of it and ultimately loving this ugliness that makes you innovative. Glamorizing innovativeness and taking a 'we-are-going-to-be-the-next-bill-gates' path turns you into an idiot with wishful thinking.

Honestly, co-incidentally and almost creepily, I happened to bump into this video after I had finished writing this post; but if you think my being hit with ideas or solutions, on my toilet seat or when I am just about to sleep and then working at them for hours without being able to sleep is weird, go watch and listen to Elizabeth Gilbert to see how beautiful the ugliness associated with creativity or innovation can be.

posted on Wednesday, February 25, 2009 2:45:11 PM UTC  #    Comments [2] Trackback
Posted on: Friday, February 20, 2009

Have you ever seen a young kid play around with a box of cardboard or some paint.

   

Kids have an innate tendency to explore; experiment and at times end up making a fool of themselves; an ability grown ups seem to lose during the 'growing up' process.

As I talk to more and more developers, even the really good ones, I'm starting to believe that Picasso's famous quote - 'All children are born artists, the problem is to remain an artist as we grow up' - might in-fact be much more applicable to our lives much more than we think it is.

With every passing day, I find it increasingly difficult to come across young and budding developers willing to take some chances with their career and do something unconventional with their code, projects or their life. Most careers I seem to witness today usually seem to revolve around nine-to-five jobs, building CRUD screens and jumping from one job to another and one project to another.

In one of my earlier posts I talked about the fact that no sane walking, talking, human being on this planet gives a rat's ass about you; your product or your blog, unless you have something in it for them. This 'something' can be something as simple as a simple product that works a little differently, a message or a cause that takes people by surprise.

Margaret Mason for example, describes the noble cause of Heather Powazek Champ’s post; which hilariously; is to teach the world the right way to insert toilet papers in paper dispensers.  She describes this in her book 'No One Cares What You Had For Lunch' with the help of a diagram:

   

She adds:

When I am queen, I shall decree that all rolls of toilet paper be correctly inserted into the toilet paper dispensers. Correctly? You have all been improperly instructed to place your toilet paper with the “tongue” facing outward. This is incorrect. Why? It’s ugly. Please view the illustration above. Isn’t the arrangement in the right far more aesthetically pleasing than that on the left? But what about ease of use, you ask? I don’t give a rat’s ass about ease of use. I want the world to be a more beautiful place, and I’m going to start with your toilet paper. Thank you.   

Now, you can find the post hilarious, ridiculous or even funny; but it is; in it's own way; something that can be referred to as 'remarkable'.

Seth Godin in his 'remarkable' presentation at TED explains what 'remarkable' is:

The thing that's going to decide what gets talked about, what gets done, what gets changed, what gets purchased, what gets built, is, is-it-remarkable? And remarkable is a really cool word; because we 'think' it just means neat but it also means worth making a remark about.   

What you talk about, or what you work on, doesn't always have to be as grand as saving the world; but it has to end up being ‘remarkable’; much like the mission of teaching the world how to correctly insert toilet papers in the dispensers. Compare 'remarkableness' of that with posting your organizations balance sheet online or sending out marketing spam mail to customers and you'll be able to figure out why no-one is visiting your website, blog or buying your product.

Seth, has a  theory of being 'remarkable' where he defines 'remarkable' as the 'purple cow'. The idea is simple; After all when you are driving by the country side, no-one notices a white cow; but if the cow is purple; people pull over and take notice.

In the same remarkable presentation Seth proposes that the whole notion of being 'safe' and nails it heavily. According to Seth, safe is easy but in today's world that is the riskiest thing you can do to your life, your product or your blog:

The riskiest thing you can do now is be safe. Procter and gamble knows this. The whole model of Procter and gamble was always about average products for average people. That’s risky.

The safe thing to do to now; is to be on the fringes; be 'remarkable'; and being very good is one of the worst things that you can possibly do.

Very good is boring; very good is average. It doesn't matter if you are making a record album or you are an architect or you have a track in sociology. If it's very good, it's not going to work because no-one is going to notice it.   

Kids as it turns out, are born with the ability of taking these risks and creating perfectly 'remarkable' purple cows. I'm not sure if the tie-and-the-suit takes it away from managers and the need-to-get-a-guaranteed-safe-job takes it away from developers, but when I look around, I find only a minuscule number of developers taking sufficient amount of risks.

In a world where most programmers can't program; even most of the ones who can, are busy being just 'very good' at programming. Most of the time I see developers playing it safe; not just with their life; but with their profession and even their code.

I'm not talking about quitting your day time job and going for your own startup; I'm talking about simple risks of investing your career with one organization for a decent amount of time; taking up that course on literature or psychology even if it has no direct benefit on your career; or maybe just writing your code a little differently by building opinionated software.

When you can get an internet connection dirt cheap and a hosting account for less than a few dollars a month; there are no excuses for living the life of a paycheck programmer and not participating in making small but crazy dents in the universe. The bare minimum tools of change that you might need are not expensive and you have no excuses for being just 'good'.  As the world evolves, safe is riskier by the day and being just 'good' is bad. 

Aiming a 'safe' job that gets you a higher paycheck and keeps you busy with mundane CRUD applications through out the day for example, is the riskiest thing you can do to your career. Having ten posts on your hard disk and not posting them out on your blog because you think your readers may not like them is an equally risky thing you can do to your blog. Not releasing till your code is not perfect is the riskiest thing you can do to your product.

Don't worry about being 'good' or 'safe'; be 'remarkable'; take chances.

Show us the true color of your cow; and paint like a baby.

I dare you.

posted on Friday, February 20, 2009 10:40:54 PM UTC  #    Comments [3] Trackback
Posted on: Wednesday, February 18, 2009

Have you ever seen any young and budding blogger, who for the purposes of this post, we shall refer to as Fred, start on his 185th blog? He is as excited as a little baby who has been given a brand new toy which he thinks will allow him to change the world.

He spends hours thinking of a name for his 185th blog; gives special attention at picking the theme and spends hours doing a spanking new absolutely cool-and-happening-web-2-0-CSS-based design for the blog. Then he starts with a first post which he believes will make all his readers fall in love with his writing and make them crave for more.

This time he is firm and decided. This time he is going to write a blog which not just makes him famous but will change the world for good.  There is only one little problem however.

The 'world' that our dear blogger wants to change doesn't give a rat's ass about him.

The millions of readers who were going to love and hang on to every little word that he writes, happen to be just a little busy, doing their job, providing for their family and sometimes, even a little irritated doing chores, managing their spam mail and hanging up random marketing calls made by call centers who specialize in the act of calling individuals when they are least in the mood of accepting random unsolicited calls.

These millions of readers, as it turns out, are so darn irritated that they are not interested in buying anything; not even if it is just ideas; for which the only price to pay is just five minutes of their time daily time.

Long story shot, these millions of users, our dear blogger wants flocking on his blog, don't care; and the ones who care enough to read and listen have, most probably, found the mavens they want to listen to; and have already started trusting them for their transactive memory.

Our dear Fred, continues to blog for a month; during that one month he blogs once; twice; and then thrice, only to realize that he is talking to himself. The comment count is constantly zero. His web-site statistics aren't crossing the three 'returning visitor' count.

Google just doesn't seem to be crawling his website, no-one seems to be linking to him and Feed-burner statistics hardly seems to cross a count of five RSS subscribers, two of which are his own subscriptions; one from office; another from home.

By the third post, the enthusiasm to change the world has started stammering. Our dear blogger has swallowed his pride; but he is not done yet; after all he is not one of those who will give up. He will start again; with yet another fresh start; yet another blog, that will, one day, change the world and get him the million readers he seeks so desperately.

I cite the blogging example here because blog posts have very short release cycles. It is usually less than a couple of days from the moment the author conceptualizes the idea to the moment he publishes or releases it to the world.

Much like programming, the bar of entry for young and budding bloggers is low. In fact it's even lower than programming. Much like programmers, anyone can be a blogger; all you need to do is sign-up at a blog-spot or a word-press. Truly, blogging seems to be representative of every other thing that we usually do in the world of software development; only difference being that it's usually individual and can see a blog post's life cycle in less than a couple of days.

These characteristics makes blogging makes, observing why blogs fail, an excellent 'sampling tool' to investigate where people usually go wrong when it comes to marketing their products and ultimately their 'ideas'.

As programmers we tend to believe that if no-one is using our system or reading our blog, there 'has to be' something wrong with the technicalities and specifics of the blog. Maybe it's name isn't hip and happening enough. Maybe it's user interface is not being catchy enough. Maybe the underlying blogging framework is not being fancy enough. Long story short, we tend to believe that there are 'technical issues' which are causing our readers to not like our blog.

The same is usually true for products and systems that we build.

As developers, we are also great at bulldozing everything that we don't think is perfect starting fresh; again and again. That is what leads us to iterate the infinite loop of failure. We tend to; or should we say, 'like to' believe that if we abandon the current effort and move on to a fresh start, everything will mysteriously work out.

Anyone who has looked at the number of dead projects in source-forge, number of abandoned blogs on blogger and word-press and number of startups in f@#ked-company, before f@#ked company was itself f@#ked, knows what I am talking about here.

As Bloggers, software developers and even marketers we like to think that if we 'build' something or write about something, that we believe is great or cool, people will usually care about it as much as we do. The simple, hard and blatant fact of life is that, like experts, most human beings are creatures who work on incentives and unless you give your users or your readers, depending on what you are doing, a strong enough incentive to care, they will simply ignore you.

Why? Because it's easy for them to ignore you. They have options.

Bloggers and Software Developers taken over by the desire to save the world and save their readers or customers, forget the simple fact of life Seth Godin reiterates again and again in countless of his videos and presentations like this one. He explains:

This is so important, right, ready?

No-One Cares About You.

They invented television to sell ads to you. They invented radio to sell ads to you. They invented news paper to sell ads to you.

That's not why they invented YouTube, That's now why they invented the internet. The internet doesn't care about you.

People don't "have to" watch channel seven any more. They can entertain themselves mindlessly for hours by pressing the stumble upon button.

So if someone is going to watch a video; they are not going to watch it because they care about you. They are going to watch it because they care about "me" (them).

Me-Me-Me-Me-Me - my favorite person - Me. They are not going to read e-mail from you; they are going to read me-mail; because that's who they care about.

So if you make a video like the Blend-tec guy, the Will-it-blend videos, people will watch it because watching Chuck Norris blend in a blender is sort of a hoot but if you make a video of how your factory is twelve percent more efficient than it was last year... (yawn)... I'm not coming.   

No one cares about you; they don't care about what you had for lunch; your cat; or your favorite color; unless of-course you can talk about these things in a way that makes them roll over laughing; keeps them hooked; helps them take better care of their cats; or helps them cook their lunch better; if you can't do that, your cat, your lunch and your favorite color doesn't mean zip in the larger scheme of things.

No-one; I repeat; No-one; not a single human being; unless that human being happens to family or a loved one; cares about you, your latest blog post or the system on which you are spending your weekends. All they care about is, their favorite person; themselves.

This is supposed to be common knowledge in the world of marketing and even software development and yet I see individuals jump from one blog to another, organizations jump from one product to another and programmers jump from one open source project to another; in hope that a 'fresh start' will make their users care.

Whether you write a blog or do a project, what you are ultimately interested in doing is getting people excited about your thoughts or ideas. You are interested in sharing them with people who happen to be busy and in general, don't give a rat's ass about you or your ideas.

The only way of grabbing their attention and getting them to even remotely care about what you want to say, is by putting yourself in their shoes; and thinking about the value your work is giving them. Is it entertaining them; Motivating them; Inspiring them;  Educating them; or simply irritating them.

Adding genuine value through your work and getting people to genuinely care takes time. It requires constantly proving yourself with actions; not words. It takes time to prove that you are serious about delivering whatever it is that you want them to consume; and that you will not just deliver high quality; but that you go out of your way and will deliver constantly.

Gmail took more than three years of persuasion; friend-feed took even longer; Most authors writing inspirational posts on success tend to not even talk about the countless other applications and startups that might have died a painful death along the way. 'Overnight success' in any form usually takes a long time.

Depending on what you are trying to do it might take years. This post isn't supposed to be a motivational post which tries to come out and pamper you; pats you on your back and assumes a if-you-keep-trying-you-will-succeed tone; because we all know you may not succeed; and that, dear reader, is the whole point of this post.

Unless you yourself, are willing to stick to at-least one thing, in spite of your failures; continue to deliver; go beyond shipping; and continue that for months, without expecting any overnight success in return, expecting your users or readers to take you seriously or care about what you have to say is nothing more than stupidity.

Expecting them to believe that you feel passionately about what-ever-it-is-that-you-want-to-say-or-are-working-on, because you said so in a blog post or two or because you rolled out the first sprint of a product, is nothing more than a joke.  

So the next time you sign up for a blog, first remind yourself of this simple little fact of life: no-one cares about you; not even your very own users.

Then ask yourself if you have something interesting to say that your users will really care about. Besides asking yourself why 'you' want to write that  blog post. Ask yourself why they should care to read it. Ask your self this question; constantly as you edit and re-edit your post. Then, ask yourself this question before you publish it live.

Think of the internet as a large room of millions of on-going parallel conversations; people are fairly open to letting your participate and contribute; the rules are simple:

  1. You have to have something to say that adds genuine value to the community.
  2. You have to say it with conviction.
  3. You have to care enough about the idea(s) or whatever it is that you are working on, to keep doing it; even if no-one is listening.

Step one, is highly under-rated and most people in the world of software development know it, but unfortunately, do not seem to 'get it'; which is why we have depressing blogs which talk about how-depressed-Fred-was-feeling-this-morning; personal-life-blog with Fred shouting at the top of his voice about how passionately feels about cats and his pet-cat in particular.

As you browse through countless personal blogs, be prepared to be amazed by how the The 'passionate interest' in cats, for Fred, usually ends in just about two posts, after which Fred decides to just stop talking, goes silent and disappears.

Huh! Wonder what happens to all that 'passion' on cats; you wonder.

Then months later Fred moves to a new blog with a new topic he feels passionately about.

If you want to talk about Cats, be a Cat maven and provide useful information on cats. If you want to talk about your depression, provide a wealth of information on how you fight your depression. If you think it's hard, take a look at Scott Hanselman, getting you involved in his fight against diabetes. There are countless other great examples out there.

Oh and by the way, changing your blog URL, adding a new theme, changing your project name or constantly changing your jobs does not result in a 'fresh start' that will magically change your life Hollywood style and make 'them' care about you.

Unless you have something concrete which you can offer to the world; and unless you can offer it consistently; I am here to tell you dear reader, the world does not care about you. Unless you can get them to give a shit by giving them enough value and genuine incentives to, you, your blog and your dream project are all doomed to be ignored like unsolicited marketing calls.

If you find that unfair; go grab a copy of Atlas Shrugged; and read it ten times over.

Technology of your hosting provider, bad CSS, your blogging framework and not having the bells-and-whittles is not your problem. Lack of features in that open source project that you might be working on, is also not your problem.

Having a cause, a message and then getting people to care about your cause, message or whatever it is that you have to say is.

Unless you can do that, you, your systems and your blogs are no better than spam mail that lands in our inbox every morning.

Now, stop signing up for that new blog or gathering email addresses for your next press release mail blast.

Go build your own tribes instead. I wish you good luck.

posted on Wednesday, February 18, 2009 7:53:34 PM UTC  #    Comments [2] Trackback
Posted on: Friday, February 13, 2009

Like the Light Bulb, Electricity and the wheel, the greatest innovations and inventions are simple, crystal clear, non-hyped and come into existence through constant perseverance and acceptance. Take for instance 'The Greatest Invention in Computer Science'. You're probably knitting your brows right now; but think about it. Routines or functions as we lovingly call them were in fact what changed computer science for ever and can be easily referred to as the best invention in the field of software development.

Functions or Routines like all genuinely great inventions were simple, easy to understand, easy to use and most importantly, generated very little business hype; unlike a particular recent technology which has more 'experts' dying to sell the technology than customers willing to give a rat's ass. 

If you didn't realize from the tinge of humor in the first couple of paragraphs and the picture above, I am in fact talking about the famous Cloud Computing. This post, even though long winded and full of digressions, is my good deed for the day. The way I see it dear reader, is that I wasted a couple of days learning 'Cloud Computing' so that you don't have to.

When I say 'I wasted a couple of days learning 'Cloud Computing' so that you don't have to' ; I don't mean that in a marketing way where companies say - 'we work hard so that you don't have to'. I mean this in a hardcore technologist way where we programmers say, 'I worked at this, it sucks, don't waste time on it right now'.

We're going to have enough emotions, opinions and digressions in this post; so let's not start with digressions. Let's get to the point. Let's talk about why you shouldn't be wasting a lot of time on 'Cloud Computing' right now.  The reasons of-course are numerous; but let's start with a few and once you get the idea you can find your own reasons.

Cloud computing - What The... is it?

Now, I could start you off with videos like this one;  or this one which would have been a perfect start; but then that wouldn't be opinionated enough and it wouldn't carry the point that I want to carry across very articulately.

So before we talk about 'Cloud Computing'; let's talk a little bit about how you as developer or modern day internet savvy computer user, learn about new things. The process is fairly simple:

  1. You Google.
  2. You Get A Wikipedia link back.
  3. You Click the link and read. 

Nicholas Carr, describes this three step process very elaborately just in case you're interested. This three step process tells you all you need to know to understand the fundamentals of something new you and then you charge your client big consulting bucks for passing on that information to them.

If you would have followed the three step process a couple of weeks ago and tried to use it to learn about 'Cloud Computing' this is what you would have found out:

Cloud Computing is a paradigm in which information is permanently stored in servers on the Internet and cached temporarily on clients that include desktops, entertainment centers, table computers, notebooks, and wall computers, handhelds, sensors, monitors.   

Recently however, the Wikipedia article on Cloud Computing was changed to add more marketing fluff-words:

Cloud computing is Internet ("cloud") based development and use of computer technology ("computing"). It is a style of computing in which typically real-time scalable resources are provided “as a service” over the Internet to users who need not have knowledge of, expertise in, or control over the technology infrastructure ("in the cloud") that supports them.

The concept incorporates software as a service (SAAS), Web 2.0 and other recent, well-known technology trends, in which the common theme is reliance on the Internet for satisfying the computing needs of the users. An often-quoted example is Google Apps, which provides common business applications online that are accessed from a web browser, while the software and data are stored on Google servers.

The cloud is a metaphor for the Internet, based on how it is depicted in computer network diagrams, and is an abstraction for the complex infrastructure it conceals.

If you don't know what to make of these definitions or for that matter what was 'new' about 'Cloud Computing'; you are not alone; Michael Loop, helps you with Dumbing Down The Cloud and explains not just the definition, but the rather humorous probable history of 'Cloud Computing', so that mere mortals like us can understand it. He uses his rather articulate style to make his point:

Information stored on servers? Temporary caching? Holy f@#k. You mean like those email servers and clients I’ve been running for 15 YEARS?

The innovation in cloud computing happened years ago. It happened when some bright engineer was trying, for the 185th time, to draw the Internet on a slide, and thought, It’s this big, huge, amorphous thing that lacks definition. It’s a... cloud.

That’s when the magic happened. That’s when the name mattered. When it was first used to eloquently and visually describe an idea that lacked mental definition.

Everything that has been happening since then is marketing and wishful thinking. It’s those marketing nerds getting paid too much money to rename ideas we’ve already had. Innovation doesn’t come when we give our ideas new names; it comes when the fundamental idea quietly evolves. Innovation often happens silently - not by what you say, but what you do.

Turns out, Michael, like most technical 'Mavens' worth their salt, can differentiate between what matters and what is crap being thrown at the other mere mortals in the world of software development. This of course, brings us to yet another question. Why is 'Cloud Computing' crap that is being thrown at the mere mortals of the software development world and why you shouldn't be wasting any of your valuable time on it. Honestly, there are countless reasons. This post is just about a few of them.

Reason 1:  Listen To The Software Mavens Not The Experts. The Mavens think Clouds Are Gibberish Stupidity At It's Height.

Every once in three years or so the software development world is notoriously famous for declaring a great innovation that will 'change the world'. Apart from the greatest invention in computer science we haven't invented as much as our friends in software marketing think we have invented. Every once in two years, the software-marketing-guys will wear their marketing hats and try to convince us that the 'change is here' and if we don't adapt we are doomed. Turns out, we have a bunch of people who are really smart at differentiating this crap from genuine innovation.

They are called Mavens.  If you aren't smart enough to make your own decisions and separate out the crap from genuine innovation, the least you can do is, put 'Transactive Memory' to use, listen to these Mavens and what they have to say.

GNU Founder Richard Stallman describes how Cloud Computing is worse than stupidity:

It's stupidity. It's worse than stupidity: it's a marketing hype campaign. Somebody is saying this is inevitable – and whenever you hear somebody saying that, it's very likely to be a set of businesses campaigning to make it true.

Oracle CEO, Larry Ellison, is not just anti-cloud, his opinions are similar to Richard's opinion of Cloud Computing being stupidity of the highest order. He attacks and nails down cloud computing rather passionately:

The interesting thing about cloud computing, it is either going to be or already is the most the important computing architecture in the world because we have redefined cloud computing to include everything that we currently do. So it has already 'achieved' dominance in the industry.

I can't think of anything that isn't cloud computing; with all these announcements. I have to say that the only way that I can understand the computer industry; the computer industry in the only industry that's more fashion driven than women's fashion.

Cloud computing; I remember I was reading W and I read that Orange is the New Pink and Cloud is the New SAAS or cloud is the new virtualization. It is the most Nonsensical... I mean I read these articles I have no idea what people are trying to... and maybe I am an idiot... I have no idea what anyone is talking about. I mean it's really complete Gibberish; Cloud computing is... Google Mail is cloud computing... ok... then Mark Benioff says SAAS is Cloud Computing; I mean... what is it? Is it, 'oh I am going to access data on a server on the internet'... that's cloud computing?

Then there is a definition; what is cloud computing? It's using a computer that's 'out there'. That's one of the definitions... using a computer that's 'out there'. These People who are writing this crap are 'out there'. They are insane.

The answer in Larry's own word; is much more of both, hilarious and honest than most people can make it sound. If there is only one video on 'Cloud Computing' cons that you are going to see, I encourage you to see Larry's Answer. Then there are others, who are equally paranoid about 'Cloud Computing'. Frank Gillett, explains his concerns when talking about cloud computing rather articulately and describing all the confusion around it

As a thumb rule, when evaluating technology of this sort; don't look for marketing videos or PowerPoint slides created by so-called-expert wanting to make a quick buck out of 'Cloud Computing'. Look for a few respectable Mavens out there and see what their thoughts on 'Cloud Computing' are.

Do that and you will figure out why you should not be wasting any time on it; the only ones who have anything good to say about 'Cloud Computing' are guys who have a very strong marketing agendas associated with it or have already become profoundly good at it and want to sell their services; which is fine; but everyone else just seems to be lacking passion and adoption.

That's not how products and technologies tip.

Reason 2: There are two kind of Developers And You Are The Second Kind.

After spending years in software development if there is one conclusion that I've come to about software developers, it is that, besides programmers who cannot program, there are two other kinds of programmers.

  1. Type-1 programmers - Those who genuinely innovate stuff. These are the people who write file systems, programming languages, operating systems, build Skype, Google Maps and do insane things with technology, that most of us cannot even think about.
  2. Type-2 programmers - Those who monkey around with intellisense and write CRUD applications; yes you exercise a whole lot of innovation and yes, I know you can do some serious damage with J-Query based Ajax calls, but if you fall in this range all you do is learn programming languages, APIs and then innovate  within the constraints of those languages and the APIs.

To be honest, I consider myself to be one who falls in the type-2 group and there is nothing wrong with being a type-2 developer. After all, limitations and restrictions are good, at-least for some of us and especially those of us who are type-2 programmers.

When you are working as a type-2 programmer there is a specific level of abstraction on which you work.

By working on this level of abstraction and with that expertise, you're not going to be able to create your new startup that allows users to setup and create your own virtual servers and host them on your cloud. All you can do with cloud computing are things that I describe when I talk about 'satisfying your cloud itch; if you must'.

Reason 3: You Think You'll Have Scalability Problems? -- Yeah.

You're going to have content running in Terra-bytes and you will need to scale your servers to meet millions of users that are going to magically show up on your website and start using it. Yeah. Actually I'm going to be the next Bill-G, lead Microsoft, take it to the next level and give you all the server power you are ever going to need. So much for wishful thinking. Get the freaking million users before you crap about 'Cloud Computing'. Seriously; grow up.

Reason 4: If You Want To Watch The Television Learn How To Use The Freaking Remote.

Just so that I don't end up sounding like a complete idiot, blabbering away on 'Cloud Computing' I spent a whole week end researching it. The research involved, not just looking at some of the videos I posted here and some I didn't; but it actually involved looking at how to write code with the 'Amazon Web Services'.

Besides bumping up my the value of my resume by a couple of thousand dollars a years; what that also did is enlightened me to the fact that 'Cloud Computing' is like a Television; or at-least it's supposed to be; when it matures.

If you want to watch the Television; you take a handy little thing, usually black in color with lots of buttons on it and you press the red button. Then you use another set of buttons to change channels and play around with the volume. It's called the remote.

Now; anyone who has watched a television knows one thing; he knows that in order to have a pleasurable viewing experience with your television, the facts I described in the sentence above are the only set of facts you need to know. Trying to read how your Television Tube works is a waste of your time unless you are in the business of building televisions.

You dear reader, are not in the business of 'Cloud Computing'. You are a programmer blissfully coding away with a high level language which spits out HTML to a browser sitting between you and your user. You're a type-2 programmer; remember?

So, buy the television and learn how to use the freaking remote. It doesn't take more than five minutes. There; that's the power button; that's what we use to change channel; here's how you bump up the volume; here is how you bump it down. See?

No it's that easy; seriously.

Reason 5: If They Get It Right, You Won't Even Know. Just like they it had been all along.

Ok so back to my research and my attempt at using the Amazon Web Services.

I kept aside eight hours to understand these services and do some serious development with them. You know what I found out?

Calling a web service written by Amazon is pretty much like calling a... web service.

Take the Simple Storage Service for instance. Instead of calling them 'folders'; I now call them 'buckets'. Of course I can make it complicated by creating a whole freaking hierarchy of buckets using a few funny tricks; not directly like I do for folders; but any one who knows what folders are should be able to get it; in minutes. Then you sign up; they give you a couple of them ugly looking keys, you right click your solution in visual studio and you add a web reference. Then you call web-methods and you stick in those keys as parameters to those function calls.

Any of that sounds familiar?

Ever called a web-service in .NET?

Yeah now, what would you say if I told you, it's completely different! You're storing your data in a 'cloud'; it's insane; it's going to change the world.

Your reaction? Most probably - 'Yeah. Whatever.'

Thought so.

The point is that besides the Amazon Web Service having it's mysterious down-time every now and then; they seems to have got a couple of things right. The cloud word in their whole site is completely redundant. 

The world would have been exactly the same had you told me - 'Hey Pops, I'm going to give you a couple of them secret keys and a URL to a WSDL file. Can you call a web-service?' - you know what I would have told you - 'sure!' - and I wouldn't have even kept those eight hours aside to learn the magic of 'Cloud Computing'.

Then there are those hosting providers; letting your virtual machines on a cloud; which is like signing up for go-daddy with one extra step of selecting how much RAM and disk space you need and then having the flexibility of changing it later.

If it sounds any more complicated or takes more than a couple of hours of your time; it's not 'Cloud Computing', it's 'Cloud Computing' implemented like crap; which is what most companies out there are busy doing now-a-days.

The ones who have been doing it right, like Google have been doing it for years, without you even finding out or without needing validation of a stupid branding and labeling exercises where a 'cool name' is attached to what they are doing.

Reason 6: It's Going To Take Time Before It Changes 'Your' World; .

A lot of time. Seven years to be precise.

Reason 7: It Fails The 'Mom' Test (Term coined by Pops).

These words of wisdom came from a very old guy who taught me a lot about device drivers and embedded programming back in the days when I landed up doing projects which would do crazy things like write software that runs on a scanner with a touch screen and a couple of other devices.

We would write this code for hours, custom building the screens and the behavior. This particular individual would reject all our work with one fundamental question - 'if you asked your mom to use this, would she get it?'.

My mom for that matter, is much more comfortable around technologies; much more than a lot of other moms her age are; I mean you can literally explain dependency injection to her and she would 'get it'. The only catch of-course is you don't start by calling it dependency injection. She is seriously cool with understanding technology and getting to the soul of things.

Here's how Cloud Computing Fairs The famous 'Mom' Test which given my own background I've just provided you with should be considered rather optimistic; and because I seem to be the only one on the internet who has coined this term, we shall call this the Pops Mom test:

Let's dive back into the depths of time, around a couple of weeks ago when the local news channel did a feature on 'Cloud Computing' which my moms happened to watch. Mom is watching this program and turns out, she is having a hard time understanding the television program.

Conversation (not sure if I am quoting it, but the soul of the conversation is pretty much intact):

Mom: Hey, I've been watching the thing on 'Cloud Computing' and they were saying you will be able to upload all your data on the 'Cloud' in the internet.

Me: Yes.

Mom: But, didn't you do that six years ago when you had to go to travel a lot; remember when you uploaded your pictures to Yahoo Photos and sent us the link?

Me: Yes, Mom, I do remember.

Mom: So what is it that is changing?

Me: Nothing Mom; absolutely nothing.

Mom: Oh ok.

[End of conversation on that topic. We move on to discussing Twitter and how amazing that is.]

And why is Google running a whole collection of computers to store your email; suddenly so important to everyone after seven years of their continuing to use whatever it is that they were using? Michael Loop doesn't get it, Larry Ellison doesn't get it, Richard Stallman doesn't get it, I don't get it and neither does my mom. 

Satisfying Your Cloud Itch; If You Must.

It's been a long post. Rather wordy; Honestly, each one of the reasons above deserved a post in itself; but for now, this should do.

Having said that, we are nowhere close to complete yet. You know, the 'moral-of-the-story'; that thing that you take back from every one of those posts that appear on this blog? That is still left to cover.

If there is one thing that you take back from this post; if there is one thing I can inject into your head; it is this: don't waste your time with countless 'Cloud Computing' PowerPoint Presentations which make you feel like you're a part of the great revolution.

Everything that had to be invented here is invented and you're just going to be the type-2 programmer who calls stupid API's and signs-up for servers on clouds when these technologies are complete and become fully baked. This is not going to change your life. So move on.

Seriously.  

Having said that, I know you're not going to listen to me; which is why I am going to help you satisfy your insane itch to know and find out what 'Cloud Computing' is, first hand.

If you are getting this itch because everyone around you; friends, relatives, television programs and even your colleagues are taking clouds and you have made up your mind to waste time on this thing, the least you can do is don't waste time reading Marketing PowerPoint presentations and videos; Instead, may I mention, but 'not recommend', some hands-on methods of trying out 'Cloud Computing'.

Method 1: Get Billed By Cloud Hosting Startups.

Go to one of the hundreds of start-ups that are selling hosted servers in the cloud; sign up for an account and then use their admin console to increase or decrease the RAM of your virtual server on the fly.

Personally, assuming that you know how to use web applications, can understand English and know how to change values in drop-down boxes and list-boxes, I don't see the point of doing this other than getting billed by these startup companies who desperately need your dollars to build clouds; but then, whatever makes you happy.

Method 2: Get Billed By Amazon Web Services.

Go to Amazon Web Services buy a simple web-service like Simple Storage Service; refer the WSDL file in Visual Studio (or whatever environment it is that you use) and monkey around with intellisense calling it's web-methods to create poor-mans-version of folders called buckets and then uploading and download files.

Again, assuming that you know how to make web service calls already, I don't see the point of doing this and what you are actually going to 'learn' by doing this other than getting billed by Amazon; but then, whatever makes you happy.

Method 3: Act Stupid.

Attach A file on your Gmail Account and send it to yourself; now you have a file 'out there' on the 'mysterious cloud' that you were drooling over for so long.

Personally, this is the most cost effective way of learning 'Cloud Computing' and will teach you as much as you possibly need to know to take advantage of 'Cloud Computing' without getting billed.

This approach has another very clear advantage; it sets things in the right perspective for you and makes the distinction between individuals who genuinely need to build 'clouds', for example, the guys that work at places like Google or 37signals who really have a million users; and others who merely fall in this 'millions of users' and use the 'clouds' created by companies like Google and Amazon; using a pesky little browser to do so.

Just in case you didn't notice 'we' are type-2 programmers on the 'using' side with a browser open right in front of us.

Cloud computing may not be able to save you the whole lot of cost you expected after all, but in all the methods suggested this is definitely the most 'cost effective' way of learning 'Cloud Computing'. Having said that I do 'not' recommend using this method to learn 'Cloud Computing' because there are some serious hazards associated with it.

Passers-by peeking in your little cubical and seeing you sending random attachments to yourself might consider you insane; thereby resulting in a serious threat of their reporting this activity to your management, which in turn can result in you learning 'Cloud Computing' at the risk of losing your job. This method poses serious threats. So be warned.

Do 'not'; I repeat; do 'not' send attachments to yourself using your Gmail account in a desperate attempt to learn what 'Cloud Computing' is.

No seriously; after you have read this post, have seen Cloud Computing In Plane English, seen for yourself how much confusion is out there and have done one or more of the above steps; stop; don't waste any more time on cloud computing; at-least not right now, till it matures sufficiently and all the stupid hype around it dies down.

If you do spend time with it, chances are that you will probably end up wasting more time learning something that has no direct relevance in your life till you become an overnight success story and genuinely start needing it.

Don't waste your precious time on something that can picked up with two days of concentrated effort if it becomes relevant to you after seven years. Now, go back to some serious work; and figure out how to get a million users on your website. That's your biggest problem. 'Cloud Computing' with it's currently 'Highly overrated' marketing hype and a stupidly misguiding name, is obviously not.

posted on Friday, February 13, 2009 11:00:35 PM UTC  #    Comments [1] Trackback
Posted on: Wednesday, February 11, 2009

When you are in the business of building software; information, knowledge and wisdom that you carry in your own your head is not the only measure of how successful you are.

With software development it is in fact, the knowledge and wisdom that you have 'access to' that matters much more than how much of it you carry with you in your own head.

Malcolm Gladwell In his book, 'The Tipping Point', explains this concept when he talks about 'Transactive Memory'. He explains:

This is what University of Virginia psychologist Daniel Wegner calls "transactive memory."  When we talk about memory, we aren't just talking about ideas and impressions and facts stored inside our heads. An awful lot of what we remember is actually stored outside our brains. Most of us deliberately don't memorize most of the phone numbers we need. But we do memorize where to find them — in a phone book, or in our personal Rolodex. Or we memorize the number 411, so we can call directory assistance. Nor do most of us know, say, the capital of Paraguay or some other obscure country. Why bother? It's an awful lot easier to buy an atlas and store that kind of information there. Perhaps most important, though, we store information with other people.   

The idea of 'Transactive Memory' is relevant pretty much in all spheres of personal life and work life; including your online time. When it comes to the world of software development, even though a huge number of us may not be open to the idea of contributing on the internet; we use 'Transactive Memory' all the time; while we are looking for information; and particularly when we are going to make decisions based on that information. Ever read a blog to find out what someone thought about a tool or application you were planning on buying? Ever went through Amazon user-reviews before buying that book?

Using transactive memory is exactly what you were indulging in when you were doing all of these or multiple other activities that you do online when you look for information and in particular when you use that information for making purchase decisions; online. You were depending on individuals who you did not even know personally and you were trusting them to provide you with accurate information.

When you are buying a thirty dollar book at Amazon it's easy. However,  when a part of your job includes picking tools and technologies for your organizations and most projects that are implemented in your organization, developing strong 'Transactive Memory' using sources of information you can trust becomes much more important.

As someone who is involved with making technology decisions for multiple development projects for years; I've had my share of successes and failures at picking products and frameworks to be used in projects. I've also learnt some lessons along the way quite a few of which are about building a better 'Transactive Memory'. This post is about one of those lessons.

At Multiplitaxion Inc, for example, during my early years, a client approached us with the need of having a customized user portal done. Someone high up in the pecking order at the client organization had a friend, who turned out to be the SharePoint expert.

This gentleman with his expertise in SharePoint was expected to lead the project; if it materialized. When the client approached us, the decision to use SharePoint was something they has 'defaulted to'. This decision of course, was based on 'expert advice' and they believed, in all sincerity, that it was a correct decision taken under the guidance of a true expert.

For days we struggled back and forth; trying to do a 'proof of concept' with SharePoint; the SharePoint expert helping us out every time we were up against a road-block. This guy, was amazing with band-aids, workaround, tips and tricks up. He always seemed to have some cards up his sleeves; especially every time we were going to hit a wall.

This was the early SharePoint version where if you were going to do custom development, you were pretty much stuck with writing .NET-Custom-Controls and all SharePoint did was act as a liability slowing you down in development instead of being this amazing portal framework that the Microsoft marketing folks were busy portraying it to be.

This gentleman, however, wasn't discouraged. To be fair to him; he was good; in fact he was great. He could do things with SharePoint lists that none of us thought made any sense to even attempt and he would get away with it; producing a new magic trick every time a road-block was showed up.

After a few weeks of prototyping, band-aiding and this expert of ours pulling magic tricks out of the his expert head, we decided to quit.

'Freakonomics'  by Steven D. Levitt and Stephen J. Dubner co-incidentally of-course, describes what had gone wrong with us trying to implement SharePoint in that project. We, the allied relationship of the client and us, had relied on an expert, when the best interest of the expert was not aligned with our best interest. Both the client and development team wanted a simple maintainable ASP.NET web application; this expert on the other hand needed consultancy and dependence on him.

In their book Freakonomics; Steven And Stephen provide excellent explanations on what is wrong with working under the assumption that an expert will always provide you the accurate information and work for your best interest if you pay them. In the book, Steven And Stephen describe an experiment conducted to find out if experts always work for the best interest of their clients:

Experts are human, and humans respond to incentives. How any given expert treats you, therefore, will depend on how that expert’s incentives are set up. Sometimes his incentives may work in your favor. For instance: a study of California auto mechanics found they often passed up a small repair bill by letting failing cars pass emissions inspections—the reason being that lenient mechanics are rewarded with repeat business. But in a different case, an expert’s incentives may work against you. In a medical study, it turned out that obstetricians in areas with declining birth rates are much more likely to perform cesarean-section deliveries than obstetricians in growing areas—suggesting that, when business is  tough, doctors try to ring up more expensive procedures.

It is one thing to muse about experts’ abusing their position and another to prove it. The best way to do so would be to measure how an expert treats you versus how he performs the same service for himself. Unfortunately a surgeon doesn’t  operate on himself. Nor is his medical file a matter of public record; neither is an auto mechanic’s repair log for his own car.

Real-estate sales, however, are a matter of public record. And real-estate agents often do sell their own homes. A recent set of data covering the sale of nearly 100,000 houses in suburban Chicago shows that more than 3,000 of those houses were owned by the agents themselves.   

The experiment involved measuring data and coming to a conclusion which describes why relying on experts may not always be the best way to gather information. Steven And Stephen explain:

There’s one way to find out: measure the difference between the sales data for houses that belong to real-estate agents themselves and the houses they sold on behalf of clients. Using the data from the sales of those 100,000 Chicago homes, and controlling for any number of variables—location, age and quality of the
house, aesthetics, and so on—it turns out that a real-estate agent keeps her own home on the market an average of ten days longer and sells it for an extra 3-plus percent, or $10,000 on a $300,000 house. When she sells her own house, an agent holds out for the best offer; when she sells yours, she pushes you to take the first decent offer that comes along. Like  a stockbroker churning commissions, she wants to make deals and make them fast. Why not? Her share of a better offer - $150 - is too puny an incentive to encourage her to do otherwise.   

In the world of software development, especially when you are responsible for picking tools, technologies, directions, trends to follow etc. for your organization and even for your own career, knowing three simple facts is important.

  1. You'll never be able to know or find out everything and keep it in your own head. You will have to use Transactive Memory and depend on 'experts' rather frequently.
  2. When you are building POCs, every tool out there meets your requirements; especially when you have an 'expert' who is convinced it does.
  3. When your best interest doesn't align with the best interest of the experts you are relying on; experts will cheat; most of the times they will do so unknowingly and subconsciously.

If there is one thing I've learnt, in my career as a software development it is this; don't depend individuals who are 'just' experts. If you must depend on someone for the choice of the tool, platform, technology, framework or information in general, depend on individuals who besides being decently good at what they do; are also individuals who can otherwise be defined as Mavens.

Malcolm Gladwell describes these individuals in his book, The Tipping point when talking about Mavens, Connectors And Salesmen. He explains:

The word Maven comes from the Yiddish, and it means one who accumulates knowledge. In recent years, economists have spent a great deal of time studying Mavens, for the obvious reason that if marketplaces depend on information, the people with the most information must be the most important.   

Malcolm in 'The Tipping Point', while talking about one of the Mavens, further describes how these individuals, end up helping others by simply being themselves and indulging in their own nature of gathering, processing and sharing information:

At one point Alpert launched into a complicated story of how to make the best use of coupons in renting videos at Blockbuster. Then he stopped himself, as if he realized what he was saying, and burst out laughing. "Look, you can save a whole dollar! In a year's time I could probably save enough for a whole bottle of wine."

Alpert is almost pathologically helpful. He can't help himself. "A Maven is someone who wants to solve other people's problems, generally by solving his own," Alpert said, which is true, although what I suspect is that the opposite is also true, that a Maven is someone who solves his own problems - his own emotional needs - by solving other people's problems. Alpert is not, it should be said, an obnoxious know-it-all.

It's easy to see how he could be, of course. Even Alpert is aware of that. "I was standing next to a kid in the supermarket who had to show his I.D. to buy cigarettes," Alpert told me. "I was very tempted to tell him I was diagnosed with lung cancer. In a way, that desire to be of service and influence — whatever it is — can be taken too far. You can become nosy. I try to be a very passive Maven... You have to remember that it's their decision. It's their life."

What saves him is that you never get the sense that he's showing off. There's something automatic, reflexive, about his level of involvement in the marketplace. It's not an act.

Anyone who has seen Life-Hacker, Scott Hanselman's Tool List, Scott Guthrie's direct and straight forward elaborate posts on technology Microsoft is working on or seen Rory criticize Microsoft when they make lousy mistakes, while retaining his full time job at Microsoft, knows what Maven-ship is; of course there are countless other examples of true and genuine maven-ship out there.

If you look hard enough for Mavens who are genuinely trying to help by collecting, processing and then distributing accurate, honest and true information; you will find them. Another way to spot them, is that unlike experts, who primarily work on information and see all information that benefits them as 'good', Mavens have an ability to form strong personal opinions about information they gather.

Pick a few Mavens; follow them through their blogs or website for a few months; see if your opinions align. Scrutinize their posts. Are they are making the right judgment calls that work for you most of the time? If your answer is yes for a particular Maven, you can use his knowledge or effort and make it a part of your own 'Transactive Memory'.

Months ago, for example, when I was asked to go looking for a static analysis tool to suggest at work, the nDepend official website was not the source of information I wanted to base my judgment on; I had tried the product and was happy but with; but when a third person who I know to be an honest maven talks about it and helps me get started on it, that is often the personal tipping point for me; something that results in a buy. 

Coderush is another example where multiple Mavens have got me introduced to the product without any hidden interest or incentive; ultimately resulting in me recommending the buy and a license getting purchased.

The list is endless but what is common in the list is that I would say I've never been disappointed with any of my purchase, downloads, recommendation-to-my-organization or recommendations-to-a-client; when the information used for the recommendation, purchase or download was from a genuine Maven I already trust. That, for me at-least, speaks highly of the power of 'Transactive Memory' used correctly. On the other hand, any software purchase or download that I've done based on an 'expert opinion' has turned out to be a lousy decision more than once.

You can take an expert opinion;  but the opinion would be correct only as long as the interests of the expert who is giving you the opinion align with your interests. When given the choice between the Maven and an expert; especially when you are picking sources for your 'Transitive Memory'; irrespective of how talented or awesome the experts you have access to are; don't depend on them.

Look for the quality of maven-ship in people instead. Depend on people who demonstrate that quality and then form your own pragmatic opinions based on theirs. I wish you good luck.

posted on Wednesday, February 11, 2009 4:29:02 PM UTC  #    Comments [0] Trackback
Posted on: Friday, February 06, 2009

If your manager behaves like an angry tiger; chances are that he is putting up a mask; behind which, lives a timidly scared and insecure individual.

Scott Berkun describes this type of insecurity as one of the ten primary reasons why Project Managers And Development Leads become assholes. He explains why managers often act like assholes:

They are insecure in their role. The psychology of opposites goes a long way in understanding human nature. Overly aggressive people are often quite scared, and their aggression is a pre-emptive attack driven by fear: they attack first because they believe an attack from you is inevitable. Management makes many people nervous since it’s defined by having have less direct control, but more broad influence. A huge percentage of managers never get over this, and micromanage: a clear sign of insecurity and confusion over their role and yours.   

Insecurities manifest themselves in multiple forms but the most serious form I have witnessed till date is the fear of becoming redundant. Most managers who are not from development, programming backgrounds and are managing projects are walking, talking, breathing examples of this form of insecurity.

Even technical managers are not immune to this insecurity.

In fact, to be honest, chances of you having this insecurity exist, even if you are the best developer in your organization.

The act of having written all that code for that critical module in that critical project, for instance, gives us programmers, what can be called, a 'perceived' sense of security. We love the warm and fuzzy feeling of our 'organizations' needing us for a a very long time in the future as much as we hate and fear the feeling of not being needed.

If you are working with a team your first responsibility as a manager; is to lose this sense of insecurity.

Now, that's easier said than done.

As it turns out, this insecurity is not 'that ring' which you can just lose in the sink. The fundamental problem of transitioning to leadership role is that this insecurity, in most cases, has a tendency to multiply rather than getting reduced; especially as you move up the pecking order.

Michael Lopp, in his post, describes this tendency of managers getting sensations of insecurity, rather articulately. He explains:

This sensation will appear at the end of the day when you ask, “What did I build today?” The answer will be a troubling, “Nothing”. The days of fixing ten bugs before noon are gone. You’re no longer going to spend the bus ride home working on code; you’re going to be thinking hard about how to say something important to someone who doesn’t want to hear it. There will be drama. And there be those precious seconds when there is no one in your office wanting… something.   

It is this sensation of building 'nothing' day after day that makes most managers feel insecure and take their first steps on the path to prickdom. This fear of their team or their organization finding out how easily replaceable they are, is exactly what makes them forget their 'not to do' list and makes them do too much. Most managers jump from creating Gantt charts, to organizing meetings knowing deep down inside that none of these activities do not add any value what-so-ever and yet continuing to sound detail oriented and in charge; instead of just getting out of the way and letting their teams drive.

Having said that however, turns out, depending on what you do with this insecurity, which is usually supposed to get you started on your path to prickdom, matters. This same insecurity that gets you started on your path to prickdom, can help you become a kickass manager, if channeled in the right direction. Used correctly and generously this fear or insecurity can transform you and take you to the next level of genuine competency. It is like taking the devil along with the angel when you head out to war against prickdom.

Used wisely, what this insecurity allows you to do is 'scale up'.

Don't knit your brows.

I'm not asking you to 'scale up' like the VP of sales and marketing expects your development team to scale-up-and-do-more-with-less; that's not what I mean. I'm not talking Managementese here.

The fluff aside, scaling up is one thing that needs to be one of the primary things you focus on in your career profile.  Michael talks about the art of scaling up using a writing style that is not just fun to read, but rather motivating . He explains:

As a new manager, whenever the sky falls, you’ll become an engineer again. You’re going to fall back on the familiar because those are the tools you know and trust, but it’s time to trust someone else: your team.

If I could give you one word, a single, brief piece of management advice, the word would be “scale”. Your job as a manager is to scale the skills that got you the gig in the first place. You used to be the guy who did the impossible when it came to fixing bugs. Ok, now you’re the guy whose entire team does the impossible bug fixing.

It’s time to translate and to teach what you’re good at to those who you work with, and that starts by trusting them to do that which you previously only asked of yourself.

The benefits of defining and maintain this trust create a satisfying productivity feedback loop. By trusting your team, you get to scale, and scaling means you hopefully get to do more of what you love. The more you do, the more you build, the more experience you gather, the more lessons you learn. The more lessons you learn, the more you understand, and that means when more shows up you’ll have even greater opportunity to scale.   

Put simply, to me scaling up means that you try to make yourself completely replaceable. You work hard to make yourself a primary candidate who can be fired without any dependency or hassle; because his team knows what they have to do and can continue to do it; even if you are not around or decide to quit. It's like building self sustaining eco systems in fish tanks. Continuously.

I'm not talking about traditional succession planning here. I'm talking about enabling your team to do everything you are doing and encouraging them to do it better; even while you are around. Make them replace you so that you are no longer a critical part to the success of the project.

Yes, that makes you primary candidate for being fired; but if it actually does gets you fired; you didn't deserve your job anyway; or maybe your organization didn't deserve you; either ways; it is best for you to move on.

My first lessons at scaling up came in when a young and budding developer at a client office, working for them, approached me asked me if I could explain the security piece that I was leading. Here's how it happened; he was free, had nothing to do and wanted to contribute. I was way too busy and way too insecure to let go ownership. I politely dodged his question with a - sure-maybe-some-other-time-when-I-am-free answer. As a matter of fact, My being busy wasn't a problem; my being insecure, was.

I'm not sure why I did that, but the very next day, I randomly walked over to his cabin and I think I spent over five hours taking him through the entire module, showing him how to debug the module and running him through the entire implementation. Then I spent a couple of hours showing him where my code sucked and asked him to see if he can come up with better ideas. It was the very next day something creepy; almost Hollywood style, happened. I lost my insecurity - just like that ring aught to have been lost; and most importantly, it was fun. 

Three weeks later this young and budding developer of ours was leading the security module. I moved on to code-reviews; working on the nastiest performance fixes and challenges which were so insane I loved working on them.

Early on in my career, it was divine coincidence, that made me stumble upon my first experience of 'scaling up' by making myself completely replaceable and then working my ass off to take up an even bigger and better challenge. It was like a tame lion, tasting his first few drops of blood. The rest as they say is history. Today, one of my measures of success if I am supposed to be managing it is - how easily will the project continue to run if I were to quit for good without any replacements.

Once this level of temporary uselessness is achieved; I love flaunting it, talking about it rather shamelessly and finding something much more challenging to do.

May I suggest dear reader that you do some serious soul searching on if you have insecurities about your colleagues beating you in the race of getting to the top? If you even heard the mildest whispers of the word 'yes' while asking that question; may suggest you act now and start on your journey to overcome these insecurities. Multiple techniques exist:

  1. Pick what you learnt last week and conduct a knowledge sharing session. You insecurity of having no competitive edge will make you learn more in a desperate attempt to stay ahead in the stupid rat race; then conduct another session again after you've learnt something new. Keep doing this till you no longer feel insecure; and if possible continue doing it even after that; just for the fun of doing it
  2. Take the module you own; explain it to someone and then hand it over. Help the other person when needed; but don't code on it. You insecurity of having nothing to do and not being very needed in your organization will make you probe into other productive areas; then teach those to someone else and hand them over as well. Once you've manage you use and lose all your insecurity; continue doing it anyway.

Long story short; use your insecurity till you lose it. Learn the art of making yourself completely replaceable and dangerously close to getting fired each year; and then, if you still don't end up getting fired year after year, you'll know you're growing. I wish you good luck.

posted on Friday, February 06, 2009 9:37:56 PM UTC  #    Comments [0] Trackback
Posted on: Tuesday, February 03, 2009

Every once in a while as I talk to developers around the world it is not uncommon for me come across developers who feel they are under a constant watch.

 

Managers on the other hand do not hesitate to consider this an integral part of their job and label this as their being 'detail oriented'.

One of the young and budding project managers, that I worked with at Multiplitaxion Inc, who for the purposes of this post, we shall refer to as Fred, described his daily activities to me in an informal conversation. Based on my recollections of the past I may not be quoting this person word-by-word but I do keep the spirit of what he was trying to say one-hundred percent intact. Here is Fred, describing his daily routine.

I start my day by looking at the bug tracking system to see how many bugs are out there in the bug tracking system and what are the pending items in the task list. Then I talk with my development team during the afternoon and check how many they would be able to close for the day. With that done, I check with my QA team how many items they will be able to close in a day. I spend afternoons assigning tasks and bugs to individuals; both in the development and the QA team. During the evening I check up the list again about how many items were actually closed and follow up with the teams if there is a variance in what was expected and what was done.   

I say this at the risk of sounding like a jerk, but the mere act of hearing this individual describe his day was both humorous and pathetically tragic. Here was an individual working hard to destroy his career and turn himself into data entry operator for the bug tracking system and a watchdog merged into one when he thought he was 'managing' the project.

As we spoke I could literally picture a what-would-you-say-you-do-here discussion from office space; and yet; this individual found it his responsibility to be in control and in charge of every single bug that was there in his project.

The desire of being in control was in fact so intense that he took it upon himself to get every single cosmetic bug in the project closed. He didn't close them himself though; he got the developers to do it while he maintained timelines and checked-up on his team to see what the status of the bugs was; regularly; often even twice a day.

Another manager I happened to witness, was notoriously famous for calling up people during the weekend and asking them to come down to office every time she discovered a bug while he was testing the build herself during the weekend. QA was called and questioned on why the bug wasn't detected. The individual actually did consider himself very detailed-and-organized. Everyone else of-course, considered him a notorious asshole.

These are but just two examples. Look around you and you'll find many others. The act of getting into too many details about your project sends a subtle signal  to you team. It tells them that you, do not trust them to take the correct decisions and get things done. It de-motivates kick-ass performers to an extent most 'detail oriented' managers cannot even begin to imagine. Cube Queen for example, expresses her frustration with her managers desire to indulge in every little minutia of her job:

This week in our fabulously fun staff meeting, I made sure that I talked for at least 15 minutes. That’s 14 minutes longer than I usually participate. My colleague and I were testing out a theory. She thought the reason behind our leader’s strange behavior towards me — ignoring and discounting me, pretending like I’m not standing right in front of her so she doesn’t have to say good morning to me — was the result of my lack of communication during staff meetings.

So today, I blabbed on and on about the boring nitty gritty details of everything I worked on, including phone conversations I’ve had within the last week. Sure enough, directly after the meeting I got a, “Great job at staff, boy you’re really busy.” Right on cue!

Don’t ever forget and don’t ever underestimate the power of minutia with leaders who have small brains. And that would be about 90% of them! If you work for a short-sighted, incompetent idiot who is incapable of strategy development and only focused on the tactics that it takes to get a project done, you must — I mean must — live in those details and broadcast them proudly. Even if it’s against your nature.

Yes, this is also in line with kissing A**, which I don’t like to promote, but in this case it’s a necessity! The incompetent leader lives for that crap. There’s also a bit of narcissism here. The incompetent boss looks for lame things like staff meetings for his/her underlings to express their subordinate positions. Meaning, bow to the king or queen. This personality gets off on the power that comes with “this is my staff meeting and these are my servants reporting. Bow to me!” So bow!

I want you to try something tomorrow. When you see your incompetent boss or senior leader in the hallway, stop and tell them about that great process you just finished, or the phone calls you had to get the project done. Live in minutia!   

If you are a manager does it sound like cube queen is being unfair and overly critical? At the end of the day, all the poor-little-manager is expecting from his team is that they brief him with details of the work they are doing. Yes, he gives attention to details and wants to get things done the first time. Is that such a bad thing?  Dave Taylor tactfully uses sarcasm to answer this same question by turning the tables on a potential micro-manager:

Question Asked:

I just had someone tell me I'm a "micromanager", but I have no idea what this really means. Yeah, I have a high attention to detail and I like to have things done right the first time, but why is this a negative?

Dave's Answer:

Well, when you submitted this question, you shouldn't have used the word "Yeah" in your question, and you originally had single quotes around "micromanager", but I fixed that, and, well, your grammar isn't quite what it could be.

Oh? You just wanted me to answer your question? Not tell you how to ask your question in the first place? Now you're starting to see the difference between interacting with people and trying to manage their every breath, to control rather than manage, to project the message "you're incompetent and I just don't trust you to do even the simplest thing correctly."

That's what a micromanager is: someone who manages at a level far lower, far more detailed than is necessary or appropriate.    

The next time you feel the need to 'drill down' into more details when you team gives you a status; consider if the drilling down is really necessary or it is just your egoistic itch that you simply feel like satisfying. Ask yourself if you just 'have to' know and understand every moving part in that CRUD form your team worked. Question yourself on why you 'must' know who introduced that bug.

Hire smart teams of  kickass developers who have great chemistry. Get them on a project, be there if they need something, get out of their way and let them manage themselves.  After all, you were hired to help your team so that nobody comes in their way to success; and that includes you too.

If you developers are excited about what they are doing and they genuinely respect you they won't stop talking about their project and what they are working on. If they are not excited, find out why they're not and get them excited. Have informal conversations, and fun filled stand up scrums; not never-ending status meetings.  For anything else that you want to know, use the right tools.

Check-ins and your version control system can give you as much details about the project as you want; a daily build provides you with all the status you might be interested in. If you need more details, teach yourself how to write code, grab the latest copy of your team's codebase, read and help them if you genuinely can.  If possible, be an active member and own a task yourself. What ever you do; don't bother them with lengthy meetings, full of stupid questions which make you sound like you lack trust. Don't indulge in random policing  under the name of being 'detail oriented'.

If you cannot 'sense' the health of your project and have to constantly peck on people and drill deep into irrelevant details to figure out how healthy your project is; you might not be the 'detail oriented manager' that you think you are after-all; You might, in fact, be a micro-manager or yet another classical prick; and you may not even know it.

posted on Tuesday, February 03, 2009 9:12:12 PM UTC  #    Comments [0] Trackback
Posted on: Friday, January 30, 2009

The phenomenon of clicking, since the mouse was invented and demoed for the first time was supposed to make computers easy. Today when I watch computer users surfing the web it is not uncommon to come across users who are 'thinking' with their hand on the mouse. Thinking about what to click next.

 

This post is that 'click'.

The whole idea of a hyperlink has philosophy elements attached to it. The statement, that on the web, you're just one click away from anything is a rather philosophical concept that the early internet veterans were very excited about. Visit any modern day portals and you'll find this idea bastardized to its limit.

MSN for instance, while I was investigating for this post, was literally over twenty-two-inches long, containing over two hundred hyperlinks (counted through Anchor elements in HTML), each of which appeared to be desperately trying to help you so that you are just a click away from everything MSN had to offer you that day. 

 

If you want to get an idea of the real scale of the size of the whole MSN front page you can take a look at full blown portal home page screenshot in real size.

Yahoo faces similar problems and so do tons of other portals out there. 

Remember the good old days of CD-ROMS where 'interactive' CD's were in and happening?  If there was one underlying idea in all successful CD-ROMs, it was this: they were 'interactive'.

You application is supposed to 'interact' with the user. It is not supposed to be a helicopter with complicated levers and switches the user is supposed to pull, turn on or turn off. What the interactive CD-ROMs in those days taught us about usability, is something most modern programmers drooling over technology, and most user interface drooling over pretty looking pictures and user interface elements seem miss out completely now-a-days.

Steve Krug in his book Don't Make Me Think suggests that working with a great web application should be an experience that is as interactive as playing 'Animal, Vegetable, Mineral'; the famous 'Twenty Questions' variant. My personal rationale behind this is fairly straight forward and simple. If you think about all the time that you spend online and the emotions that you experience in that time, chances are that most of your web experience is primarily composed of two types of emotions; or should we say two types of moments.

Put simply these moments can be classified as:

  1. The Question-Mark moments - when you are thinking about what to click next; usually because you are looking for something and aren't sure where to find it.
  2. The Exciting Exclamation Mark moments - when you are happy or excited; usually because you found what you were looking for.

The basic premise under which 'Twenty Questions' works is one of on making the journey of finding the answer as interesting as the answer itself. The trick is to make your question-mark moments really short, mindless and effortless. Every question mark moment should be followed by quick confirmations. Every confirmation of being right and being on the right track that you get; should be like a pat on a back; resulting in more excitement moments for you and encouraging you to stay hooked on to the application.

As the philosophers often say - if your journey isn't rewarding; reaching your destination faster just doesn't matter. Twenty Questions takes this premise and turns the journey to the answer into a fun-filled game. Steve in his book, 'Don't Make Me Think' suggests that web designers and web developers should do just that with web applications. Put simply Steve suggests that your web applications experience should be like playing 'Animal, Vegetable, Mineral'.

Deep. Don't you think?

Awesome; now let's do some more soul searching, get philosophical and talk about life and happiness.

On a serious note, besides just appreciating the philosophical aspect of things we're discussing here, let's talk a bit of about how you take a concept which is as abstract as this and turn it into something practical that you can use to make your applications better. 

That is what the folks at Google seems to have done when designing the iGoogle portal. What iGoogle does on its home page, for instance, is an amazing example of a portal playing the 'Twenty Questions' host for me. iGoogle doesn't know what I would like to see; so instead of confusing me with switches, levers or a gazillion hyperlinks like MSN, Yahoo and others, it offers me a courteous, polite question  on what I would like to see based on my interests.

If you were reading and were to take a look at the full blown screen-shot of the image above and compare with the full blown versions of MSN, Yahoo or other portals, chances are high that you will notice what iGoogle is fundamentally doing here.

It's interacting with you by asking you simple a mindless question; from the moment you land of the site.

On a side note, the message of the question itself - 'start by selecting some of our most popular content' - is confusing but the overall intent is pure and polite. The next time you visit iGoogle, it remembers your selection using a cookie and doesn't bother you with the same question again. What's really important here is that iGoogle doesn't worry about how many clicks might have to go in to tell it your interests. In fact, it expects you to start clicking right away; by keeping the clicks mindless.

Put simply, iGoogle is playing the host for 'Twenty Questions' and the game begins with a simple mindless question whose answer you already know based on your interests, the very moment you land on their home page. iGoogle doesn't work hard at reducing your number of clicks. On the other hand it works hard at making your clicks interactive, mindless and enjoyable.

When compared to the driving, while the MSN Home-Page and the Yahoo Home-Page are much like maps of their online city, landing on iGoogle Home Page is like landing on a freeway will really big billboards where it's really easy to find your way around, come back if you are lost and start drive again. You don't even need a map. Steve Krug talks about this analogy in his book Don't Make Me Think. He explains:

If You've ever spent time in Los Angeles, you understand that it's not a song lyric - L.A. really is a great big freeway. And because people in L.A. take driving seriously, they have the best street signs I've ever seen. In L.A.,

  1. Street Signs are big. When you're stopped at an intersection, you can read the sign for the next cross street.
  2. They're in the right place - hanging over the street you're driving on, so all you have to do is glance up.

Now, I'll admin I'm a sucker for this kind of treatment because I come from Boston, where you consider yourself lucky if you can manage to read the street sign while there's still time to make the turn.

The result? When I'm driving in L.A., I devote less energy and attention to dealing with where I am and more to traffic, conversation, and listening to 'All Things Considered'. I love driving in L.A.   

While most user interface folks spend sweat and blood in trying to offer you easiest way to get to where you want to go, sometimes, a long enjoyable journey is much more rewarding than just getting from point a to point b. Ever took that slightly longer drive through the freeway just to avoid the city traffic in the shorter route? Thought so.

Just like most modern day drivers aren't deeply worried about saving a little bit of gas, over a generally pleasurable experience and getting there faster; most modern day web users aren't worried about clicking a couple of times more, provided your application is interactive, the clicks don't require thinking and your page loads are blazing fast. In Don't Make Me Think, Steve Krug calls this 'Krug's second law of usability'. He explains:

It doesn't matter how many times I have to click, as long as each click is a mindless, unambiguous choice - Krug's second law of usability.

On the face of it, "number of clicks to get anywhere" seems like a useful criteria. But over time I've come to think that what really counts is not the number of clicks it takes me to get to what I want (although there are limits), but rather how hard each click is - the amount of thought required and the amount of uncertainty about whether I'm making the right choice.    

In general, I think it's safe to say that users don't mind a lot of clicks as long as each click is painless and they have continued confidence that they're on the right track. I think the rule of  thumb might be something like "three mindless, unambiguous clicks equal one click that requires thought"

Of course, there are exceptions. If I'm going to have to drill down through the same parts of a site repeatedly, for instance, or if the pages are going to take a long time to load, then the value of fewer clicks increase.

While in some cases less is more; when it comes to clicks, lesser number of clicks are not always better. The next time you spend a lot of time worrying about reducing the number of clicks you might actually be spending your time in making the application less interactive and cluttering your screens with elements which requires your users to use their brains instead of their fingers.

May I suggest, dear reader, that we spend our time in making our applications blazing fast by reducing the page load time and focusing on adding interactivity without worrying too much about the number of clicks. When you're cruising through high speed freeway, no sensible driver cares about the trickles of fuel he might have saved had he taken the shorter busy road with congestions. After all, speed still matters.

Is browsing through your application as rewarding as playing 'Twenty Questions'?

Is Your application blazing fast when it comes to page loads and responsiveness?

No matter how hard you try, they'll never be just one click away from everything.

Let's get our priorities straight. Remember, when it comes to user interface, less is more; even today speed matters much more than number of post-backs and when it comes to clicks, three mindless, unambiguous clicks are better than one requiring thought.

If you genuinely worry about your users, worrying about their brains having to work hard is much more important than worrying about their fingers having to work hard. In fact, if you can pull it off well, like iGoogle does, they might even enjoy and appreciate a couple of extra clicks here and there.

The idea of reducing the number of clicks in applications and websites is highly overrated. Unless you hear otherwise from  your users; start with the assumption that nobody is counting the number of clicks. Stop hurting their brains and start working on giving them an overall better experience; even if it means adding a couple of extra clicks.

posted on Friday, January 30, 2009 9:20:40 PM UTC  #    Comments [3] Trackback
Posted on: Tuesday, January 27, 2009

Have you ever had a discussion with your manager where you felt that there was something wrong?

On the face of it, things are normal and you guys are just having, what can be classified as, a difference of opinion; but somewhere at the back of your mind; it feels like you're being pressured to give in and accept what you are being told to do without any further discussion. You've not been given a direct order or asked to shut up. On the face of it, things look like you're just having a 'logical discussion' except one tiny little problem; you don't feel like saying much or even presenting your point. Maybe it's just you; or maybe it's your managers body language. 

 

At Multiplitaxion Inc, during my early management days, while working at one of our client's place, we stumbled upon a couple of individuals who were basically monkeys needing to be sedated or removed from the project. When I walked into the cabin of one of one of their Vice Presidents something told me that things would not work out.  After quite a bit of soul searching, convincing myself and telling myself that I was just being paranoid I decided to have the meeting with him anyways.

What followed was a free lesson of management with nuggets of wisdom on how to increase efficiency of team members, how some people need to be 'managed', some people don't need to be managed, how some people cannot work without the pressure of a deadline, how a strong process or documentation can make some people work harder and how I need to pay a much more proactive role at keeping people under pressure. Put simply, I was being told to follow up with disinterested paycheck programmers much more frequently and get them to work by keeping on top of the status of their tasks.

To give due credit to this gentleman what he was saying may not have been outright stupid, but that wasn't my fundamental problem. My fundamental problem was this; the free lecture on management had started even before I had completed explaining my problem. I had been cut off and the nuggets of wisdom, often found in chapter-one-of-any-management-book-out-there were being thrown at me in no particular sequence. After wasting two hours of my already busy day I walked out of the cabin. During these two hours I wasn't even given a decent chance to explain my problem, leave aside expecting some help on it.

For the first thirty minutes as I heard him go on and on about how some people need motivation and how I should try to motivate these individuals rather than removing them from the project, there was a very soft gentle whisper deep down in my head. I couldn't quite hear what it said, but something seemed wrong.

I continued listening; and opening my mouth every now and then, under the expectation that I would be allowed to speak. soon. For every-thing that I said, I was being cut off, asked for facts, numbers, matrices and then I was being scrutinized to see if I had tried hard enough to 'monitor' these guys. After some time if felt like a police investigation to check if I had followed proper 'management processes'. 

Then as he moved on, about how I should objectively assess individuals based on their technical qualifications and how penalizing them for their laziness was a part of my job, the whispers only went louder. After I while I knew and I could say it to myself; confidently; and then I finally did it. I told myself - 'this guy is a prick'.

During my next six months in the project, as I spent more time with the rest of the client team in the project I learnt how this individual had a reputation of being an asshole. This guy, who for the purposes of this post, we shall refer to as Fred, had been give names ranging from 'The Mafia' to 'The Undertaker'; by his team. Each of these names had an interesting supporting story that the team would be more than happy to share with you at length over lunch if you cared to mention this individual's name.

At times I did feel sorry for Fred though. He was neither aware of his multiple names existing nor did he remember any of these stories which he had himself been a part of. I'm sure Fred felt that he had done an amazing job at motivating his team; just like he felt he had motivated me by teaching me how to 'manage' my team when I walked out of his cabin. I was of-course, utterly confused and intimidated by his indirect interrogation and body-language. If there was anything about management I learnt that day, from that meeting, it was that prickdom works on stealth. If you are an asshole or have acted like one in an isolated event, chances are, that you don't even know you are one.

Are you a Micro-Manager? Are you encouraging prickdom and creating Micro Management Zombies?

If you are reading this chances are high that you shook your head hard and said - 'Who me? Heck, no way!' - and you probably did it as soon as you heard the question.

Being fair to the question however, requires some solid soul searching and some serious conscious effort because if you happen to be a Micro-Manager, an asshole or a prick, chances are you don't even know it.

Kathy Sierra provides a sensible litmus test to figure out if you are a Micro-Manager or in danger of becoming one:

Do you have a micromanager? Or are you a micromanager? If you demonstrate any of these seemingly admirable qualities, there's a big clue that you might be making zombies.

1) Do you pride yourself on being "on top of" the projects or your direct reports? Do you have a solid grasp of the details of every project?

2) Do you believe that you could perform most of the tasks of your direct reports, and potentially do a better job?

3) Do you pride yourself on frequent communication with your employees? Does that communication include asking them for detailed status reports and updates?

4) Do you believe that being a manager means that you have more knowledge and skills than your employees, and thus are better equipped to make decisions?

5) Do you believe that you care about things (quality, deadlines, etc.) more than your employees?

Answering even a weak "yes" to any one of these might mean you either are--or are in danger of becoming--a micromanager. And once you go down that road, it's tough to return. A quote from Dune (can't remember exactly) applies here, and goes something like:
"Be careful of every order you give. Once you give an order on a particular topic, you are responsible for always giving orders on that topic." 

The questions provide a very good litmus test to begin with, but not being a micro-manager and not being an asshole requires constant checks at each step of your life. It is a way of life that needs discipline, commitment and above all a thick-skin to accept your fault and apologize when you act like a jerk.

Success-Factors CEO Lars Dalgaard has a particularly interesting CNBC feature on this on topic. The interview ends with a funny but rather profound note:

Dalgaard says - 'it takes one to know one' - and he says he sees on in the mirror about ten times a day; but when he acts like a jerk; and we all do once in a while; Dalgaard says he tries to immediately apologize; Becky & Lissie says he had to apologize just about forty minutes before our interview.   

We all act like jerks once in a while. If you don't believe me, pause and look back at your life. Chances are, you'll easily spot a couple of incidents where you may have acted like one too. If you can't think of any such incidents, you might be acting like one right now; unknowingly. What sounds obvious and is the title for the first chapter of Michael Loop's book, is often not missed out by most people.

What separates a thick-skinned-life-long-learner from a certified asshole is the relentless ability to question yourself; answer the question honestly; apologize when you make mistakes and move on with a persistent desire to change. The trick is to, slowly evolve and morph into a better manager and much more importantly, a better human being, with every passing day.

It is with this spirit that we start a series of posts with an attempt to, every now and then, bring from the real life battlefields of software development, stories that will help you constantly ask yourself the important questions; Are you an asshole? Are you starting to take your first steps on the path of prickdom through micro-management?

Your direct reports or colleagues may indulge in mitigated speech; they may not be able to break the bad news to you as easily as you think they should; but I do hope that the stories or incidents will hopefully help you (and me) pause, step back, realize and recover, before it's too late to turn around. After all, you might be walking the path of prickdom through micro-management and you may not even know it.

posted on Tuesday, January 27, 2009 3:15:13 PM UTC  #    Comments [0] Trackback
Posted on: Friday, January 23, 2009

For years, software shops of this world have worried about the 'optimum utilization' of their people and their people's time. The Pareto Principal, when related to resource utilization, says that twenty percent of the people usually do eighty percent of the work in most organizations. Turns out, this fact, worries most organization and makes them uncomfortable. This is often cited by many, as the primary reason why projects and organizations fail. After all when you have big things resting on a small group of people, you have a little bit of a problem.

Or do you?

At Multiplitaxion Inc, we discussed this problem in really long meetings where we spent countless hours trying to figure out how we can make the other eighty percent efficient. The discussions continued for days; but after the first couple of days there were a bunch of us who had realized 'something'. This is a post about that 'something'.

If you've ever discussed the Pareto Principal and have worried about its effect on your organization; knowing what we realized back then helps. That 'something' that we realized, consisted of some serious dark secrets; and I am going to let you on to those really dark little secrets right now.

Even though I personally dislike referring to people as 'resources', chances are, that knowing these secrets will change your perspective on 'optimizing the allocation of resources' and will help you with 'resource management'. I want you to get your pen and diary and take some serious notes. Ready?

Secret #1: Projects don't fail because twenty percent of the people end up doing eighty percent of the work; That is why your HR or Resource-Management-Group 'thinks' projects fail.

Secret #2: Your HR or Resource-Management-Group doesn't know a shit about software development.

Secret #3: Projects don't fail because twenty percent of the people do eighty percent of the work. Projects fail because organizations go out there and expect the other eighty percent who have never done any real work their entire life and are not even supposed to be doing anything real, to get their asses off the couch and start doing 'something' without clearly defining what that 'something' is.

Now if you followed along carefully and took notes when I asked you to, chances are you probably know more about 'optimum allocation of resources' than your HR, the Resource-Management-Group or whatever it is that you call that group of people in your organization, ever will.

Don't believe me? It's story time!

I take you back into the depths of time and bring back from the days that have rolled behind a rather interesting conversation between a young and budding manager, who we shall call Jack and a young and budding developer who we shall call John. It's been a long time since I heard this discussion and I may not be quoting the guys exactly, but I do try to keep the heart and the soul of the conversation as close to reality as possible.

Jack: The HR called. I think they're going to allocate Fred to our project. He's free, wants some work and they think he can help you guys with business analysis and a few new ideas.
John: I thought you said you want us to deliver this project successfully?
Jack: (smile) What do you want me to do?
John: Anything. If you want us to ship, I don't want him anywhere near the project. Give him something to play with, keep him busy; give him a sleeping pill or something. He's a monkey Jack; you know it. (Long silence; followed by a feeling of awkwardness as Jack thinks.)
John: What!?
Jack: Don't worry about it. I'll give him sleeping pill. (smile)

And that was that. The project lasted for over a year and during the course of that project we never heard of, saw or worked with Fred. We saw him in the final project end party; after the project had ended; successfully. He was there to congratulate us. 

What this project manager had done was put the naughty monkey to sleep so that he wouldn't go mucking around the project and getting in the way of people who were getting the real work done. 

The specifics of how he did it, remained a mystery however. The project rolled out five successive phases; during the course of these five phases more than one monkey joined the project under the name of 'optimum utilization of resources' and every single one of them was sedated; quickly and quietly. None of them did any major harm. Starting that day; if you were a manager working with anyone who had worked in that team, how many sleeping pills you had for the monkeys became a measure of how much the development team respected you.

Scott Berkun describes the importance of this ability to eliminate bull-shit and why kick-ass project managers should have this ability, while talking about 'The Lost Cult of Microsoft Program Managers':

When I was hired 1994 there was a cult around the role. Program Managers had a reputation for being people worthy of being afraid of for one reason: they knew how to get things done. If you got in their way, they would smile. And then eat you. They drove, led, ran, persuaded, hunted, fought and stuck their necks out for their teams with an intensity most people couldn’t match. The sort of people who eliminated all bullshit within a 10 foot radius of their presence. How to be this way, and do it without being an asshole, was one of the things I tried to capture in my book, Making things happen. All teams need at least one leader who has this kind of passion and talent regardless of where you work or what you’re working on. 

Put simply, every project requires at-least one, what we shall call, a 'bullshit buster'. 

Now, this might sound simple; but like all simple things, it is not something you can take lightly or casually. This is serious stuff.  Bottom line; your project is only going to be as good as the quality of your team, their chemistry and the quality of your 'bullshit buster'. You can have a kick-ass team building a mind blowing product, but if you've left a few monkeys awake, chances are, that your project will suffer and while using your product, your customers will smell the shit those monkeys have leave behind.

If you've used windows live writer to write a blog post you probably love the product.  However, the very fact that you had to go through the pathetic installation process while getting the windows live writer installed on your box makes me feel sorry for you. The product installer yells out loud that the windows live writer team probably missed out on doing a good job at bullshit busting. Rory in his post on the live writer installation process explains his frustration with the product and the probable cause of why an amazing product like the windows live writer can end up having a really shitty installer:

I love Windows Live Writer - the app itself. It's one of the few reasons I run Windows XP inside Parallels on my Mac. It's one of the apps I didn't want to leave behind when making the switch. It's simple, easy to use, and, despite being a Microsoft app, doesn't get in the way of itself. The interface is a little cluttered for what it is, but a couple settings can clear that right up.

What I can't stand is how difficult it is to get the stupid thing. I headed over to the Windows Live Writer Blog and started the download there. It was about a 2 MB file. It was a nice change from the usual bloated downloads you get from Microsoft.

Of course, it turns out that it's just an installer, and not one specific to Windows Live Writer. As many of you have probably learned, it's a full on assault on your sanity. Instead of simply installing the one app I want, I have to negotiate with the god damned thing just to get the "real" installation started.

It reminded me of the old Real Player days when, before finally agreeing to install the app, the installer wanted your social security number, a list of any STDs you have or have had, your checking account number along with the ABA, an agreement to subscribe to eighty magazines you'd never read, and an offer to be put in a drawing to win a trip for two to Cancun if you mail them your passport.

When Real Player crossed the line from being self-promotional to being a scourge on your computing life, people stopped using it. Not everybody - there are still a few victims out there who don't know any better - but it's widely hated in geek circles where tolerance for bullshit is minimal.

Given the advantage of hindsight, it's mind-boggling that the Windows Live Writer team has gone down the same path. And, given my experience on the Inside, I'm sure that the Windows Live Writer team has little to do with the stupidity of the install experience, but as an end-user now, it's not my job to figure it out or to care. They're being represented by this crap, and their product is going to take a hit because of it. It's unfortunate, as it's likely some dipshit-originated system imposed on the Live Writer team by some grand Initiative in the Microsoft tradition. Someone does something good, and other people, eager for success and recognition internally, hijack and then ruin the product. This happened to me, albeit in a different way (and not when I was with Channel 9). I was in shock at how easy it was for someone else to swoop in and destroy something I was just getting right. The Windows Live Writer team probably - hopefully - feels the same way about what happened to their product.

That's Microsoft for you. 

The web is littered with examples of amazing software that were either sabotaged, destroyed or sometimes even killed because the bullshit-busters didn't have enough sleeping pills. Then there are a few awesome products out there that are just being closed-down under the name of 'best utilization of resources'. You don't really have to be an employee of these companies or a rocket scientist to guess what might be going on in some of these product meetings and who is making the final decisions about the products future and health. Yahoo Messenger for Vista is a classic example.

The story for this really cute and sexy little piece of software was simple. It was a Yahoo initiative and one of the most-used applications built on top of Windows Presentation Foundation that wasn't built by Microsoft. What set it apart was that it built ground up for Windows Vista. Yahoo built it, announced it, advertised it and promoted it big time for vista users. Most vista users loved it; not just because of its sex appeal but some decently interesting features like tabbed chatting, awesome skinning features and the fact that it kicked some serious ass.

Personally, I loved it too; but that's not important. What is in fact more important is that with the release of this little piece of software it finally sounded like the whole stupid anti-windows zealotry would end and differences between software giants would reduce. It looked like companies were bending over their back to use the best tools and give the best user interface and usability experience to their end users.

My dream of this beautiful software-development-world where organizations work on commonsense however, lasted till I ended up formatting my notebook a few weeks later and suddenly realized that Yahoo Messenger for Vista didn't exist. It was gone. Disappeared. Zip. It was almost as if the thing had never existed. Yahoo had not just stopped development on this version of the messenger but they had removed the existing version from their servers so that no future downloads were possible. The official announcement on the Yahoo Messenger Blog clearly indicated lack of bullshit busters at Yahoo:

As of today, Yahoo! Messenger for Vista will no longer be available for download from the Yahoo! Messenger website. We have discontinued stand-alone releases of the Yahoo! Messenger for Vista application in order to focus on delivering one Windows experience that is optimized for all Windows users.

This decision will help us increase efficiencies on our team and deliver one consistent, full-featured product for all of our Windows users. Our application was based on the Windows Presentation Foundation (WPF) platform which we will continue to experiment with and invest in. The knowledge we gathered from developing Yahoo! Messenger for Vista will also help us improve future versions of our Windows software.

We realize many of you have been with us from the first launch of Yahoo! Messenger for Vista and we want to thank you for trying it and providing great feedback with each new release. 

A few speculations on the web, like this one from Jonathan Kay for instance, have it that it was because of the 'cost cutting measures' at Yahoo that Yahoo Messenger for Vista was murdered.

Anyone with a little bit of an imagination might be able to guess what that meeting directed towards increasing the 'efficiencies' of the team, would have been like and how it must felt for the core team that was working on this version of the Yahoo messenger, was starting to kick some serious ass and taste success.

Personally, as far as I am concerned as an end user, I think the Yahoo-Messenger-For-Vista team were doing a mind blowing job when they were 'not efficient' and Yahoo shouldn't have worried a lot about increasing the 'efficiencies' on their team. After all, they were shipping and they were kicking some serious ass. They were doing just fine.

On a serious note, If nothing else, I use the live writer installer, real player and yahoo messenger for vista as examples of what happens people who have nothing to do with the core product teams get in really big rooms, give their ideas and then insist that these ideas be implemented.

Shit happens; even in some of the best organizations of the software development world; and if you don't have enough bullshit busters in your team your product could be next.

The Pareto Principal usually takes care of itself if you can simply retain your best and hire people who are 'done and get things smart'. You don't need to organize big meetings to discuss how to utilize your people better. Twenty percent of your people doing eighty percent of your work won't kill your organization or your product. It is expecting the other eighty percent who have never done any real work their entire life and are not supposed to be doing anything real, to get their asses off the couch and start doing 'something' without clearly defining what that 'something' is, will.

Having a kick-ass team of developers who are tightly knit, flock well, support their code and are continuously shipping; isn't enough. Every team needs at-least one bullshit buster who carries a lot of sleeping pills; even when you're a Microsoft, a Real-Networks, or a Yahoo.

If you happen to be at your workplace, look around you; if not think of everyone who you work with. How many monkeys can you see or think of? How many bullshit busters can you  see or think of? How many sleep pills do you think these bullshit busters carry with them? Are they enough to sedate all the monkeys and send them to sleep?

If you answered yes to the last question, you chances are you're going to have a great product, a work life full of fun and a decent number of innovations happening. I wish you good luck.

If you answered no to the last question however, you're going to have to attend a few really long meetings, do a lot of 'resource management' and deal with a lot of new ideas as people who have a lot of time and nothing else to do muck around with your project; we wish you and your team good luck anyways; you guys just might need all the luck you can get; every single bit of it.

posted on Friday, January 23, 2009 4:43:52 PM UTC  #    Comments [0] Trackback
Posted on: Tuesday, January 20, 2009

If you've told yourself that you've been a developer long enough and that you need to 'grow to the next level' and become a manager, or if you've been hopping jobs in your relentless quest of managerial power may I suggest that you close your browser right now, leave and never come back to this URL.

This post, is not for you.  Neither is it about you. Seriously. If you fall in this category of I-need-to-grow-and-become-a-manager developers or you want to become a manager because you find programming depressing,  this post is not for you. Trust us. Just close the browser and leave. Now.

Actually,  on a side note, you can also try out this URL and if that doesn't make you very happy you can go here for relevant content that might satisfy your needs.

Ok, 'they' have left.

Now, with the highly irrelevant audience filtered out, let's get this out in the open, shall we?

If you're still reading this, and you love writing code, you're probably on your life long path of trying to become kick-ass programmer and a one man army, who hates meetings and loves what he does. Long story short, you love programming; and you think it is fun.

Chances are also high, that you're probably an introvert who loves talking to the compiler because it's much more rewarding and predictable than trying to figure out human beings who happen to be fairly unpredictable and act funny at times. You're happy; you're content and satisfied your work keeps you 'in the flow' for a good part of the day. In a world where most programmers can't program let's just say, you're a rather rare breed. Go ahead; pat yourself on your back.

What I'm going to say now, will make you feel a little insulted. It'll make you feel like serializing yourself into XML, flowing over HTTP, appearing right out of my monitor, grabbing me by my throat and strangling me to death; but before you plan any of that; hear me out.

You need to become a --- manager.

Ok, easy. Breath. Let it sink in.

If you thought my giving that advice to you meant that I had lost my mind and that I should be strangled to death for hinting that you move over to management, Rob Walling has sensible advice for you in his post 'Becoming a Better Developer Part 6: Become a Manager':

Many of you gasped at the title of this post:

“Become a manager? Has he lost his mind?! I'll be a coder 'til the day I die!”

I'm not implying that you should give up your coding gloves and step into the ranks of full-time management, but you gain incredible perspective about what makes good and bad developers once you've managed a few of them. Even if you never become a full-fledged supervisor, managing a project, being a technical lead, or running your own business are all suitable ways to experience what makes a “better” developer from a different angle. 

Rob suggests five primary reasons why you should think of becoming a manager if you happen to be a kick-ass developer. These include:

  1. Observing your best developers and Learning what makes your best developers, the best.
  2. Judging your boss from a pragmatic perspective - It's Easy to Complain about Your Boss Until You Have to Do His Job.
  3. Learning How To Self Manage.
  4. Doing what it takes to achieve results.
  5. Pushing the  no surprise culture in the organization.

It is an rather interesting post with valid reasons why really kick-ass programmers and one man armies out there, should try their hand at management; but none of these reasons explains reasons why I relentlessly nudge kick-ass developers and one man armies to try their hand at management.

Here's my reason: If you don't step up, 'they' will. Scott Hanselman, accidently describes this what I mean by 'they', in his rather interesting post on 'Cake-mail, Ninjas on Fire, and other Anecdotes', through an incident he recollects:

When I worked with Travis Illig (who is the origin of the term "Hanselminute," by the way) and Stuart Thompson at Corillian/CheckFree, we had a project manager who didn't totally "get" stuff.

What I mean is that we'd be in a meeting, perhaps a feature meeting or something, and we'd be firing on all cylinders. Everyone was working well together, communicating clearly, finishing each other's sentences, just an all around great day. Designs become clear, backlog items were created at a furious pace, and it was generally felt that everyone in the meeting "grokked" what we needed to do.

At this point this particular project manager, who had been quiet until this point, would ask something like

"Now, wait, are you saying that Java replaces XML?"

...and silence. Crickets. We were hearing English *words*, but not a cohesive sentence. After all that, the last hour of banging through stuff, he had not just a disconnect, but a total fundamental misunderstanding of some aspect of computers and systems design. 

Reflect back and chances are you've been through one of these meetings. Unless you're very lucky you're probably flocked by some of these project manages. 'They' are all around you and if you don't manage your projects, 'they' will.

I see a talented programmer knitting his brows at me right now:

Hey Pops, you're telling me to turn myself into a do-nothing manager who does absolutely nothing, runs around with Gantt charts in his hands, sits in those lousy meetings and talks big even when he is completely clue-less about software development. I want to stay connected to programming and I want to write code; I love computers and there is nothing that is going to change that! 

Absolutely. I love computers too. In fact, in the past, I've gone ahead and said that even young and budding managers should write code. I avoid those meetings too; but consider this; as much as you might feel that managers don't do any real work; as much as you would rather stick to software development and as much as you might hate those stupid never ending meetings, depending on when you are reading this, chances are, that in the real world, in your very own organization, a couple of these stupid meetings are going-on right now even as you read this.

It is in these meetings that a bunch of Freds who know nothing about software development are estimating your timelines and developing the project plan for your next project. They're taking important decisions that'll impact you and your team. You need to be in some of those meetings and tell them that they've got planning all wrong. You need to be there; express your opinions openly, speak up with spine and conviction, show them how stupid some of these decisions are and more importantly, set timers to end those meetings.

Steve Yegge, in his post on (Not) Managing Developers explains why budding programmers wanting to 'grow up' and desperately become managers should not be allowed to.  He also describes the problem from an organizational perspective and how most organizations out there are killing themselves by considering developers, irrespective of how good they are, to be second class citizens. He explains:

The catch-22 of software management is that the ones who want it most are usually the worst at it. Some people, for worse or for worst, want to be managers because it gives them power over their peers. There's nothing good that can come of this arrangement: you should never give power to someone who craves it, for reasons that I hope are obvious.

Unfortunately, many tech companies do exactly that, because they don't know any better. And they exacerbate the problem by setting up a bad feedback loop, in which managers get to make all the decisions and effectively have all the power, or at any rate too much of it. A company may say they value their engineers, but if compensation decisions are all made by managers, guess who gets all the compensation? And then everyone sets a long-term goal of becoming a manager, at which point the company is no longer focused on innovation.

If you're an engineer at a company where becoming a manager is considered a promotion, then you only have three choices: become a manager yourself, or leave, or resign yourself to being a second-class employee. 

Sadly most companies around the world that I've visited, consulted for or worked with, besides a couple of rather rare cases, fall in the range of organizations who consider managers to be a superior breed of employees. I've had my share of being considered a non-decision-maker or yet-another-developer whose feedback hardly mattered and having experienced it first hand I can easily relate to most developer complaining about having bosses who have no freaking clue of how software development is done; but there's a small flip side to  the story.

As I continue to work with and visit multiple organizations across countries I've heard stories of lost-and-clueless-bosses-and-managers multiple times and yet I see highly capable developers and kick-ass programmers, who know what they are doing and how software development is done, being highly reluctant to take up added responsibilities including genuinely leading and helping a team of other kick-ass programmers.

Most kick-ass programmers don't even what to try their hand at it. The Freds on the other hand, are, for obvious reasons of course, dying to move forward and take up 'more responsibility' only to make the problem Steve describes in his post, even worse.

If you're stuck in an organization where you have incompetent managers who have no idea of software development all around you and you think you can make your projects move smoother without them, you are primarily left with two options: "You can Change Your Organization or Change Your Organization." 

Unless, you plan on changing your job or you happen to be one lucky son of a gun who has stumbled upon an organization that lends him a boss who knows how an 'engineering and organizational culture' gets formed; you need to make small and progressive changes in your current workplace. Next time, they offer you a promotion, don't shrug and go 'Nah, I just want to write some code'. Accept it. Step up if needed; and then try your best to 'not manage developers' and not be a prick.

If you don't step up, 'they' will; and then, before you know it, Java will indeed replace XML and the world will end.

Ok maybe it's not that bad; maybe the world won't come to and end; but on a serious note, we have enough Freds flocking the world of software development, trying to 'grow' in their professional life, trying to 'manage developers' and screwing things up repeatedly. We really won't mind a few more competent developers who know what they are talking about, failing often, failing early and running projects pragmatically.

That's it. I'm done. I've committed the ultimate sin of insulting competent developers and decently good human beings by asking them to try their hand at management and morph themselves into managers if they can. If you happen to be one a kick-ass developer, who also happens to be decently good with human beings; or if you just happen to be someone who loves writing code, chances are that you may have perhaps felt slightly turned off by my gentle nudging and trying to push you to the other side of the wall.

If my gentle nudge ended up insulting you, go ahead; serialize yourself into XML, stream over HTTP, come out of my monitor and strangle me to death if you must; and then you can whine about how incompetent your managers are; or we can talk about how your team has been taking a lot of stupid decisions lately. Alternately, you accept leadership roles, make small differences and maybe even make the whole traditional 'manager' role redundant. 

If you're a kick-ass programmer capable of shipping, see if you can morph yourself into a manager; mentor one or more small yet smart teams of other kick-ass developers and then see if you can continue writing that kick-ass code you always loved writing. I wish you good luck.

posted on Tuesday, January 20, 2009 8:30:14 PM UTC  #    Comments [2] Trackback
Posted on: Friday, January 16, 2009

When you're a kickass programmer who spends more time with the compiler than with other human beings you tend to run into problems. You start to think of your code as a way for you to interact with your machine; instead of also considering it a way for you to interact with your end-users and other programmers who maintain your code. Long story short, you become slightly inconsiderate about your end users and you start thinking more-and-more like a machine.

You swing like a pendulum, sometimes expecting your users to understand stack-trace of your exceptions, which you display as error message, and sometimes considering your users to be complete idiots who understand nothing about software; so you lean towards not even telling them what went wrong and lean towards completely lame and generic error messages.

At Multiplitaxion Inc, I happened to witness an application where I saw a team lean towards the later. Someone in the team had found the ultimate way to encourage reuse in code and centralize exception handling. The result: Every crash that the application went through showed one generic error message. 'Error Encountered. Our support staff is working on fixing this'; or at-least, something to that effect.

After we played around with the application for a couple of days we knew exactly what to expect when 'anything' went wrong with the application. After a few weeks it turned into a joke; every time the our-support-team-is-working-on-fixing-this error appeared on the screen, there were remarks which were on the lines of, "awesome! now we know the support staff has some work to do and is finally working". I officially declared this as the forty-two of all error messages ever invented.

As hilarious as some of the jokes regarding the support-staff-is-working-on-fixing-this error were, there was something fundamentally wrong about the error. The ingenious idea of a 'generic error message' seemed to work under the premise that the user is an idiot who doesn't even have to be told what went wrong. To say the least, the error demeaned the ability and intelligence of the end user and whispered gently to the end user telling him - 'you're an idiot'.

The other extreme is telling the user everything that goes wrong in the application and expecting him to understand your code and stack traces. This approach turns out to be equally rude and demeaning. About Faces 2.0 by Alan Cooper and Robert Reimann illustrate the beautiful point about most applications being 'rude' by displaying irrelevant errors to the user and blaming the user for the error. They explain their point by using this error as an example:

Alan and Robert explain how this error and software applications in general are not just loud; but also rude to the end-user. Their initial reactions as they encounter this error are not just humorous but very close to how an end user's mind subconsciously thinks when it sees the above error-dialog for the first time:

Thanks for sharing. Why didn't the program notify the library? What did it want to notify the library about? Why is it telling us? Why do we care? And what are we Ok'ing, anyway? It is not OK that the program failed!  

Software is often rude to the user. It blames the user for making mistakes that are not the user's fault, or should not be. Error message boxes like the one in [the picture] pop up like weeds announcing that the user has failed yet again. These messages also demand that user acknowledge his failure by agreeing: OK.

Software frequently interrogates the user, peppering him with a string of terse questions that he is neither inclined or prepared to answer: "Where did you hide that file?" Patronizing questions like "Are you sure?" and "Did you really want to delete that file or did you have some other reason for pressing the Delete key?" are equally irritating and demeaning. 

If there is one underlying theme in either providing completely irrelevant code related details to the end user or not even telling him what's wrong, it is the programmers inability to think like the end user. As programmers we go from expecting the users of our applications to be just as technically savvy as we are to being a complete idiots.

Most programmers may not admit to looking down on users who are not very technically savvy but the fact of life is that we tend to do just that when we write code. The LiveArt example, which made it's way all the way to the CNN website is a classic proof of this:

Of course, there are degrees of rottenness. "Some bad error messages," Ezzell says, "are just placeholders that slip through. We've all been there." Ezzell acknowledges he once wrote a message that addressed the user as "Dumbkopf" and was mortified when the dialog made its way into production. Thus, he sympathized with Orem, Utah-based Viewpoint DataLabs, which managed to include the following in its LiveArt install:

Setup is unable to locate a suitable version of DirectX on your machine. You will need to install DirectX before you can use LiveArt98, dumbass!

Sympathy notwithstanding, Ezzell awarded the entry third prize. Red-faced developers at Viewpoint noted that the message had simply slipped through the quality-assurance cracks and that they'd fixed the problem "about 4 seconds after we realized it was still there." 

Yes, of-course the 'dumbass' part in the installer of LiveArt was an innocent joke by the programmers; but none the less it is an indication of the fact that most of us programmers tend to find the fact that computer users aren't as technically savvy as us, somewhat funny.

As a matter of fact, the truth is actually a little darker than that. Actually, we don't want our users to be as 'smart' or 'intelligent' as we are. We expect them be just 'like us'. We expect them to be just as connected to the compiler as we are, just as absent minded as we are and sometimes even just as 'stupid' as we are. If you don't really buy my point, the same CNN article, brings to you a few hand-picked error messages from the history of computing from environments ranging from Microsoft Windows to Unix:

  1. Error: Keyboard not found. Press F1 to continue.
  2. Windows has found an unknown device and is installing a driver for it.
  3. Error 0000: No errors found, restarting computer.
  4. The procedure failed with the following error: The command completed successfully.
  5. Cannot delete tmp150_3.tmp: There is not enough free disk space. Delete one or more files to free disk space, and then try again.

These are classic error messages which may or may not have slipped through the cracks of QA or maybe it is a classic case the technical teams, not even realizing there was anything wrong with any of these messages. Of course, they were neither hoping nor expecting that the end users will feel a little, lost, when they encounter these messages.

Ben Ezzell has an entire site dedicated to the stupidity of the error messages; but Ben is not just critical. His criticism, like any good criticism, happens to be fairly constructive; it goes all the way to writing Developing Windows Error Messages; which provides excellent advice to developers. In his book, Ben advices that developers should work hard at trying to see that at the bare minimum, each of their error messages they write at-least help answer the following three questions that users typically have when an error occurs:

  1. What is the problem?
  2. Why is it a problem?
  3. What can I do to solve the problem?

The task of displaying relevant and appropriate error messages to the user is an art picked with time and experience. As much as using accurate, easy-to-understand-and-act-on  Error messages might sound trivial to us as programmers; the act coding your error message has deeper impact on how people perceive your application and the love they give back to your application.

Of-course you can continue to classify making your error messages meaningful, sensible and genuinely helpful as a 'trivial' task which can be fixed 'later'; after you are done with your functionality; but there's one tiny little problem with that approach; after you're done, the 'later' never comes. Besides, not asking unnecessary questions; and eliminating un-necessary warnings is a way of life which requires considerable discipline throughout the development cycle.  Don't take your error messages and the politeness of your lightly. Consider spending some time thinking about these items as you code.

Go the extra mile and every time you write an error message question yourself - do you really need to inform the user about this error or can you fix it yourself? is your error message full of errors? Is it outright rude? Assuming that the user understands your stack trace is expecting too much from him. Assuming that he is stupid and hiding sufficient details from him  is stupidity on your part.

Making your error messages sound like it's the users fault or making it sound as it was some external factor which caused the error to occur and then providing no clue about how to fix things is even worse.

After all, if your application doesn't work, we all know who is responsible for it.

On a serious note, don't write rude applications, May I suggest that we as programmers, consider introducing some 'politeness' in the applications we build.

Building applications that are not rude and avoiding errors in your errors is an art. The level of politeness you introduce in your application will usually decide the love it gets from it's users. Now go search all the error messages in that codebase you're working with and start reviewing them meticulously; can you find errors and warning which can be avoided or eliminated? Are your error messages full of errors? Are your error messages outright rude or demeaning to the users? Consider putting in some effort and thought towards making them meaningful, polite and genuinely helpful.

posted on Friday, January 16, 2009 9:37:09 PM UTC  #    Comments [0] Trackback
Posted on: Tuesday, January 13, 2009

If you study some of the awesome kick-ass managers you've worked with in the past or are currently working with, chances are that you'll begin to realize that all kickass project managers and the best team members in your team are much like the 'Men In Black'.

Seriously.

Consider this conversation between agent Jay and agent Kay from the 'Men in Black' for instance:

Kay: We do not discharge our weapons in view of the public!
Jay: Man, we ain't got time for this cover-up bullshit! I don't know whether or not you've forgotten, but there's an Arquillian Battle Cruiser that's about to...
Kay: There's always an Arquillian Battle Cruiser, or a Corillian Death Ray, or an intergalactic plague that is about to wipe out all life on this miserable little planet, and the only way these people can get on with their happy lives is that they Do... Not... Know about it!

As funny as it might sound, the conversation to a large extent sums up what most kick-ass managers do. Honestly, it does. However there is one subtle way in which kickass managers differ from the 'Men In Black'. Unlike Jay and Kay, most kick-ass managers I've seen in action or worked with aren't even aware of the fact that they are saving worlds and changing cultures. They do so, silently and instinctively.

Tom Demarco and Timothy Lister explain the point I'm trying to make here, much more articulately than I will ever be able to explain it, in their classic book, Peopleware: Productive Projects and Teams. They explain this using the classic example of the Spaghetti Dinner:

Picture yourself a technical worker who's just been assigned to a new project. You know the manager and most of the other project personnel by name, but that's about it. Your first day on the new project is next Monday. On Wednesday before that Monday, you get a call from your boss-to-be. She's having a get-together, she says, for people on the new project. Is there any chance you could come by her place on Thursday evening for dinner with the rest of the team? You're free and want to meet the new group, so you accept.

When you arrive, the whole group is sitting around the living room drinking beer and telling war stories. You join in and tell a few of your own. The client liaison, who has also been invited, does a bit about his department head. Everybody has another beer. You begin to wonder about food. There is no smell of anything cooking and no sign of anyone working in the kitchen. Finally your boss-to-be admits that she hasn't had time to make dinner, and suggests that the whole crew walk over to a nearby supermarket and assemble the makings of a meal. "I guess we must be capable of putting a spaghetti dinner together."

Team Effects Beginning to Happen.

Off you go. In the supermarket, you amble as a group through the aisles. Nobody takes charge. Your boss seems to have anything on her mind but dinner. She chats and laughs and offers up a story about the IRS. In spite of a general lack of direction, some things do get thrown into the cart. One fellow has already gotten the salad pretty well taken care of. There is some talk of making a clam sauce, and when nobody's opposed, two of your new mates begin to talk out the details. You decide to make your patented garlic bread. Someone else picks out a bottle of Chianti. Finally there is a consensus that enough stuff is in the cart for dinner.

If you weren't able to make out what just happened in the little story above or where I was trying to go with this post 'Peopleware: Productive Projects and Teams' also provides a very insightful explanation of what just happened in the story:

So far, nobody has billed a single day of effort to the project, but you've just had your first success as a group. Success breeds success, and productive harmony breeds more productive harmony. Your chances of jelling into a meaningful team are enhanced by your very first experience together.

Presented this way, the spaghetti dinner may seem like a contrivance on the manager's part. But it probably wasn't and wouldn't have seemed like it had you been there. If you had asked the manager in question what she had in mind for the evening, she would have probably replied in total sincerity, "Dinner."

A natural manager has got a subconscious feel for what's good for the team. This feel may govern decisions throughout the project. The entire experience is organized for small, easy joint successes. You have to look twice to see the manager's hand in any of this, it just seems to be happening.

The act of implicitly, innocently and unknowingly creating excellent work environments and cultures is a well known ability in kickass managers and true leaders. Michael Lopp describes this same act of unknown, silent, subtle and true leadership; in his post on the culture chart; where he talks about a core group of men who defined the engineering culture at Netscape by playing the game of bridge right in the middle of the cafeteria every Wednesday. He explains:

If you looked up the four core bridge players on the org chart, you'd learn a bit. One engineering manager, another guy from some oddly named platform team, another guy who had a manager title, but no direct reports, and the last guy who looked like a program manager.

My org chart assessment: Meh.

What I learned months later was that the folks sitting at that regular bridge game not only defined much of what became the Netscape browser, they also continued to define the engineering culture or what I think of as a culture chart.

Unlike the org chart, you're not going to find the culture chart written down anywhere. It doesn't exist.

Irrespective of how big or small organization that you work for, run or own is, chances are really high that the culture chart has more influence on your organization than any other single factor. Michael, in his post describes elaborately how the culture definers innocently shape a positive environment around them and how you can detect the culture chart within the organization:

To deduce the culture of a company, all you have to do is listen. Culture is an undercurrent of ideas that ties a group of people together. In order for it to exist, it must move from one individual to the next. This is done via the retelling of stories.

“Max was this nobody performance nerd and three weeks before we were supposed to ship, he walked into the CEO's office with a single piece of paper with a single graph. He dropped the graph on the table, sat down, and said, 'No way we ship in three weeks. Six months. Maybe.' The CEO ignored the paper, 'We lose three million dollars if we don't.' Max stood up, pointed at the chart, and said, 'We lose ten if we do. We must not ship crap.”

Whether this story is true or not is irrelevant. The story about how Max saved the company ten million dollars by telling the CEO “No” is retold daily. In hallways. At the bar over beers. The story continually reinforces an important part of this company's culture.

We must not ship crap.

There isn't a corporate values statement on the planet that so brutally and beautifully defines the culture of a company.

Most organizations don't seem to realize the importance of these silent culture definers and the role they play in the overall scheme of things. Michael also does a great job at describing how the culture chart has a deep impact on the organization and particularly on the best of your team members:

Culture assessment is an information game and it's never over. Your job is to continually situate yourself in such as a way that, as quickly as possible, you can assess subtle changes in the culture of your company.

I wasn't concerned when Netscape started losing market share to Microsoft. I didn't sweat it when the stock price stalled. The reason I started thinking about my next gig was, months before either of these two events occurred, one of the lunchtime bridge team left.

The game stopped. The small group of four no longer spent a long lunch quietly, unknowingly defining the culture of the company and everyone who was watching noticed.

They noticed when one of those who had humbly done the work that defined the company no longer believed enough to stay.

If you've been reading along so far it does end up sounding like these guys put in a great deal of effort to create an amazing work culture around them; but most of these kickass managers or culture defining team members I've had the privilege of working with or seeing in action, hardly have any such specific intent in mind. The same post on culture charts describes the intent with which the real culture definers work:

The people who are responsible for defining the culture are not deliberately doing so. They do not wake up in the morning and decide, “Today is the day I will steer the culture of the company to value quality design”.

They just do it. The individuals who have the biggest impact on the culture and company aren't doing it for any other reason than they believe it is right thing to do, and if you want to grow in this particular company it's a good idea to at least know who they are and where they sit. You need to pay attention to this core group of engineers because as they do, so will the company.

These difference makers, culture definers or whatever it is that you want to call them, are not really thinking of changing the organizational culture, making their teams flock, developing deeper bonds between team members, saving your world or any of that crap. Helping the team in whatever small way they can; an awesome dinner or a nice game of bridge; that's all they have on their minds; especially when they are dealing with their teams.

After our brief digression into books like 'Peopleware: Productive Projects and Teams' and the post on the Culture-chart let's get back to what we started off with in the first place, shall we?

Men In Black. That's where we started, and we said most managers are like them; didn't we? Ok, here's how it goes:

Kay: We do not talk about project timelines in public! It distracts people in the the team and takes their focus off the real work.
Jay: Man, we ain't got time for this cover-up bullshit! I don't know whether or not you've forgotten, but there's a stupid client who wants all this work done, deployed and running on production in three weeks...
Kay: There's always an impractical, slightly lost, confused client that is about to wipe out all chances of success on all miserable little projects like this one, and the only way these developers can get on with their happy lives and code away to glory is that they Do... Not... Know about it!

Or should we say:

Kay: We do not talk about project timelines in public! It distracts people in the the team and takes their focus off the real work.
Jay: Man, we ain't got time for this cover-up bullshit! I don't know whether or not you've forgotten, but there's a stupid client who wants all this work done, deployed and running on production in three weeks...
Kay: You want to play a game of bridge? Hungry? Let's go grab a sandwich.

And before you know it, magic! The team suddenly has six months to ship, the pressure of deadlines has disappeared, people are nicer to each other and work is fun.

Here's another one:

Kay: We do not talk about crappy status reports and project plans in public! It distracts people in the the team and takes their focus off the real work. We help them ship!
Jay: Man, we ain't got time for this cover-up bullshit! I don't know whether or not you've forgotten, but there's a vice president sitting at the client's office who wants who wants a weekly status report and a detailed project plan...
Kay: You want to play a game of bridge? Hungry? Let's go grab a sandwich.

And before you know what happened, magic again! The neutralizer has been used on the client; those specific details have been wiped off their memory; they don't miss those status reports anymore and everyone seems to be getting the real work done.

The next time your manager calls a lengthy meeting and talks to you about how he plans to change the culture of the organization; chances are, that he has just picked up an inspirational management book from somewhere and is pulling on his awesome-manager-mask. Simply put, most probably, he's faking it. The ones who really change cultures, hardly ever plan to do it. In fact, they tend to do it one small step at a time, without even their own conscious knowledge that they are doing it.

Unlike the ones who spend their careers trying to pull acts of heroism, I've had the pleasure of seeing the real heroes in action working rather silently; taking one step at a time. These are genuinely inspirational individuals who influence and move others without even knowing or realizing that they do.

They will change you, they will influence you, they will make you work harder and turn into better human beings; and the funniest part of it is; you won't even realize they're doing that. I didn't; till I looked really hard and then I saw a couple of them; in action. They were right there; in my very own life and they were making silent, subtle changes in it.

Does going to office on a Monday morning suck? It always used to? If you answered yes chances are you haven't had the pleasure of seeing them in action or the pleasure of working with them. I have one little advice for you; be patient; and keep looking; the world has a very limited supply of these guys and if you're lucky you just might find them. On the other hand, if you do love and feel excited about coming to work on a Monday morning chances are that you have some of these guys around you.

If you do happen to have some of these guys around you, chances are that they are saving your world right now and you don't even know it. In fact, if they are genuinely good at this stuff, there is indeed a high probability that they themselves, don't know it. Now go find them; watch them closely and learn from them. I wish you good luck.

posted on Tuesday, January 13, 2009 8:53:14 PM UTC  #    Comments [0] Trackback
Posted on: Friday, January 09, 2009

At Multiplitaxion Inc, a lot of us in the product teams were busy building products and shipping features. It was a great team of thick-skinned, competent, one-man armies who felt very strongly and passionately about the products being built. When features didn't work they were out there, willing to take calls in the middle of the night and support what they had written. This was a team of really hard working developers who had a lot on their plate.

They were building the product, enhancing it, supporting it and they were out there to listen to the customer and help them when they had a problem. Obviously they were busy; and because they were all busy, when we started marketing the product to the mainstream market we came up with the idea of having a different team take up the marketing websites, the product videos and the blogs.

The idea seemed innocently simple, efficient and effective at first; and then it happened.

Websites with (In)Frequently Asked Questions started springing up. Blogs having the same content as the marketing website started showing up. Posts started to including a very strong marketing touch to them. Below, I provide an example of one of the many posts that multiple individuals in the team started coming up with:

Do you know the [data-about-your-organization-that-the-application-provides-reports-on]? Or, do you know if [more-data-reported-the-application-includes]? "No"? Then I think you should. Trust me, this is a crucial piece of information that every organization must have. After all, [data-that-the-application-provides] is important for any organization.

Your next question would be how I can capture this information. And answer is through [product-name]. 

The above example, is a rather small one. Overall, the whole bastardization of Blogs, Wikis and even Forums for the purposes of traditional marketing began and that was indeed starting to become a little frustrating for me. On the bright side, however, that wasn't the first time in this history of internet marketing that this was happening. In fact, we weren't even close to misusing blogs compared to a lot of other big names who had indulged into what Wikipedia defines as 'fake blogs':

A fake blog (sometimes shortened to flog or referred to as a flack blog) is an electronic communication form that appears to originate from a credible, non-biased source, but which in fact is created by a company or organization for the purpose of marketing a product, service, or political viewpoint. The purpose of a fake blog is to inspire viral marketing or create an internet meme that generates traffic and interest in a product, much the same as astroturfing (a "fake grassroots" campaign).

Fake blogs are corrupted forms of public relations, which as a discipline demands transparency and honesty, according to the Public Relations Society of America's code of ethics and the Word of Mouth Marketing Association's code of ethics. Authenticity and transparency are important in social networking and blogging, as these codes of ethics attest.

As social networking tools gain in popularity, corporations and special-interest groups legitimately use their own blogs to promote company agendas without cloaking their identities (one such example is http://www.blogsouthwest.com, a blog sponsored by Southwest Airlines and written by its employees).

One notorious example of identity cloaking, resulting in a fake blog, was exposed when Edelman, an international public relations firm, created a fake blog in 2006 called Walmarting Across America. It was purportedly written by two Wal-Mart "enthusiasts" who decided to journey across the United States in an RV, blogging about the experience as they visited Wal-Marts along the way. While two people actually did travel across the United States in an RV, the publicity stunt was revealed to be paid for by Wal-Mart, a client of Edelman. 

But, like all things in life, the internet and the software development world in general are real places where common sense, simplicity, transparency and the laws of karma eventually prevails. Tim Nudd describes how Sony was ripped and hugely criticized for their acts of trying to bastardize blogging as a medium to do fake promotion of PSP. He reports the whole incident rather articulately:

All I Want for Christmas Is a PSP pretends to be a fan blog (run by a guy named "Charlie", who says he's helping his buddy Jeremy get a PSP for Christmas), but it's a poorly disguised marketing effort—the URL is registered to Zipatoni.

Visitors to the site are letting Sony have it in the comments. Says one: "If you want a PSP badly enough you should get together with an ad agency. Then try to sell the product through a lame website while attempting to speak down to what you consider your target audience." Even more comical: "Charlie" keeps posting his denials, in pseudo hip-hop speak. More than once he writes, "yo where all u hatas com from... juz cuz you aint feelin the flow of PSP dun mean its sum mad faek website or summ... you-all be trippin."

Pathetic. Over at the Something Awful message boards, a commenter makes a good point about this effort: "Makes you wonder why they can't cough up the $8 to do private registration, to keep people from easily seeing that their 'blogs' are owned by promotional companies." 

Tim describes how the whole Sony PSP episode finally ended:

Sony has now posted this mea culpa on the site: "Busted. Nailed. Snagged. As many of you have figured out (maybe our speech was a little too funky fresh???), Peter isn't a real hip-hop maven and this site was actually developed by Sony. Guess we were trying to be just a little too clever. From this point forward, we will just stick to making cool products, and use this site to give you nothing but the facts on the PSP. Sony Computer Entertainment America.". 

Singling out Sony in the whole post seems like a lame thing to do. There have been many more including Wal-mart, Coke and many others. Internet mavens are in fact pushing so far as pursuing criminal prosecution for organizations which indulge in the act of marketing through false blogs

What we were doing at Multiplitaxion Inc, was nowhere close to fake-logging; but we had made a big mistake; while our PR teams and business analysts wrote the blogs they forgot two cardinal rules of blogging:

  1. Blogging is like lifenobody cares about you or your products; unless you have something for them.
  2. Blogging is like great sex – it is very difficult to fake the passion.

If there was one word which described what we were indulging in, it wasn't fake-blogging, it was lame-blogging. Thankfully, we failed early. Before any of these blogs went live we asked our PR team to stop writing posts till they genuinely connected to the product and if they couldn't connect to the products genuinely, they didn't have to write about the product.

Crowd-sourcing, collaboration, social networking and blogging might be seen by organizations as mediums to promote their products and there is absolutely nothing wrong with it. A lot of organizations including Microsoft – through ASP.NET and Channel 9 – do this rather elegantly and honestly. A lot of individuals including Scott Guthrie, Phil Haack, Scott Hanselman and many others also blog honestly, passionately and informatively. They provide genuine knowledge and value along with some really honest feedback to their readers, even when they are talking about their own products or products built by Microsoft.

When people visit your blog, it is your personality, knowledge, spine and conviction that they are relying on. The whole I-was-paid-to-say-good-things-about-my-organization-and-their-products-so-I-did argument doesn't work in the long run. If you want to write about your organization, know your organization inside out and write about crap that goes on in your organization while you sing it's praises. If you want to write about your products break the good news and the bad news; in fact the guys at 37signals suggest that you publicize your screw-ups.

With blogs you are not just pushing content. You're participating in a discussion and you're contributing. You're interacting and connecting with people. You are reaching out and in more ways than one ways, you are asking for their involvement, interaction, time, help or some combination of one or more of these. When you reach out the a huge group of people asking them to give you time, involvement, help, or combinations of one or more of these, you are judged by your integrity, transparency and honesty more than anything else. If communities  can donate a staggering four million to Wikipedia they can also call the Sony PSP blog pathetic and laugh at wall-mart for being caught with it's pants down.

So, go ahead and assume that marketing pitch on your posts and consider your readers to be first grade idiots; go ahead and write those crappy FAQs; go ahead and create fake blogs; go ahead and share your frustration, write your depressing diary or genuinely contribute and participate by being open, honest and transparent. The choices are all yours; make them wisely; because your users will make theirs based on yours. They may decide to abandon your blog, send flame mails, angry-comments or grace you with more visits, appreciation, comments with honest opinions and interesting discussions. Just like everything else, blogs follows the rule of karma – what goes around comes around; In fact, it often comes around 10x magnified.

Next time before you press that submit button, think. Question yourself about what it is that you're sending out - is it knowledge, inspiration, experience, wisdom, lie, sugar-coated-marketing-message-which-you-are-being-paid-to-spread, depression, frustration, random HTML that will get you a higher Google ranking and then cause disappointment to the visitors when they land on your website or is it something else? What ever it is that you're sending out, do you really want it multiplied 10x and coming back in your life? If not, may I suggest that you take your mouse far away from that publish button and delete the post immediately.

Whether you're an individual or an organization, your blog is your third place and one of the best reflector of your personality, don't bastardize it. Write with conviction, add genuine value and then support what you write; after all, what goes around comes around. Now go write something that you genuinely believe in or are genuinely passionate about. Seriously.

posted on Friday, January 09, 2009 12:11:01 PM UTC  #    Comments [2] Trackback
Posted on: Tuesday, January 06, 2009

To surrender or not to surrender is an age old question in the game of chess when mere mortals are playing; but the most veteran grand masters of chess gracefully drop their kings announcing their surrender as soon as they sense guaranteed defeat. The grand masters often don’t act optimistic and hope that their opponent will make a foolish mistake which in turn will cause the game to completely toss around giving them an undeserving victory. When they know they’ve lost, they surrender, back out and end the game with a graceful acceptance of defeat.

The art and discipline of considering defeat as an integral part of the game also exists in the world of mountain climbing. One of my CEOs and an individual I personally looked up to during the early days of my career, and still do, describes his experience on a climb in our company intranet (I’m not sure if he would like me to publish his name or names of others involved in the climb so names have been changed for obvious reasons):

While we could see the summit, we knew that we were at least an hour away. There were dark thunderstorm clouds looming around the summit - they had appeared gloomy from a 1,000 feet below they looked morbid from where we stood. With tired limbs, faint hopes but determined minds [Jack] and I started climbing towards the summit. However, by 12:15 we were barely at 13,700 feet a good 500 feet short of the summit. [Daniel] and [Rogers] had heard from other guides in the mountain that the weather prediction called for heavy thunderstorms in an hour or so and they sternly signaled us to turnaround and head back. To make matters worse, they had heard that due to the sunny day, the snow had turned slushy further down the slopes, if it continued remaining warm, we could face treacherous conditions - snow sinking - one where the snow is so deep and loose that one falls right through it and sinks under. We pushed our luck to see if our guides will let us buy a bit more time but [Rogers] was obstinate and conveyed his point by saying:

  1. My job is not to take you up, but bring you down safely.
  2. The mountain will be here, my job is to be sure you can be back for another climb; and to soften the blow further said
  3. Jamling Tenzing (Sherpa Tenzing’s son) tried 11 times to summit Mt Everest - so some patience might be in order on our part

While these were pacifying words, it did not help us overcome the anguish that we came so close but due to paucity of time could not scale the peak. We were also glad that thanks to our guides prudent judgment prevailed. Most climbers get into trouble because they ignore sound, sagacious advice. We took a brief respite and reluctantly started walking back. 

Let’s snap back to the world of software development, shall we? Look around and I’m sure you’ll a rare very-few organizations, managers or even veteran developers giving such sound, sagacious advice to young and budding developers. Most organizations and managers instead seem to be much more optimistic and seem to push a you-can-do-it attitude even in case of obviously desperate and beyond repair situations.

We like to think of our kick-ass teams and one man armies as ‘super-heroes’ who can change the fate of the project by their sheer hard work and determination. We seem to push the idea that physical limitations like the iron triangle just don’t exist and heroes can pull out successful projects like magicians pull rabbits out of their hat or overcome all limitations like the Hollywood hero overcomes all difficulties before the movie ends. We push on, and turn simple mistakes and small defeats into disasters, merely by not accepting them in the first place.

Legendary author Steve McConnell considers heroism to be one of the 36 classical mistakes in book ‘Rapid Development: Taming Wild Software Schedules’. He explains:

Some software developers place a high emphasis on project heroics, thinking that the certain kinds of heroics can be beneficial (Bach 1995). But I think that emphasizing heroics in any form usually does more harm than good. In the case study, mid-level management placed a higher premium on can-do attitudes than on steady and consistent progress and meaningful progress reporting. The result was a pattern of scheduling brinkmanship in which impending schedule slips weren't detected, acknowledged, or reported up the management chain until the last minute. A small development team held an entire company hostage because they wouldn't admit that they were having trouble meeting their schedule. An emphasis on heroics encourages extreme risk taking and discourages cooperation among the many stakeholders in the software-development process.

Some managers encourage this behavior when they focus too strongly on can-do attitudes. By elevating can-do attitudes above accurate-and-sometimes-gloomy status reporting, such project managers undercut their ability to take corrective action. They don't even know they need to take corrective action until the damage has been done. As Tom DeMarco says, can-do attitudes escalate minor setback into true disasters (DeMarco 1995). 

Of-course, Steve McConnell isn’t the only one with a thick skin towards failure. The folks at 37Signals are also particularly unashamed about giving up. In fact they go so far as saying that ‘giving up is good’:

Here’s the problem: You agree that feature X can be done in two hours. But four hours into it, you’re still only a quarter of the way done. The natural instinct is to think “but I can’t give up now, I’ve already spent four hours on this!”.

So you go into hero mode. Determined to make this work, but also embarrassed that it isn’t already so. So the hero grabs his hermit cape and isolates himself from feedback. “I really need to get this done, so I’ll turn off IM, Campfire, email, and more for now”. And some times that works. Throwing sheer effort at the problem to get it done.

But was it worth it? Probably not. The feature was deemed valuable at a cost of two hours, not sixteen. Sixteen hours of work could have gotten four other things done that individually were at least as important. And you had to cut the feedback loop to avoid feeling too much shame, which is never a good thing to do.

That’s where the concept of sunk cost gives us a guide on what to do. It doesn’t matter what you’ve already spent. That time and money is gone. It only matters whether spending what’s left is worth it or not. Business school 101, but one of the hardest lessons to internalize.

In other words, stop being so afraid of calling it quits. You’re playing to win the full season, not a single game. Every time you play the hero card, you’re jeopardizing the next game. 

While the folks at 37signals talk in terms of two hours and sixteen I’ve seen organizations carry on with huge teams for months and even a couple of years just because the manager and individuals in the team were too ashamed to admit that they had failed. Heroism is exactly the kind of thing that turns simple failures into irrecoverable disasters.

You may not be a mountain climber or a chess player, but if there is one thing you must learn from both these fields, particularly when it comes to your project, it is this: When your logic and gut tells you it is not possible to win or to make it to the end successfully, give up; and use the time and energy saved for the next battle. After all, if you’re around, you can always be back for another climb or another game.

Don’t ruin your career chasing the Hollywood-like-dream of being a hero who fights difficult times and always emerges a winner. Get real; give up a battle or two if you must. Failing is good, as long as you Fail early and Fail often. When you know you won’t make it or when failure is inevitable, surrender shamelessly; move on to the next game and play harder. Don’t waste time trying to be a hero who cannot fail.  After all it’s about winning the full season, not every single game.

With this thought, I wish you, dear reader, a very happy life full of defeats, victories, fulfilling challenges, satisfying experiences and above all relentless passion to pursue whatever it is that you love doing.

posted on Tuesday, January 06, 2009 5:41:41 PM UTC  #    Comments [0] Trackback
Posted on: Friday, January 02, 2009

I’ve often insisted that project managers should write code and lead from the front. As you dive in, roll your sleeves and fight the battle hand in hand with your team it is equally important for you to consider them as comrades and not mere soldiers ready to charge or strike at your command.

When engineers, sometimes even smart and able ones, come to you expecting you to take their decisions for them it is often very tempting to take a decision and establish your ‘seniority’. The more you do it, the stronger you feel about your role in the organization and the dependence of your team on you. After all, it makes you feel wanted and it makes you feel in control. A whole lot of managers I’ve seen in multiple organizations around the world enjoy their involvement in any decision that happens in the project. Do you, dear reader, love being in charge of the driving wheel in your project or organization?

   

If you answered yes to that question with knitted brows wondering what’s so wrong with your being in-charge and in-control of your project, what you may not realize however, is that you might be, silently introducing the culture of mitigated speech in your organization.

Joel Spolsky describes how he himself, failing to give up the driving wheel on the right time and giving a careless tacit approval for a feature to be built in the product, nudged his team to start working on the feature without giving a lot of thought on whether the feature should have been actually built in the first place. He ends his post with a resolution to the problem that takes a lot of conviction on the part of the manager. His suggested recommendation is simple:

The solution, of course, is what I’ve been saying all along. STOP FRIGGIN’ LISTENING TO ME. I don’t know what I’m talking about. If you work for me, you’re welcome to get my advice, but you have to make your own decision because chances are you’ve thought MUCH MORE about the issue than I have and in fact we probably hired you because you’re smarter than I am. 

The idea of lending control to your team members might sound a little absurd and often makes young, budding and even the most veteran leaders just-a-little insecure at first but is has a lot of obvious advantages:

  1. It frees you up to take bigger and better challenges.
  2. It enables your team to make smart and honest decisions.
  3. It helps avoid the perils of mitigated speech.

Malcolm Gladwell, in his latest book, Outliers, describes how important handing over the driving wheel to juniors in your team is when he talks about the perils of mitigated speech. He explains:

Mitigation explains one of the great anomalies of plane crashes. In commercial airlines, captains and first officers split the flying duties equally. But historically, crashes have been far more likely to happen when the captain is in the “flying seat”. At first that seems to make no sense, since the captain is almost always the pilot with the most experience. But think about Air Florida crash. If the first office had been the captain, would he have hinted three times? No, he would have commanded – and the plane wouldn’t have crashed. Planes are safer when the least experienced pilot is flying, because it means that the second pilot isn’t going to be afraid to speak up. 

The next time someone walks up to you with a Should-We-Build-This-Feature or for that matter any question, take him to a whiteboard and turn the table on him by triggering a I-am-not-sure-lets-see-what-you-think brain-storming-session. Discuss the pros and the cons, give recommendations, provide suggestions but make sure that it is not you who is making the final decision. It is your team that has to learn to do that in the long run. 

Long story short, unless you are heading for a crash, lead from the front, inspire the team, enable them, take sizable development tasks on your project, but don’t always take control of the driver’s wheel, specially when it comes to taking decisions.

If you want to lead, find lots of kickass programmers and one man armies who are capable of driving projects to successful ends. Mentor them and then leave the driving while in their safe and able hands. You can’t be driving multiple cars at once anyways.

Don’t handhold individuals on their way to success. Empower them to have their own share of mistakes and their own share of failures as they slowly attain success without any handholding. If you’ve picked a kickass team, got them to flock well in the right culture, and mentored them genuinely, they will take control, ownership, responsibility and start driving your projects towards success faster than you can think. Go ahead, lead from the front; but remember; you don’t always have to be at the driver’s wheel, taking every single decision in your project, in order to do that. 

posted on Friday, January 02, 2009 7:52:45 PM UTC  #    Comments [0] Trackback
Posted on: Wednesday, December 31, 2008

During my work at multiple organizations, client offices and multiple cities around the world, I’ve seen individuals get nervous while talking to their CEO’s and Managers. Individuals fumble, sugar-coat discussions and avoid arguing with their clients. Some of them merely hint towards what they believe is correct and then decide to keep their mouths sealed. With time, they turn either disconnected or completely nervous and reluctant to give their ideas.

At the first glance you would classify them as spineless individuals lacking conviction but monitor them closely and you’ll figure out that these guys are indeed capable of fighting harder battles and taking up bigger challenges than their sophisticated counterparts who just happen to be a little more articulate with words.

I could go on and on about my stories on how people not ‘speaking up’ at the right time can lead to project failures and colossal-screw-ups. Here’s one:

Fred was asked by Multiplitaxion Inc, to come up with a data access framework that would assist them build multiple other applications on. Fred had done a couple of consultancy projects before but this was his first time at framework development and he struggled for over a couple of years with a decently big team of programmers. Time flew as Fred struggled. Two years later, Fred had failed; and that, those who understand software, will tell you is not such a bad thing after all.

Two years later the stars aligned and a proposal showed up requiring the exact same features Fred and his team had been assigned to build. Fred was asked if the framework would ‘fit’ and if they could roll out the framework and build other enterprise applications using the framework.

Fred hesitantly and reluctantly told the management that they 'could indeed build other applications on top of the framework but they would have to do ‘some refactoring’ and tweaking before the application became fully scalable; or something to that effect.

Reality of it was that data access framework had broken windows all over the place and was snowballing into one large crappy piece of application right in front of the entire team. The team was clearly not as optimistic as Fed or the management and yet the members barely expressed their concerns in statements like - ‘maybe we ought to change the database server’, ‘maybe we ought to bump up the code quality’ and the like; and then they continued working.

When the people who sign the paychecks looked at the framework they weren’t really impressed; but they had already been told that the application required ‘some refactoring’ before it would become fully scalable. It crashed here and there a couple of times and then individuals from the management level wrote back to the team appreciating the team’s effort and mentioning in the passing that the application needed to get better and they were sure it would get better with time.

The application rolled out to the client, in semi-broken, fragile state where shaking it up really hard would start breaking things all over the place; this is how far things went and in all this time no-one ever mentioned that the emperor was in fact naked

If you were reading that real life story that I was a personal witness to from the outside you would think that everyone in the whole episode was either spineless, lacking conviction or both; yet clearly that is not the case. 

Malcolm Gladwell feels that this communication issue is in fact the reason for most airplane crashes happening around the world. The linguists he interviews for his latest book Outliers, gives this phenomenon a name:

“Mitigated Speech”, which refers to downplay or sugarcoat the meaning of what is being said. We mitigate when we’re being polite, or when we are ashamed or embarrassed, or when we are being differential to authority. If you want your boss to do you a favor, you don’t say, “I’ll need this by Monday.” You mitigate. You say, “Don’t bother, if it’s too much trouble, but if you have a chance to look at this over the weekend, that would be wonderful.” In a situation like that, mitigation is entirely appropriate. In other situations, however – like a cockpit on a stormy night – it’s a problem. 

Outliers provides chilling transcripts from the black boxes of crashed airplanes which clearly show how the plane crews were busy indulging in mitigated speech and worrying about what the captain or their air traffic controllers would think even when their plane was rapidly approaching a disastrous crash.

Outliers also does an amazing job at doing is describing the importance Power Distance Index (PDI) and cross culture mitigations in airplane crashes. The book describes how the country in which you were brought up and your culture will eventually have an influence how you deal with crisis situations. In Outliers, Malcolm uses the example of Columbian pilots landing an airplane which is low on fuel to illustrate how people from different countries and cultures deal with authority and superiors, even when involved in crisis situations.   A lot of it also ends up being very relevant even in the software development world:

There was something more profound – more structural going on in the cockpit. What if there was something about the pilots’ being Columbian that led to the crash? “Look, no American pilot would have put up with that. That’s the thing, Ratwatte said. “They would say, ‘Listen, buddy, I have to land.’”. 

Ever wondered why a huge number of Indian programmers fail miserably at communicating the accurate health of their project to their counterparts around the world and why some of them fumble all over the place in conference calls with their clients? Read Outliers and you might just stumble across that answer and many more. 

The book provides stories of how the Korean airline turned from the worst airline with the highest number of air-crashes to an airline which was highly reputed and very safe simply by overcoming mitigation resulting out of their fundamental underlying cultural background. According To Malcolm mitigation has been the primary reason for most air-crashes in the history of the aviation industry. He explains:

Combating Mitigation has become one of the great crusades in commercial aviation in the past fifteen years. Every major airline now has what is called “Crew Resource Management” training, which is designed to teach junior crew members how to communicate clearly and assertively. For  example, many airlines teach a standardized procedure for copilots to challenge the pilot if he or she thinks something has gone terribly awry (“Captain, I’m concerned about…”, Then, “Captain, I’m uncomfortable with…”, And then if the captain still doesn’t respond, “Captain, I believe the situation is unsafe.” And if that fails, the first officer is required to take over the airplane.) Aviation experts will tell you that it is the success of this war on mitigation as much as anything else that accounts for extraordinary decline in airplane incidents in recent years. 

After years of airplane-crashes the aviation industry may have learnt the lesson; but after iterating in the infinite loop of failure for years neither software-developers nor software development shops seem to be putting in any conscious effort to battle mitigation.

Do you have a problem of mitigation in your team? Do you yourself indulge in mitigated speech at work when dealing with your seniors or while making your juniors feel good, even when things are badly messed up?

If you answered yes to any of the above questions go walk up to your manager and express your opinions bluntly and openly or pass on some honestly blunt constructive criticism to your juniors. I dare you.

On a serious note, Don’t underestimate the perils of mitigation in software development. Create an open culture where mitigated speech is discouraged and ideas are thrown out in the open, freely. Rage your battle against the problem of mitigated speech before it leads your future projects to disastrous crashes. I wish you good luck.

posted on Wednesday, December 31, 2008 3:54:32 PM UTC  #    Comments [0] Trackback
Posted on: Friday, December 26, 2008

When I first figured out how Resume Driven Development works I naively assumed that I could blame it for every project that is mesh of super complex technologies and tricky code. After experiencing it for the first time, I assumed that for every project that used countless layers of abstractions, indirections, irrelevant technologies held together using really weak band-aids, there had to be one or more team members desperately trying to build their resume or drooling over the latest cutting edge technology and frameworks that are in Beta.

It was then that I met a different kind of programmers. These could not be defined as full fledged proponents of Resume Driven Development, yet it was the kind whose mere involvement in any projects could turn their projects into what we shall refer to as ‘Project Rocket Science’:

These are programmers  who make a serious face and talk about ‘Enterprise Development’, ‘Best Practices’ and ‘Scalability’. When I say ‘talk’ I’m not referring to the ‘bring-up-in-a-white-board-session-and-brain-storm-quickly’ kind of a talk. I’m talking about start-a-formal-document and discuss-for-a-few-weeks-or-maybe-even-months kind of talk. Or for that matter make-a-big-deal-about-it and don't-start-coding-till-you’ve-figured-it-out kind of talk. After all, this thing is really important and these individuals just ‘have to’ get it right before they start coding.

At Multiplitaxion Inc, we had a hard time convincing a few of these programmers to try out Ruby on Rails. Before individuals wrote a single line of ruby code discussions and arguments pertaining to ‘is-ruby-on-rails-scalable’ began. The discussions and arguments lasted for weeks. Examples of ‘enterprise applications’ written in Ruby On Rails were demanded and provided in long mail trails. Days went by; weeks later we were moving in circles trying to know for sure we can write ‘Enterprise Applications’ using Ruby On Rails.

Damien Katz, has an interesting take on zealotry and excessive concern about scalability and building ‘enterprise level application’. Damien believes that if you find yourself making a big deal about some of these topics, chances are that you're a crappy programmer and you don’t even know it:

You know those crappy programmers who don’t know they are crappy? You know, they think they're pretty good, they spout off the same catch phrase rhetoric they've heard some guru say and they know lots of rules about the "correct" way to do things? Yet their own work seems seriously lacking given all the expertise they supposedly have? You don’t know any programmers like that? Come one, you know, the guys who are big on dogma but short on understanding. No, doesn’t sound familiar?

Then here are some signs you're a crappy programmer and don't know it:

Java is all you'll ever need: You don't see the need for other languages, why can't everything be in Java? It doesn't bother you at all to see Python or Ruby code that accomplishes in 10 lines what takes several pages in Java. Besides, you're convinced new language features in the next release will fix all that anyway.(BTW, this can be almost any language, but right now the Java community seems most afflicted with this thinking)

"Enterprise" isn't a punchline to you: This is serious stuff dammit. "Enterprise" is not just a word, it's a philosophy, a way of life, a path to enlightenment. Anything that can be written, deployed or upgraded with minimal fuss is dismissed as a toy that won't "scale" for future needs. Meanwhile most of the real work in your office is getting done by people sending around Excel spreadsheets as they wait for your grand enterprise visions to be built. 

It’s a rather wordy and highly opinionated post. I encourage all you Java developers to flame Damien (not me) for all of it. On a serious note, without being specific about any language or platform, the whole Enterprise-and-Scalability-Talk is highly overrated in a lot of development communities around the world.

What is even more frustrating is that the people talking about these topics the most are the shittiest programmers, incapable of creating applications that can support a trivial twenty concurrent users. Ted Dziuba feels so utterly frustrated about people clueless about scalability making a big deal about scalability that he loses a track of language in his rather foul mouthed yet passionate, hilarious and honest post:

Engineers love to talk about scalability.  It makes us feel like the bad ass, [swearword]-swingin' [swearword] that we wish we could be.

After we talk about scalability with our co-workers (Yeah, Rails doesn't scale!), we flex our true engineering prowess by writing a post about it on our blog.  Once that post hits Reddit, son, everyone will know how hardcore you really are.  Respect.

People Who Talk Big About Scalability Don't Need To Worry About It.

Fact:  every chest-thumping blog post I have seen written about scalability is either about architecture, Memcached, or both.  Some a#@hole who writes shitty code starts pontificating about "scalable architecture" with data storage, web frontends, whatever-the-f#@k.  Dude, your app isn't having scalability problems because of the architecture.  It's having scalability problems because you coded a ton of N^2 loops into it and you're too self-important to get peer reviews on your commits.

And let's not forget the tools who discover Memcached for the first time, install it on a web server, and notice how fast their app runs now.  Yeah, welcome to the modern age.  Hope you know what a cache expiry policy is.

If You Haven't Discussed Capacity Planning, You Can't Discuss Scalability.

You don't need to worry about scalability on your Rails-over-Mysql application because nobody is going to use it.  Really.  Believe me.  You're going to get, at most, 1,000 people on your app, and maybe 1% of them will be 7-day active.  Scalability is not your problem, getting people to give a shit is. 

The folks at 37Sginals are much more conservative with their language; but they make the exact same point that getting-people-to-give-a-shit is indeed your biggest problem, with a rather nicely worded and elegant chapter in their book. They explain:

"Will my app scale when millions of people start using it?"

Ya know what? Wait until that actually happens. If you've got a huge number of people overloading your system then huzzah! That's one swell problem to have. The truth is the overwhelming majority of web apps are never going to reach that stage. And even if you do start to get overloaded it's usually not an all-or-nothing issue. You'll have time to adjust and respond to the problem. Plus, you'll have more real-world data and benchmarks after you launch which you can use to figure out the areas that need to be addressed. 

I’ve dealt with a few performance issues myself. I’ve also seen a few kick ass programmers kick some serious butt by tweaking the database to it’s limit and take caching to it’s limit. What’s fundamentally different was that in all these cases, we invariably waited till it became a real problem. When it did become a real problem we got into a room, white boarded the issue and got it fixed without making a big noise about it.

I’ve done this with two different teams in over three projects and the one conclusion on scalability that I’ve reached is this; if ‘Enterprise’ and ‘Scalability’ are big words in your organization you’re definitely doing something wrong; or maybe you just have too many individuals in your team who cannot write code or ship.

User your common sense, avoid un-necessary complexity and write simple code. Chances are you won’t even run into scalability problems till your application grows to a level where you’ll actually love having and fixing scalability issues.

The next time you talk about setting up a cluster for load balancing, building an enterprise application or utter the ‘S’ word, show me a million users signed up for your application or a ‘real scalability problem in production’ and we can talk ‘scalability’. Till you can do that, just keep those N^2 loops or that funny-little-short-cut out of your code and you’ll be good.

You can flex your engineering muscle and continue whining about Scalability, Best Practices and ‘Enterprise’ applications all you want. In the meanwhile we’re going to write some shitty software with bugs, get something done, and ship stuff that people like using. You know what; we’ll even have fun doing it. I’m not all all that into talking about ‘Enterprise Application’. I don’t give a shit about ‘Scalability’ till it becomes a real problem; and believe me that’s not as bad as it sounds.

posted on Friday, December 26, 2008 8:32:38 PM UTC  #    Comments [0] Trackback
Posted on: Tuesday, December 23, 2008

When I walked into my first day at work at my very first organization I literally called my manager ‘sir’. Early on in my career I saw a few ‘friendly managers’ wanting a lot of your ideas and feedback without giving you due credit for any of them when they worked. Then there were others who were primarily not even interested in feedback and ideas. There were days in my career where you felt like you were a part of army of robots working for a boss, who was supposed to be the only one capable of thinking, coming up with awesome ideas or getting anything useful done.

Over a period of time as I lived the yes-sir life I realized how messed up it was. Slowly I turned myself into an opinionated individual who wasn’t ashamed to express his opinions. Long story short – I developed a thicker skin and to an extent a stronger spine to speak my mind.

Even today as I look around I see countless individuals lacking the courage and the conviction to speak their mind at their workplace. If I were to sample the last fifteen organizations I’ve worked at, visited or been at in the past, at least thirteen of them had the problem so blatantly visible that you could hear whispers of dissatisfaction in the corridors even during your first visit to the organization.

Most of these organizations were doing something so blatantly wrong and stupid that even the junior most developer writing HTML knew it but they’d rather prefer to keep their mouth shut. No-one seems to have the conviction to bring the problems out in the open and throw them out there such that they would have to be tackled.

Scott Berkun describes the problem of how problems exist within the corridors of most modern organizations, where everyone knows about them but no-one brings them out or discusses them openly. Scott explains this issue much more articulately than me in his post on ‘how to fight management incompetence’. He explains:

Since my cranky post last week titled Do we suck at the basics? I’ve had an eye out for writing on incompetence and suckage. Over at Harvard Business John Baldoni, author of a slew of bestsellers, had a recent post called How to fight management incompetence.

He offers three bits of advice:

  1. Link competency to promotion
  2. Hold people accountable
  3. Keep competencies relevant.


Ok. Got it. This is good and sensible, sure. But the platitude part is easy. The real thing missing is conviction. Being accountable takes courage, something that doesn’t come with a degree or years of experience. Plenty of cowards have lurked in executive circles for decades. I believe most people just don’t have the guts to do the thing any idiot knows is right and this includes many managers. How many courageous people do you know? It can’t be more than 1 out of 10, maybe 1 out of 5. There is no special courage pill yet for VPs, so they have the same kinds of spines as the rest of us.

The big incompetence crime committed by VPs is leaving incompetent managers in place for too long. My theory: by the time the CEO knows a VP stinks, the whole org has known about it for months. The smart people have been making plans to leave or are working to cover their assess. By the time the CEO gets around to taking action, it’s way too late. And often the action taken is whitewashed: no mention is made of how the VP or middle manager utterly failed (e.g. “Fred has decided it’s time for something new.”) The denial lives on, the lie propagates, making it easier for more denials and lies the next time around.

All most employees want is for the people above them to be honest more of the time. Even if things stink, honesty makes it possible for people to maintain their sanity (”ok. So you at least see what I’m seeing. Thanks.”). But it also makes solutions possible, since people are trying to solve the same issues. Bob can go to his boss with suggestions and feedback only if he understand what it is his boss is really concerned about. 

Walk down the corridors of any of these modern software development shops and you’ll see hush-hush discussions of things that stink and no-one willing to discuss them openly. Openness and transparency is something you cannot preach to your team. You can only set up transparency and flatness by making it a way of your own life and then expecting your team to reciprocate.  Of course pushing for transparency and success in projects is not as easy as it sounds. It requires conviction, genuine belief and above all a very strong spine at all levels within the organization.

Jeromy Carriere advices managers and programmers to develop a stronger spine by pushing them to turn themselves into ‘intrapreneurs’. He explains:

When I get frustrated with the ponderous bureaucracy characteristic of large enterprises, and long for the hopeful, entrepreneurial and innovative environment of a startup, I lean on a set of principles that try to bring the spirit of a startup, through the actions of individuals with dreams and drive, to any organization. Until recently, I didn’t know these principles have a name – Intrapreneuring. Intrapreneuring is an idea initially formulated by Gifford Pinchot in the 70s, and is based on the idea that anyone can innovate, be entrepreneurial, within a corporate environment. Mr. Pinchot described ten commandments to be followed by the intrapreneur:

  1. Come to work each day willing to be fired.
  2. Circumvent any orders aimed at stopping your dream.
  3. Do any job needed to make your project work, regardless of your job description.
  4. Find people to help you.
  5. Follow your intuition about the people you choose, and work only with the best.
  6. Work underground as long as you can – publicity triggers the corporate immune mechanism.
  7. Never bet on a race unless you are running in it.
  8. Remember it is easier to ask for forgiveness than for permission.
  9. Be true to your goals, but be realistic about the ways to achieve them.
  10. Honor your sponsors. 

It doesn’t matter what your role is or what it is that you do, chances are that you’re going to make decisions even when you are in a corporate environment with a very limited and well defined role. The decisions could be as simple as picking up variable names or deciding who to promote. Before you go ahead with implementation, make sure the decision are yours and when things don’t go well, make sure that you stand by them for these decisions and take ownership; just like you support your code when it has issues. If these decisions are being imposed on you, speak your mind and express your concerns; in a civilized yet very open and completely blatant fashion.

Long winded meetings where even the junior most person in the room knows the stupidity of the suggestions being proposed and the correct solution to the problem; but no-one in the meeting brings the correct solutions out in the open, blatantly and honestly as everyone goes round and round sugar coating the issue, are fairly common in most corporate environments.

If you work for a software development firm, look around you and ask yourself a few simple questions about the people you can see or think about:

  1. How many them are capable of speaking their mind, even with their bosses sitting in the room?
  2. How many of them are capable of speaking their mind even at the risk of getting fired?
  3. How many of them are capable of giving you their blatantly honest opinions?
  4. How many of them are capable of breaking any bad news to you by looking at you in the eye?
  5. How many of them have a clear succession plan prepared for the day they are fired or quit?
  6. How many of them aren’t afraid to discuss this succession plan openly without any insecurities what-so-ever?

I could go on with the list, but the primary million dollar question I’m trying to ask is simple: how many of them have a strong spine?

If you can name a huge number of individuals who do, chances are you are in an organization that’ll survive the hostile attacks of bad times. If not, chances are, you’re headed for trouble and when trouble strikes, you won’t even know because everyone you’re looking at or thinking about right now, will either be busy sugar coating things or indulging themselves in a CYA exercise.

The software development word is going round and round in the infinite loop of failure; Managers and Developers with a strong spine are desperately needed in the software development world. How many do these individuals you know? How many of them work with you? How many of them are in your team?

When you hire, do you make a conscious effort to hire people with stronger spines? When you have hired them successfully do you even appreciate them and give them the due credit they deserve? Next time you’re hiring, don’t just check their technical competence, education qualifications and their IQ level before get them in. Follow your intuitions about the people you hire and try to figure out how strong their spines are before you go ahead and bring them onboard.

posted on Tuesday, December 23, 2008 5:59:09 PM UTC  #    Comments [0] Trackback
Posted on: Friday, December 19, 2008

When one of your job role includes managing working with a team it is best for you and everyone you work with, if you to have a very short memory.

 

This post now has a picture and I’ve said what I wanted to say. I’m done. Post over. Thank you for reading. You can close your browser window now. 

-------

Hey wait!

That was a joke you idiot!

You weren’t closing that browser or that aggregator window, were you?

Seriously!

This post is far from over. You know the part where I sell my idea to you even if you aren’t willing to buy it at first shot? That part is still left. Read on, dear reader. Read on and help me help you get convinced that having a short memory, is an asset for you; particularly, If you are a project manager, or in any way responsible for leading a team.

To prove my point, I’m going to talk about perception, stickiness, arguments, shit and finally bring everything together to help you see things from my perspective. Humor me dear reader. I have a point to make. At-least I think I do.

Perception:

Human beings are animals working on perception. Andrew Hunt and David Thomas in their book ‘The Pragmatic Programmer: From Journeyman to Master’ describe the power of perception:

We've never tried this—honest. But they say that if you take a frog and drop it into boiling water, it will jump straight back out again. However, if you place the frog in a pan of cold water, then gradually heat it, the frog won't notice the slow increase in temperature and will stay put until cooked. 

Perception is powerful. In a project running at Multiplitaxion Inc, the team made a terrible mistake. When their team lead picked an invalid underlying framework which was built to support resume driven development in the first place, no one in the team argued back.

Needless to say, the project burnt-out very soon and the team was taking way too much time to implement each feature as they struggled with each build push cycle. They were staying late, working hard, making ends meet and struggling. They had played really hard working nice guys but had lost the battle way before it had begun.

They had failed. But that was not their biggest mistake. More than a failed project, they had created for themselves, a sudden jerk of unhealthy perception. They had thrown the management in the bowl of boiling water and they had done it suddenly.

Stickiness:

As human beings we don’t tend to judge other human beings holistically. We either see their good side or their bad side. We either glorify individuals or we demonize them. Have you every been in ‘resource review meetings’ of even some of the best organizations on this planet? ‘He is good’, ‘she is bad’, ‘he is average’ – statements like these, and individuals being labeled as ‘good’, ‘average’ or ‘bad’ is a common practice in our industry.

In most organizations, the perception of failure or the label with the word ‘bad’ has even a larger problem associated with it: it’s sticky.

On a side note, remember that boy who was in kindergarten with you and was punished for naughtiness regularly back then? He was the naughtiest brat in school all the way till high school wasn’t he?

Look at your ‘resource report’ and go look at that guy who had failed in a couple of projects when he joined the organization. Chances are, he is well on his way to yet another failed project.  Doesn’t that sound awfully similar to that brat in kindergarten who remained a brat all the way till high-school?

The perception of failure is indeed sticky.

Arguments:

This one really deserves a post by itself; but the fact is, that if you have a decently smart team from varied background, cultures and pasts they are going to be highly opinionated. They are not going to be afraid starting a fight with you; argue with you; drive you nuts and even make you feel like firing them.

Shit:

Here’s a small part of things I’ve seen happening in my career spanning over years spent in a few organization. Even though these are incidents that have happened in different organizations, cultures and countries they have one common theme which we shall get to soon. Here’s a part of the list of incidents:

  1. A particular individual was stealing Office supplies and RAM from the office hardware and ultimately ended up getting caught.
  2. A particular individual was billing the client for his groceries and videos. 
  3. A particular individual got into a heated mail argument over Java vs. .NET for no particular reason.

I could go on with the list forever but I’m sure if you were reading carefully you may have noticed the common theme amongst these incidents. These incidents were all shitty; but the individuals involved in those incidents weren’t anywhere close to being shitty. I leave you with words of wisdom from Forest Gump'Shit Happens'.

Connecting The Dots:

Perception is powerful. Besides being a manager you are one-hundred percent human and chances are that perception is going to have a huge impact on you. You team is going to fail all the time; failure is going to have some stickiness associated with it; People are going to argue with you and make you feel like you really need to fire them; and shit, well that’s just bound to happen all the time.

Where am I trying to go with this?

All I am trying to do is tell you dear reader, that maybe, just maybe, that naughty little guy who was a brat in kindergarten, remained a brat all the way till high school because when he moved from one class to another teachers exchanged feedback and every teacher that followed had a very sharp memory.

In simple words, dear reader, the point I am trying to make here, is that if you lead a project or work with a team, maybe, just maybe, you would be better off having a short memory and wiping the slate clean once or twice for our colleagues. Overcoming bad perceptions, letting go of stickiness associated with failures, dealing with arguments and cleaning up shit is not easy; but then, when I started this post, I never said I was going to tell you that creating an environment where successful teams can blossom is easy. All I said was that I would talk about the virtues of a short memory; and I did.

I’m an idiot with a thick skin and a very short memory; and I’m proud of that. Are you?

If you are managing working with a team consider criticism with empathy and help them when they make mistakes. Once their mistakes are history, consider forgetfulness and wipe their slate clean once in a while.

Ok, now I’m done.

Thank you for reading.

Post over. You can close that browser or that aggregator window now.

posted on Friday, December 19, 2008 9:42:46 PM UTC  #    Comments [0] Trackback
Posted on: Tuesday, December 16, 2008

During his very early days as a manager for a brief period of time, Pops wrote fairly heated emails to people in his team when they indulged in the acts of incompetence.  Very soon, he realized that those heated emails were creating one consistent output: More Incompetence. That added incompetence of course resulted in more heated emails being sent by Pops. This thing was almost like the infinite loop of failure.

  

As I watched the productivity of my team go down I felt awfully sorry and completely responsible for that productivity drop. I had always loved computers and working in a team but for a brief period of time I had violated the fundamental rule of good teamwork and leadership. Instead of criticizing myself first, I had criticized others and had almost taken the first step towards hiding behind the excuse of their incompetency. As an effect, I had made the workplace a little less fun for others; and that in any developer’s or manager’s work-life, is the equivalent of a criminal offence.

One of my first organization happened to be a place where when a project failed, we had an open meeting involving all team members. This was an occasion where everyone indulged in CYA exercise, followed by a blatantly open finger pointing exercise and someone would be fired. Having seen a culture like that when I jumped over to a different organization, I had resolved to myself that I would appreciate human beings and grab every opportunity to create a healthier environment everywhere I went and whenever I could.

For a brief period of a couple of months I forgot that resolve and committed the stupid mistake of ruthless criticism. Then almost with a sudden flash of light, I remembered how it felt to be on the receiving side of this criticism. My strange experiences from those firing meetings and my past organization to an extent rescued me from falling in the pit of prickdom right in time.

Since then I’ve seen almost magical changes and examples of incompetence change to core competency more than once. I’ve seen individuals on the verge of being fired by managers turn to one of the most critical team members by a mere change of role, by simple acts of encouragement or a little bit of honest support.

For me I learnt this lesson the hard way though; it took difficult experiences in my past organization and some soul searching followed by sudden realization to finally help me understand. I was lucky to have been through this learning experience in a very short span of time.

Having said that, however, this post, doesn’t end with Pops living happily ever after. After all, dear reader, as much as you might like this blog, I do realize perfectly well that you don’t care about me or my past. This post, of course has more to it than just a little story from my lousy past.

Years later, even today, I see countless managers with years of experience behind them, conveniently indulge in act of shattering criticism, sending flame mails, hiding behind the excuse of their team’s incompetence, putting in no genuine effort of fixing the core problem and spending no or very little effort to genuinely help their team.

In fact, it almost seems like a fashion statement to announce glamorously, that putting in effort to help and mentor incompetence, even if there is a possibility of being able to fix things easily, by the use of simple motivation, guidance or change of role, is not worth a good manager’s time.

John Maeda in his post about being the good boss hits the nail right on it’s head. He explains:

When a team succeeds at achieving a lofty goal, the good boss credits her team members as being the reasons for success instead of herself. This "boss behavior" enables the team to trust their boss as one who enables their own careers over the boss' own career.

When a team fails at achieving a lofty goal, the good boss owns the failure as her own and doesn't blame the team. This boss behavior enables the team members to take creative risks with their work, and not feel they will be penalized by their boss when/if they fail.

Both boss behaviors require the core attributes of the boss as: 1) being self-assured but not an *sshole about it, 2) keeping the larger goals in mind with priority over the issues that are just local to herself, and 3) facing each day with acceptance of the challenging responsibilities that comes with being the boss.

It’s a well laid out post, which comes straight to the point; but just in case you weren’t reading between the lines, let’s simplify this for you:

If you lead a team and the team fails, it’s ‘your’ fault. You’re supposed to accept that, and take all the blame for the failure on yourself. Simple.

Most managers in our business find simplicity at that level scary. Almost all of them find it difficult to digest the idea that when you’re leading, CYA is not an option. This is precisely why failure postmortems and root-cause-analysis for failed projects are so common in our industry. Scott Berkun describes how most managers suck at the basics:

In management / design / business circles I know for certain of one reason. Flat out hubris. For an executive to say: “This project sucks because I have failed to organize this team effectively”requires a huge amount of humility. Much more humility than is required to say something like “Our innovation infrastructure needs to be redistributed to support the new rate of change”. Or some other bullshit that sounds complex, makes him seem smart, and entirely distracts people away from what might solve the problem: identifying the problem in the simplest terms possible.

In the world of software development most managers are taught the blame game, right when they are young and budding management students, business analysts or programmers taking their first fumbling steps at managing a team. For most managers, blaming the process, an individual’s incompetence or the whole team’s incompetence is an easy excuse for all failures; including theirs. I’ve hardly ever seen managers personally attached to team members, spending genuine effort in trying to help them find their core competencies and coming forward to blatantly own up failures and take responsibility when things don’t work out.

I’ve hardly ever seen managers lending constructive one on one direct verbal criticism followed by genuine help. I’m not talking about a generalized you-need-to-get-better-at-coding-email followed by be-careful-next-time-email followed by I-am-going-home-but-check-in-the-code-and-email-me-the-status-as-soon-as-possible kind of criticism here.

I’m talking about the blatant and precise your-use-of-object-orientation-in-the-administration-module-sucks said with empathy, followed by a joke, followed by lets-go-out-for-a-cup-of-coffee, followed by lets-stay-late-and-refractor-together kind of constructive criticism. Or for that matter, let’s-meet-during-the-weekend-and-fix-this kind of constructive criticism; and that dear reader, irrespective of what they tell you, is not a waste of your time; it’s what you were hired to do; especially If you were hired to lead a team. If you weren’t specifically hired to do that, I suggest that you do it anyways.

If you work with a team, don’t criticize ruthlessly; if you lead a team don’t play the blame game; and remember, it doesn’t matter what they teach you in management schools or tell you at your workplace, if your project isn’t cruising along successfully, it’s always your fault.

If you must criticize, do so constructively, followed by empathy, followed by genuine help. I can’t teach you how to do that. What I can do, however, dear reader, is end this post abruptly and rather dramatically, leaving you with words of wisdom worth pondering on, from one of my all time favorite movies. Here’s Wishing you, good leadership, healthy teams and a good life.

posted on Tuesday, December 16, 2008 7:30:46 PM UTC  #    Comments [4] Trackback
Posted on: Thursday, December 11, 2008

In one of my earlier posts I basically advised that team members liking each other is the secret sauce of successful teams. Hand picking team members and creating a culture that is open, transparent and where most team members like and truly respect each other is a dream come true for most managers consulting around the planet. In reality most of us have to move from one client to another or one organization to another as we consult and work with multiple teams and deliver projects or products.

If you lead work with a team, and if you’re not as lucky as I was thrice in my career, chances are that you probably inherited a part of or the whole of your team from their previous manager when you joined your organization.

When I first worked with an inherited team at Multiplitaxion Inc, I realized how different it is from hand-picking every single individual in your team based on your core values and your very own selection criteria. Internal frictions, ego issues and complexities within the team were way too high to get anything done.  It almost felt like having walked into a fifth grade class room with students fighting with each other.

While it is tempting to setup a strong hierarchy of rules, Jurgen Appelo in his post Real Agile Teams can Flocking, makes a valid point that Agile Development is more about setting constraints than it is about setting rules. He explains:

People often try to solve problems by introducing rules in an organization, in the form of "When situation X occurs again, you must do Y." I admit that I am sometimes guilty of such behavior myself, though I am convinced that it is not the best approach. It is better to leave rule selection to individual team members, and instead focus on imposing the proper constraints. Agile software development should be about setting constraints, not rules.

It has been discovered that the flocking of birds can easily be modeled on a computer. This behavior, which is also apparent in many other kinds of animals, emerges through the application of a few very simple constraints:

  1. Don't leave the group;
  2. Don't bump into each other;
  3. Fly in the same direction.

Specific implementations of these constraints are often used in the movie industry to create computer animated birds, bats, fish, penguins, you name it. 

Jurgeon believes that modeling flocking of birds on a computer is much harder when done through a set of if-then rules than it is done by constraints and so is setting up an organization or a team. According to Jurgeon, it’s not about rules, it’s about the constraints:

It's Not About Rules, It's About Constraints
The mistake people often make is that they directly try to "program" team members by giving them rules to follow. "IF you receive this type of document THEN you must perform that activity," and "IF the customer wants some new requirement THEN you must start this-or-that procedure." But the power of complex systems is that agents can manage their own rule selection process. People must restrict themselves to setting constraints, and then allow team members to solve their own problems.

Agile software development is the natural approach to manage software projects. It sets constraints like "collaborate with the customer", "allow frequent changes" and "only deliver stuff that works". And then it's up to the team to select and implement rules like "IF the customer cannot travel THEN we do our demo using Skype," or "IF there's change request THEN we create a new branch in source control," and "IF someone breaks the build THEN he must wear the funny rabbit ears." 

It’s rare to find teams you genuinely and truly like working with; so much so that you see them as a part of your life rather than just colleagues. In order to land up with a team like that stars have to align and you genuinely have to be really lucky. If you’re not that lucky however, or if you’ve inherited a team that has a little bit of friction, don’t lose heart. Setup the basic constraints in place first; then give the team the basic freedom, flexibility and trust to form their own rules. Chances are that things might work out.

Who knows, you might even end up finding a few colleagues you genuinely start liking to work with over time. While Jurgeon, in his post, re-words the constraints for agile teams and considers them slightly different from the constraints of a flock of birds, I personally think the that original constraints for the flock of birds work for Agile teams as well. Team dynamics are stupid simple, you don’t exactly require the IQ of a genius to get it. You can literally be as half witted as a humming bird and still get it all right. The only thing you have to know well is flocking together.

Remember; Don’t Leave the group. Don’t bump into each other. Fly in the same direction.

Everything else, including all your process and rules, is just details.

Flock on people. Flock on.

posted on Thursday, December 11, 2008 12:05:15 AM UTC  #    Comments [0] Trackback
Posted on: Tuesday, December 09, 2008

My stand on Project Plans and Microsoft Project Files in particular makes me sound like a person who does not believe in planning. More than one individual found my post on project plans; more specifically my ideas on this topic controversial and threw a few punches at me on the topic while we got into a heated debate comparing Agile with some other big design up front methodologies when it came monitoring a project status. My point however, was that the debate didn’t weigh both methodologies objectively.

While Big Design Upfront methodologies like Waterfall, focus on tracking the project status, light weight methodologies are more about tracking the project’s progress. Weighing both of them on the same scale doesn’t seem to make sense. The argument presented was somewhat on the lines of:

See when you compare quality in Agile Projects vs. Quality in CMM or RUP projects the quality of CMM and RUP projects is much higher purely because during all this time Agile hasn’t even been able to come up with one decent standard to measure project status. 

The fundamental realm of Agile turns out to be slightly different. Measuring the project status in terms of percentage has never been the strong hold of agile methodologies like scrum. Having said that if you’ve never used agile before and are curious about ways to track your projects ‘health’ and progress using agile, multiple ways exist. Burn down chart happens to be just one of them. Wikipedia does a lousy job at giving details about burn down charts:

A burn down chart is graphical representation of work left to do vs. time. The outstanding work (or backlog) is often on the vertical axis, with time along the horizontal. It is useful for predicting when all of the work will be completed. It is often used in Agile software development methodologies such as Scrum. 

With a methodology like scrum you want to monitor progress of:

  1. Your current sprint.
  2. Your current release.
  3. Your final product.

Deciding the definition of done is fundamental to the success of any scrum project. Once you have frozen on the definition of what defines a feature as ‘done’ or ‘complete’ you would typically start by listing out your use-cases, user-stories or plain old features and sub-features.

A typical scrum project that you work on would generally consist of work items in the form of these use-cases, user-stories or plain old features and sub-features. Now if you were to plot point of features ‘remaining’ to be done on the Y-axis and the number of days on the X-axis and you were to get that done every single day of your project you would have something that would look like this:

And that my dear readers, is a simple burn down chart.

Going by the basic concept the burn down chart is a rather simple idea which has more to do with ‘wisdom’ than it has to do with knowledge of how to build it. Just like I’ve gone ahead and drawn the burn-down chart for a sprint, you could do it for a release and call it your release burndown. Learning how to draw burn-down charts is a matter of acquiring information which is rather easy to acquire but analyzing your burn-down charts is art of wisdom, not just knowledge of the data and how to transform it into a burn down chart.

If you keep monitoring your burn down chart sprint after sprint and release after release you will realize that you team, has a finite and well defined velocity. Trying to ‘push and pressure’ your team to ship faster than their natural velocity can be suicidal. Let’s monitor a team at Multiplitaxion Inc, who, with their natural velocity, have a burn down chart that looks somewhat like this:

On a side note, burndown charts in real time are hardly ever a straight line, but that’s not the point. Humor me. I have a different point to make and the actual shape of the burndown chart hardly matters.

The management at Multiplitaxion Inc, aren’t really happy with this velocity because the competition is catching up faster; so they panic, pressuring the development team to push harder. Given the team leader’s highly complying nature and optimism he agrees and the team starts to work ‘really hard’. They create a little bit of code litter and add a little bit of a code smell, break a few good practices and ship faster. The code ships and the burn-down chart, compared to the one with their natural velocity, looks much like:

 

Now if you are a young and budding project manager you’re thinking:

Hey Pops, The management is happy, the team is happy and the sky is blue with the sun shinning brightly. The development team took their butts off their chairs, stopped playing video games and worked harder. So what? After all no-one was killed. In fact people got praises and promotions for successful implementation.

That’s perfect. Right?

Wrong.

The sprint ends up being what I refer to as a ‘successful failure’. This example is a classic example of the first window being broken and the broken window theory kick in.

The next sprint, the team needs time to clean the code litter they created, but the competition is catching up, the team lead is acting like a prick and pushing them harder. Now even their old natural velocity isn’t enough to clean up the litter done in the previous sprint and reach the feature complete mark in the given time. They ‘work harder’, create more litter and soon the broken window theory starts to become prominent.

The next sprint takes a little more time only to result in a little more pressure from the management followed by some more litter to seed up the development in the following sprint.

Over a period of time, the code becomes complex to maintain and extend. Features start taking more time to build and the pressure from the business just keeps mounting up. Sprint after sprint more litter is introduced in the code base and the code keeps getting more and more complex. Iteration after Iteration the burndown charts start looking somewhat like:

This continues till someone realizes that features are taking too much time to build, it doesn’t even make sense continue to the project and pulls the plug.  If you’ve witnessed projects being shut down because development of features was taking too much time the above chart in action is exactly what you’ve witnessed.

Once you get a general idea of your team’s velocity and can ‘see’ it on a burndown chart, keep a close eye on the burndown sprint after sprint. If you see you burndown chart becoming unexpected steeper it doesn’t always mean your team is ‘working harder’. In fact, every time you see the burndown chart going any steeper than the team’s natural velocity you need to stop and ask yourself the following questions: 

  1. Has the team moved to a radical and more efficient technology?
  2. Have more efficient team members have joined your team?
  3. Have the features that are being built become blatantly simpler because of change in requirements?

Net-Net you need to keep questioning till you can find a way explains the sudden steepness. If you can’t, the same team usually does not become much more efficient overnight and the steepness might be an indication of people panicking and the broken window theory being kicked off in practice.

Periodic glances on burn down chart are much better than policing your teams with a Gantt Chart. Monitor your burndown charts every now and then and every time they sway on either side, coordinate better.

posted on Tuesday, December 09, 2008 8:27:23 PM UTC  #    Comments [2] Trackback
Posted on: Friday, December 05, 2008

When I was asked to join a team of recruiters in their recruitment drive in one of the top-notch colleges I discovered how utterly screwed up their recruitment process for hiring college interns was. Almost a hundred students showed up for the recruitment drive. By the time the selection ended that evening this team of recruiters had recruited for their company, what they referred to as the ten best-of-the-best students.

If you ask me the recruitment team had done just as good as they would have done had they written the names of the students on really small post-it notes, stuck the post-it notes on a dart board, blind-folded one of the recruiters and asked him to throw ten darts, hiring students whose name the dart hit.

Saying that they would have done just as well as hitting a dart-board with eyes blind folded isn’t such an exaggeration as it might seem. When you’re hiring from a decently good college that admits students who had studied computers for the last five years, the laws of probability kicks in and you tend to pick ‘some’ excellent candidates. If you randomly picked ten guys my guess is that you would end up with a pie that looked somewhat like this:

 

This interview drive was quite a long day consisting of questions on the line of:

  1. If you had three balls and were not given a measuring scale to weigh them how would you find the heaviest ball of the three balls?
  2. If you had a cake and an irregular piece had fallen off from the side how would you divide the cake into exactly two equal halves?
  3. How would you find the number of cigarette shops in town?

The parade of funny-questions continued all day and then in the evening when I was told that we had picked ten best-of-the-best-guys out of that drive I looked blankly at the person telling me we were done and after a lot of thinking I said something on the lines of - “Ok. Let’s go home.” 

During the recruitment drive I had approached one of the recruiters and asked him to let me talk to all hundred guys in a room and see which ones of them participate in a group discussion and have opinions of their own. I was told I couldn’t because it wasn’t on the agenda and I had to mention what it is that I was going to speak on. The ‘agenda’ had consisted of one written exam after another on topics like IQ, English and a couple of other exams.

I considered the recruitment drive nothing more than a practical joke both on the organization and on the candidates. When it ended, I was glad it was over; but then the same drive brought up some really important questions about how I recruited my team members, the kind of recruitment I had just witnessed and how distinctly different both approaches were.

Most organizations around the planet seem to give way too much importance to IQ and theory while recruiting but the fact remains that Software Development is a rather practical craft. A huge part of it is done in small and tightly knit teams where not everyone happens to be the smartest of the lot but everyone contributes in the orchestration adds their very own Niche to the mix of successful implementation. Contributions range from developing or testing and goes all the way to being a catalyst.

Using IQ as the only measuring scale of how good a contributor you will turn out to be sounds like a rather impractical thing to do. After all, as sizzling as the idea sounds, IQ does not guarantee applied intelligence, results or success in the real world.

Michael Brotherton makes some rather interesting point in his rather opinionated post, where he describes ‘Why Mensa Is Stupid’:

Here's the latest piece of evidence, a 47 year-old Mensa member who is auctioning off his hand in marriage on eBay. I can't tell if he thinks he's a steal at the $100k "Buy It Now" price, or he just doesn't value his life that much. He's offensive, too, and in my opinion a lazy bastard who should get off his butt and make a better contribution.

I qualify for Mensa (my PSAT score twenty years ago was plenty, and every similar test since). I don't belong to Mensa. I like doing some of the puzzles and games they do, but if that's what being part of Mensa is all about they could drop the qualifications. What's the point to having a "smart club" and keeping others out except to feel elitist? I don't have a problem with people feeling elitist, per se, although I think they're shallow and people so dang smart should go out and do something more productive with their lives!

I've got a PhD, use the Hubble Space Telescope among other facilities, and write novels on the side. I usually don't have time to sit around doing puzzles with people I've chosen to be with based on their SAT scores. I like people of many sorts, and don't pick my friends based on test scores.

Marilyn Vos Savant, "smartest person in the world" and Mensa poster-girl, writes an insipid column. Is that the best the "smartest person in the world" can do? I like to think our best and brightest on this world would contribute something a little more valuable than she has. I mean, she's supposed to be the "smartest," after all. I may not score as high as she does on an IQ test, but I know underachievement when I smell it.

There are a lot of different intelligences, and a lot of different skills. Some great chess players are kind of stupid when they don't play chess (Bobby Fischer comes to mind). Some hunters I know have "wood smarts" that leave me in awe. And there are brilliant artists whose Verbal and Quantitative SAT scores would impress no one, but whose spatial sense would let them toast most Mensa members on many a puzzle. 

Michael is rather correct when he comments on different intelligences. The idea of appreciating diverse set of good qualities and not just labeling someone as good or bad dawned unto me when I saw a struggling developer being heavily criticized by his manager as a ‘mediocre performer at everything he does’; moved to testing and become one of the best testers I happened to work with. The notion that IQ defines intelligence and someone who has a high IQ should be good at everything is just stupidly absurd.

Malcolm Gladwell in his latest book, The Outliers breaks the myth of mapping IQ to success:

In 1921, Terman decided to make the study the gifted his life work. Armed with a large grant from the Commonwealth Foundation, he put together a team of fieldworkers and sent them out into California’s elementary schools. Teachers were asked to nominate the brightest students in their class. Those children were given an intelligence test. The students who scored in the top 10 percent were given a second IQ test, and those who scored above 130 on that test were given a third IQ test, and from that set of results Terman selected the best and the brightest. By the time Terman had finished, he had sorted 250,000 elementary ad high school students and identified 1470 children whose IQs averaged over 140 and ranged as high as 200. That group of younger geniuses came to be known as the “Termites” and they were the subjects of what would become one of the most psychological studies in history.  

Malcolm then goes on to describe where the Terman experiment of the gifted with high IQs went wrong: 

He (Terman) fell in love with the fact that his Termites were at the absolute pinnacle of the intellectual scale – at the ninety-ninth percentile of the ninety-ninth percentile – without realizing how little that seemingly extraordinary fact meant.

By the time the Termites reached adulthood, Terman’s error was plane to see. Some of his child geniuses had grown up to publish books and scholarly articles and thrive in business. Several ran for public office, and there were two superior court justices, one municipal court judge, two members of California state legislature, and one prominent state official. But few of his geniuses were nationally known figures. They tended to earn good incomes – but were not that good. The majority had careers that could only be considered ordinary, and a surprising number ended up with careers that even Terman considered failures.      

Malcolm refers to this excessive dependence on IQ or intelligence and mapping it directly to success as the ‘Terman Error’ and offers practical advice on how to judge individuals when you cannot be just relying in IQ as a measuring scale for an individual. He offers the ‘divergence test’ where candidates are asked to write down as many different uses of objects like ‘a brick’ or ‘a blanket’ as a better alternative. The divergence test requires not just the use of intelligence but imagination in as many ways and in as many directions as possible. He then analyzes results from one of the divergence test and uses it for his assessment of an individual named Poole:

It’s not hard to read Poole’s answers and get some sense of how his mind works. He’s funny. He’s a little subversive and libidinous. He has the flair for the dramatic. His mind leaps from imagery to sex to people jumping out of burning skyscrapers to very practical issues, such as how to get a duvet to stay on a bed. He gives us an impression that if we gave him another ten minutes he’d come up with another twenty uses.      

Malcolm then compares the results with another individual with a much higher IQ level and questions our fundamentals of selections based on IQ and Intelligence:

Florence’s IQ is higher than Poole’s. But that means little, since both students are above the threshold. What is more interesting is that Poole’s mind can leap from violent imagery to sex to people jumping out of buildings without missing a beat, and Florence’s mind can’t. Now which one of these two students do you think is better suited to do the kind of brilliant, imaginative work that wins Nobel Prizes?      

Malcolm seems to highlight the fact that a high IQ does not seem to equate to more success. If you are the kind of the guy who had a traditional outlook to intelligence and success you should get yourself a copy of Outliers. A very interesting read which challenges conventional wisdom with research and data rather ruthlessly.

So much for IQ; and while we’re at it let’s also challenge the to-recruit-the-best-hire-from-best-of-the-colleges thought process shall we?

Janet Rae-Dupree challenges the conventional wisdom that hiring the best of the students from best of the colleges always works out well in her The New York Times, Unboxed article:

“Society is obsessed with the idea of talent and genius and people who are ‘naturals’ with innate ability,” says Ms. Dweck, who is known for research that crosses the boundaries of personal, social and developmental psychology.

“People who believe in the power of talent tend not to fulfill their potential because they’re so concerned with looking smart and not making mistakes. But people who believe that talent can be developed are the ones who really push, stretch, confront their own mistakes and learn from them.”

In this case, nurture wins out over nature just about every time.

While some managers apply these principles every day, too many others instead believe that hiring the best and the brightest from top-flight schools guarantees corporate success.

The problem is that, having been identified as geniuses, the anointed become fearful of falling from grace. “It’s hard to move forward creatively and especially to foster teamwork if each person is trying to look like the biggest star in the constellation,” Ms. Dweck says. 

A couple of years after the college drive I was genuinely curious about what happened of the the bunch of these elite students who had been recruited after they had been labeled ‘the best of the best’ so I thought I’d call up the managers in the organization they were working in and find out. The results were interesting:

  1. Two of them had turned out to be good and productive.
  2. Three were pretty average and were decently productive.
  3. Three were mediocre and were struggling to keep alive.
  4. One of them was fired because of gross misbehavior and use of random abusive language in office.
  5. One of them wasn’t confirmed because of bad performance and decided to quit.

By the way, any guesses on how many other employees who had been picked without any IQ test had been fired by that hundred person organization that very year? Just one.

Net-Net, the recruitment results would have been similar had the recruitment team downloaded names with three years of experience from a job portal and started throwing darts at the names with a blind-fold.

So much for using IQ and Educational background as a measuring scale for success and the people you want on your team. If intelligence and IQ are your only measures of success, you might be leading your team into the classical ‘Terman Error’ and throwing random darts completely blindfolded while pretending that you are picking the ‘best-of-the-best’.

Remember, there are multiple kinds of intelligence and no single test, not even the divergence test, can measure for sure, who will work out for your team and who won’t. You have to get your best, and trust them to do it for you and then if they make mistakes, learn from those mistakes and get better the next time. As much as organizations crave for one simple answer in the art of recruitment, fact remains that there is none.

If you’ve been reading this far, dear reader, all I’ve done is attempted to sell the idea that neither college nor IQ scores can guarantee that you hiring the best. If you’re ready to buy the idea, it would mean that you now need to get your best guys and ask them define the best that joins your organization.

If you don’t buy the idea and feel that reaching out for the best of the colleges and hiring the guys with the highest IQ can solve all your problems associated with quality of recruitment, I offer you a big round dart board, lots of post-it notes, a sketch pen to write names with, a few darts and wish you good luck at hiring.

posted on Friday, December 05, 2008 9:07:20 PM UTC  #    Comments [0] Trackback
Posted on: Monday, December 01, 2008

If you've been a regular reader of this blog you probably know my stance on Gantt Charts. I've often went out of my way and said that it's a team of competent programmers that builds applications and not your software development process and Gantt Charts. This post is not about reiterating any of those posts or my opinion on Gantt Charts. I am here; on the other hand; dear reader; to tell you that project plans and planning as we know it traditionally has already become utterly useless in the world of software development.

Don't knit your brows and frown on me just yet. Don't call me a just another happy-go-lucky Maverick out there dying to write code every time he sees a problem. Yes, I do understand the importance planning in software development and as important as you might consider planning to be; I am here, to tow with the idea that maybe; just maybe; planning in software development is not as important as most of us make it seem to be. I am also here to suggest, dear reader, that maybe there's something other than planning plays an important part in deciding the success or the failure of your next project.

Joel Spolsky in his article describes how he and Jeff Atwood started out with Stackoverflow.com without any plan what-so-ever:

Then one day this guy named Jeff Atwood called me up. Like me, Jeff had a blog, on which he mulled various programming topics. He wrote well, so he was attracting quite a following. He had begun to put advertisements up here and there, and was making a little bit of pocket change, so he started thinking, Gosh, I can do this for a living. It sure beat the heck out of his day job working at a California company called Vertigo Software, which is where he was when he called me, asking for advice.

"Hey, I know exactly what you should do!" I said. And I told him the idea about the Q&A site with voting and editing. A site like this would need a lot of smart programmers to ask and answer questions. Between our two blogs, we felt we could generate the critical mass it would take to make the site work. Jeff liked the idea, so we decided to make it a joint venture.

We named it Stack Overflow, after a common type of bug that causes software to crash -- plus, the domain name stackoverflow.com happened to be available.

I had no idea if the site would work or exactly how it might make money, and I didn't have a ton of time to put into it. I have pretty deeply held ideas about how to develop software, but I mostly kept them to myself. That turned out to be a good thing, because as the organization took shape, nearly all these principles were abandoned. 

Joel admits Jeff and him committing six mistakes but ends the article with a positive note and a rather happy ending described in his own words:

I advocate a fairly simple method of creating software schedules. At the very least, I think, you have to make a list of all the things you plan to do and how long you think those tasks might take, and only then can you reasonably start work. Jeff kept telling me, "It's going to take six to eight weeks." I knew there was no chance that would happen, given that Jeff pulled his timeline completely out of thin air, but I humored him. In reality, it took about twice as long as that, which wasn't that bad, but it was still a 100 percent overrun.

In summary, Jeff and I made six major mistakes.

Oddly, though, none of it mattered.

In August, Jeff unveiled the site, and instantly it lit up. Programmers used the site to pose their technical questions, and more important, they got great answers. The voting system worked well - you could see that the answers to a given question were getting sorted with the best at the top of the rankings. 

What Joel and Jeff lacked in planning they made up with something that is much more important. That something is called coordination. They had started their conversations and pod-casts on the idea of stackoverflow.com even as they were taking their first steps to building it. The community was involved with not just selection of the name but designing the logo for the system as well. With a coordination level this high you hardly need a detailed project plan.

Clay Shirky, in his talk on Institutions vs. collaboration at TED describes how modern day collaborative systems like Flickr and Wikipedia are overcoming challenges institutional setups have faced for years as these institutions continue to rely heavily on planning while the modern day collaborative systems rely on coordination. Clay explains in his TED talk on Institution vs. collaboration:

What Flickr does is it replaces planning with co-ordination and this is a general aspect of these cooperative systems. You would have experienced this in your life whenever you bought your first mobile phone and you stopped making plans. You just said, "I'll call you when I get there."; "call me when you get off work"; that is a point-to-point replacement of co-ordination with planning.

We are now able to do that kind of thing with groups; to say instead of, "We must make an advance plan. We must have a five year projection of where the Wikipedia is going to be" you can just say - "let's coordinate the group effort and let's deal with it as we go because we're now well enough co-ordinate that we don't have to take on the problems of deciding in advance what to do. 

I've always compared software development to fighting a war and irrespective of how well your war plans are; in the midst of confusion and panic solid communication and co-ordination should be your primary tactic and is your only chance against continuous defeats; not an elaborately detailed project plan. Both your project plan and your dead-lines will change every single day; and that to be honest, doesn't matter.

If all of us in the world of software development understood the importance of communication and coordination it would be much more easier for us to realize just how much un-due and non-deserving importance we tend to given to project plans when clearly, they are nowhere close to being that important.

For your next project, try spending lesser time creating a detailed plan, fixing deadlines which run two years in the future and then panicking. Instead, try building a concrete relationship with your client and if they ask for the delivery dates two years from where you stand, talk about the first sprint, where you are trying to get to when the first sprint ends. Once you've told them all where you will be when your first sprints end, tell them; "I'll call you when I get there".

After all, when you “get there”, chances are, that the rest of your project plan might not even be relevant at all.  Software Projects change all the time and all we need here is some good old coordination; not a whole lot of planning. As far as software development is concerned planning is just one of those things that is highly overrated.

posted on Monday, December 01, 2008 3:59:29 PM UTC  #    Comments [0] Trackback
Posted on: Friday, November 28, 2008

Gantt Charts are impressive artifacts conveying a huge deal of information intended to send out a perception of control to everyone involved with the project including the people who sign the pay-checks; sometimes technically refereed to as the 'stake-holders' . As a Project Manager, you typically make a Gantt Chart to flaunt this false illusion of control by documenting it in the form of a very technical-looking artifact.

After years of building Gantt charts, a few years ago, I came to one conclusion:  Like most project artifacts of the traditional days, Gantt carts are useless, built to impress and pamper false egos of Project Managers who build them and the stake-holders who ask for them. In most cases, an elaborate project plan in a Microsoft Project file is a symbolic representation of a non-technical-and-traditional project manager screaming at the top of his voice, in a desperate attempt to make a statement that even he contributes 'something' to the project.

Jeff Atwood compares the picture of the Gantt Chart above to the Traditional Waterfall Model. After all the above picture does seem to have striking similarities to something we all recognize.

Besides the fact that Gantt Charts look and act like the planning strategies deployed in traditional waterfall and other Big Design Up Front methodologies; Gantt Charts and Microsoft Project are considered useless by Agile practitioners around the world for multiple reasons:

Reason #1: Microsoft Project Plan And Gantt Charts end up sounding like a Know-All-Document

Ever worked with a Microsoft Project File? By It's very nature Microsoft Project expects that you would know every single task involved in the project, every single sub task in the task, the start date for the sub-tasks and the end dates of the sub-tasks. If you don't type them in, Microsoft Project inserts question-marks making the document look incomplete.

Reason #2: Microsoft Project Plan And Gantt Charts encourage Micro-Management

When you have every single task and sub-task, itemized with an end date attached to it, it's easy to sit in your management-ivory-tower, find out who isn't meeting his deadlines and act like a Prick in a desperate attempt to make the project move faster by speeding things up.

Reason #3: Microsoft Project Plan And Gantt Charts Encourage Status Reporting In Percentage Complete

The Percentage Complete field sits boldly on your project plan sheet tempting you to update the value on a regular basis. Everyone likes to report that they are ninety percent done where Agile clearly pushes for a mutually agreed definition of done.

Reason #4: Microsoft Project Plan And Gantt Charts glamorize the idea of dependencies and concurrencies

While kick-ass programmers are always scratching their heads on how to reduce dependencies Gantt charts clearly seem to suggest that everything can be classified as having a dependency on something else or being an activity which can be executed in parallel. Everyone knows the perils of multitasking. Besides, agile practices like Extreme Programming have always pushed the idea of developing and testing in isolation using mock objects followed by continuous integration rather than integrating in the end.

Reason #5: Microsoft Project Plan And Gantt Charts propose and push the idea of 'resources' and gives you a tool for Policing

When you have every single task broken down at a micro level and you have twenty individuals at your disposal, it's tempting to assign a task to an individual who is idle just because he is idle. Gantt charts, to some extent, tempt managers to see their teams as isolated resources which can replace each other The idea of not considering strengths and weaknesses of individuals is one of the biggest mistake you can make as a manager. It is the kick-ass programmers who get the projects successful; not the Gantt Charts.

Besides having an 'end date' associated with every single sub-task encourages the traditional project managers police their team.

Simply put, for managers who have nothing to contribute in a project, Gantt charts make them feel good about their existence by convincing themselves,  that they  are, in some way, contributing and adding 'some' value to the project.

Even as I type this, I can literally visualize a young and budding Project Manager, who has been recently told how awesome Gantt Charts are and how they are this amazing and cool time proven way to represent their project. I can visualize this young and budding project manager reading this post and going:

Hey Pops, are you telling me that Gantt charts are inherently evil and that Microsoft Project is a crappy piece of software that no project manager on this planet should be using? Are you trying to tell me that Microsoft Project and Gantt charts are evil tools developed to satisfy the ego of project managers and they cannot be put to any good use what-so-ever? 

No, not really. That's not what I'm saying here. To be fair to Microsoft Project and Gantt charts, they aren't essentially evil if you keep your project plans at a very high level and assign them to individual team leads.

 

Having said that, when you keep you Gantt charts at a level that is this high most Agile practitioners don't see the purpose of having the Gantt chart in the first place.

Just like the double-click-and-write-code model of Visual Basic 6.0 and even the current code behind model of ASP.NET,  Microsoft Project and Gantt charts provide you with an constant temptation of taking the wrong path and give out the I-know-all-signal to your clients instead of making them your allies and admitting up-front how little you actually know. Microsoft Project and Gantt charts in particular, gently nudge you to micro manage every single task item, introducing more problems then the ones they claim to fix.

The problem with Microsoft Project and Gantt chart, dear reader, is not that these tools are anti-agile; the real problem with Microsoft Project and Gantt charts is the approach and the thought process these tools seem to take aren't inherently the best approach and philosophies who want to run your agile projects on.

In his class post on 'The demise of the Gantt Chart in Agile Software Projects' the author David Christiansen believes that the approach and philosophy of the Gantt Chart can negatively impact Agility. David explains:

So, perhaps building software in a certain order isn’t really required, but surely it is more efficient to do it a particular way, right? I’m not one to favor the idea that there is always one best way, but it does seem intuitive that it would be more efficient for 5 different developers to be working in parallel on 5 different features if they were all building the features into a clear and complete application architecture. That way they could, for example, take advantage of existing persistence and security mechanisms instead of inventing those wheels themselves in their feature code.

Recognizing that, the good PM will develop a project plan that has the architect building the architecture first and then the developers showing up to build the features next. Of course the architect will need to know the requirements of all the features in order to build the architecture correctly, so the analysts will have to show up first to get the requirements right… Before you know it, you have a project plan with the standard set of phases all lined up into one gigantic critical path - which looks really cool on a Gantt chart.

Let’s go back to the roots of the scenario though. It assumes that the persistence and security mechanisms correctly support the needs of all 5 feature areas being developed. That, in turn, assumes that the requirements of those feature areas were captured accurately AND that they won’t change notably, which assumes that the users can articulate the requirements properly to begin with. Those are all assumptions that research (citations) has shown to be, well, problematic at best. 

Of course, some kick-ass developers and managers around the world might be capable of resisting the temptation and getting the Gantt charts to become Agile; for the rest of us mere mortals, survey results show that the trick is to throw your Gantt Charts out of the window and move to simple collaboration, high level planning, a kick-ass team that likes working with each other and iterating faster.

posted on Friday, November 28, 2008 3:58:28 PM UTC  #    Comments [1] Trackback
Posted on: Tuesday, November 25, 2008

In my earlier posts, I criticized too many meetings and decided to call meetings 'the heroin-of-software-development-world. Even after announcing meetings as inherently evil I am a firm believer that software development is a team game and when given the choice between being the only solider or fighting with a team and allies I would opt for a small yet smart team that likes working with each other over working all alone any-day.

Having said that, as a developer, there is a limited amount of time each day when you communicate with the team and brainstorm. Then you need to get in the flow and get things done at least for a few hours a day.

For decent parts of their day software developers need to find a little corner, think and focus on complicated problems at hand without having people peek over their shoulders or indulge them in disturbances.

 

I've worked at numerous offices around the world and have written code ranging from tea estates in rural India to the fancy Microsoft Silicon Valley campus. While I'm not very picky about offices I set certain bare minimum standards on what offices should offer their employees, even if they are contractors there to work just for a few months, like I was when I was working at some of these clients. While quite a few of my client offices and the places where I have worked, passed the litmus test of an 'acceptable office environment' a huge number of organizations, clients and offices I've worked in fail the same test; miserably.

In my opinion of what an organization should offer to the employees, a quite and cozy cubical or office tops the list. In fact, quite working conditions are so important, that besides giving it a dedicated post, Jeff Atwood also includes it in the Programmers Bill Of Rights:

Every programmer shall have quiet working conditions: Programming requires focused mental concentration. Programmers cannot work effectively in an interrupt-driven environment. Make sure your working environment protects your programmers' flow state, otherwise they'll waste most of their time bouncing back and forth between distractions. 

The discussion-thread on this topic at Joel's Discussion Group starts with a rather strong remark on the topic with certain opinionated individual makes very valid points on office environments:

Here is my description of a good workspace for software development: A quiet private office with a door and a clear window for each individual developer.  For team projects the offices should be arranged together with convenient common areas.

I happened to find the Fog Creek and JoS web sites a few years ago when doing a web search trying to find employers that provided good workspace.  As anyone who has worked in the field for long knows, the employers that provide good workspace are extremely rare.  The people who are in charge of facilities are usually concerned with costs, not usefulness. 

Employers that provide a good workspace are actually extremely rare. In one of the first organizations that I was contracted by my permanent organization at, five of us shared a long table with no partitions or private space. We would often use the meeting rooms and labs to spend more and more time alone; trying to focus and work without disturbances. A phenomena I see even today in most offices around the world.  Tom DeMarco and Timothy Lister in their book 'Peopleware: Productive Projects and Teams' describe this practice as 'Hiding Out':

When the office environment is frustrating enough, people look for a place to hide out.  They book the conference rooms or head for the library or wander off for coffee and  just don't come back. No, they are not meeting for secret romance or plotting political coups; they are hiding out to work. The good  news  here is that your people really do need to feel the accomplishment of work completed. They will go to great extremes to make that happen.  When the crunch is on, people will try to find workable space no matter where. 

The book does a rather good job at describing the environment that I've witnessed at countless organizations I've visited:

If you peek into a conference room, you may find three people working in  silence. If you wander to  the cafeteria mid-afternoon, you're  likely to  find  folks  seated, one to a table, with their work spread out before them. Some of your workers  can't be found at all. People are hiding out to get some work done. If this  rings  true to your organization,  it's an  indictment. Saving money on  space may be costing you a fortune. 

The cost implications of the whole open office environment is big enough for organizations to yield to the temptation of turning a blind eye towards employee productivity. The book  describes it with a real-life story:

California company that I consult for is very much concerned about being responsive to its people. Last year, the company's management conducted a survey in which all programmers (more than a thousand) were asked to list the best and the worst aspects of their jobs. The manager who ran the survey was very excited about the changes the company had undertaken. He told me that the number two problem was poor communication with upper management. Having learned that from the survey, the company set up quality circles, gripe sessions, and other communication programs. I listened politely as he described them in detail. When he was done, I asked what the number one problem was. "The environment," he replied. "People were upset about the noise." I asked what steps the company had taken to remedy that problem. "Oh, we couldn't do anything about that," he said. "That's outside our control."

It was as though the programmers had complained that there was too much gravity, and management had decided after due reflection that they couldn't really do much about it; it was a problem whose solution was beyond human capacity. This is a policy of total default.

Changing the environment is not beyond human capacity. 

What is even more ironic, is that during my career some of the best offices environments that I've been provided with have belonged to clients who had nothing to do with Software Development.

If I compare my overall experience in IT shops, other than selected few like Microsoft who a decently good work environment, most Non-IT clients that I've worked with seem to understand the need for a quite office environment much more than Software shops do. It is ironic, not very easy to understand but in my own personal case, very true.

I've jumped from a hard core software development client, who made me share office with a marketing guy chattering away on the phone to an oil and rig company that was generous enough to give me a plush office, a calm, silent environment and almost zero interference when I was working. It is almost as if clients having nothing to do with software seem to understand and acknowledge the fact that software developers need quite work environments and think-time. On the other client organizations that I have worked with and were in the business of software development just don't seem to get understand it or even consider it something worth giving any attention to.

If you happen to work in an organization where you have problems concentrating because of too much noise, I'm not going motivate you to try and change any of it. Walking up to your bosses and expecting them spend money so that you can focus better is too much to ask for from the business perspective. I'm going to try and give you three pragmatic solutions to this problem that 'you' can help yourself with:

  1. Find a quite corner - if you happen to work in a cross-cubical farm where four cubical's are slammed together in a cross, move to a cubical where you have a wall right behind you. A wall behind your back gives you some level of privacy and quietness.
  2. Work your way up the corporate ladder - work your ass off to get to the position of a manager while you continue to code; that way if only managers have offices, at-least you'll have one.
  3. Continue hiding out - if the first two sound impractical or at-least not easily achievable, continue 'hiding out' for work and look for nook-and-corners of your organization that are usually quite and yet to be discovered by anyone; at-least till you can get either points one or two implemented successfully. Alternately, you can also get an expensive head-phone with noise reduction and try to get used to coding with music on

The next time you are out there interviewing for a client gig of a permanent job, make sure you take a walk around the office premises before you accept that offer. Unless you're interviewing for a Non-IT shop, or interviewing for a managerial position, expecting an office for yourself or expecting a quite and cozy work environment might be too much to ask for; but taking a walk around your new workplace before you join in, at-least helps you find out if you'll have to look for a cubical with a wall behind your back or a hide out on the first day at work.

If you can get to do either at-least you would have carried your expensive noise reduction head phone to office on your very first day.

Loud and noisy cubical farms with crossed cubical having low walls or a wide open conference room are cheap substitutions for offices. They are not offices; even though a huge number of organizations in the business of software development desperately want software developers to believe otherwise.

posted on Tuesday, November 25, 2008 9:26:56 AM UTC  #    Comments [0] Trackback
Posted on: Thursday, November 20, 2008

This blog has been about my search for answers which have profound meaning in my life. As I write and learn, the goal, dear reader, is to involve you in my search for these answers. One of the things that has confused me as far as software development and life in general is concerned is 'success'. I've seen teams of really programmers having the best of the academic background fail project after project when a simple catalyst and a small teams of humble hard workers manage to break the infinite loop of failure  as they cruise through projects; successfully.

In my career I've been a part of quite a few projects. I've observed others from the outside and analyzed them like a black box is analyzed after a plane crash. A huge number of them fail because of lack of a kick-ass team; however, the more I analyze these failures and the more I 'grow' as a person, I continue to learn that of these huge number of failed projects that I've witnessed quite a few of them had teams comprising of some really smart individuals, who were strangely and weirdly, acting like perfect clowns leading their projects into the path of failure.

 

When I sit back to reflect on some of these projects I realize that none of the posts about successful projects that I've written in this blog, till date, explain some of the failures I've witnessed. I've seen small teams with technically competent developers fall flat on their face and their project snowballed into a massive failure because of little things. All of them were fairly competent individually; but when they came together they started acting like perfect clowns.

What is it then, besides competence, that results in successful projects?

I'll give you a hint - it's not RUP or CMM. No, it's not even 'just competence'.

Jeff Atwood describes the secret sauce of successful teams and does a good job at describing the source of all problems in software development:

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?

It may sound trivial to focus on the people you work with over more tangible things like, say, the actual work, or the particular technology you're using to do that work. But it isn't. The people you choose to work with are the most accurate predictor of job satisfaction I've ever found. And job satisfaction, based on my work experience to date, correlates perfectly with success. I have never seen a happy, healthy, gelled, socially functional software development team fail. It's a shame such teams are so rare.

Happy, healthy, gelled, socially functional teams where the team members not just like working with each other but actually like each other as human beings and hugely respect for each other, are rare indeed. In my entire career till date, I've been a part of two teams that truly and fully, one-hundred-percent, fall in this category. While working with both these teams successful projects seemed like a destination towards which we were mostly cruising towards; on auto-pilot.

While working with, and being a part of both these teams, I personally delivered three projects with genuine value added and hugely happy clients who became allies in our success. What I also did during my work with these teams is a lot of soul-searching on why we were being successful.

Was every single individual in these teams a kick-ass programmer and a one man army?

Not really.

In fact, quite a few of us, me included, were pretty average programmers.

We were faced with the same perils of war that most software development teams face and we committed our share of stupidities. However the fact that team members liked each other and the 'mutual-trust-and-respect' factor made it that much more easier for people to become thick-skinned about their weaknesses and let someone else complement those with his strengths.

If you're responsible for hiring people in your organization, always remember, asking yourself if you would love to work with an individual is just as important as rating the individual on the technologies they are expected to work on.

If you are leading a team that you inherited or hired without this knowledge, besides your team members being amazing professionals,  look around. Ask yourself some fundamental questions about the team and the team members in particular:

  1. Is there a silent, subtle competition happening internally within your team? Are members of your team are indirectly competing with each other? 
  2. Do members of your team make you uncomfortable in social gatherings outside of office?
  3. If an individual was to resign and quit, would you feel secretly happy and relieved about the resignation?

If you answered yes, to any of the above problem, chances are your projects will fail one after the other; if you're really lucky, you will fumble your way to successful failures; but none the less you'll find software development very complicated and hard.  If you answered with a confident no however, chances are that you and your team will auto-pilot their way to successful projects.

While Jeff questions - "If you were starting at another company, would you invite your coworkers along?" - I leave you dear reader with an even deeper and profound litmus test of the team that you are working with: If you were to start your own little dream venture that you really believed in or pet open source project, would you invite your team to join in? Would they accept your invitation?

Two way relationships involving respect, liking and mutual trust are the secret sauce of successful teams and successful careers around the world. There is not much you can do to ensure respect, liking and trust from the other side, but working on these qualities for yourself is as important as learning the next version of the programming language or the platform you work on. May I suggest, dear reader, you give conscious effort in this direction; even if you think you are the most liked person around.

Are you 'working with' a team? Do you consider them a part of your life vision and your extended team or just this current job? If your relationship resolves around just this gig, you probably don't have a well-gelled team. On the other hand if you can think of them as your extended team and a part of your life vision, you might be building projects that cruise on auto-pilot towards success when you work with such teams. Yes, competency is important; but the mutual-liking-and-respect factor is equally important. It's the secret sauce of the delicious success that amazing software development teams often achieve.

posted on Thursday, November 20, 2008 10:23:38 PM UTC  #    Comments [0] Trackback
Posted on: Monday, November 17, 2008

Flash-backing multiple years to my days at Multiplitaxion Inc, I am reminded of my work with a senior technical manager who we shall call Fred. This particular individual had been vested with the responsibility of running multiple projects and getting them implemented successfully. When I talked first talked to Fred, while touring him around the office, something didn't quite click. It wasn't a lay-your-finger-on-and-objectively-criticize-what-is-wrong kind of a feeling. It was more of a feeling that did not involve a lot conscious thinking; just a nagging gut whispering gently in my ear, telling me very softly but clearly that something was wrong somewhere. Then, the feeling grew stronger and stronger as we engaged in a casual discussion on software development and how both of us felt about it.

Under normal circumstances if this would have been an interview, the vibe he was sending, would have been enough for me to let him go but this wasn't an interview. Mr. Fred had been already recruited, he wasn't my selection and he wasn't even in my team. Fred was going to run over three parallel projects on mainframes something I knew absolutely nothing about; and because I knew nothing about his area of expertise, or what he would be working on, it didn't made sense to judge Mr. Fred based on just one discussion. Besides, Pops told me to shut my big mouth up and play a nice guy, so I did.

Weeks went by and we slowly started involving Fred with multiple other projects. Over a period of time, I started hearing names of cutting edge technologies in pre-beta stages in design sessions. I started reading names of random technologies in design documents of multiple projects Fred was handling. When I looked at the weekly status reports that were being uploaded to our centralized lotus notes based document repository, the sky looked blue, the grass green and the universe looked just fine.

Our projects were using state-of-art-cutting-edge technologies and frameworks. Mr. Fred was starting to take us to next heights enabling us for what was then refereed to as the e-commerce era. There was one little problem however; our submit buttons, didn't work all that well.

Have you ever had an incident where you are about to present an application to a client or a potential client;  and you get this chill run down your spine when you're about to hit that button because you're not sure what'll happen when you press the submit button which is 'technically supposed to' save things to a database? Those cold chills are exactly what I would experience when I was vested with the task of giving a demo to a client or a potential client of any project or product Mr. Fred had been involved with.

The strange part however was that Mr. Fred was working with decently good teams who weren't exactly known for programming by co-incidence at Multiplitaxion Inc. All of them, had been involved with and had attributed to multiple successful projects in the past. They seemed pretty excited about the new technology stack being used and were spending late nights in office trying to meet deadlines as they picked up and learnt new technologies. There were too many of those cutting edge, state-of-the-art tools and technologies being used in our projects.

It wasn't until six months later that I realized what Mr. Fred was doing has a name in software development world. It is in fact, lovingly called Resume-Driven-Development. Justice Gray does a pretty good job at explaining Resume Driven Development in his post on - New development methodologies for the 21st century - he explains Resume Driven Development as:

You want to have an exciting career full of exciting accomplishments and nothing is more exciting than introducing exciting new technologies into a project!  But what do you do when the new technology has no business justification or simply isn't the best solution for the problem as opposed to something less sexy?  That's the beauty of Resume-Driven: in this methodology, you don't care!  If you think XSLT is cool, how about using them to completely deliver HTML pages with static JavaScript inside?  Sure it's a maintenance nightmare but with XSLT on *your* resume, what does it matter?  You'll have left this project by the time it gets maintained anyway!  Building a static web page for a capella band?  Why not use Microsoft Biztalk?  With RDD your career is only limited by your imagination!

I can do a long post to describe how Mr. Fred applied Resume Driven Development to all his projects but I won't. Generally, here is how it would work:

  1. Mr. Fred would look at a collection of technologies out there and pick the coolest one out.
  2. Mr. Fred would then look at the technology, and decide it was a perfect tool in his toolset. He would in-fact consider it synonymous to a golden hammer.
  3. From that point, because Mr. Fred had a hammer, Baruch's Law would kick in, and to his eyes, every single problem looked like a nail.
  4. Without much ado, Mr. Fred would strike the hammer really hard irrespective of what the problem was; he would build himself what he called a 'proof of concept' to prove that he had picked the right technology for the problem.
  5. Mr. Fred would announce the Proof of concept as successful, hand his cool technology to the team asking them to continue as he moved on to find something else to add to his resume.

I have a few acquaintances do the usual hi-how-are-you courtesy calls to catch up with me. They are often curious about technologies I am working on and often indulge in comparing the technologies I am working on with the technologies they are working on.

As developers, it is human nature to flaunt hot and sexy names of technologies out there and tell the world you're working on Windows Workflow Foundation and Silverlight but before you take a technology and apply it to your project, ask yourself if you are doing justice to your project by honoring Occam's Razor or are you just working at increasing the page-size of your resume at the risk of having a failed project on your organization's resume.

No-one cares what technologies you use or what your code looks like. Your job as a developer is to get successful implementations done; your job isn't even writing code. After all, the whole wide world runs on PHP. Go ahead, grab that book on Windows Presentation Foundation and read it well; but before you strike with your hammer, do validate that what you are striking, is in fact, a nail. Resume driven development is tempting, but in the long run, neither is it very effective, nor does it scale up as a philosophy to base a life on.

posted on Monday, November 17, 2008 3:40:25 PM UTC  #    Comments [4] Trackback
Posted on: Thursday, November 13, 2008

If you're into dice-driven board games chances are that you'll love MAD. If nothing else it's hilariously funny, confusing and completely insane all rolled into one. The objective of the game? You have to be the first one to lose all your MAD funny-money before someone else looses all of theirs. The funny feel of the game reflects right on it's cover which has funny pictures and a remark, "What, me worry?".

 

The board game comes with a printed document which is supposed to be your 'proof of purchase' with a warning inscribed very prominently:

DON'T PANIC:
If you and your opponents find a board space or a Card card to be confusing, we wouldn't be the least bit surprised. But don't fight about it! Take a vote and play according to the majority rule. To most people, a majority is anything over 50%. However, because you're sufficiently intelligent and persistent to have read this far, you're clearly not most people. Therefore, determine in your own mind what constitutes a majority, take a vote and decide according to the majority rule.

The game is insanely funny; it is by far the funniest board games I've played till date. In-spite of the warning you will invariable see yourself get into really funny arguments with other players over interpretations of what the cards and board spaces mean.

The game has nothing to do with software development, but overall, the game is a very apt representation of the confusion and chaos that happens in game of software development.

  1. The customer thinks he knows what he wants.
  2. You think the customer knows what he wants.
  3. You have meetings with customers in attempt to try and understand what he thinks he wants.
  4. You think you know what the customer wants.
  5. The customer thinks you know what he wants.
  6. Neither you nor the customer knows what is it that he really wants and how you'll get there.
  7. You convince the customer that you know exactly what he wants.

Then added opponents of software development start attacking from multiple directions and before you know it, something creepy and weird happens: Everyone Panics.

MAD, the board game begins with the same practical, pragmatic advice that Douglas Adams had picked for his famous book, The Hitchhiker's Guide to the Galaxy:

 

As far as software development is concerned panic contributes as much to the failure of the projects as much as any other factor.

Chad Myer Provides added insight into why every project usually goes into panic mode:

There is a point in every project - well, every project I've ever been a part of in one shape or another - where panic starts. I'm not quite sure what starts it every time, but the ones that I do know of have all been about money and 'burn rate' and I'm willing to bet that all of them (even the ones that were not made known to me) are about that. The point of Agile, in my opinion, is to allow visibility and more frequent opportunity for decision points for the stakeholder for just these types of moments.  The appropriate response, when this moment of panic is about to ensue is for everyone, especially the stakeholder, to put on their big boy pants and start making the hard decisions about what to cut.

The inappropriate response - oh there are many, but they boil down to this - is to start mistrusting the developers and start assuming they're lazy SOBs who have been cleverly avoiding work throughout the whole project.  Looking back, nearly every single time the panic season started, this was the demeanor the stakeholders took.  Instantly the project went sour, all pace was destroyed, morale tanked, some people went into psycho 100hr/wk work mode to prove the stakeholders wrong, others proved them right by giving up and not doing anything. Ultimately, the project died a rather undignified and flaming death. Failure resulted (or perhaps success didn't happen to the degree to which it needed to happen), the team burned out and most left while the stakeholder was stuck with a failure product and all their critical brain trust gone or demoralized.

Ever been a part of a project where the panic button is pressed because the team is failing and someone realizes that it's failing because of lack of policing mechanisms? If you've been a part of any such projects in your life you're probably related to what Chad is saying here. If you, dear reader, have been through this experience, you probably know the feeling and can smell this panic button being pressed based on incidents that start happening. Office timings are made stringent, holidays and leaves are canceled, emails lose their touch of basic niceness, dead-lines for every single task are asked, micro management begins and everything starts failing apart.

I've seen quite a few Agile projects fail when the panic situation becomes public knowledge. After all, transparency is the biggest blessing and curse of Agile or simply an open culture in general. It brings the chaos and panic right on your face, forcing the weak hearted to either abandon it or press the panic button and replace the fundamental premise of trust on which Agile Projects are built are managed with policing measures and mechanisms.

I've often seen individuals accuse agile as being an excuse for being sloppy, but agile, by far, requires a huge deal of talent and discipline within, the development team and entire organization. In fact it requires more talent and discipline than any other process I've seen in my life. Chad in his post explains:

This is it, there's no turning back. Everyone on the team - stakeholder and producer alike - must trust each other to make the hard decisions and cut what they must to make the plan happen. You must resist the urge to bear down, roll up your sleeves and do everything wrong as fast as you can and ruin everything you've strived for. It's during the hard, trying times that discipline pays its debt. Soldiers don't go to boot camp to learn how to salute during peace time, they go there to learn how to be disciplined when the bullets are whizzing past your ears.

All of Agile is about forcing you to take the correct and sometimes hard decisions sooner than later. It won't give you a cozy feel of the 'green status report' when things are not fine. Software development is much harder than losing all your money in MAD. Before you start the software development game, the least you can do is remember the rules from MAD:

DON'T PANIC:
If you and your opponents find a board space or a Card card to be confusing, we wouldn't be the least bit surprised. But don't fight about it! Take a vote and play according to the majority rule. To most people, a majority is anything over 50%. However, because you're sufficiently intelligent and persistent to have read this far, you're clearly not most people. Therefore, determine in your own mind what constitutes a majority, take a vote and decide according to the majority rule.

If you are a young and budding manager, developer or whatever-it-is-that-you-are, I leave you with one humble thought, that you can put on your not-to-do list. Take the hard decisions if you must, cut down on features if you must, motivate and train your team to work independently if you must; whatever you do; don't police and don't panic; because that is what spreads like wild fire and causes everything to fall apart.

posted on Thursday, November 13, 2008 11:13:44 PM UTC  #    Comments [0] Trackback
Posted on: Monday, November 10, 2008

During his early days as a mentor to some of the junior programmers at Multiplitaxion Inc; one of them, who we shall call Fred, had an issue with me and my management style. His issue was that I wasn't pushing him to meet deadlines.

Mr. Fred believed that my not pressuring him really hard, like most other traditional managers had pushed him in the past, was bad management on my part.

He patiently explained to me that, instead of me making him estimate the duration for his tasks and then letting him have enough time to complete them with a quality implementation, he would really appreciate it if I could estimate how long his tasks should take and then give him a dead-line so that he would start working harder as the deadline approached.

For most other thick-skinned programmers who were getting projects rolled out successfully at Multiplitaxion Inc, deadlines weren't working out all that well. They seemed to like the idea of estimating their own tasks and working in a pragmatic non-panic environment.

I had discovered, early on in my career that the mounting pressure to ship based on a given artificial deadline encourages developers to program by co-incidence. As a developer, I had learnt the lesson the hard way, and had told myself that I would not push teams I work with to program by coincidence just to meet a deadline; specially artificial ones.

As I grew in my professional and personal life I started realizing that not imposing any deadline on people and empowering them with trust, makes them much more productive. Then I met Mr. Fred who had issues with the whole no-deadlines-we-trust-you-to-get-things-done way to running projects. Here was a guy telling him me that he desperately needed deadlines and he needed to be pressured so that he would do his work as I stood there and looked at him, completely confused.

Deadline Driven Development or DDD as some call it lovingly, isn't new in the world of software development and this wasn't the first time I was seeing it in action. During my early days as an young and budding developer, I had seen deadline-driven-development in the world of project managers where it was rampantly popular.  Having said that however, this was the first time in my life when I was seeing a team member crave for it. This was indeed my first experience of seeing young and budding engineers infected with an otherwise managerial disease. 

Tom DeMarco and Timothy Lister describe a real life story, of how managers and senior executives, like keeping their teams under constant pressure of deadlines, in their book Peopleware: Productive Projects and Teams:

During the past year, I did some consulting for a project that was proceeding so smoothly that the project manager knew she would deliver the product on schedule. She was summoned in front of the management committee and asked for a progress report. She said she could guarantee that her product would be ready by the deadline of March 1, exactly on time according to the original estimate. The upper managers chewed over that piece of unexpected good news and then called her in again the next day. Since she was on time for March 1, they explained, the deadline had been moved up to January 15.

The story might seem extreme to a few of you dear reader, and even though moving the deadline ahead might seem a little dramatic for most management teams to do, consider this: how frequently has your management seen you ship comfortably on time and have thrown in a couple of extra features in the mix asking you to build the new features in the same timeframe. Maybe the deadline wasn't randomly moved ahead, but adding random features, just to keep the team on their toes, equates to the same thing.

Deadline driven development is an approach to software development where the management constantly and rampantly disrespects the iron triangle. At multiple organizations that I've seen or visited, I've personally heard of or participated in more than one project and utilization meetings where people being able to head home comfortably at 6:30 is cited as a bad example of resource utilization.

Most veterans understand and have mastered the art of balancing between aiming for perfection and shipping and these kick ass developers will ship as fast as they humanly can. At times they'll estimate stupidly, stumble like babies and miss deadlines. Then they'll get up, get better and ship successfully. Peopleware does a pretty good job at describing the paradox of success when it comes to deadlines:

How many times have you heard that some new technique is going to be used because it is the only chance to make the hard-and-fast deadline, and that if the deadline is missed, there will be hell to pay?  The  setup of the change has already made its  outcome more than a little  dubious. The  kid-like  willingness to throw ourselves into a potentially  embarrassing endeavor is defeated by the potential for ridicule. Paradoxically, change only has a chance of succeeding  if failure, at least a little bit of failure, is also okay.

Every time there is a business push to ship faster I see countless managers, just take the email, forward it to their teams and push them harder; under the optimistic belief that if the team really pushed harder they might be able to pull of a magic trick.

If you're a manager, your job is not just to build a gantt-chart and then run behind your team collecting the status in terms of percentage complete. Business is expected to rush software development teams into it's own death-bed through continuous increase in velocity but and some point you need to take the crap upon yourself, cushion your team from it and let them function un-interrupted without the pressure of continuous and mostly artificial dead-lines. If you need to sit through a thousand meetings to convince the business, please do; if you must get into heated argument with marketing guys and your bosses please do; but if you pass of a stupid artificial deadline to your team all you do is demonstrate the lack of your management skills.

If you're a budding manager and the next time they tell you that there'll be hell to pay if a deadline is missed, try to investigate a little more into exactly how the business gets impacted and what is the actual loss involved if you were to miss a deadline for a few days. Chances are, there'll be none and there is invariable a high possibility that the so-called magical deadline which appeared out of nowhere would be the brainchild of a prick trying to push the team a little harder by pushing random deadlines.

I've been a part of multiple projects and have worked with a huge numbers of developers. I have hardly ever seen programmers cheat their organizations and have a fun time watching movies and playing video games when they had a clear sense of what they were expected to do and what the organization expected out of them. Working under the assumptions that your employees are out there to rob you and then pushing constant deadlines at them so that they don't miss-utilize their office time is outright stupidity which does nothing other than encourage the infinite loop of failure within the organization and the software development world in general. 

Deadlines Driven Development is for a team of Dummies. For everyone else who is decently smart, there is communication, collaboration and successful implementations.

posted on Monday, November 10, 2008 6:06:32 PM UTC  #    Comments [0] Trackback
Posted on: Friday, November 07, 2008

When acquaintances and distant relatives strike a conversation with me in parties and during these discussions want to know what it is that I do for a living, I tell them that I read, talk, listen and besides doing all of that, I write. The reply often results in a confused acquaintance or an even more confused distant family member looking at me like I am an alien with a third eye when in-fact I'm just passing Zen-line statements that you would usually hear from Yoda.

I am no-where close to being as insightful as Yoda but labeling myself as a programmer, project manager, technical architect or any fancy designation sounds like an incorrect introduction of my true self.

When I'm not reading, talking and listening to others in development teams, 'writing' describes what I do rather well:

  1. I write code.
  2. I write about code.
  3. I write about my experiences with reading, talking and listening to others.

Of course, this blog reflects my love for reading, talking, listening to others and writing. Going ahead I'll be exploring my love for all of these activities using stories with lessons to learn both from projects that I've worked on and the ones I've witnessed or seen from the outside. These are stories from my past with a fictional sugar coating and no direct names of organizations, clients or individuals.

Most of these stories will be real with a fictional coating. Others will be completely fictional with real lessons. I will weave and knit words to confuse you just so that you don't find out what's real and what's not; but my intent isn't evil here. The intention is to share with you, dear reader, lessons learnt during my software development career in ways that are exciting and fun.

We will, for the sake of creative imagination use a few common characters and personas in all the stories that we publish on this blog from this point on. This post is about describing some of those personas and laying down the basic framework for the stories and posts to come.

Multiplitaxion Inc.

Multiplitaxion Inc, is a fictional company where things just don't seem to go right. The name, as usual, was suggested by my very smart nephew when he was first taught multiplication. The guy had mastered the idea of multiplication rather well and could multiply numbers decently well; but there was a 'little' bit of a problem. He was having a hard time pronouncing multiplication; so he came up with Multiplitaxion. The name was way too cool to be wasted. That's when Multiplitaxion Inc, was born.

The idea of Multiplitaxion Inc, was inspired by three different sources.

  1. Lots of Organizations - During a point of time in my career I was hopping from one client office to other and visiting multiple so called big software development houses. I was realizing one thing; The bigger they were the bigger their stupidities were. There were a very few who were maintaining the magic touch of small but most of the bigger organizations were hugely big even when it came to their stupidities.
  2. Office Space - This was a comedy that a colleague of mine introduced me to. The movie had a fictional organization called Initech; which was a pretty funny representation of the kind of stupidities that happen in a huge number of software development shops.
  3. The Poster - I remember a conference room where project status was analyzed and decisions for future versions were taken; I remember a single conference which continued for a very long time where I was barely close to catching my zzzzz, hardly ever spoke and kept staring that this poster on the wall.

You would think that anyone with the common-sense and sense-of-humor to stick a poster of this sort in the conference room would be careful about the stupidities they would indulge in. However, I sat in the conference room, waiting for a very lengthy meeting to finish, where everyone involved tried to freeze the requirements for the next version followed by a finger pointing exercise of why the first version didn't meet all the requirements. I sat there and admired the idiocy that happens even when some reasonably smart people come together in large groups with conflicting interests. Multiplitaxion Inc, isn't real; and neither does it represent one single organization form my past; but the problem this fictional little organization faces are real. Very real.

Fred

To be honest Fred is not my brain child. He belongs to Venkat Subramaniam and Andy Hunt who conceived the idea of Fred in their book The Pragmatic Programmer where they described Fred using a simple example:

Suppose Fred is given a programming assignment. Fred types in some code, tries it, and it seems to work. Fred types in some more code, tries it, and it still seems to work. After several weeks of coding this way, the program suddenly stops working, and after hours of trying to fix it, he still doesn't know why. Fred may well spend a significant amount of time chasing this piece of code around without ever being able to fix it. No matter what he does, it just doesn't ever seem to work right.

Fred doesn't know why the code is failing because he didn't know why it worked in the first place. It seemed to work, given the limited "testing" that Fred did, but that was just a coincidence. Buoyed by false confidence, Fred charged ahead into oblivion. Now, most intelligent people may know someone like Fred, but we know better. We don't rely on coincidences—do we?

I loved the idea of Fred and went ahead and said that there's a little bit of Fred in all of us. But then throughout my career I've also met perfect embodiments of Fred. This blog is not about criticizing Fred. Instead it's about analyzing what Mr. Fred does and learning from his stupid mistakes; but before we do that it's really important that we know Fred; which is why, dear reader, I present to you, Mr. Fred.

Fred, Meet the world. World, Meet Mr. Fred.

Jane and Jack

Jane and Jack are two programmers who are a pleasure to work with. They are not ‘perfect’ individuals; just highly reliable and consistent. Jane and Jack are people you can connect too. They are not very loud though. They enjoy talking to the compiler in the cozy corner of their office and are completely disinterested in office politics, moving on to management and leading others. If there is one thing they want to do, it is to ship remarkable code.

Pops

This one's not my brain child too. This is the brain child of Michael Lopp in his book Managing Humans where he referred to himself as Rands:

The icing on this semi-fictional cake is Rands. This is a name I began using in the mid-’90s for my virtual presence; when I began web-logging about management, the name stuck. Think of Rands as your semi-fictional guide walking you through the fake stories of fake people that have had incredible relevant (yet fake) experiences. Rands has a bit of attitude, but, then again, so do I.

I'm of Indian origin and I carry my Indian origin and accent rather well when I travel around a flat world. I'm definitely not an Indian call center employee with a thick Indian accent trying to assume an identity of 'Sam' or 'Harry' and making a fool of myself. My real name is Rajiv Popat and I have no complexes what-so-ever about that.

Pops however, is a rather funny identity which allows me to step out of myself to be just as critical of myself as I am of others including Fred. Then the idea of Pops is even more appealing when I go ahead and make random mistakes which, of course, I do all the time. I can blame it all on Pops. After all, it's not me making those stupid mistakes. It's Pops.

More Personas

Of course, Multiplitaxion Inc, Fred and Pops are a good starting point for story telling; but I do realize we'll need more characters as we move ahead. I'll be making changes to this post as I go ahead and introduce other characters in future.

Consider this page the Introduction to all of the characters that you'll meet in the stories about management and software development from Pops at ThousandtyOne.com.

Every time I want to go ahead and add a new character to the story I'll just go ahead and add him here. I know I'm not supposed to be going back and editing a post that has already been published, but it's not me who'll do that, remember? It's Pops. The guy just doesn't understand blogging rules all that well after-all.

posted on Friday, November 07, 2008 12:38:19 AM UTC  #    Comments [2] Trackback
Posted on: Monday, November 03, 2008

One of my seniors told me something on the lines of - "Senior engineers are supposed to wear multiple hats and juggle multiple tasks at the same time"; the issue at hand was that I was not 'utilizing' the senior most members in my team to their fullest extent by not giving them multiple tasks to work on all at once. According to him, even though I had promoted these individuals I wasn't tapping into their full potential by pushing them to undertake multiple tasks at once.

This particular senior of mine believed that all senior members in all teams should multitask and if they couldn't, they weren't senior enough to be promoted to the position of senior programmers. He wanted, expected and demanded that anyone who was to be promoted as a senior programmer had to be a serious, mind-blowing, kick ass juggler when it came to handling multiple tasks as once before he was lifted to the position of a senior programmer or promoted.

During the early parts of my career I had been a ruthless multitasking guy myself. The obvious expectation from someone like me was that I would push multiple members in my team towards multitask as well, but then something creepy happened. All the multitasking that I was doing was starting to have it's toll on me.

There would be days at a stretch when I would stare at the monitor losing a track of what it is that I was doing and what I was supposed to be doing next. I had taken multitasking to the next level and was suffering through what can be, most aptly, defined as the ALT-Tab-Syndrome. That is when I started realizing how expensive a human context or task switch was.

In his article on human task switch Joel Spolsky explains how harmful human multitasking is by comparing it with multitasking on computers. He argues that both are expensive and the only thing they do is provide is a perception of speed, not actual increase in speed or productivity. He explains:

OK, back to the more interesting topic of managing humans, not CPUs. The trick here is that when you manage programmers, specifically, task switches take a really, really, really long time. That's because programming is the kind of task where you have to keep a lot of things in your head at once. The more things you remember at once, the more productive you are at programming. A programmer coding at full throttle is keeping zillions of things in their head at once: everything from names of variables, data structures, important APIs, the names of utility functions that they wrote and call a lot, even the name of the subdirectory where they store their source code. If you send that programmer to Crete for a three week vacation, they will forget it all. The human brain seems to move it out of short-term RAM and swaps it out onto a backup tape where it takes forever to retrieve.

In his post, Joel basically pushes the idea that human multitasking in all it's form is not as productive as working on one-thing-at-a-time. In fact Joel feels it's harmful.  

G. Wade Johnson argues that what Joel is talking about can be described as preemptive programming. Wade on the other hand, introduces another form of multitasking where he talks about utilizing multitasking to utilize idle time:

An interrupt forces a task-switch. You incur all of the overhead of changing state, just like in the time-slice case. In fact interrupts are worse for humans than for computers. If you know you will be changing tasks after lunch, you can generally aim for a good place to stop. With an interrupt, you have no choice of when it occurs.

On the other hand, I try to keep one major task and two or three minor tasks on my plate at all times. This way, when something causes me to block on the major task, (waiting on technical or business input, lack of some resource, a design problem that I just can't seem to beat right now) I can spend some time on the minor tasks. Every minor task I complete, is one more thing that actually gets finished. That way I don't spend the blocked time busy waiting (browsing the web, reading slashdot, etc <grin>).

As valid as Wade's point seems, I've been a first hand example of what happens when you try to utilize and squeeze out every second of your idle item. Human RAM's are relatively limited in size, writing a few functions, firing a build that is going to take a minute to fire, reading a blog-post in that one minute and coming back to the code when the build is complete with all the variable names, function names and class names you were working with fresh in your head doesn't sound real life as well.

Kathy Sierra believes that the perils of multitasking aren't just limited to lowering the quality of the tasks that you are multitasking. According to her multitasking may have perils which are much more profound. She explains:

Where I once believed that the myth of multitasking was about time (that doing four things simultaneously takes much longer than to do those same four things in sequence), scientists now know it's also about quality. And it gets worse... it's not just that the quality of those four things in parallel will suffer, it's that your ability to think and learn may suffer. Some researchers believe that all this constant, warp-speed, always-on multitasking is causing young people, especially, to become less able to follow any topic deeply.

Kathy has indeed done her research on the topic really well. Go ahead, browse through her post and you'll get everyone from The Time Magazine to Jordan Grafman, chief of the cognitive neuroscience section at the National Institute of Neurological Disorders and Stroke, telling you that multitasking and being involved in too many things at once is harmful.

While I see countless young and ambitious engineers wanting to take on more and more projects, bigger and better challenges, grow in life and go places all at once, Kathy's post does a good job at reminding them their physical and mental limitations:

Whenever I talk about the big myth of multitasking, people always come up to tell me how they themselves just "have the kind of brain that can do this." Riiiiiight. They don't. I don't. You don't. And maybe you'd realize it if you turn off your cell phone, disable IM, mute the little "ding" alarm that says you've got email, and just sit there for a few moments.

The big problem for most young people, it seems, is that they don't know how to "just sit there." They get the shakes after just a few minutes without media stimulation.

What ever be the form of multitasking that you're doing; chances are that it is doing you or your work more harm than it is doing you or your work good; and that includes the kind of multitasking Wade explained in his post. As developers we tend to believe it's beneficial and we like to think we can handle it really well; but the truth of life is we can't. Kathy explains:

One of the most interesting things discussed in the Time article is that neuroscientists have established the specific area of the brain responsible for context switching. And unfortunately for some of us, it appears that this part of the brain performs less well as our brain ages. In a nutshell, the older we get, the less quickly and effectively we can multitask. But... most parents of teenagers already know that we have no frickin' idea how our kids manage to do what they do simultaneously. The key issue, though, is that while we now know they're better at it than we (the parents) are, they aren't half as good at it as they think they are.

And chances are, you aren't as good at it as you think you are.

The next time you fire a build and you feel this yearning temptation to read a blog post or reply to an email, ask yourself if you can handle the task-switch and come back to the build elegantly and completely when it's complete? If not, maybe you're just better off sitting there, admiring the build getting fired and slowing down a bit as you think about the next few lines of code you are going to write. After all you'll hardly get anywhere with just random multitasked speed.

If you're leading a team, if there is one lesson you can take back from this post, Joel describes it rather articulately:

As it turns out, if you give somebody two things to work on, you should be grateful if they "starve" one task and only work on one, because they're going to get more stuff done and finish the average task sooner. In fact, the real lesson from all this is that you should never let people work on more than one thing at once. Make sure they know what it is. Good managers see their responsibility as removing obstacles so that people can focus on one thing and really get it done. When emergencies come up, think about whether you can handle it yourself before you delegate it to a programmer who is deeply submersed in a project.

Are you still expecting your team members to multitask before you promote them? Are you only promoting your team members based on their multitasking abilities? Here's my advice to you: Don't use multitasking abilities as a measure for promotion.

Are you knitting your brows and telling yourself what a moron I am because you think that as you climb up the corporate ladder you have to multitask? Well, Multitasking is a real need in my job profile as well. I tend to give a very strong perception of multitasking when I work on multiple projects at once; but that's exactly what it is - a perception. Behind the curtains; I try my best not to multitask as long as possible.

A colleague recently told me that he was planning on picking up Ruby on Rails in the next three months while he also worked on something learning something else during those three months. My immediate response and suggestion to him had been that he should buy a Ruby On Rails book, stop learning the other thing that he was planning on learning and just focus on Ruby On Rails and finish it off in the next one and half month instead of three. Then he should consider moving to something else.

This is but, one simple example of avoiding the perils on multitasking. All situations in your life may not be as simple as this and I clearly don't have all the answers, but the biggest favor that you can do yourself is by starting to realize that human task switching is expensive and that multitasking in a real problem in our lives. Once you realize that, work consciously towards finding ways and means to avoid multitasking every time you can see an opportunity to avoid it.

Bottom line; whenever you have an option to avoid multitasking, avoid it.

The trick is to blind out everything else when you start with a task at hand and not look at anything other than the task as had till the task comes to a logical end where it's safe to switch to something else without having to keep too much about your first task in your head. Till you reach that point, don't open your outlook; close your browsers and if that stupid phone is ringing continuously switch it off too. Once you reach a logical end where you know it's ok to switch to another task, then by all means do; but random aimless multitasking in attempt to do too much in too little time gets you nowhere. Absolutely nowhere.

The Perils of multitasking are huge; both in software development and life in general. Multitasking is truly impacting and preventing us from being successful and happy; but you don't have to take my word for it; see Scott Berkun talk about attention and sex to help you decide for yourself.

posted on Monday, November 03, 2008 4:52:17 PM UTC  #    Comments [3] Trackback
Posted on: Thursday, October 30, 2008

During my school life, I quit my karate lessons within a couple of years or learning and practice. Today if I got into an award confrontation requiring self defense here's how I would defend myself: I would run, as fast as I could. I would run so freaking fast that I wouldn't even look behind. That's how much karate I remember.

On the serious side of life, my reasons for my early interest in martial arts, besides being physical, were also philosophical. Martial Arts, in all it's forms has ideas and concepts which can be borrowed and used for life and software development. This post is about one such concept and if you are a programmer, this post is also about asking a very important question: are you a code samurai?

Martial Art gurus believe that a perfect weapon is one which becomes a seamless extension of the warrior's body and brings him greater reach, humility and grace. On the same line of thought, a perfect warrior is one who can blend himself with the perfect weapon. In other words, in the world of martial arts it is believed that to become a great at a warrior you must pick the great weapon and then reach a stage where the warrior and the weapon become one.

I've often announced that software developers need to turn themselves into warriors and one man armies. If you look at it, your machine is your only weapon against the countless enemies of software development. Yet, I rarely find programmers who are one with their machines. A huge number of programmers on the other hand, are hunting and pecking for keys on their keyboards as they type and fumbling with the mouse as they hunt for points on the screen to click.

I've always said that hitting the window key and typing iexplore is fast. It's faster than reaching out for the mouse and clicking that Internet explorer icon but Jeff Atwood provides a much more compelling example:

Let's assume that we're typing some text into a document of some kind, and we wish to save the document we're working on. (I could argue that the user should never have to explicitly save anything, but humor me.) If it seems ridiculous that the mouse method:

  1. Take your right hand off the keyboard
  2. Place your right hand on the mouse
  3. Mouse over to the File menu
  4. Click File
  5. Click Save
  6. Place your right hand back on the keyboard

Could be measurably faster than the keyboard method:

  1. Use your left hand to press Control+S

I assure you that you are not alone. Please defer all your righteous indignation for just a moment.

David Allen in his book Getting Things Done: The Art of Stress-Free Productivity, describes his frustration with even the veteran professionals hunting and pecking for keys as they work:

If you're  in  a  large-volume  e-mail  environment,  you'll greatly improve your productivity by increasing your typing speed and  using  the  shortcut  keyboard  commands  for  your  operating system and your common e-mail  software. Too many  sophisticated professionals are seriously hamstrung because they still hunt and peck and try to use their mouse too much.

Steve Yegge feels passionately about touch typing so much so that he believes that those who don't touch type might be scarifying a big number of things:

Programmers who don't touch-type fit a profile.

If you're a touch-typist, you know the profile I'm talking about. It's dirty. People don't talk about dirty secrets in polite company. Illtyperacy is the bastard incest child hiding in the industry's basement. I swear, people get really uncomfortable talking about it. We programmers act all enlightened on Reddit, but we can't face our own biggest socio-cultural dirty secret.

Well, see, here's how it is: I'm gonna air out the laundry, whether you like the smell or not.

What's the profile? The profile is this: non-touch-typists have to make sacrifices in order to sustain their productivity.

It's just simple arithmetic. If you spend more time hammering out code, then in order to keep up, you need to spend less time doing something else.

But when it comes to programming, there are only so many things you can sacrifice! You can cut down on your documentation. You can cut down on commenting your code. You can cut down on email conversations and participation in online discussions, preferring group discussions and hallway conversations.

And... well, that's about it.

So guess what non-touch-typists sacrifice? All of it, man. They sacrifice all of it.

Touch typists can spot an illtyperate programmer from a mile away. They don't even have to be in the same room.

For starters, non-typists are almost invisible. They don't leave a footprint in our online community.

When you talk to them 1-on-1, sure, they seem smart. They usually are smart. But non-typists only ever contribute a sentence or two to any online design discussion, or style-guide thread, or outright flamewar, so their online presence is limited.

Heck, it almost seems like they're standoffish, not interested in helping develop the engineering culture.

While everyone seems to give a great amount of importance to the keyboard as a powerful way to interface with your machine, Bruce Tognazzini has a different take on the topic:

We’ve done a cool $50 million of R & D on the Apple Human Interface. We discovered, among other things, two pertinent facts:

  1. Test subjects consistently report that keyboarding is faster than mousing.
  2. The stopwatch consistently proves mousing is faster than keyboarding.

This contradiction between user-experience and reality apparently forms the basis for many user/developers’ belief that the keyboard is faster.

People new to the mouse find the process of acquiring it every time they want to do anything other than type to be incredibly time-wasting. And therein lies the very advantage of the mouse: it is boring to find it because the two-second search does not require high-level cognitive engagement.

It takes two seconds to decide upon which special-function key to press. Deciding among abstract symbols is a high-level cognitive function. Not only is this decision not boring, the user actually experiences amnesia! Real amnesia! The time-slice spent making the decision simply ceases to exist.

While the keyboard users in this case feels as though they have gained two seconds over the mouse users, the opposite is really the case. Because while the keyboard users have been engaged in a process so fascinating that they have experienced amnesia, the mouse users have been so disengaged that they have been able to continue thinking about the task they are trying to accomplish. They have not had to set their task aside to think about or remember abstract symbols.

Maybe it's not just about the rather controversial the mouse vs. the keyboard argument; or the search of which one is the perfect way to interface with your machine. Maybe it's about using the combined use of the keyboard and the mouse in a way that makes you one with your machine. Irrespective of the input device you are more comfortable with, if you are not completely comfortable with your machine and not moving blazing fast, it shows.

In the world of music and martial arts, they would hardly let you get on the stage before you develop a sense of comfort with the instrument or the weapon. Touch typing and your at speed defines your comfort level at the keyboard and eventually with the machine; if nothing else, it provides a perception of being a power-user to both yourself and the external world.

Nolan Larsen, comments on how powerful perception is in the world of computing:

I came across an interesting example of perception vs. reality while designing a small text editor: When scrolling the text horizontally in a window we would refresh the text by redisplaying each line starting at the top. This resulted in a wave of text rippling down the screen, and many complaints that the screen refresh was too slow. The remedy was to scroll the bits already on screen and then redisplay each line from the top. The second implementation was actually slower than the first because we incurred the overhead of scrolling the bits before we even started to display the new text on the screen. However, the perception was that there was an immense increase in speed. We stuck with the second implementation because it increased the overall satisfaction of the user even though it actually decreased the throughput of the product.

I didn't learn typing formally in a typing class or at school. Computers and software development was love at fist sight for me. Out of my deep passion and love for computers and software development, I spent countless hours at the keyboard which may have brought up my typing speed to a decently high words per minute count without me even having to work consciously for it.

As a matter of fact I had hardly ever measured my typing speed until a few days ago, but my comfort level with the keyboard is high enough to let me touch typing blazing fast with my eyes literally blind folded. If nothing else, it makes me feel good about being able to connect to my laptop and turning it into an extension of myself.

I never thought about any of this cautiously before. I never realized consciously how important being fully comfortable with the input devices was till I happened to work with a gentleman who was fumbling in a confused state of mind between the keyboard and the mouse when we needed to push the prototype-build out really fast with some of the bosses waiting for the build to be pushed out eagerly. To be fair to him his lack of speed didn't delay the build push by more than a few minutes; but having said that, as I watched him hunting, pecking and fumbling, it definitely lowered my confidence and perception of whether he knew what he was doing. That's how important perception is.

Whether you do it for increased productivity or for perception and feel good factor, if you are hunting for keys on the keyboard and fumbling with the mouse you need to do something about it. You might be sending out the perception of being a newbie when you are really a veteran. If you are not one with the weapon do you really expect the world to consider you a good warrior? If you're not one with your computer when you code and work do you expect the world to consider you a good programmer or a code samurai?

Go ahead, blindfold yourself and try typing a couple of pages about your life or your favorite topic in any editor of your choice. If the idea doesn't freak you out and you can actually do that successfully, at a decently acceptable speed that's very close to what you would have achieved with your eyes open, chances are that you're on the track of becoming one with your machine. If not, the sooner you start taking your first steps at becoming really comfortable and fast with your machine, the higher your chances of having a productive life will be. Looking for your mouse? Pecking for they ALT+F4 keys? Or are you one with your machine? I leave you dear reader, with a reality check and wish you best of luck at getting faster and better anyway.

posted on Thursday, October 30, 2008 2:27:45 PM UTC  #    Comments [0] Trackback
Posted on: Monday, October 27, 2008

In one of my earlier posts I claimed that project management had a lot to do with understanding the human mind. In the same post I also went ahead and admitted that I'm no expert at it. Having admitted that, the amount of time and effort I have been dedicating and still dedicate to understanding the human mind and people issues is as much as the time and effort I dedicate to understanding code.

As a matter of fact, the time I spend to understand human beings in teams is sometimes even more than the time I spend trying to read and understand code. Studying programmers and how they function in a team fascinate me; as much as programming does. After all, I love everything about software development and team dynamics form a huge part of it.

I've seen countless college interns, fresher's and even regular employees being recruited by companies based on their 'analytical skills', 'mathematical skills', 'academic qualifications', 'educational background' and 'grades'.

 

I've also seen a huge number of those decisions turn out to be complete disasters. I've seen a few top notch graduates from top grade colleges who have toped three rounds of technical interview turn out to be complete pricks and in-compatible when it comes to working in a team. I've also seen programmers with humble starts out perform, get the team together and drive projects through the doors of success.  

Some of these experiences have made me to think that maybe, just maybe, organizations that evaluate candidates simply by using these black-and-white-approaches of judging them simply based on their 'academic background', analytical skills' or even 'technical skills', might be missing out big time on opportunities of recruiting a completely different breed of employees with qualities which are just as, and sometimes even more important for successful implementations, rather than just having 'technically-kick-ass programmers' on the projects.

'Catalysts' form a part of these different breed of employees. DeMarco and Lister, in their book, Peopleware: Productive Projects and Teams (Second Edition), describes Catalysts and their contribution towards making a project successful:

I was teaching an in-house design course some years ago, when one of the upper managers buttonholed me  to request that I assess some of the people  in  the course (his project staff).  He was particularly curious about one woman. It was obvious he had his doubts about her:

"I don't quite see what she adds to a project she's not a great developer or tester or much of anything." With a little investigation,  I turned up this intriguing fact: During her twelve years at the company,  the woman in question had never worked on a project that had been anything other than a huge success.  It wasn't obvious what she was adding, but projects always succeeded when she was around.  After watching her in class for a week and talking to some of her co-workers,  I came to the conclusion that she was a superb catalyst. Teams naturally jelled better when she was there.  She helped people communicate with each other and get along.

Projects were more fun when she was part of them. When I tried to explain this idea to the manager, I struck out.  He just didn't recognize the role of catalyst as essential to a project.

I've worked with a couple of really awesome catalysts myself in my professional career. After having realized the importance of having catalysts in each team, I've also learnt that there is no one-step-formula for finding and hiring this breed.

These are candidates who will show up in your interview, will perform very averagely in them at the same time send you a very good vibe by connecting to you, their enthusiasm, passion for learning and connecting to other individuals resonating very strongly, leaving you completely confused on whether you should hire them for their potential and attitude or let them go because of their average scores in the technical rounds.

Just like hiring any awesome individual, in order to hire a good catalyst, you have to go with the facts, your experience, gut-feeling and then finally get lucky.

These are candidates who may not be able to solve those puzzles your organization wants you to ask them or answer all of those interview questions that good .NET developer aught to know but one of the biggest blunder managers and organizations can do is undermine their contributions.

I've personally witnessed countless occasions of failing projects starting to become successful over a period of time after a catalyst is introduced in the team. I've also seen successful projects starting to stumble when a catalyst leaves or is removed from those projects; and in all these cases the catalysts weren't contributing anything that can be described as majorly critical when it came to code or tasks in.

If you're building a team, leading a team, or working for a team, remember that the role of a catalyst in a team is as important as the role of the best programmer who is shipping the most complex and critical modules. Go ahead, look around you; or think of the people you work with. Is there a catalyst holding your team together? If yes, are you giving him due credit and appreciation for his contributions?

posted on Monday, October 27, 2008 3:07:33 PM UTC  #    Comments [0] Trackback
Posted on: Thursday, October 23, 2008

I've often been accused of being a pessimist. My pessimism comes back from the school days where I would announce, almost ceremoniously, how bad I had written my exam papers and how I might barely pass only to hit a 80+ or a A+ when the final results were announced.

My biggest strength at pessimism was that I was convincing at it. I could carry my pessimism tugged along with my depression using a very glum face; and I genuinely believed it too. If you were to put me on a lie detector and asked me how much I would score in that exam I probably would pass the lie detection test comfortably when I said I would just about scrap through or just about pass the exam. I would say that with a very serious and glum face.

 

Then I would go ahead and score a 80+ or an A+ when the results came out and you'd be wondering what just happened.

Acquaintances, teachers and most people who knew me considered pessimism to be one of my biggest weakness. They thought I was underestimating myself when all I was effectively doing with them was simple: I was lowering expectations.

When I entered the world of software development as a young an budding programmer and then a young and budding team lead, I realized that a little bit of optimism can make you your manager's pet and take you way ahead in your path to countless promotions and so-called-successful projects. I tried optimism and it sort of worked. I was successful but the success wasn't quite nearly as satisfying as I had expected.

I was frustrated; only to revert back to my true nature of a thick skinned pessimist who hopelessly under-promises, sells you the deal and then works his ass off to over deliver because he is freaking scared of failing in the end.

At work, I've been accused of being a pessimist by many. In past, I've been approached by Finance and Marketing people telling me that the organization had a long-pipeline of projects only to get my response that we should think about those projects only when the pipe line materializes and becomes real.

When it comes to recruitment and retention I'm continuously worried about my entire team quitting and on my feet to keep them happy; even when everything is perfectly fine. When it comes to projects I am constantly looking out for details which will cause the project to fail even when it's running comfortably well and three weeks ahead of time.

In an earlier post, I've already discussed my frustrations over being 90% done and have gone ahead and said that 90% done is as good as not done.

Pessimism is something that was always a deep rooted part of my character. However, I no longer consider it a weakens or something I need to work on changing.

If you're a programmer or connected to software development, Optimism and Wishful thinking are probably the two biggest vices you can be cursed with. Frederick P. Brooks in the classical legendary book, The Mythical Man-Month Essays on Software Engineering, explains:

All programmers are optimists. Perhaps this modern sorcery especially attracts  those who believe in happy endings and fairy god-mothers. Perhaps the hundreds of nitty frustrations drive away all but those who habitually focus on the end  goal.  Perhaps it is merely that computers are young, programmers are younger, and the young are always optimists. But however the selection process works, the result is indisputable: "This time it will surely run," or "I just found the last bug."

So the first false assumption that underlies the scheduling of systems programming is that all will go well, i.e.,  that each task will hike only as long as it  "ought" to take.

Steve McConnell in his book Rapid Application Development - Taming Wild Software Schedules believes that optimism taken at the next level of wishful thinking may be at the root of more software problems than all other causes combined:

I am amazed at how many problems in  software development boil down to wishful thinking. How many times have you heard statements like these from different people:

"None of the team members really believed  that they could complete the project according to the schedule they were given, but they thought that maybe if everyone worked hard, and nothing went wrong, and they got a few lucky breaks, they just might be able to pull it off."

"Our team  hasn't  done very much work to coordinate the  interfaces among the different parts of the product, but we've all been in good communication about  other  things, and the  interfaces are  relatively simple, so it'll probably take only a day or two to shake out the bugs."

"We know that we went with  the low-ball contractor on the database subsystem, and it was hard to see how they were going to  complete the work with the staffing levels they specified in their proposal. They didn't have as much experience as  some of the other contractors,  but maybe they can make up in energy what they lack in experience. They'll probably deliver on time."

"We don't need to show the final round of changes to the prototype to the customer. I'm sure we know what they want by now."

"The team is saying that it will take an extraordinary effort to meet the deadline, and they missed their first milestone by a few days, but I think they can bring this one in on time."

Wishful thinking isn't just optimism. It's closing your eyes and hoping something works when you have no reasonable basis for thinking it will. Wishful thinking at the beginning of a project leads to big blowups at the end of a project. It undermines meaningful planning and may be at the root of more software problems than all other causes combined.

Even after people with reputations as high as Steve and Frederick describe optimism and wishful thinking as one of the biggest problems of our industry I continue to be surprised by just how wishful people still exist in our industry.

I've seen companies continue on projects where the entire teams knew months in advance that the project would fail without doubt. I've seen teams continuing work on the project without uttering a word even when they were completely aware of the ultimate destiny of the project.

The decision to continue silently was clearly taken under the hope that something magical will happen whisking the project away on the path of heroic success.

I've worked at multiple client places. During my work at some of the clients, I've witnessed business deals being struck, companies being acquired and projects been extended all under the curse of wishful thinking when every single individual directly involved with the deal, the companies or the projects that I talk about, would have told you hands down that there was no way things could have "worked out".

Yet, the teams decided to continue; closing their eyes to the hardcore realities of failure. What they were doing was ignoring the possibilities of disaster outright blatantly.

Optimism and Wishful thinking are by far the Biggest Curse of Software Development and to a large extent and if you're working on a project where nothing seems to be going right and yet you find yourself continuing without uttering a word you're probably cursed too with these vices. Your only glimmer of hope is a touch of pessimism and every once in a while a splash of a cold water on your face to wake you up and show you the reality.

Remember, optimism and wishful thinking are the biggest curses in our industry. The next time you tell yourself that things will 'work out' ask yourself if you've genuinely evaluated the situation or are you just turning a blind eye to the inevitable?

posted on Thursday, October 23, 2008 10:19:32 PM UTC  #    Comments [0] Trackback
Posted on: Monday, October 20, 2008

Every now and then I’ll have one or two young and budding colleagues walk up to me and ask me what they can do to become what they refer to as 'project managers' or 'team leads leading their own teams'.

Project Management or for that matter any form of management is about understanding people’s mind and I’m not sure what makes people believe I have all the answers when clearly I am as clueless as anyone else when it comes to understanding the human mind. It's not as simple taking a few lines of code and looking at them really closely to analyze or debug them.   

 

I suspect it’s either my very-serious-sounding-designation or depending on the definition of success, a lot of successful projects and a few not so successful ones that I’ve been a part of that makes people think that I might have a clue.

To be honest however, here’s the secret: I don’t have a freaking clue about how the human mind works. Yes, I spend countless hours reader about this stuff and putting some of the principals and theories into practice but the reality of life is that I have very few answers. 

I’ve attempted to answer how young and budding engineers can start leading their own teams by not being a leader but the ‘what-can-I-do-to-become-a-project-manager’ remains largely unanswered.

There are actually two answers to the question depending on how you phrase the question. If the question is ‘what-can-I-do-to-become-a-project-manager’ the answer is simple:

Join an organization where you can butter your way up the corporate ladder and turn yourself into a budding politician.

On the other hand if the question is ‘what-can-I-do-to-become-a-good-project-manager’ that's a completely different ball-game.

My personal experience is that anyone who asks the ‘what-can-I-do-to-become-a-project-manager’ question hardly ever asks the ‘what-can-I-do-to-become-a-good-project-manager’ question.

Yes, they manage to drive their way through their company politics and become leads and project managers but they never quite get good at it. During my career I've also noticed one common problem with this crowd of desperately-want-to-become-project-managers who want to rise above code and climb the golden ladder of 'management' and leadership.

The problem: They start doing too much to make their project successful as soon as they becomes what can be technically called a ‘manager’.

Give any of these guys a small project to manage and before you know it, they will start:

  1. Making Gantt Chats and Project Plans.
  2. Writing up a communication plan.
  3. Following Up on Programmers to find out what the status is.
  4. Sending Status Reports depicting progress in percentages.
  5. Having a huge number of meetings every day.
  6. Sucking up on their bosses.
  7. Writing a lot of documents and making others write a lot of documents.
  8. Going out of their way to slow down their team and make their life miserable by decreasing the general 'happiness factor' within the team.
  9. Writing And Maintaining To-Do Lists for not just themselves but everyone else in the team.
  10. Doing a whole lot of additional crap to pamper their own egos and justify their own existence.

If there’s anything I’ve personally learnt by being a part of a few successful failures and a lot of other successful projects it is that if there’s any list that you possibly need as a manager, it is not a To-Do List.

What you need is in-fact, is something that can be described as a “Not To-Do List”.

There you go; If you are a budding young manager, I just gave you a little trade secret. Seriously. You need a big fat list of things which you will 'not' do as a manager; If you are serious about this becoming-a-good-project-manager thing, start writing one; right now.

Here’s how you write a Not To-Do-List:

  1. You take A Piece of Paper and something that you can write with like a pen or a pencil.
    (Or your could just open up a new blank Text File using Notepad)
  2. You write down every single thing that you promise yourself you will try your best to “not do” as a manager.
  3. You maintain the list religiously and stick to it as you move forward.

The best way to add items to this list is to look back on your days as a Junior engineer and try and recollect as many things you can about your managers back then that you hated. Other than that you can also watch every single thing you screw-up and every single screw-up that happens around you very closely.

Dissect each of these failures in your head and analyze them. Take every failed project and endeavor in your organization and analyze those, just like people listen to the black box after a plane crash. A wise man I worked with once told me that every failure is different. It has a story and that there’s usually something new to be learnt from each one of them. If you keep your eyes open you’ll realize that all projects failing can be broadly classified into two categories:

  1. Incompetency of team members – which is why I’ve always said that it’s kick ass programmers who build projects; not Gantt charts.
  2. A prick in the project team – if you investigate further, most investigations will reveal that this prick is often whom we glamorously proclaim and refer to as the Leader or The Project Manager.

This brings us to the soul of this post.

It's actually been a rather wordy post; and we're barely starting to touch the point I'm trying to make. If you've read so far, I saute you. If you haven't; all I’ve done with all these words is propose two simple ideas:

  1. If you’re a manager you need a “not to-do list” which you list out things which you should not do as a manager.
  2. Not Being a Prick is something that should top the list.

Not being a prick is so important; Michael Lopp uses the idea as an awesome starting point for his book Managing Humans. The book begins by describing how a single prick can destroy not just a project but an entire organization:

Flash back to the middle of the dot-com implosion. We, the merry crew of the failing startup, are drinking... a lot. There are various bars around corporate headquarters, and each has a distinct purpose. There’s the dive bar that’s great for post-layoff parties. The booze is cheap, and if you’re looking to blow off some I’m-really-not-worthless steam, you can pick a fight with the toothless sailor slung over the bar or the guy who just laid you off.

Down the street is the English pub. The beer is better, they have a selection of whiskey, and they have edible food. This is where we get philosophical about the current organizational seizure we’re experiencing in our three-year slide toward irrelevancy.

We’re there now. We’re drinking heavily because the company has just been sold to a no-name public company who will quickly dismantle the one for which we’ve bled. Everyone knew we’d be here at some point, but no one expected to be the last one standing. And no one expected the CEO to show up.

This isn’t the CEO that built the company. He’s been gone for over a year. This is the guy the board of directors brought in to sell the startup. Sure, he tried to turn us around, but remember, we’re in the middle of a financial nuclear winter here. Money is no longer free.

Those who got a glimpse of the CEO’s resume before he arrived knew the gig was up. His last four jobs ended in the company being finely sliced into nothingness. It’s called “maximizing shareholder value.”

And here we are. Hammered on tequila, the last four from engineering, two guys from tech support... and the CEO. Even though we’re dizzy with booze, we’re fundamentally uncomfortable with the presence of our CEO because we consider him to be an unfeeling prick.

And that’s it.

That’s the title of my management book.

Don’t Be a Prick.

Steve Yegge in his post on (Not) Managing Software Developers describes the one simple quality that differentiates a great manager from one that sucks:

However, I'll offer you one almost magical tip that can help you smooth over nearly any mistake, a tip that can get you through just about any bad situation. I'll tell you the tip right now, with no fanfare or ado. This hint is the most important one I'll offer you today. It's the secret ingredient to Great Manager Sauce. Unfortunately, it's not easy to learn. You either already understand it, down in your bones, or you have years of head-scratching ahead of you. The tip is just one word: Empathy.

If you have true empathy for your engineers, they can forgive almost anything. Which is good, because you will make mistakes. We all do.

Recently an individual who is also a colleague and a close friend approached me informing me that he wanted to be a Manager because he was sick of coding and he thought it was time to grow professionally and stop being what he referred to as just-another-developer. He was thinking of moving over to project management and was thinking of becoming what he referred to as a project manager. My instant spontaneous reaction, in jest of course, had been that he'll never become a project manager. Even though it was a joke, It sounded like a really mean thing to say after I had said it; I wasn't politely articulate in explaining what I meant. Steve's post on the other hand, does a pretty good job at describing exactly what I meant:

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. Do you want to manage because you want authority? If so, it's a trap: you'll still be on a leash held by the folks above you.

Or maybe you just want to be a little higher in the pecking order, so you can peck downhill? If so, then you're what we call, colloquially speaking, a "pecker".

Think hard about why you want to be a manager.

If you haven’t clicked on the link to Steve’s post, click on it and read it word by word. I don’t care how long it is, do yourself a favor and read it. I'll post a link again so that you don't have to hurt your eyeballs looking for it - here you go - go ahead, click the link and read it. It's a great read. Honest.

Yes, after have worked your ass off to get promoted papering your ego feels like a natural thing to do now. In fact, chances are, that you may have already started or will soon start taking your first steps on the path of Prickdom but here’s my advice: Turn back; now; before it’s too late and the Prickdom gets embedded in your personality.

Resisting the temptation and disassociating yourself from it is what sets a veteran project manager apart from a want-to-be-never-going-to-be manager.

Of course, if you’re a manager, chances are that you’re making mistakes all the time. You’re probably making more mistakes than you can possibly think.  Really stupid ones. Your only glimmer of hope is that your team forgives your stupid mistakes and moves forward with you. Being a prick that they hate, doesn’t really help them in getting over every stupid mistake you have made in the past and moving ahead; with you. 

Going Forward, I’ll be posting more items for the Manager’s Not-To-Do List but Not Being a Prick is so important that it undoubtedly tops the list. In all probabilities it is also the most violated rule of project management.

Let's do a little exercise, shall we? List down all your bosses on a whiteboard or a piece of paper. Now stand back and take a long hard look and tell me; how many of them have acted like a prick during one or more occasions with you where if you had the power to fire them, the thought would have at-least cross your mind. Quite a few of them; right? Life sucks, doesn't it? But wait; there's hope.

Now look back at the names and realize how many of them have rarely done it and how many of them do it all the time.

The really good ones are the ones who realize they are being pricks, stop it, turn around and apologize. Very few, right? And chances are these are the ones you really respect. The kind you can hardly hear bad things about in a discussion with your co-workers and colleagues. For everyone else, you'll probably join in and take a kick out of the discussion.

The honest reality of life is that you'll find more managers with Prickdom infused in their personalities than you'll find managers who very rarely act like pricks. It goes without saying of-course that it would be really hard to find managers who never act like a prick.

That’s it my young-budding-baby-project-managers; that’s all I’ve got for you today. It’s been a rather wordy post but all I’m saying is that if you’re Managing Projects and working with (not managing) people, you need:

A Manager’s Not-To-Do List where Item one reads: Don’t Be a Prick.

If you still don’t get it, you’ll never be a manager; at-least not a good one; and not till the time you get a couple of tight symbolic slap on your face that makes you realize what we're talking about here. If you don't get it even when that happens, take the hint and stick to being a Know-Nothing Technical Director, an Arrogant Programmer, an Egoistic Business Analyst, a Bitchy QA Lead or whatever-it-is-you-are-good-at-being and spare us having to deal with another Pompous Manager who is basically a Prick.

On the other hand if you learn this lesson (even if you do it the hard way, by taking a few punches), try your best not to be a prick, and have first Not-To-do item in your manager's Not-To-Do list, implanted deep down in your head, your team will teach you everything else you ever need to know as you proceed, fail, stumble and make some really stupid mistakes while you lead them collectively through a highly successful projects or a highly successful organization. They'll stand by you through the thick and thin; as long as they know for sure that you're an not arrogant prick.

Start a Not-To-Do-List where the first item reads; Don't be a Prick. If this is one lesson you can learn like your life as a manager depends on it You’ll do good Mr. Manager; I wish you good luck.

posted on Monday, October 20, 2008 8:41:13 PM UTC  #    Comments [0] Trackback
Posted on: Monday, October 13, 2008

When a very capable engineer and a great colleague, approached me in a project party and told me that I was turning into a meeting-man, I stopped and took a long hard look at myself. Even though he meant it as a harmless joke, it was really important for me to stop all meetings I was organizing and do some serious soul searching; instantly. From recruitment to project issues we were having too many random problems back then and every one of those seemed to warrant the need for a meeting. 

Even though that does sound like a convenient excuse to be organizing and attending a lot of meetings, the fact remains that attending and conducting too many meetings can turn you into 'the meeting man' who chatters away as others catch their zzzzz's during a meeting.

 

The folks at 37Signals have an interesting take on Meetings and refer to them as things which are toxic to productivity:

Do you really need a meeting? Meetings usually arise when a concept isn't clear enough. Instead of resorting to a meeting, try to simplify the concept so you can discuss it quickly via email or IM or Campfire. The goal is to avoid meetings. Every minute you avoid spending in a meeting is a minute you can get real work done instead.

There's nothing more toxic to productivity than a meeting. Here's a few reasons why:

  1. They break your work day into small, incoherent pieces that disrupt your natural workflow
  2. They're usually about words and abstract concepts, not real things (like a piece of code or some interface design)
  3. They usually convey an abysmally small amount of information per minute
  4. They often contain at least one moron that inevitably gets his turn to waste everyone's time with nonsense
  5. They drift off-subject easier than a Chicago cab in heavy snow
  6. They frequently have agendas so vague nobody is really sure what they are about
  7. They require thorough preparation that people rarely do anyway 

Whether you're responsible for recruitment, retention, company strategy or just running multiple projects and products; arranging, conducting and being a part of a lot of meetings and calls seems natural. After all, we as humans beings are social animals. We like to connect to and interact with others. But then, as you start conducting and attending more and more meetings something creepy happens: You Get Addicted.

The idea of being a part of something grand by comfortably sitting in a chair and talking sounds much more appealing than working your ass off while trying to solve real problems. Meetings tend to give you an illusion of being in control and everything working as per plan when in reality nothing is getting done.

Try to push yourself and focus on getting things done instead of attending countless meetings where plans of saving the world or your projects are discussed. If you are getting bogged down by meetings or are leaning towards organizing too many of them, you can start by taking really simple steps:

  1. Turn Meetings Into E-Mail Trails: If you're going to be discussing controversial topic like recruitment or company strategy don't get into a meeting. Start mail threads instead. Mail is asynchronous; it gives you time to think, formalize your thoughts and put then down in a coherent, written down stream of ideas. Mail threads prevent you from getting into arguments and un-necessary confrontation during meetings. Whenever possible, replace meetings with mail trails. Specially for topics which are controversial in nature.
  2. When given a choice, lean towards one on one discussions: At an organization level it definitely makes sense to have lots of meetings and involve as many people as possible but from a productivity perspective, everyone's business is no-one's business. When picking people who are invited in a meeting less is better. What can be solved by quick face-to-face one-on-one discussion with an individual should not be turned into a meeting containing two participants. 
  3. Pull The Plug: Irrespective of what the topic is, The Folks at 37 Signals have a rather innovative answer to the problem: 'Set a 30 minute timer. When it rings, meeting's over. Period'. I would go so far as suggesting that you have a running timer flashed on a screen so everyone is well aware of the fact that time is running out and when you do run out of the pre-decided duration, pull the plug and end the meeting.

Meetings are truly like heroin of Software Development World. The more you indulge in them, the more you get addicted; even when you clearly know that they are injurious to your professional health. Don't get addicted by meetings and if you already are, try to stop attending them, now. When you do, initial withdrawal symptoms are bound to appear and the fear of having to sit down on your desk, figuring out innovative ways of finding out the status, doing some real work in a concentrated fashion might sound daunting and harder than simply going out there and talking to people, but remember, sitting down and working with a focused thought process is the only way to get things done.

Get together for a quick five minute stand up discussion with your team if you must, but next time you attend a long formal meeting ask yourself if it's really necessary or are you, in the name of good communication, just indulging yourself in an addiction which does nothing other than make you feel good about yourself and give you an illusion of being a part of something important when in reality all you are doing is wasting everyone else's and your own precious time.

posted on Monday, October 13, 2008 7:29:26 PM UTC  #    Comments [0] Trackback
Posted on: Monday, September 22, 2008

This post is about a complex set of programming topics.

If you read the first sentence and deep down, behind the locked doors of your mind, liked the fact that you were going to do read something 'really important' this post is about you. Notice however, that I didn't mention the word 'important' in the first sentence. I just said I was going to talk about a few complex programming topics.

Complexity is deceptive.

We, as human beings in general and programmers in particular, tend to associate the word complex to words like important, accurate or correct almost implicitly when in reality complexity has no direct connection with these words.

Steve McConnell in his book Estimation: Demystifying the Black Art describes this human trait with the example of this effort calculation formula:

He explains why the human brain inherently tends to fall for things which sound complex:

Our natural tendency is to believe that complex formulas like this (the one above) will always produce more accurate results than simple formulas like this: Effort = Number Of Requirements * Average Effort Per Requirement

If you're at work, look around. Chances are that you'll easily find a colleague or a team working on a project which is a confused mesh of a Gazillion technologies all of which are collectively doing nothing but boosting up the ego of the programmers who work in that team.

I’ve talked to countless programmers, have witnessed multiple such projects and tried to figure out why we as developers keep making the same freaking mistakes, including the one of confusing complexity with correctness or accuracy.

As programmers, the inherent feeling of being involved in something ‘complex’ seems to give us a sense of pride and an ability to distinguish ourselves from the rest of the world which we seem to look down upon as ‘stupidly simple’. This is also probably why most consultants out there use unnecessarily complex Jargons.

Somewhere deep down inside, we believe complexity is good and we associate words like correctness or even accuracy to complexity.

Liking complexity seems to be an inherent part of human nature; which is probably why we like relationships in our personal life and complex processes in our professional life instead of focusing on the simple things in life and even simpler facts of software development.

We love complex; but only till the time we have had enough and things begin to get out of hands. It’s then that we start making desperate attempts to simplify things.

Besides our inherent love for it, complexity has another rather interesting feature. It happens.

It is in fact, to a large extent, this feature, that describes why we inherently love complexity.

Building something complex is easy. Building something simple, well, that requires a lot of hard work and is a whole new ball game; and that, I believe, is why we humans, lean towards complexity when it comes software and life.

Humor me and I'll do my best to prove my point. I promise.

Jeff Atwood sights an example of a complex piece of User Interface built by a software programmer:

How do you think the UI came about? I wasn’t exactly there peeping over the programmers shoulder but here’s my best guess on something like this comes about:

  1. Mr. Developer throws some controls on forms.
  2. Mr. Developer realizes that the application needs some more features.
  3. Mr. Developer throws some more controls on the forms.

It's easy. See? No Thought Process, No White boarding, No worries or thinking about usability. Simply put, something as complex as the user interface about 'just happens'.

Simplicity, on the other hand involves a lot of a lot hard work. Thinking, re-thinking and a lot of discipline.

The folks at Tortoise CVS and Tortoise SVN are a classic example of how much thought process goes into it before you can just right click a file and check-it-in.

 

During the Project of the month interview the folks at Tortoise CVS, Torsten and Francis describe their ongoing challenge of keeping it simple to use, through remarks like:

What are a couple of notable examples of how people are using your software?
There are some CEOs who use it to manage word documents and spreadsheets, something I don't think CVS had much use for before.

Why do you think your project has been so well received?
Francis: Because people like right-clicking. (Seriously!).
Torsten: Because users feel that they don't have to learn a new application - they just use their old trusty Explorer or Total Commander with a few extensions.

What's on your project wish list?
Torsten: Getting rid of even more preference settings

What are you most proud of?
Torsten: Each time I have resisted the temptation to add another preference setting, and instead made the code smarter.

How do you coordinate the project?
We have a pretty small core development team: Hartmut and myself (several other people also contribute, but not on a regular basis). I handle everything related to releases, as well as the documentation and web site stuff. Apart from those things, there is no strict division of responsibility - we both work on the new features we find cool, and we both handle bug reports etc. via the trackers and the mailing list.

Tortoise is a classic example of how you can take something complex like version control and simplify it. If you've used Tortoise to work with CVS or SVN, the hard work that has gone into simplicity clearly shows in the form on elegance of implementation; and WGetUI? Well, one look at that user interface and anyone with any fundamentals of how software development works can tell you that the WGetUI is a software that 'just happened'. It is an example of how you can take a simple problem like file-download and solve it without any thought on usability or user interface; letting the development 'happen' as things pretty much evolve by themselves.  

The next time you reach out and proudly announce to your friend, colleague, relatives, family or acquaintances that you’re working on a system that’s very complex, it’s time to do some soul searching. Maybe your so-called-highly-complex-system that you are working on is something that is 'just happening' without any effort on your part to keep it simple; and that, I’m not so sure, is something to feel particularly proud about.

posted on Monday, September 22, 2008 6:11:17 PM UTC  #    Comments [0] Trackback
Posted on: Tuesday, September 16, 2008

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  #    Comments [0] Trackback
Posted on: Monday, August 18, 2008

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  #    Comments [0] Trackback
Posted on: Monday, July 07, 2008

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 07, 2008 5:09:55 AM UTC  #    Comments [3] Trackback
Posted on: Tuesday, June 03, 2008

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 03, 2008 3:21:54 PM UTC  #    Comments [4] Trackback
Posted on: Tuesday, May 27, 2008

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  #    Comments [4] Trackback
Posted on: Monday, April 14, 2008

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  #    Comments [0] Trackback
Posted on: Monday, April 07, 2008

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 07, 2008 4:34:59 PM UTC  #    Comments [6] Trackback
Posted on: Monday, March 31, 2008

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  #    Comments [1] Trackback
Posted on: Monday, March 24, 2008

Venkat Subramaniam and Andy Hunt  in their book The Pragmatic Programmer make the devil and the angel play interesting roles by making them sit on the programmer's shoulder and letting them give him advice which the reader can choose to follow or ignore while working on real life projects.

As you would expect, almost invariably, the devil's advice represents the thinking of an immature, in-experienced programmer. Keep listening to the devil's advice and you can slowly lead your project into the state of uncontrolled chaos. Take this advice for instance:

On the other hand the Angel represents the thoughtful, self disciplined, matured and pragmatic developer, making your life a little difficult but your projects much more rewarding and successful:

 

Anyone who has been involved with even one single complex project and has got-it-done successfully, knows that software development is like fighting a war with multiple enemies (time, complexity, bad-communication and many others) hidden and attacking from multiple directions and fronts. Subtle chaos and confusion are a part of the game in our business.

So solider, you've worked hard for years; your god's have smiled on you and turned you into a one-man-army. You've developed a strong armor of thick skin and have carried with you, in your arsenal, weapons like simplicity, prioritization, quick iterations and the like. You have earned your client's trust and they walk with you as allies. You are proud of the small yet gallant army of warriors that walks with you and you are highly motivated to win your wars on as many fronts as possible.

But wait! You forgot to carry with you two very important members of your team. The Symbolic Angel and The Symbolic Devil from Venkat and Andy's book.

That's right. You heard me. You need them both. Let the angel lead you in the right direction but don't leave the devil behind. As you grow and mature, you learn to let your symbolic angel mingle and work with your symbolic devil. Growth is all about your angel learning and getting used to channeling your devil's ideas in the right direction.

The real trick is to empower your angel so strongly that she cannot be affected by the devil. At the same time, let her use the devil's obsessive compulsive advices for the good of your project.

 

I've had experiences of the Angel working on the Devil's advice and adding her own magical touch to produce some outstanding results.

Based on the devil's advice of bulldozing the entire project and starting fresh and the angel's magical touch on that advice, the Turkish proverb - “No matter how far you’ve gone down the wrong road you’ve gone, turn back.” was changed to “No Matter how far down the wrong road you’ve gone, find the shortest, safest and smartest way to the right road.” - you can see my symbolic angel and my symbolic devil working together and coming to this pragmatic middle path in one of my older posts.

Dave Winkler has his symbolic devil telling him that all software he builds is shitty and he might as well write some shitty code. But his angel tames his devil with practical pragmatic advice:

Software is a process, it's never finished, it's always evolving. That's its nature. We know our software sucks. But it's shipping! Next time we'll do better, but even then it will be shitty. The only software that's perfect is one you're dreaming about. Real software crashes, loses data, is hard to learn and hard to use. But it's a process. We'll make it less shitty. Just watch!

The Devil from Venkat's And Andy's book also advices:

This is by far the most lethal advice that can turn your project into a dirty political campaign and a direct quest for failure. However, with a little bit of magic which comes from the Angel's touch, we make this same advice work for our build management process.

At work when a build breaks, we find the culprit. Just to get the kick out of this whole thing, we quite literally call the exercise - 'finding the culprit'. Once the culprit is found, he gets an instant 'promotion' and becomes a 'build manager'. As a build manager he's supposed to fire three builds a day and baby-sit the build till someone else breaks it.

At one point we had jokes and bets going on who the next 'build manager' was going to be. We've also considered printing special balloons which have 'build manager' labeled on them so that we can stick them off the cubical of the current build manager.

We like to add a little bit of spice and fun to our build process and the devil's advice blended with the angel's magical touch does wonders! As funny as it may sound, every time we've introduced this technique, we have seen the number of build breaks go down tremendously.

Let there be pair programming between your symbolic angel and your symbolic devil. Let your devil get influenced by the good company of your angel.

Initially of course, your symbolic devil will hate it; but once tamed and under your angel's influence, he can end up giving you some pretty wacky and out of the box ideas!

To begin with you'll have to be really careful. If he does nothing else, as he begins to walk down with your troops, your devil will just act as a measure of what-not-to-do. As you continue to let him mingle with your angel and be influenced under her company, he will come up with ideas which can work wonders if they get your angel's blessing and magic touch.

Dear readers and fellow programmers, are you headed for your next big war with your army, your allies and your arsenal? Don't leave your symbolic angel and your symbolic devil behind. Your devil might be a big fat opinionated jerk but if tamed properly by your angel, you can still use him to your own advantage and kick some serious ass in your next big war.

posted on Monday, March 24, 2008 8:55:09 AM UTC  #    Comments [0] Trackback
Posted on: Monday, March 17, 2008

The folks at 37signals are not particularly worried about sounding opinionated when accused of taking a black and white view:

If our tone seems too know-it-all'ish, bear with us. We think it's better to present ideas in bold strokes than to be wishy-washy about it. If that comes off as cocky or arrogant, so be it. We'd rather be provocative than water everything down with "it depends..."

With BaseCamp they have indeed proved the rest of the conventional world wrong by presenting their ideas using rather bold strokes.

If RoR is often referred to as opinionated software, it's because it was meant to be that way:

Some people argue software should be agnostic. They say it's arrogant for developers to limit features or ignore feature requests. They say software should always be as flexible as possible.

We think that's bullshit. The best software has a vision. The best software takes sides. When someone uses software, they're not just looking for features, they're looking for an approach. They're looking for a vision. Decide what your vision is and run with it.

And remember, if they don't like your vision there are plenty of other visions out there for people. Don't go chasing people you'll never make happy.

The same tone also resonates in the ASP.NET MVC team and Scott Hanselman's post which talks about ASP.NET MVC framework:

This is a not just a different tune, but a whole different band playing all new music. Not everyone will like the music, and that's why the world has more than one band. This is a Good Thing.

Clearly, this team is not trying to please everyone with the same stereotype music. They're targeting a specific audience that cares about writing quality code, taking pragmatic decisions and keeping things simple.

When you think of opinionated bloggers, Rory and Steve Yegge come to mind. Both of these guys are loud, direct and completely arrogant. Which by the way, is exactly what I love about their blogs.

Rory's site for example has a footer which reads - "I *own* this site, you loser" and Steve Yegge criticizes all development processes including agile when the rest of the world is going gaga over these methodologies.

Opinionated individuals causing serious damage and making big (or even small) dents in the universe are much more interesting than the usual flock of sheep grazing harmlessly in the fields primarily because these opinionated trouble makers tend to stand out and shine amongst the flock of sheep.

Contrary to the traditional belief, being opinionated and having that reflect on your life, your software or your blog is not a bad thing. In fact your opinions are what set you apart and help you stand out from the crowd.

Throughout my career I've worked with numerous junior engineers and a lot of programmers fresh out of college. Of them the ones that have stood out the most are not the ones who have the highest rank. The ones who usually stand out the most, invariably seem to have at-least two particularly common characteristics:

  1. They have an opinion.
  2. They are unafraid to express it.

My lamest work experiences have been with folks who tended to agree with everything I had to say, offered no arguments what-so-ever and then chickened out when it came to execution of ideas. Having said that for the most part I've been plain and outright lucky to have worked with folks who I can 'agree to disagree' with.

If I tend to insist that young and budding programmers develop their own opinions, it's purely because I have my own shellfish interest in pushing young and budding developers on the path of thick skinned shamelessness and turning them to the idea of having their own opinions and expressing them fearlessly. Ravi Mohan in his blog post explains mistakes most people make by not associating themselves with opinionated folks. He uses words which are much more articulate than mine:

Many people make the mistake of surrounding themselves with people who think exactly like them and reinforce every idea or prejudice they have. This is a bad mistake and will often end up distorting the reality you see. One needs the corrective bucket of cold water in one's face once every so often.

The only problem with surrounding yourself with bright people who think differently is that you may occasionally find that one of your ideas isn't as hot as you think it was or that one of your deeply held convictions is just plain wrong. This is difficult for some people because they make the rightness of their ideas a validation of their worth as persons. 

When given the choice of picking between a flock of sheep who agree with everything I say vs. picking opinionated troublemakers who think differently than I do and are willing to discuss, brainstorm and argue, I would pick the opinionated troublemakers any day.

When following people, I would rather follow folks who have their opinions and are willing to discuss, brainstorm and argue with me when my opinions are different than theirs, over folks who expect me to follow orders blindly.

Some of my favorite authors are opinionated. Even some of my favorite books are highly opinionated.

If you think having opinions and expressing them loudly and boldly is a bad thing, the green pastures are waiting for you. Happy grazing.

If you have strong opinions on programming, programming languages, design, user interface, how software aught to be built, or anything to do with programming or the craft of building software, and are unashamed to express them; you've already joined an elite group. Congratulations!

On the other hand, If you have opinions but haven't started expressing your opinions loudly and boldly, may I suggest that you start now! Having your own opinions and expressing them isn't easy; but the effort is worth it. It's better than joining the flock of sheep grazing harmlessly on the safe green pastures day after day.

posted on Monday, March 17, 2008 12:43:29 PM UTC  #    Comments [1] Trackback
Posted on: Wednesday, February 27, 2008

Ben Hunt has written an Excellent book on Web Designing; but when it comes to his own blog / web-site, Ben is guilty of breaking rule number three of Thirteen Blog Clichés . Jeff Atwood describes:

When I find well-written articles on blogs that I want to cite, I take great pains to get the author's name right in my citation. If you've written something worth reading on the Internet, you've joined a rare club indeed, and you deserve proper attribution. It's the least I can do.

That's assuming I can find your name.

Go ahead click the link to the online version of Ben's book which is a freely available on his web-site. There are ads of other books that Ben has written on the page but when you try to find the author's name for the book that you are reading - zip! nothing!

I landed on this page through a Google Search Query and while reading the Web 2.0 design guide I had a hard time finding out that Ben was actually the author of this excellent book which imparts words of wisdom to web developers and web designers around the world on how to build effective web designs.

It was only when I navigated back to the primary domain (web-design-for-scratch) that I found out that Ben owned the entire site and that the book belonged to him.  Ben Hunt, in spite of being an amazing web designer, a great writer and a web guru, is guilty of making me think and that, according to Steve Krug, is an offence. Take that, Ben! :)

Jokes apart, for me Ben's book is as good as Don't-Make-Me-Think when it comes to building web-sites; and what' makes this book even better is that it's available online for free.

You there. You, yes you. If you're a web designer or a web developer building web applications you need to stop whatever it is that you're doing and read this book. Now! No, I don't care if you are busy; I don't care if have a lot of work to do; I don't care how many other usability and web design books you've read; go tell your boss you won't be doing anything for the next one day and read this book word by word.

Seriously,  Read the book; chances are, you'll probably take home more than one idea on web design that you always believed in but couldn't quite pin down.

The book highlights a lot of concepts on Web Designing but to me the concept that stands out the most can be summed up in one word:

Simplicity.

Just like simplicity in coding, building features, design and development, simplicity in web design also has it's own ability to stand out and distinguish itself from the crowd; in an elegant subtle way. When choosing between attractive-and-complex vs. simple-and-elegant I would prefer simplicity blended with elegance any day. After all, Simplicity Rocks!

"That's a great design! You've really proved that you're great at Photoshop and other designing tools. Now dump it and start fresh." - I often see myself giving this advice to web developers and graphic specialists around the world. Specially the ones who tend to use a lot of jazzy bells and whistles, beautiful smiling faces and rich color combinations in their web applications.

Don't get me wrong. I have nothing against a lot of jazzy bells and whistles, rich graphics and beautiful smiling faces on a web-sites. If your application, web-site or the point you're trying to convey to the world / your customers / your visitors demands that, by all means, go ahead and use all of these. If not, I don't see the point of having an elegant design that's much more attractive than the point you are trying to get across.

In Ben's word:

Whatever you're saying, choose wisely where you use your ink/pixels. Use it to communicate, first and foremost. Then, ask whether you can communicate just as effectively with less. If so, do it.

Here are some web-sites that I've often cited as examples:

 

None of them are rich when you consider them from a graphics perspective. Ever wondered why? Is it because these organizations cannot afford a couple of kick-ass web designers who know how to get a lot of jazzy images and bevels done?

Ben's book uses words from Antoine de Saint-Exupéry, the classic author who wrote soul stirring books like The Little Prince, to illustrate the point:

"It seems that perfection is reached not when there is nothing left to add, but when there is nothing left to take away." - Antoine de Saint-Exupéry, Terre des hommes, 1939.

I think these words sum up exactly what I mean by "You've really proved that you're great at Photoshop and other designing tools. Now dump it and start fresh." much more articulately than I could have ever said it.

Early on in my career, on my way to office each day, I would pass a bill-board sign of a cellular service provider. The billboard hoarding had a very wise slogan - 'you don't always have to be loud to be heard' - as strange as it may seem the board had a lot of impact on my life.

With web site design, I think the most effective sites are the ones where the designers are not trying to 'prove' anything to anyone or becoming loud to be  heard. The most effective web-sites today, are sites where the web designers are making bigger points and conveying bigger and better ideas with lesser pixels - using a calm, subtle, non-intimidating and helping tone.

Dear readers, fellow Web Developers and Designers, for today I leave you with one thought to harp on and one assignment to execute.

Thought: Software is composed of technology, underlying platforms and above all end users and how they perceive and experience the application. If your User Interface doesn't gel with the world and ecosystem around it, it's useless.

If your user interface doesn't get to the heart of the problem you're trying to solve with your application or convey the point you're trying to make with your web-site, by showing up blazing fast and then guiding the user with a simple non-intimidating and simplistic tone, particularly without overwhelming or distracting them, you may have come up with a really beautiful design and proved that you're an expert when it comes to Photoshop, Illustrator and tons of other design tools but in the end it doesn't matter!

If your excess pixels end up taking too much time to load or end up innocently confusing your users by pulling their attraction on just the bells and whistles instead of the core functionality, you have missed the whole point and failed completely!

Yes, you have a beautiful User Interface, but is that really the point? Is that the only thing defining your success as a web developer or web designer?

As for the assignment, go read the really invaluable and free advice on making your Web User Interfaces better directly from the expert's mouth. Quick! :)

posted on Wednesday, February 27, 2008 5:10:44 PM UTC  #    Comments [2] Trackback
Posted on: Tuesday, January 15, 2008

A couple of years ago Amazon Announced Job Descriptions for their Two-Pizza-Teams. Amazon had figured out a simple rule for staffing their teams which limited the task force at Amazon to five-to-seven-people-per-team, depending on their appetites and turned Amazon into a very healthy company. The rule for staffing a team at amazon was simple - "If you can't feed a team with two pizzas, it's too large."

This is one simple rule tons of so-called-huge software development body shops around the world and the so-called-managers who work for these body shops just don’t get it, even today, almost two years after Amazon proved to the world that it works.

I recently interviewed a manager who worked in a huge Indian body shop who claimed during the interview that he had - "managed a project with fifty resources" - directly reporting to him on a day to day basis. Apparently, it seemed like he had managed many other similar projects in the past and as usual was having a hard time taking this thing to production. He specialized in what I call - going round and round the infinite loop of failure - which is why he was looking for a change.

On the other hand, at work, we had a project with many similar and additional complexities which was blossoming it's way to success and was being run by a self managing team of five to seven really smart individuals.

So, why is it that when a team of fifty bodies in a body shop was struggling at a project and failing pathetically, one or two small teams of three to five programmers were executing much bigger and complex projects flawlessly?

For a shorter answer - smaller self-managing teams of shameless developers and one man armies are much better and much more efficient than huge teams of mediocre bodies who are purely interested winning a war against the client and not shipping genuine value.

I’m not an authority in the craft of building software, but, just for the sake of saving your time, based on my past projects, experience and lessons, you can take my word for it. On the other hand, If you have time to kill, and seek a more logical answer based on data and would rather not just take my word on this one, read on.

Years after Frederick Brooks broke out the fact that adding manpower to a late software project makes it later in Mythical Man-Month, huge body shops, and so-called-managers around the world found another silver bullet.

Add More Manpower to a Project right from the very start! (Especially if you have an outsourcing body shop in India and thousands of relatively cheap developers sitting on the bench.)

This rule is perfect. In-genius! But it has just one problem – it does not work.

Nine women getting together cannot speed up the process of creating a baby. Whether they are involved from the very start or towards the end does not matter.

Doug Putnam does an excellent objective analysis on how teams work and which teams sizes work best in most medium scale project development scenarios. His Research (graphs borrowed from his web-site) seems to suggest that smaller teams are better:

After presenting his analysis on over 491 projects Doug sums up his finding:

The goal of our research was to find optimum team size for building medium sized information systems. From the 491 projects that were analyzed we would conclude that a 3-7 person team has the best performance (3-5 would be the best, but 5-7 people is a very close second).

He concludes with words of wisdom which almost sound like a warning to the careful listener:

Next time you are planning a project think hard about the optimum staffing levels because it can clearly have a significant impact on the overall results. This study gives you some insights into an application and size domain where many systems are being built today.

While concluding the article he also goes ahead to describe why smaller teams work better. Go ahead, click the link and give the article the read that it definitely deserves.

Now pause a while dear reader and think about the virtues of divide and conquer. While Dough talks about 3 to 7 person teams for medium sized projects ask yourself if you can break up your bigger projects into smaller sub-projects. If you think hard enough, much like Google and Amazon does, inevitably the answer would be yes.

Every now and then I meet budding managers who take pride in mentioning the number of people who report to them. Every now and then I meet budding developers who take pride in mentioning how big the team size of their current project is. It seems mostly cultural. So if you are working with a group of fifty other developers you must be building something seriously important, right?

Wrong. Based on my own personal experience, with fifty plus bodies of mediocre developers,  you could in fact be building a perfect piece of crap that may never see the light of production or is not even fundamentally usable.  

If you are a budding developer take pride in what you and your team innovates and ships not in how many bodies your current project team consists of or how many documents you or these bodies are writing. If you are a budding manager / team lead take pride in working with a small group of smart individuals who can maneuver, communicate and innovate rather than large multitudes of clueless programmers who can't program.

Growth is inevitable, specially if you are successful. Besides growing your team in numbers, grow them in ability to work smarter. Make sure you are growing with the right people who are capable of shipping by breaking the infinite loop of failure rather than going round and round in it.

Divide your projects into sub-projects and your team into individual self sustaining teams who can run those sub-projects without any hand-holding. Remember, every class library or DLL in your project can be a individual project by itself, led by a small self sustaining team if needed. 

A fifty or hundred developers reporting directly to you is something to worry about, not something to be proud of! What are you waiting for? Go get two pizzas and if you can’t feed everyone who works directly with you, on those two pizzas, maybe it’s time to divide your teams and conquer your projects!

posted on Tuesday, January 15, 2008 3:50:19 PM UTC  #    Comments [1] Trackback
Posted on: Friday, December 28, 2007

We all love progress bars. Whether it involves copying a simple file, attaching something to a web based email or installing something on our machines - as human beings we like the idea of being in control. We like to be informed about:

  1. How much of the work is done.
  2. Home much of the work remains.
  3. How much more time will it take to get remaining job done.

All we expect from progress bars is simple, definitive, true and honest answers to the above three questions. That is all we want from them. No More.

And at the first glance progress bars seem to suggest that they will in fact live up to our expectations. I mean, look at the one below. Doesn’t it say out loud that it is in fact, going to keep you informed about the answers to all of the above three questions?

 

Now go on, start another file copy process, then another. Then open up your Outlook and a couple of Microsoft Word instances and watch this progress bar get utterly confused.

Steve Teixeira in his post, describes how, in the web world now a days, true and honest progress bars are difficult to find. In fact he believes that progress bars have ended up being nothing more than a lie that we all accept. He explains the basic fundamental issue with progress bars back from the Windows 95 days using an application installer as an example:

I remember my first exposure to this temporal dissonance while installing some software on Windows 95. The user interface provided a few vague textual messages about what was happening as the progress bar ranged from about 0 to about 90%. This took about 10% of the install's total time. During the remaining 90% of the total install time, as the progress bar inched its way the last 10% to completion, the installer provided textual messages with ridiculous detail on what it was doing. It's almost as if the point of the UI widget was to annoy rather than inform. Alas, this form of progress bar remains the most common species found in the wild today.

Ever been through this frustrating experience where you saw the progress bar move up to 90% and then just sit there, mocking the trust that you placed in its ability to report the accurate status of the task back to you?

But the progress bar, by no means, is dishonest.

The simple fact of life is, things changed after it started. Things changed after the progress bar told you that it was 60% done. It needs more time to get the job done and the 1-to-100% window of reporting-the-progress does not allow the progress bar to break one simple fact to you - that it needs more time. Basically, the progress bar feels intimidated to report 180% of 100% work done, so it just sits there at 90%, slogging away.

Now, dear reader, take a pause and think. Have you ever been in a project where you were “almost” done in the first month and took another two months to be “done-done”? If you think about it, you were in fact the progress bar, weren’t you?

Have you ever heard the 90% done status from a team members and then seen them slog away at the remaining 10% for a long time? If you were leading the project, chances are you limited your team in a 1-to-100% window of reporting which did not allow him to break one simple fact to you - that things have changed since they started and they need more time.

While working with projects remember the Famous Quote from Tom Cargill:

The first 90 percent of the code accounts for the first 90 percent of the development time. The remaining 10 percent of the code accounts for the other 90 percent of development time.

Long story short, it's easy to be 90% done. Difficult to be done-done. As attractive as progress-bar-approach of reporting may sound, expecting the task status to be reported in a windows of 1-to-100% just does not work. Here is why - If you are a project Manager running around the office with a Gant-chart in your hand asking your developers what’s the percentage of their task that is done chances are your project will be successful till it’s 90% done. And then, it'll fail pathetically.

Johanna Rothman in her article provides advice on doing away with the 90%-done-game while reporting your project status. Go ahead, click the link and read the article. It is a good read indeed.

If I try to summarize what Johanna is suggesting in my words, it basically seems to boil down to really fundamental principles of Agile or for that matter, common sense:

  1. Divide and Conquer - Break down your tasks into something you can do in a day-or-two. Something she calls Inch-Pebbles.
  2. Track and Report Your Low Level Tasks In Boolean – It’s either done or not done. And done does not mean just done, it means Meets-The- Definition-Of-Done done.
  3. Introduce Transparency – Allow your team members to become a little more shameless than a progress bar and talk about problems if they are not being able to get the feature done rather than just asking them the percentage of the job done and then hoping problems will fix themselves. If the problems are genuine and cannot be solved in the time-boxed sprints, prioritize and drop features.

Years after the progress bar was born, a lot of programmers figured out that it’s really difficult to answer the three questions progress bars attempt to answer correctly and honestly. The indeterminate progress bar was born. Today, even the smartest of developers around the world, can't give you a percentage-complete for everything and it sure does look like they are not ashamed to admit it: 

 

So why are you?

On a serious note, Trying to report individual task progress in percentage done and expecting the team to provide you with "percentage complete" numbers in a bi-weekly / monthly status meeting, is an obsolete project management technique that never worked even when it wasn't obsolete. If you have divided your tasks well, everyone knows where your project stands and most of the times your tasks, sub-tasks, inch-pebbles or whatever you choose to call them, are either done or not done. 90% done is as good as not done.

Next time you report your tasks, instead of percentage, try using boolean for task statuses. Get together as a team everyday and take an inventory of how many tasks / sub-tasks / inch-pebbles are done. Try prioritizing and respecting the iron triangle by dropping features if necessary. Chances are you’ll fail early and you'll fail often but in the end, if you keep reporting your tasks in boolean you’ll reach the hundred percent mark, successfully.

So dear reader, what are you working on today? Are you going to be done soon? Or just 90% done?

posted on Friday, December 28, 2007 7:27:52 AM UTC  #    Comments [2] Trackback
Posted on: Thursday, December 20, 2007

Tess’s Blog Title provides profoundly important advice to every developer - “If broken it is, fix it you should” – Words of wisdom, which are much more important than they would sound the first time you hear them.

A young an enterprising engineer recently looked at one of our code base and asked me why we use interfaces and abstract classes so extensively when we could have coded using code-behinds in ASPX pages.

Another engineer I worked with in the past often wondered why I sent out long and loud emails to team members when I discovered they were using band-aids to mend their code and were moving on to new functionality without fixing small problems and issues resulting out of their using these band-aids.

Another young college graduate fresh out of college, who I worked with in the past also, believed that I often strive for – “perfection for the sake of perfection” – and questioned why I push developers to use Re-sharper, CodeRush or other similar tools.

The answer to all of these questions and why I strongly insist on every developer developing a certain sense of responsibility towards writing clean, small, cohesive and maintainable code can be summed up in two words – “Broken Windows”.

 

 

The Broken Windows theory has been rather old but I continue to be amazed at how much influence it has, on both – software development and our lives in general.

For the last couple of weeks, during my stay in a hotel suite in San Francisco, I was working working a client during the day time and a small but very smart team back at work during the late evenings. A lot of work was leaving me way too tired to cook and I had primarily moved to frozen food, vegan broccoli hot-pockets, chips and snacks – all of which came in plastic packets.

The first time I used the frozen food I left the empty plastic packet on the cooking shelf because I was way too tired to thrash it. The next day, I was tired again and history repeated itself. Soon packets started piling up on my kitchen shelf. The housekeeper stopped cleaning the kitchen and in a matter of less than a couple of weeks plastic packets started showing up in my entire suite making it look like a thrash-room. This in turn started making me feel very depressed every time I returned to the suite from work.

What I had experienced first-hand, in my very own life, was a classic example of the Broken Windows Theory in action.

As someone who has read about this theory many-a-times and has tried his best  to keep this theory from becoming a reality in his projects, I keep getting amazed at how the broken windows theory does in fact, starts affecting us, both in our projects and our lives, every time we leave just one little broken window unfixed.

Broken Windows can destroy lives and projects faster than most people think they can.

Andrew Hunt describes the Broken Windows Theory and why it is dangerous to live with Broken Windows in his book the pragmatic programmer and his online interview. He describes the basic theory much more articulately than the little hotel suite example from the recent past I described above. He explains:

Researchers studying urban decay wanted to find out why some neighborhoods escape the ravages of the inner city, and others right next door - with the same demographics and economic makeup - would become a hell hole where the cops were scared to go in. They wanted to figure out what made the difference.

The researchers did a test. They took a nice car, like a Jaguar, and parked it in the South Bronx in New York. They retreated back to a duck blind, and watched to see what would happen. They left the car parked there for something like four days, and nothing happened. It wasn't touched. So they went up and broke a little window on the side, and went back to the blind. In something like four hours, the car was turned upside down, torched, and stripped - the whole works.

Hunt in the same interview gives another example:

They did more studies and developed a "Broken Window Theory." A window gets broken at an apartment building, but no one fixes it. It's left broken. Then something else gets broken. Maybe it's an accident, maybe not, but it isn't fixed either. Graffiti starts to appear. More and more damage accumulates. Very quickly you get an exponential ramp. The whole building decays. Tenants move out. Crime moves in. And you've lost the game. It's all over.

Jeff Atwood in his post on this topic brings out a new perspective. He believes that it’s all about perception. He explains:

Programming is insanely detail oriented, and perhaps this is why: if you're not on top of the details, the perception is that things are out of control, and it's only a matter of time before your project spins out of control. Maybe we should be sweating the small stuff.

As developers we all make compromises for the sake of shipping. It's also a hard fact of life that after all, we all make shitty software with bugs.

But here is what differentiates the veterans who have seen the light or have mastered the art of shipping, from the programmers who can’t program.

  1. The Veterans know that they have written shitty software when they have and they are unashamed to admit it.
  2. The Veterans know when and how the shit usually gets out of control and are very careful about fixing the broken windows as soon as they are broken, before things start getting out of control. 

Ever been a part of a project that you wished you were never a part of? Ever been a part of a project where you felt glad that the project ended and felt happy that you could run far away from it?

Look back. Chances are that it all started with one or two broken windows which no one bothered to fix.

Do you have broken windows in your current project? Fix your broken windows, before you yourself and others in your team, start getting a perception that your project is a dumping ground for bad code and start vandalizing your own project, subconsciously, innocently and unknowingly.

For today I tweak Tess’s blog title slightly and leave you dear reader, with a thought worth harping on, for your project and your life - “if broken your windows are, fix them you must”.

posted on Thursday, December 20, 2007 6:18:36 PM UTC  #    Comments [0] Trackback
Posted on: Thursday, November 29, 2007

One of my first projects as a young developer, who was taking his first steps into software development, was a RUP / CMM / Waterfall text-book example of how successful projects should be run using Big Design Up-front Methodologies. It completed on time, it was on budget and it was transitioned successfully.

We had every single scenario and flow of the system documented. Every single change that was not elaborated resulted in a change request for which the client either ended up paying us more money or giving up the idea of wanting the change.

If you were to consider it a war, we won.

This so-called-success was one the biggest failures in my life as a software developer. A failure that turned me into a Shameless Developer and taught me things I would never have learnt otherwise. Later on I was also called in to support the crap the entire team (me included) had written and the same project also ended up teaching me how to refactor code ruthlessly.

Folks who worked with me in the project wondered why I considered the project a pathetic failure when it was transitioned with a successful UAT and we had a grand lunch to celebrate the project success. Here’s why:

"They’re changing their Requirements!"

"It’s there in the Use-case! Why didn’t they read the use-cases during elaboration?"

"What do they mean it’s just a validation change? It requires quite a bit of code change. I think this is a Change Request!"

"What do they mean by it’s not Quality? All the test-cases have passed, haven’t they?"

"What do they mean it crashes sometimes? They're supposed to give us the detailed steps to reproduce a bug! If they can’t give us the steps to reproduce the bug, we should just go ahead and close it."

Any of these sound familiar?

During the time we worked on this project, dialogues like these were a part of our daily lives. I heard these from team members more than once every day. It was a war and we were in it to win it.

Occasionally we would also hear whispers from the client which went somewhat on the lines of – “Umm… I’m not sure if this feature adds a lot of value” or “I wonder if we can…” – but who cared? We were building as per the approved specification.

We had spent a few odd months writing use-cases, test-cases, module specifications, low level system specifications, system requirement document, functional specifications, technical specifications and tons of other documents a lethal combination of RUP and CMM would require you to write and now we were there to ensure that they either stick to those documents or pay the price if they bothered us with changes while we were busy developing.

We had been constantly firing “them” with pages and pages of these documents, constantly reminding them that we were very organized team of guys who worked according to a systematic process. Anyone watching us, would have guessed that we were building a plan for a bridge, a building or a rocket when all we were building was a shitty piece of software that would hardly ever get used by anyone.

After sleep-less nights, meetings and brute force programming using incompetent mediocre developers, we, the team, delivered the project. The delivery and the UAT was the final blow and we got it over with before the client could even realize what the hell happened.

Things like usability, user experience and the like were never documented. So when they would come up asking us to reduce the number of clicks, we showed them a functional specification document, told them it was a change request and asked for more money.

More often than not they chickened out, which was good because we could comfortably meet the time-line. If they paid more money and wanted the change-request done, we would ask for more time and that would still allow us to comfortably meet new dead-lines.

After a few months of rigorous fighting, the project was on time and successful.

The client was defeated.

And that, by the way, is precisely why I consider the project a pathetic failure.

When I completed that project, the feeling of being a part of a team that had failed at achieving their fundamental undocumented-goal of building a system which is usable, wasn't particularly amusing. The fact that no-one in the team had even realized how badly they had failed, made things even worse. I went ahead and made a commitment to myself that I was going to get better at building good software and providing true value to my clients project after project.

When I made the commitment to myself, I thought that this is the lesson every programmer out there, who has been in the business of building software for more than a few kilo-seconds, must have learnt this same lesson the hard way. After all they don’t seem to teach these things in programming schools.

Years later today, I've lost touch with everyone from that project team but even today, all over the world, I see countless developers with years of work experience behind them, fighting their wars against their clients and winning every single one of them, one after another. With one war over they move to another and then another. Defeating client after client, not caring or giving a dam about developing deeper roots or getting better at what they do or even attaining enough skills to be able to provide true value to their clients.

Take a trip some of the larger software consultancy body shops in India and look around. You’ll be able find complete battalions of guys who specialize in RUP / CMM / Waterfall documentation which can even confuse veteran developers leave aside unsuspecting clients.  Walk down the corridors of these shops and you'll see developers talking about - SRS, FTC, UTC, CRQ  and countless other abbreviated document names, but you'll hardly hear them having white board discussions on how the code or design can be improved.

Everything, ranging from the abbreviated document names, long winded processes, bulky documentation which has no respect for DRY, code and design done with contempt for KISS and Orthogonality, is focused towards one goal – defeating the client in a war.

A huge number of these guys have been trained into believing that Big Design Up-Front is the only way to build software and that if a company isn’t doing RUP or CMM, it probably doesn’t know how to build software and if a team does not cross the size of twenty people they are not really building a good software. Every once in a while I will interact with folks from these body-shops - folks with a mind-set who believe that If a guy talks about backlogs, daily scrums and weekly iterations through sprints and particularly getting the client involved in active feedback, he probably is an alien who is contaminated with the Agile virus.

No wonder more than seventy percent of the software that is built, fails. No wonder software professionals are the most hated group of professionals in the world after lawyers. :)

Almost instantly after my first so-called successful project, I turned into a thick-skinned developer who fails early and fails often and started working for organizations / clients / managers who, till date, thankfully, have allowed me to fail early. Failing early in projects all these years has allowed me to be a part of projects which both the client and I can consider – successful.

Every single project that I’ve worked on since then, has been a war against time, a war against badly written code, a war against huge complexities and a war against so many other things, but thankfully, not a war against the client. I sure do hope things continue that way for me, project after project.

This is not about how you build software or your development process. After all, we all build shitty software. This is about "working with your clients" and providing them value for money. If you want to come remotely close to winning the battle of building decently acceptable software, you may want to start by having the client on your side.

The next time you write a thirty page functional specification for the login screen, followed by a twenty page login test case and send it to the client asking them to review it in a couple of day, ask yourself if you’re really helping them. Would they rather by happy seeing wire-frames followed by a quick five minute recorded screen capture video where you run them through mockups and re-iterated their requirements? Can you spice up your functional specifications and tempt your clients into reading them? Maybe they appreciate slightly  better ways of capturing functional specifications - How about trying to convert you functional specifications to a wiki?  

The next time the client tells you they can’t send you the steps to reproduce that bug, maybe you might want to do a code review on that module and check out if there’s an erratic bug hiding somewhere.

The next time all your test-case documents come back executed successfully from the Quality Assurance but the client is still not happy, maybe you might want to increase the code coverage your QA teams are testing. You may even want to consider writing a few Unit Tests to test your code and growing the number of tests over time to increase coverage.

The next time the client asks for a tiny business logic change and you find yourself complaining that they should have said that before - maybe you could have done a better job at making it configurable rather than leaving it hard coded in there. Maybe you never cared about Orthogonality.

Ask yourself - Are you sending out builds frequently? Can your client run your builds? Are you seeking constant feedback? Are you iterating fast enough?  

Rather than spending hours in building support for law-suite in our processes and documentation we as developers would be much more loved and respected by our clients if we spent this same time building good software and making life simpler and better for them. Confusing the client with documents is easy. Simplifying their life and building software that adds genuine value is hard.  

In the war of building good software, you have enough to fight against. Don’t rage a war against your clients. Make them your allies.

posted on Thursday, November 29, 2007 7:57:37 PM UTC  #    Comments [0] Trackback
Posted on: Monday, June 25, 2007

Word has it that developers on the Mac team at one point were spending more than 90 hours a week on Mac development. In fact, Apple had T-shirts to commemorate the Team for their efforts:

Andy Hertzfeld describes the work culture at apple back in the days in First-Person:

Most of the Macintosh software team members were between twenty and thirty years old, and with few family obligations to distract us, we were used to working long hours. We were passionate about the project and willing to more or less subordinate the rest of our lives to it, at least for a while.

In multiple cities of this planet, in every office I’ve worked at, every once in a while, I come across one or two Nine-to-Five-Folks who are awesome individuals; they not bad programmers at all and this post is not about criticizing them. This post is about asking the million dollar question:

“Are 8 Hours a Day Enough?”

In a slightly old survey Dan Malachowski from Salary.com suggests that employees aren’t even spending 8 hours a day at work. In his article where he publishes the results of a survey, He explains:

Are workers really expected to work 8 hours per day, non-stop? According to a Salary.com follow-up survey of Human Resource managers, companies assume that employees will waste 0.94 hours per day. They take this into account when they do their compensation planning. However, those managers privately suspect that employees waste 1.6 hours per day. In fact, employees admit to wasting 2.09 hours per day.

As per the survey surfing the Internet for personal reasons is the top time wasting activity. “Don’t have enough work to do” is the top Time-Wasting excuse. It was sheer co-incidence that I always believed that this is the same excuse people use for wasting precious hours of their life when they are on bench. Anyway, I digress. So basically, Dan doesn’t believe that employees work 8 hours a day. They are in-fact doing multiple other things which cannot be classified as work.

On a serious note, the survey just makes me wonder if it makes sense to measure hours wasted in office by employees? Given the fact that engineers working remotely from home, at times even during insane hours, is a part of the culture in almost all software development shops.

John Wesley has a slightly different take on this. In my personal opinion, John is completely correct in claiming that the 9 to 5 office worker will become a thing of the past for the information worker. He explains why 9 to 5 is not such a good working model:

A continuous 8 hour work day is a relic of the past. It makes sense for physical labor and manufacturing work, but with information workers it doesn’t account for the mental energy cycle. The ability of a factory worker to think analytically is irrelevant, he’s either cranking widgets or he isn’t.

If you clicked on the link, John suggests that we do away with the 9 to 5 work culture with Information Workers. Instead, John is all about introducing agility into work schedules:

Everyone goes through alternating periods of high and low mental acuity. There are days when I work on personal projects for well over 8 hours, but the time is always divided into multiple sessions. I might spend a few hours coding a design, a few hours writing, and a few hours reading feeds, moderating comments, and responding to email.

I work this way because it aligns with my mental energy cycle. Any more than 3 hours in front of a computer and my eyes start hurting and I become restless. I lose the ability to do my best work. Instead of forcing myself to continue, I switch to an activity that allows my mind to recharge. These breaks maximize productivity by eliminating down periods. It’s counter productive to force work when the mental energy isn’t there.

The Mac team’s example, the survey on wasted time and John’s post might seem contradicting at first but give them some thought and they fall in line pretty well. In fact, add them up and they answer the million dollar question we set out to find an answer to. Take data and observations from all these three sources and some commonalities evolve:

  1. We as humans, are not very good at working 8 hours at a stretch on PCs. 
  2. We as humans, need a re-charge and motivation from time to time, in order to keep us hooked. 
  3. We as humans, often multi-task between multiple things! (Multi-tasking is bad for human beings, but it has its own Pluses. It has a “feel good factor” which gives us a high. This is why alt-tabbing in windows feels so much better than working in Tubro-C IDE of Ms-Dos! :))

Know these basic limitations and the next time you take a break between work, don’t feel guilty about it. Having said that, wasting time can be a highly productive activity which can benefit you, your organization and even your clients!

Some ways of productively wasting time and getting recharged include reading about a new technology you are passionate about and seeing how that fits in your current project, talking about code with your colleges, conducting a training, discussing your work related problems with fellow developers, having quick meetings to show off what you are doing or what you are excited about, writing a quick article on something new you learned, answering some questions in a forum etc. (the list can be endless!) - Pick your ways to waste time, depending on which “productive time wasting techniques” re-charge you the most! 

Software Development is like walking on a Treadmill. Stop and you are bound to fall – flat on your face. Keep running and you keep getting fitter and stronger. The fitness and the strength you acquire by running continuously helps you in running faster and harder. It’s a cycle! While it’s important to spend 8 hours a day working, find out productive ways to waste time so that you can put in more and keep your talents razor sharp. Keep running and make it interesting so that you don’t burn out! Who knows, it might give you the motivation and excitement to put in more than 8 hours of work a day.

Patricia Fripp gives a tip on how you can fall in love with your job all over again:

Make a list at the end of every day of what you learned, what was the most fun, who was the most fun to interact with, and how you feel you added to your group's success. A list of the 'beyond the paycheck' benefits. If you only work for the paycheck you will be employed, but not 'employable' long term.

Learn how to maintain personal and professional To-Do Lists for life. There is no better sense of achievement than striking off items from these lists!

Coming back to the million dollar question – Are 8 hours a day enough?

Eight hours a day might be good enough for a job but they may not be good enough for a profession. And they are absolutely no good for keeping a passion alive. If you can’t love what you do, maybe you need to stop right now.  Look harder for profession you can love. Seriously, if you are going to be an unknown-programmer who writes depressing programmer poetry - it’s best that you chase your dreams in a profession you love.

But chances are that if you are reading this, you already enjoy building software and you don't really need the advice on the above paragraph. Spend more time with what you enjoy doing and love it just like you love your lover! Go Ahead, hack your life so that you can spend more time with what you love doing without giving up on other personal commitments. 

To wrap things up, the next time you take a quick-break or engage in an activity for a while, which is technically a waste of time, don't feel guilty! And by the way, the next time you end up spending 16 hours a day with a computer, don't feel guilty either! :)

posted on Monday, June 25, 2007 2:25:19 PM UTC  #    Comments [4] Trackback
Posted on: Friday, May 11, 2007

So, you are a kickass programmer? You can write coherent code, tweak it to the last line for performance and spend hours refactoring it? Perfect! Btw, can you write well formed HTML? Or maybe a decently formatted Word Document with amazing content? Oh and yes, are you also good at a Drawing / Design tool?

Every few months I scan through countless resumes without a spell check or grammar check. With very little or no formatting in the resume, the applicant is making a statement: I’m a coder; I’m not supposed to know or care about Microsoft Word!

In a consultant’s life this statement doesn’t sell. Of course, you can’t play all the roles all the time but learning multiple aspects of software development helps you respect and appreciate “the bigger picture”. In special situations it allows you to be a one-man-army!

My Fifteen+ certifications are often discussed in casual conversations with clients, friends and colleagues. At times people wonder why I did certifications ranging from MCSE to OCP when I always was a Programmer at heart. I think Scott Ambler’s idea on Generalizing Specialist answers the question for me:

You may also want to become certified in one or more specialties. Although a certificate itself doesn't make you an expert, it does indicate that you've learned some of the background knowledge for your job. Like a university degree, certification is a great way to get your foot in the door, although you'll still need to prove that you can apply your knowledge in practice.

He describes the whole idea of being a generalizing specialist:

No, it's not an oxymoron: The generalizing specialist is someone with one or more technical specialties who actively seeks to gain new skills in these existing specialties and in other areas.

But what are these "other areas" that Scott talks about? The areas vary from individual to individual. If you are a developer who are starting out on his / her career or are a specialized .NET programmer who is submerging himself / herself in code or just one specialization, may I suggest that you also start -

  1. Learning Microsoft Word – Learning how to write formatted, presentable and good looking document with awesome content in an Art which takes time to master. Like all things it is practice that will make you perfect. Don’t shun documentation. Start learning the art!
  2. Learning a little bit of IT – Folks fumble when asked to configure IIS. Developers who are clueless about how to install active directory on a Windows 2003 box are not difficult to find. If you try really hard you might also find a developer who doesn’t know how to backup his data, format his machine, install Vista and then recover his data back. Learning the art of configuration will make you a better developer who is cognizant of the whole picture, including security. Rolling your sleeves, getting under your desk and tightening your own network cable instead of calling IT helpdesk will go a long way in making you confident in client offices! Setting up your own SVN and Continuous Integration Server will help directly in projects. I spent a few months of my career when I would switch as an IT administrator when Administrators were on leave or not available. Skills I picked up then and during my MCSE days help me every-day.
  3. Learn a Drawing / Design tool – I’m a Photoshop guy! The design of this blog isn’t perfect, but it’s self made. I don’t do the UI myself at work – we have specialized folks who do that – but then not giving the design folks a chance to complain about your messing up their formatting or well formed XHTML when you add your server side code to that ASPX file is a good feeling to have. :) Besides, being able to build your uncle’s website’s vision, your cousins marriage invitation card or the new wall of your room in Photoshop, is always fun!
  4. Learn Database – Table A has 3 rows 3 columns, Table B has 2 rows 3 columns – how many rows and columns does “select * from A, B” returns? I see countless folks fumble at basics like Cartesian Products or Normalization, look at me blankly when told to write fundamental SQL queries. Tweaking your databases will go a long way in making you write applications which run with blazing fast speed!
  5. Learn to write, speak and communicate – basically, learn how to be a thick skinned shameless developer. At the end of the day, every developer does some level of Business Analysis!
  6. Learn the language of your end users – If you are making an accounting application, start by reading the three golden rules of accounts. If possible go write a few journal entries! Following the specs a business analyst wrote works, but knowing the domain helps connect to the end users and clients much better.

Besides doing things like learning a new language each year, the first step to becoming a generalizing specialist is to look around you. Take a long hard look at all the other work that goes on around you besides the code that you write. You don’t have to be an expert in all that work, but every now and then, try to pick up a thing or two from all of it.

Can you do the IIS Setup and UI and Database Design and HTML and ASPX for your uncle’s website? Can you talk to him and build for him what he wants? How does your uncle’s website look after you’re done? Decent enough? Usable? Feature-Rich? Secured Enough? :) Start on your road to becoming a one-man-army who is a generalizing specialist today! I wish you luck!

posted on Friday, May 11, 2007 9:30:10 PM UTC  #    Comments [2] Trackback
Posted on: Monday, May 07, 2007

When one of my early projects where I had programmed by co-incidence ended I was really happy to move on to other things in life. Then suddenly, I was told to support the same project for a few more months and then a few more and then a few more.

On one hand maintaining my own code that sucked, made my life miserable. On the other hand however, it taught me how to take ownership of my code early on in my development life.

It taught me to set things right, by ruthless refactoring slowly with time, rather than just giving up or running away. Much like a painter who draws something that he thinks is really beautiful and then sells it at a price, I’ve felt a tinge of sadness in transitioning code over to the client in every other project after the one where I programmed by co-incidence.

 

Every now and then in my development career I’ve been involved with projects in and outside work where the primary project was migrating from one technology to another.

Migration projects at times are exciting. In migration projects it is implied that you will be spending a lot of time reading code (a skill every developer should cultivate) that folks from all over the world, who you may or may not have ever met or talked to have written. All you end up knowing is that months ago the clients hired a team of consultants. They wrote some code, transitioned it and have now moved on.

Migration projects have also exposed me to my share of Code Smell and snippets that would qualify for Daily WTF (now called worse than Failure).

Every now and then during my development career I’ve also met (and interviewed) a lot consultants. Of all the consultants that I’ve met, I’ve observed a particular kind very closely. Let’s call a consultant of this type – Fred.

Fred has the following peculiar characteristics:

  1. Fred usually works in short term billable projects.
  2. Fred gets very uncomfortable when he is asked to work in a project that will last for more than 5 months. 
  3. Make Fred work in a long term Product that lasts for more than a couple of years that he would have to support and Fred becomes very nervous. 
  4. Fred has a tendency to introduce Code Smell and writing snippets that qualify for “Daily WTF” every once-in-a-while.

Long story short, this type works under a philosophy that can be described in a line: Code, Hand over the code, Run and Don’t Look back!

As you dive deeper into Fred’s mentality you realize that there’s a little bit of Fred in all of us. Writing good code is all about getting rid of Fred! So what’s fundamentally wrong with Fred?

Fred is not really a bad programmer. Like all other good programmers Fred is struggling with the same issues we all struggle with: changing requirements, dead-lines, pressure from customer etc. What Fred lacks however is – ownership.

Fred Codes, Fred Codes More. Fred Hands over the code to the Client. Fred turns around and then Fred Runs as fast as he can, to another project. He doesn’t look back and he knows that he got away – Scot-Free! Year after year Fred continues to add “successfully transitioned” projects to his resume but doesn’t learn the art of Refactoring, the art of throwing away code and the art of elasticizing the iron triangle of software development . Big Design Up-front methodologies with no iterations help Fred tremendously in his Run-Away attitude.

An acquaintance in a 300 person process oriented CMM software consultancy house defends Fred - “but he successfully completed a project, right?”- Yeah. (I think I will not answer that question).

Actually, he doesn’t need to defend Fred because this discussion is not about criticizing Fred. Like I said, there’s a little bit of Fred in all of us. Do you have a little bit of Fred in you too?

The first step to getting rid of Fred is to cultivate a sense of code-ownership. Throw out a framework or a tool and commit to support it for at-least a few years. This could be a simple Accounting tool you write for your finance department or an open source project you start with a very small user base. The size of the project or lines of code aren’t important. Start by writing something that you are proud to support and maintain – for a very long time.

If you have posted articles / code out to the world, take time to support your code and content. Answer questions you get related to these. Don't abandon your content and code! Support it. If possible, Get involved in a longer project or product with support contracts.

In other words, learn to stand by your code, writing and words when they are released to the world. Learn to own and support them! Jumping from organization to another or jumping from one project to another, every few months, doesn’t take Fred anywhere in the long run.

posted on Monday, May 07, 2007 4:00:56 PM UTC  #    Comments [16] Trackback
Posted on: Wednesday, May 02, 2007

Scott W. Ambler compares software development to the iron triangle as follows:

He states the problem rather elegantly:

Recognize that the iron triangle must be respected. The iron triangle refers to the concept that of the three critical factors – scope, cost, and time – at least one must vary otherwise the quality of the work suffers. Nobody wants a poor quality system, otherwise why build it? Therefore the implication is that at least one of the three vertexes must be allowed to vary. The problem is that when you try to define the exact level of quality, the exact cost, the exact schedule, and the exact scope to be delivered you virtually guarantee failure because there is no room for a project team to maneuver.

For a Software Project / Product to be successful, we as development teams and above all, as responsible individuals, need to learn how to elasticize the triangle. Scott suggests over four ways to introduce elasticity in his article. He suggests that you can actually alter any side of the triangle, depending on your project / situation.

Andy Hunt and Venkat Subramaniam in their book – Practices of an Agile Developer suggest time-boxing as an answer:

“Setting a near-term, hard deadline for an activity that cannot be extended. You get to choose which other aspect will suffer, but the deadline is fixed. You probably don’t know the exact number of time-boxes that are required to complete the overall task, but each individual box is short, is finite, and accomplishes a clear goal-setting a near-term, hard deadline for an activity that cannot be extended.

You get to choose which other aspect will suffer, but the deadline is fixed. You probably don’t know the exact number of time-boxes that are required to complete the overall task, but each individual box is short, is finite, and accomplishes a clear goal.”

The book offers a very real example (which I can relate to from past projects that I've worked on):

For example, iterations typically run a couple of weeks long. When the time is up, the iteration is done. That part is fixed - but the set of features that makes it into that particular iteration is flexible. In other words, you never slip the date, but you may slip a feature.

I’ve seen developers around the world (I refer to them as Fred :)) give-in to the temptation and try to make the triangle elastic by lowering quality. We (a mentor and I) also even went ahead and termed this - the Junior Developer Syndrome.

Having said that, Time-boxing really works wonders in introducing elasticity into the triangle and at the same time maintain sanity! Especially if you are shipping projects / products with a strong leadership and a mature team that will not compromise on quality.

As developers, we all suffer through the I-can-do-it syndrome. It’s easy to get into trap by having a conversation with a marketing person / client, which goes somewhat like –

“Can we build this?” – Developer: Sure.

“Can we build this in 3 months?” - Developer: Ummm….

“Thanks! Our current team is enough to build it, right?” – Developer: I think so... I...

“Great! Thank you so much! Let’s start building it then!”

The next time you estimate or say “yes” continuously in a conversation like the one above ask yourself – have you respected the iron triangle? Have you left enough room for elasticity? If you haven’t, chances are that the fourth dimension - quality - will suffer. Time-boxing, prioritizing features and dropping the ones that don’t really add value is the safest, smartest way to introduce elasticity into the triangle. When in doubt prioritize up-front!

posted on Wednesday, May 02, 2007 3:43:07 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, April 29, 2007

My fascination for fish tanks at one point in my life is well known to all who know me. When I owned the fish tank I spent hours reading the big fat fish encyclopedia and other fish-tank-management (my term :)) books. My objective: To create a self sustaining tank that I would never have to clean or maintain.

“Why can’t this darn thing turn into an eco-system of itself?” - I often wondered. I read about how the eco-system in a real river works and figured that a Fish tank had everything it needs to turn into a self-sustaining eco-system by itself after I had read something in those lines. The fishes could eat the plants, the plants could use what the fishes leave behind, as manure – you know – the whole tiny replica of a real life fresh water eco-system.

I was actually starting to think about simulating the whole running water thing the way it happens in real rivers... I was obsessed; not with actually maintaining the tank but in making sure that I would never have to maintain it! :)

Memories came back to life years later today as an engineer during an interview mentioned this as one of his long term goals:

“I want to manage my own team”.

After some discussion and playing with words (I do this with people I'm friendly with) he was a little confused about what he wanted. Here’s what he was basically saying:

  1. I want a team. My team! And I want to manage them.
  2. I don’t believe in hierarchies! It'll be an open friendly team... It’ll be my team with no hierarchies.

Here’s what I was hearing:

  1. Let’s have just 1 level of hierarchy. I’ll be the one who manages everyone else and everyone else can be my junior. 
  2. I hate hierarchies. :)

I was just kidding! Seriously, this guy is awesome and I was just pulling his leg. He knows it! 

But for now, I think I’ll stop playing with words and get back to fish-tanks and software... and my obsession with both of them, which is what I'm comfortable talking about.

At age 12 what I was trying to do with my fish-tank, was this - I was trying to develop an eco-system that I would not have to manage. I soon realized that this was very difficult to achieve with a fish-tank. Doing the same thing with product / software development team is relatively easier. Here’s why:

  1. Fishes by their very design aren’t as intelligent as software developers.
  2. Fishes suck at communication. They don’t even speak the same language we do.
  3. Fishes can’t ask for help when they are failing (or when the tank beings to suck), fishes can’t shout, yell... ok, I think you get the idea. :)

Coming back to the point, jokes apart, I don’t feel that a software team that needs to be managed can survive in the long run. A team that automatically forms a self sustaining, self managing unit, much like that eco-system in the fish-tank, has much higher chance of success.

At work, I've seen multiple teams of three to ten really awesome developers do just that and complete projects successfully without ever feeling the need of being "managed' by someone. I feel privileged to have worked with some of those teams. During the project, we would move in as a team, where everyone had his set of specialization and knew what each one of us would do.  We were all think-skinned developers who would shout if we had a problem.

This brings me back to the more important question - "Can you even Manage smart people?" - In a smart, self sustaining, self managing team, a manager is just like a servant of the rest of the team! When needed, he moves in, cleans up the mess and move out. It just involves ensuring that everyone has everything they need to function so they are on one single track. Doesn't sound very glamorous when I put it that way, does it? 

Mature methodologies like Scrum don't even refer to them as managers. Mature organizations like Yahoo have a better name for them - they call them the single wringable neck. :) -  Ken Schwaber remarks:

The Product Owner job is incredibly difficult. Almost all people fulfilling the Product Owner role are surprised by how much work it is. Historically, Product Owners were questioned by the development organizations about their requirements...They are responsible for elucidating these requirements as needed, decomposing these requirements on an ongoing basis, changing them to optimize return on investment, and even meeting with development teams frequently to tell them what is needed and to review what they have done. The Product Owner has gone from someone who could blame development if a project failed to someone who is responsible for the success or failure of the project. At Yahoo, this person is called the “single wringable neck.” 

Managing a team is not as glamorous as a lot of young engineers make it sound; The trick (much like managing a fish-tank) is developing a team that doesn't have to be managed! And by the way, while we're at it - may I also suggest we change the term "My Team" to "The Project Team"? :) And yes, if you are a young developer who really wants to manage the life cycle of a product; I definitely wish you luck and success in due course of time.

posted on Sunday, April 29, 2007 6:02:09 PM UTC  #    Comments [2] Trackback
Posted on: Friday, April 13, 2007

Every now and then I meet young, talented and enterprising developers and interns who are hesitant to post code snippets, out of their work environment into the open world. There are some who will not write Code-Project articles for the fear of getting negative feedbacks.

Others won’t speak at knowledge sharing sessions or trainings, even if it’s just within their own organization, until they are fully prepared with an elaborate PPT and have spent hours learning a topic and know it like they know their mother-tongue. Some even worry too much about what their audience thought about a particular training they conducted last month.

Here’s a piece of advice to every young intern and engineer starting out on their careers:

Learn how to get naked!

You should have nothing to hide! Nothing. If you are succeeding in your project, say it. If you are failing, say it in a louder voice! If you are an expert in a topic, say it. If you don’t know a thing about a topic, say it, in a louder voice!

And once you’re naked, develop a thicker skin!

Don’t let the critisms get you down. Instead, use them to become a better developer (and a better person).

Being a think-skinned shameless developer who has nothing to hide is a life-style. After you have lived it, you begin to wonder how the developers, who don’t follow it, live without it :)

Are you a thick-skinned developer? Are you ready to become one? Try the life-style! You might love it! Here are a few steps that can help get you started:

  1. Realize how much your code sucks - and then learn to say it with a sense of humor - shamelessly. After all, we all make shitty software… with Bugs
  2. Ask for more time and make your code better - Pick one of your modules that sucks the most and ask for some extra time to re-factor it. If it’s not ready to ship and you need to work harder, learn to say so without feeling particularly ashamed about it
  3. Besides writing code learn to talk about code - Try walking into a training that you are about to conduct with just a topic you think you know really well or feel passionately about. No elaborate PPTs, No Preparations! If possible, do this every few weeks. 
  4. Throw out a few articles at code-project or start a blog - Blogs and articles open up forms of dialogs where it’s really easy to be shameless and ask questions or say “I don’t know” while answering them. The critism that comes in as comments through your blogs, articles or just ad-hoc email from your readers is usually very constructive. Personally I have and will (hopefully) continue to, learn a lot from Ad-hoc emails and feedback I receive from this blog and my articles.  
  5. Read Code – Read code that’s better than code that you would generally write – Quite a few good open source projects are usually a great place to start. If you can’t commit to an open source project submit bug-fixes and patches for the ones you use in your every-day life! 
  6. Copy Shamelessly – I’ve copied patterns of coding from every good programmer I ever worked with. In my professional life at work, the most recent example of shameless copy was a different way of writing Configuration Handlers that I picked up from a very capable Developer in my current project.

The above points don't form a definitive guide to becoming a shameless thick-skinned developer but if you’ve never made fun of your own code in a meeting or in a public blog post – they might help you get started on the road of thick-skinned-shamelessness where you might be able to learn much more by being a little more shameless and thick-skinned! I wish you a Safe and a Happy Journey on this road of shameless and thick-skinned development.

posted on Friday, April 13, 2007 8:55:29 AM UTC  #    Comments [4] Trackback
Posted on: Saturday, March 03, 2007

At a client’s office, almost a year ago, a very talented developer on their team thought it was interestingly funny when I said - “and that’s how you divide and rule”. “We call it Divide and conquer” – he laughed. [Being an Indian, at times my English tends to have a slightly different touch to it. :)]

“But you’re probably correct. You don’t just want to conquer. What you really want to do is to conquer and then control the situation and rule, for a long time.” - He added on.

No, we were not making a sinister plan to take over the world. We were just talking about how we can break one big Monolithic BizTalk Orchestration into smaller, easy to mange, easy to comprehend and faster orchestrations.

He had drawn up this Big Design of their existing approach on the left and then I had proceeded to draw smaller designs of multiple Orchestrations and how they would talk to each other on the right when I finally wrapped up the meeting with the line “divide and rule”. I was suggesting that he break his Orchestrations down to smaller moving parts so that when a part doesn't work - he can take it out - independently - and Analyze it!

I don't think any programmer disagrees with the fact that we should Code Smaller. A Lot of basic concept articles, teach a person who is starting out on his programming endeavors how he can Break Larger Pieces of Code into Smaller Pieces. But divide and conquer (/rule) design paradigm goes beyond just writing cohesive, small and easy to maintain functions and classes.

Every now and then I see even good developers forget the Divide and Conquer paradigm under pressure. Or they simply do not put it to practice for tasks other than coding. I've recently seen a very capable business analyst trying to learn build management by taking a CuriseControl configuration file and trying to configure CriuseControl to get the source code from SVN, fire the build, send email notification when the build fails and log the result in the formatted HTML report, all at once.

When I was called in to help, my first reaction was to wipe out all other code from the 50+ line config file - and leave just 5 lines that will have cruise control fire the build. Turns out, those five lines were broken. Once that was fixed we moved on to Getting the source code from SVN - another 3 lines which just worked. We kept fixing a part at a time and soon we were done in a couple of hours.

I've seen so many engineers (Highly capable ones. At times, I'm guilty of this too) run through more than 10 screens before they can reach a reported bug and just reproduce it. Then apply the fix, go through the screens all over again only to find out that the fix doesn't work. Then start thinking of a different fix. Over and Over again. Spending more than 5 minutes on every attempt, just to check if the fix worked. 

When we do this the time taken to fix a bug increases dramatically, the frustration level increases dramatically and the ability to think using a Pragmatic Approach comes down with every failed attempt. We start programming by co-incidence! In situations like these, Isolating the problem by replicating it using smaller code snippets and moving it out of your codebase so that you can analyze it separately, can help a lot. 

If you are trying to fix a bug that requires more than a couple of minutes to just reproduce and has taken more than 5 attempted fixes already, you might be better off isolating the bug by bringing it out of the codebase and reproducing it independently using simple code snippets. If you are finding a bug too complex to fix you're probably trying to fix more than one bugs at a time. If a feature you're building in your sprint seems too complicated you're probably trying to build two connected features simultaneously.

In the pressure of fixing a bug that refuses to get fixed or in the excitement of writing code for something fairly complex, it's very easy to tell yourself - "I'm almost there!" - and it's easy to spend away hours or sometime even days - by continuing to tell yourself that, not realizing that you're in fact, getting nowhere!

If something takes much longer to fix or build than you initially expected or you're starting to get frustrated with a problem - Divide and Conquer! And then, once you've conquered the problem, enjoy your Rule over the situation! :) 

posted on Saturday, March 03, 2007 7:44:47 PM UTC  #    Comments [0] Trackback
Posted on: Sunday, February 11, 2007

Andrew Hunt and Venkat Subramaniam use the Turkish proverb, “No matter how far you’ve gone down the wrong road you’ve gone, turn back.”, rather elegantly in their book “Practices of an Agile Developer”. They comment:

"That Turkish proverb above is both simple and obvious—you’d think it would be a guiding force for software development. But all too often, developers (including your humble authors) continue down the wrong road in the misguided hope that it will be OK somehow. Maybe it’s close enough. Maybe this isn’t really as wrong a road as it feels. We might even get away with it now and then, if creating software were a linear, deterministic process—like the proverbial road. But it’s not."

 

 

Software development is about making choices. Starting from selecting the underlying frameworks your code will run on, tools you will use, a host of other choices and above all, the assumptions your code will make.

We make choices at every step. While we try our best to make our choices based on objective and pragmatic thinking, the fact is that our choices are based on the facts and requirements available at any given time. And of-course, in a real world, these change. Very often. Then, there is the pressure to ship and every developer needs to compromise some level of perfection for the sake of shipping!

Making just a couple of wrong choices can put you on the wrong way. You can try your best to avoid getting on the wrong way. I wish you luck. But the truth is, no matter how hard you try, you will take a couple of wrong turns once in a while. Building software is like driving on a confusing mesh of freeways, with an outdated map, that changes every five minutes, and having only a very general idea of where you want to get to. At some point or the other, chances are that you will take a couple of wrong exits and will get lost.

In a recent mail trail team members of a project and me discussed fixing 3 bugs in first few iterations of module. The module, which was a very small module of a large web based product, consisted of just 3 aspx pages. While these discussions were continuing, I received an email from a person who was assigned the responsibility of fixing these 3 bugs. He had completed his initial analysis on what it would take to fix those 3 bugs and this email contained his suggestion on how these bugs can be fixed. The email contained just a single line of text – “I think the code needs to be re-written.”

I consider emails of this sort particularly helpful. They tell me that we’re failing fast (And for those who didn’t click that link, that’s a good thing :)). Emails of this sort, tell me that even before we go to Testing, members in the team have actually figured out that we’ve just taken a wrong way and have raised the “wrong way” sign:

That just makes turning back very easy.

In this particular case, after a quick follow-up meeting on the mail-trail everyone agreed that we needed to fix a couple of bugs on a page, refactor a page ruthlessly and rewrite just one page because re-writing it would be faster than fixing it and would make things much better.

While spending hours and hours in trying to put band-aids on code that doesn’t work, or is badly designed, at rare occasions it’s a good idea to start fresh. In other words, “turn back”.

While turning back, works on micro-level modules, classes, small functions or code snippets, at a macro-level / project-level, more often than not, turning back is not a viable option.

At a product / project level, Joel Spolsky feels this is one of those “Things you should never do”. He explains:

"We're programmers. Programmers are, in their hearts, architects, and the first thing they want to do when they get to a site is to bulldoze the place flat and build something grand. We're not excited by incremental renovation: tinkering, improving, planting flower beds.

There's a subtle reason that programmers always want to throw away the code and start over. The reason is that they think the old code is a mess. And here is the interesting observation: they are probably wrong. The reason that they think the old code is a mess is because of a cardinal, fundamental law of programming:

It's harder to read code than to write it"

He goes ahead to explain why taking a huge project and attempting to rewrite it from scratch is not such a great idea:

"The idea that new code is better than old is patently absurd. Old code has been used. It has been tested. Lots of bugs have been found, and they've been fixed. There's nothing wrong with it. It doesn't acquire bugs just by sitting around on your hard drive."

But then, how do you turn back, especially if you have made too many bad choices and your project is a huge one? A Wise comment on this forum explains how: 

"Get together a refactoring plan. This shows how you can go from a mess to something useable in incremental steps.

I've never seen a project where absolutely every single line of code was a waste. Even if the architecture underneath is flawed, the UI might be okay. So keep the UI and refactor what goes on underneath.

It's always going to be quicker than a rewrite."

Pick and choose what you need to throw away, when you need to throw it away and how much of it do you really need to throw away. While you do that, don’t forget to keep the risks-of-throwing-away-code to a minimum. When you can throw away small snippets and fix things by rigorous yet phased Refactoring, don’t attempt a monolithic rewrite by throwing away all your code.

Where am I trying to get with this? If you haven’t already noticed, I’m just trying to refactor the proverb I started off with. So, here’s my refactored version: 

“No Matter how far down the wrong road you’ve gone, find the shortest, safest and smartest way to the right road.” - If writing code is an art, throwing it away is an art too! 

posted on Sunday, February 11, 2007 7:12:45 PM UTC  #    Comments [0] Trackback
Posted on: Monday, February 05, 2007

Andy Hunt and David Thomas in their book “The Pragmatic Programmer” make an interesting observation about a persona Fred:

"Suppose Fred is given a programming assignment. Fred types in some code, tries it, and it seems to work. Fred types in some more code, tries it, and it still seems to work. After several weeks of coding this way, the program suddenly stops working, and after hours of trying to fix it, he still doesn't know why. Fred may well spend a significant amount of time chasing this piece of code around without ever being able to fix it. No matter what he does, it just doesn't ever seem to work right.

Fred doesn't know why the code is failing because he didn't know why it worked in the first place. It seemed to work, given the limited "testing'' that Fred did, but that was just a coincidence. Buoyed by false confidence, Fred charged ahead into oblivion. Now, most intelligent people may know someone like Fred, but we know better. We don't rely on coincidences---do we?

Sometimes we might. Sometimes it can be pretty easy to confuse a happy coincidence with a purposeful plan"

During a discussion with one of my early project Managers, a Mentor and a person I really look up to, he coined Fred’s symptoms and gave it an appropriate name – he calls this the “Junior Developer Syndrome” and feels that every programmer was once Fred.

He also describes another very important feature of Fred. According to him (I couldn’t agree more), during these “hours of trying to fix it”, this Fred guy usually doesn’t tell anyone there’s a problem.

Like all other programmers the first couple of years of my coding life went in getting rid of the Fred within me. These years also taught me lessons all of us have learnt at point in our life. This post is an attempt to organize my own thoughts and try and understand why Fred programs by co-incidence.

There are lots of other complex factors that go into software development life; however, to keep this post simple let’s consider that Fred is worried about the tree most evident factors in a software development project.

  1. Quality of Code.
  2. Time Needed to write Code.
  3. Pressure to ship (from Stake-holders).

I’ll just go ahead and use graphs to illustrate how these three typically play together.

The Graph Plots Time needed to code against the quality of code. Spending a little bit of more time in understanding the Technology and figuring out the “why the code works” part gives a tremendous boost to the quality of code by investing just a little bit of time. The initial tweaks and optimizations are easily achieved by spending a little bit of time on the technology and understanding why the code works and how it works. The Graph depicts this as the distance between points A and B. i.e. [AB].

The most typical example of this I’ve seen is ASP.NET caching. For example, I’ve been on projects where a 4 second Page load was brought down to 300 milliseconds by just spending a day on Caching. In other words spending [AB] time gave us a [XY] increase in the quality of code.

After you’ve spent that initial time however, the law of Diminishing returns starts to kick in and every other tweak on code takes more and more time. In the same project I mentioned earlier we spent over a week of performance tuning to bring the 300 milliseconds down to less than 150. In other words, we ended up spending [BC] time to increase the quality of code by [YZ].

Now the obvious question is if by spending just [AB] worth of time learning about the “why” and the “how things works under the hood” of the technology on which Fred is working on, if Fred can get and [XY] gain in the quality of code why doesn’t he invest that time in making his code better?

In this past couple of years I've discussed this (in one way or the other) to multiple Senior Associates, Technical Architects and Project Managers. Some have told me that Fred is just stupid. Others claim that Fred just works for a Pay-check and [OX] worth of quality is usually good enough to get the project go through client acceptance. Fred couldn’t care less about code.

Others however, mentioned a reason that sounds more likely – The third factor I talked about earlier in the post - Pressure to ship – that is what causes Fred “Program by Co-incidence”.

Notice the graph above. Here the pressure to ship show up suddenly as your product / project starts getting shape or starts generating excitement. As you move from point E to F tweaking your code, the pressure to ship slowly growing up by [PQ]. As you move from F to G and the Shipping-Date / Dead-Line / Committed Date comes closer the pressure to deliver shoots hugely by [QR].

Now let’s merge both of these graphs.

Merging these two graphs answers some of the questions and gives a new perspective into – Why does Fred write Bad code. Think about it a little more and it makes so much more sense.

The problem with Fred is that he considers his code ready to ship as soon as he senses some pressure to Ship from Stake-holders. He considers his code ready-to-ship at point X. Fred wants to see the Stake-holders happy. He’s not a bad developer! Or, is he?

The other extreme are people who will not ship till point Z. People who will spend weeks to fine-tune a tiny performance issue that is causing a round-trip to take 15 milliseconds more than what it should take. This kind of a developer runs the risk of Never Shipping, because the Green curve never becomes parallel to the X-axis. In other words, no matter how much you tune and tweak your code there is always room for improvement.

So when should you ship?

During one of my first projects in my development life (when I was very young and enthusiastic :)) I shipped a project at point X and paid the price for it. The code I shipped very soon became my problem; within a couple of months I saw myself taking support calls and fixing bugs by working over 18 hours a day; hating the code I had written in a hurry and fixing it where possible. It could have bitten me really bad, but thank god it didn’t. We fixed all major issues that were reported and No-one was killed. There was nothing about that project I enjoyed in particular, but it taught me to strike a balance. It taught me to ship at Point M because M is an idle point to ship.

Shipping at point M in the above graph, involves it's own set of challenges though. It means maintaining constant communication with the Stake-holders, reporting accurate status, remaining agile and selling the idea that Quality would mean lesser cost in the long run to the Stake-holders even at the time when pressure to ship is constantly increasing.

What does this boil down to? While the book suggests some excellent code-related-techniques of how Fred can become a programmer who does not program by coincidence, in my opinion however, It also boils down the fact that to ship at M Fred needs to learn a whole host of other skills which have nothing to do with coding. Skills which Fred always considered unimportant as a developer. A mentor remarks - "Software development is not all about For loops. A lot of software development is about Managing Risks and so many other things". These are In fact, words of wisdom which deserve a different post for themselves.

posted on Monday, February 05, 2007 12:05:43 PM UTC  #    Comments [1] Trackback
Posted on: Friday, January 26, 2007

At work we use SVN for all our .NET Projects. Being a Microsoft Developer I’ve moved between multiple source control systems during my development life. Starting with Visual Source Safe, I moved to CVS, then to TFS (during its Beta stages) and finally fell in love and settled down with SVN. The love was strong enough to convert all .NET developers I work with, over to SVN! :)

Even today I highly encourage all Microsoft developers I meet outside the workplace to try-out SVN. With Tortoise and Ankh, the whole Visual Studio Integration and Explorer Integration is very easy to get and it (almost) feels as easy as VSS and as powerful as CVS. But this post is not about plugging-in SVN and related tools. It’s about starting a discussion on When-To-Branch and When-To-Work-On-The-Trunk (and When-To-Create-Tags).

Let me being by saying - It’s all about choices, opinions and which way works best your project. In the few years of using CVS (and then SVN) I’ve seen multiple ways in which the Trunk, Branches and Tags are used by multiple teams. Every team has its own “best practice” (the whole idea of a "best" practice is relative, because 'best' depends on so many factors :)) around when they should work on the trunk, when they tag their builds and when they create branches. Here are two most common approaches I’ve usually seen being used depending on the scenario and the project:

Approach 1 - Work on the Trunk, Tag on Each Release / Revision and Branch for Experiment

I’ve personally used this approach in projects where we have very frequent and agile releases. The approach basically involves:

  1. The team constantly working on the Trunk.
  2. The trunk is tagged at Every Revision as well as at Every Release so that a snap shot of any version can be obtained.
  3. The team continues to work on the trunk after the tagging. 
  4. If there’s anything the team wants to try out, they branch the code and merge back the changes to the trunk when done.

At any given day the Repository looks much like this:

  

What I love about this approach:

  1. The Simplicity and Speed at which team can work - Really helpful if you’re going to have weekly tags.
  2. Allows a “Branch-When-Needed approach” and leaves the branching-for-trying-out-complex-feature-implementations on Developers rather than imposing a strict policy on when to branch. They can freely do it as and when they want it.
  3. Easy to understand and work on, specially for VSS developers .
  4. Not having to change your Working Folder for each version change, since each developer is just concerned with the trunk and his own branches.

Cons:

  1. The Trunk may not always be functionally tested or 100% stable.
  2. A colleague brought this up during a discussion and his point was completely valid – “You can’t create patches for Release 1.1.1 and check it in to 1.1.1, if your trunk is at Release 1.2.” – (He’s all for Approach 2, I describe later in the post). Point valid and taken :) but I’m still not fully convinced that you really want to do something like that in a project that’s moving ahead really fast and throwing out revisions every week and a release every month or so; or for that matter, I'm not really sure if you want to do that for any project. 

Personal Opinion: I don’t like the whole Idea of applying SVN patches to a branch of a version that has already been released and then checking-in the patch to that branch. If an immediate patch needs to be applied to an already released version e.g. 1.1.1, I can still checkout the tag, work on the checked out tag, create a patch and then ship the patch. It should be possible to apply the patch on both, the primary trunk (which is now at 1.1.2) and the checked out version of tagged build 1.1.1 (which needs immediate fixing). However what I don’t agree to is the idea of applying the patch to a 1.1.1 branch and then checking in the changes to 1.1.1 specially after 1.1.1 has been officially released. It just creates more confusion and makes things product versioning more complicated. Personally, I feel this is exactly what service packs are for.

Approach 2: Always work on the Branch Approach - I’ve seen a LOT of development teams take this approach. People claim this is really helpful when you just want to do milestone based branches and tags. The Idea is:

  1. For Every Milestone / Release create a New Branch.
  2. Everyone works on that branch.
  3. No-one works directly on the trunk, and because no-one works on the trunk, the trunk always represents the previous stable release.
  4. When the current release is tested, changes are merged to the trunk.

At any given point the repository looks like:

What's good about this approach:

  1. The Peace of mind that my trunk is always tested and stable.
  2. You can create patches for an older version and check-in the changes to the old version by checking in to the correct branch, even after the product has been released. (Personally, I don’t think this is a Plus, but a lot of development teams use this approach and I've been told by more than one very capable developer that this approach has worked for them in multiple projects).
  3. As a colleague / mentor recently pointed out - If you are doing development of two versions in parallel this approach can help. I would have to agree on that one. We've done the "continue to fix the trunk while we work on a new version in a branch" approach and when I look at this approach from that perspective it suddenly starts making a lot of sense.
  4. Honestly, I can’t think of other Plus-Points for never-work-on-the-trunk approach.

Cons:

  1. The whole idea of never working on the trunk makes it complicated for developers to create their own branch especially when they are already working on a branch. E.g. I want to work on “Feature A” which I am not sure will work out. If I am already on a Branch for version 1.1.2, it makes it a little complicated for me to branch again and merge my sub-branch with the 1.1.2 branch before the 1.1.2 branch is merged with the trunk. (I hope I haven’t confused you already, the more sub-branches from branches that you created the more complicated things become :))

And then there are mix and match of the above two approaches that I’ve seen a lot of teams use. For example a team which creates tags when a build is released, even while following the Approach 2 I described above or the approach where you continue to fix the trunk which holds the first version while you work on a second version on a branch. I've also worked with a Team where every SVN ( / CVS) command was wrapped with a custom wrapper command using Unix shell scripts and use of clients like Tortoise wasn't permitted.

How you use the SVN Branches, Tags, the trunk and in fact, the source control system, is completely based on what works best for the project and the team. Feel free to Mix and Match approaches to control the chaos with predefined guidelines but make sure you leave room for flexibility and agility. 

There are no best practices! How to Manage code depends on the project, the team, how fast you want to go and multiple other scenarios. But it's always a good idea to have a set "SVN Working Practices" (notice the use of word 'working' instead of 'best' :)) for your Projects. Do you have a your SVN Working Practices Documented yet? If not, here's an excellent example you can use to get inspired. :)

Update [2/13/2007]: A colleague / mentor provided this link in a comment on my work blog. It's a practical repository of Branching Patterns for Parallel development. If you're interested in finding out about the various Branching Schemes out there and getting some guidelines on which scheme to use when, the article is a must-read!

posted on Friday, January 26, 2007 2:02:54 PM UTC  #    Comments [0] Trackback
Posted on: Saturday, January 20, 2007

If you run a company that owns a product, or have put your mind and soul into writing a product that you believe will make you or your organization big bucks and success in the long run, you’re probably worried about protecting your intellectual property.

Lately, I’ve been hearing a Lot about Intellectual Property and what Organizations should do to protect their intellectual property. Multiple discussions have taken place, with multiple people from different Organizations. Just to give an idea of the crowd I’ve been discussing this with, let me introduce an  acquaintance who works in a 400+ person, Indian solution provider as a developer.

Another individual is a Lawyer in a 100+ employee Organization having offices in US and multiple offshore countries including UK and Europe. Just to bring a slightly different perspective to discussion I’ve also included comments from a very old client that I worked with – who had a no-work-from-home policy. And then there are guys from IT / Administration world back from MCSE days, that I am still in touch with and who work with some really medium-to-small-sized development shops.

Before I go any further however, let me take of my ‘I-know-everything-about-this’ hat off and hide it somewhere. Because, this is my blog which runs on a server I pay for, it goes without saying that I will present my opinions. However, this is also a good time to bring to everyone’s notice that my opinions (by their very nature) here are highly opinionated and may be as far from correct as anything can be. But after hearing so much about this topic I really feel that I have to post about this. If nothing else, this post is an attempt to take a look at one problem from multiple perspectives, including mine. :)

"They are not allowed to carry USB drives to work. No Floppies, no CDs, they code on desktops with 512 Megs of RAM, unless of course, someone can justify that he needs a Gig of RAM for his project. 90% of Internet is blocked from them including Yahoo mail, Hotmail, Messengers or anything that can potentially be used as file transfers."

An acquaintance back from my IT Days describes. He works at an Indian IT consultancy firms which is small enough for every employee to know every other employee on a first name basis. By “They” he is referring to the developers. There’s a particular advantage of having worked in various departments in my early part of professional life. I associate with both IT and Development folks equally well, and completely “get-it” when the folks in one camp refer to the folks in other came as “They” :)

"In fact, our IT takes a Pessimistic approach to security. They start by blocking everything. Employees over years have requested specific site to be unblocked which has resulted in a fairly large database of safe sites which have been unblocked. Once a request is filed, it is analyzed to see if the site offers any mechanisms to transmit confidential data. Analysis is also done on why this site should be opened up. There are cases, where we’ve asked for a specific site to be opened up because we wanted to read an article and have received an email attachment in reply with the content on the article attached and our request to open-up the site denied, mainly because the site provided free mailing services. The concern is that we would email code to ourselves."

These are measures a 400+ employee consultancy firm takes to protect its Intellectual Property. This comes from a Developer and here “they” of course refers to the IT folks :). The third perspective is slightly Non-Technical coming from a lawyer who works for a relatively smaller development firm. 

"The key to this is Making employees sign Non-Disclosure-Agreements (NDA’s), Non-Compete agreements and copyrighting your code. Once these measures are in place, the real work needs to begin - the technical departments, like the IT needs to move in and enforce measures that code-theft cannot happen even if an employee wants to commit a theft e.g. disabling their USB drives, not giving them CD/DVD-Writers etc. Making the employees sign is the easy part. Setting up systems so that you don’t have to be at the mercy of mutual trust with your employees is the difficult part"

Another person at fairly small US based organization, sites an example of an employee running away with a laptop and some code and the team being worried for a couple of weeks till the employee was tracked down and they had confirmed that he hadn't released the source code to anyone.

After I listening to these discussions, some-thing deep down somewhere kept telling me that there’s something wrong, somewhere. As if one side of the story is being ignored. One thing that seems to resonate through all these comments and remarks is – "It's difficult to trust your Employees. Doing that will always mean big trouble". In an attempt to discover the other side I decided to cling on to Google and go on a search for other opinions.

My Ideas on this topic are very different from the ones that had been brought to the plate so far, and Google seemed like an excellent tool to figure out if there are others who had similar thoughts and to figure out if my thoughts are working out for them too.

The first result is an interesting instance of stealth and sleuthing – what’s most interesting about this article is that it sticks to the side of story that’s been presented by all other quotes in this post so far, but ends with lines that come very close to the other-side of the story, therefore striking a really nice balance. The article includes an interesting and (in my opinion) a very true remark:

"It is impossible to provide for a completely foolproof system... To devise a foolproof system, you would need a set of people working on it...This set could have a thief in its midst too. In the ultimate analysis, everything works on trust. After all, software employees are capable of anything."

Why I particularly like this remark is because it addresses the problem from a real perspective and considers the fact, that when dealing with developers companies are dealing with smart individuals who are capable of writing highly secured and scalable systems. It goes without saying that any developer worth his salt, who is capable of writing these systems, is also capable to stealing code or in fact, anything, if he really wanted to do it, specially if he's a little lucky. There is no such thing as a fully secured process or system! And that’s one thing we tend to forget when talking about Systems that we claim will replace (or enforce) human trust and dignity through security.

There are tons of articles out there which tell you that you cannot trust your employees, not even your administrators – but ones which tell you that it’s OK to place a little bit of trust in sensible programmers who you hired in the first place, are few and difficult to find!

After spending some time on Google searches I finally landed on some sound-advice that came close the kind of answer I was really looking for. A very wise comment on this forum states:

"It seems you've learned firsthand that you can't *really* protect your IP. That said, you could talk to a lawyer and get some more specific advice. Certainly requiring your hires to sign a non-disclosure agreement is nothing onerous. But I think the best thing to do is hire people with integrity and all. Be so successful that nobody in their right mind would think about splitting, and that none of your customers would think about switching"

These are not my words, but if I was to say something on this topic this is exactly what I would say and then I would add a few more numbered points (read on).

  1. You cannot prevent your employees stealing your code unless you’re planning on frisking people: In each of the remarks people made in their discussions with me, and as they were describing their security-measures to protect their Intellectual Property, I could instantly think of more than one ways by which a developer could easily steal code if he really wanted to. The comment in this forum, that you cannot prevent employees from stealing code unless you’re planning on frisking people, seems quite true and at-least I agree to it.
     
  2. What is your Intellectual Property, by the way? As a developer I spend countless hours, throwing away code that I’ve written in the past and writing better code. Those of us, who believe in TDD, refactor ruthlessly and make that a way of life. A lot of the projects I’ve been involved with are re-writes of existing systems. So, as developers, if throw away so much code, is code what you really want to protect? Is it even wise to consider just your code your real (and only) form of intellectual property?

    I for once want to, believe that an Organization's Real Intellectual Property is the knowledge that was gathered in writing that code and the individuals who retain that knowledge. That’s what I would be really interested in protecting.

    In a discussion one of my Managers once asked me how long my team would take if I was to scrap every single line of code I’ve written for a product and start fresh. My reply was that it would take half the time and I would come up with a product that would be faster and much more feature rich.

    As developers, we grow with each project, module and problem that we solve. I personally feel that it’s this growth that organizations and individuals should be striving to protect. Not just Code!
     
  3. A Lot of code isn’t complete or looses meaning out of context: some years ago; a part of Windows NT code base and a part of Windows 2000 code base was leaked out. Everyone in the community talked about it. People discussed it. Some of us even downloaded it and took a peek at it. People analyzed it, more out of curiosity than anything anything else. But that was it. People couldn’t build the code. Of-course they couldn’t compile Windows NT / Windows 2000 out of it. The code was incomplete and it was out of context.

    There was a particular client that I worked with at an early part of my life, who wouldn’t let any consultants work from home because the DBA was particularly concerned about a Table in the new system which sucked legacy data and had an Item-Id column containing millions of items Ids. While, I completely understood and respected the DBA’s passion to protect data from leaking out, the fact remains that 2 million random numbers (which happen to be a list of item ID) are utterly useless for me, because they are out of context. There is nothing I could have done with a huge list of their Item IDs even if I wanted to. It took quite a bit of convincing to get the permission to be  able to work from home so that I could fix bugs I was really concerned about during late nights and weekends and in the end it worked out really well. We delivered a couple of weeks before the planned date and there was no loss of any intellectual property. 
     
  4. Shouldn’t you focus on what’s coming in rather than focusing what’s going out? In all the arguments for strict systems to protect intellectual property the focus seems to be on “what is going out of the organization” - either an employee or code. Why not spend more time on focusing on employees that are coming in the organization and create processes for hiring people with Dignity and Maturity. Something makes me feel that if some of these Organizations, that spend huge amounts of time in building these extreme measures, spent as much time in thinking about the quality of employees they're hiring, they wouldn't have to worry about Protecting Intellectual Property.
     
  5. I respect NDA’s and honestly, I don't mind signing them: I don't think any developer does. As one of the quotes above mentions "Making the employees sign is the easy part". It really is. And Important too.  Thought I should clarify that before I start getting emails from people I know and don’t know telling me that I am a moron who doesn’t care about protecting intellectual property and respecting NDAs. I completely understand a client's concern to protect their Data and Intellectual Property. I also understand policies of not letting people carry parts of projects or Data on laptops in some cases or projects where the sensitivity is high.

    However,  I would find it a little awkward, if I ever had to work in an organization that implementing policies and had systems which constantly keep telling me every-day, that I am a potential threat to the business. In my personal opinion, some of the comments I heard during these conversations sounded a little extreme which is what got me thinking.

I find the measures, mentioned by some of my friends, in this post, a little extreme. It's probably because of the fact that I've changed very few organizations in my professional life and have been lucky to work at Organizations (including clients and project-teams) which have very difficult interview processes but provide tremendous amount trust, freedom and liberty in the hands of their employees once they are a part of the team.

A sarcastic answer to “extreme measures and systems to protect your intellectual property” posted at this forum seems like a good way to end this post. A person with a sense of humor comments –

"I want to work for you people! A boss who considers me a significant threat to his business and acts as if I'm a thief waiting for the opportunity to strike would make me feel like such an appreciated member of the team."

Do you feel that you work at a place that considers you a significant threat to their business? Wondering what you can do about it? If you answered "Yes" to these questions, remember - you can either change your company, or you can change your company. :)

posted on Saturday, January 20, 2007 7:53:30 PM UTC  #    Comments [2] Trackback
Posted on: Friday, December 15, 2006

Shhh, don’t say those words! They’re like dark-dark-black-phase of a programmer’s life when his ego and self-respect have already fallen down to an all time low. Don’t make it worse for him. If you're in India, at around this time of the year, you can see so many young software engineers literally playing the change-your-job-musical-chair as they jump from one firm to another. Ask anyone of these young, talented engineers why they are looking for a change and chances are, the answer will be pretty similar this one I heard during a recent interview I was taking:

"I haven’t been assigned to any project for the past three months! Which is why I started thinking about moving on to a different company… you see, I want to work with the latest cutting edge technology and face bigger and better challenges, but in my current organization, I have been on the bench for the last three months!"

“And, what’s wrong with being on the bench?” – If you’re like me you will be tempted to ask, but don’t. Shhh, don’t say those words! They’re like dark-dark-black-phase of a programmer’s life when his ego and self-respect have already fallen down to an all time low. Don’t make it worse for him - You’ll insult an already insulted developer. You’ll hurt an already hurt engineer. Don’t you get it? The guy is on the bench! And he has nothing to learn or do because he’s not working in a project.

But wait, isn’t that just… stupid?

Ok, go ahead, say those words, and ask that question. This isn’t an interview where I can hurt someone’s feeling. This is my blog where I can speak my mind! So go ahead, ask that question – “What’s wrong with being on the bench?” – Seriously. I don’t know about everyone else, but I don’t get it. Honest.

I’ve heard the words “on the bench” being mentioned as if they are evil. When they're on the bench, I've seen a lot of developers translate that into some pretty conventional (and in my personal opinion: stupid) interpretations. Based on my conversations with a few programmers who are looking for a change because they are on the bench – being on the bench is equal or synonymous to a few things. The list of these interpretations is long, but some of these, I've heard are:

  1. You’re on the bench = you don’t have enough opportunity to learn new technologies, so you should move on.
  2. You’re on the bench = your company isn’t doing well and is going to shut down, so you should move on. 
  3. And last, but not the least, you’re on the bench = you’re not important and there’s nothing you have to offer to the company, so you should move on.

Long story short being a lot of Developers feel that being “On the Bench” means you’re literally “on-the-bench”. In other words, being on the bench is like:

(Only, not just as cute :))

In a recent conversation / discussion / friendly debate with a person who works in the HR department of a software development firm, I was told:

"You’re thinking from your perspective which is very different, maybe slightly more mature than a typical junior developer. You might be able to work on your own project, work on your company's intranet website, write your own blog, articles, conduct trainings and think of a thousand other things to do, but a normal developer comes to office to work on projects and code for clients. If he doesn’t get that opportunity he is going to leave and find a place where he gets exposed to a real life project."

Yet another person who heads the accounting department and participates in HR related decisions, of a solution provider explains in another healthy discussion:

"Yes, I understand when you talk about self development, personal initiative, training, blogging, articles, starting personal frameworks and everything else. It sounds nice and good for 1 month. 2 months, maybe - but tell developers to keep doing that for more than that and you’re sure to see their resumes floating around in other companies."

After all these conversations and discussions with people from different companies, different departments and different roles I still don’t get it. If you do, please explain it to me like I’m a six year old, will you? Maybe I am just dumb. If you’re on the bench, isn’t that a golden opportunity?

A chance to write what you always wanted to write, an opportunity to work on what you always wanted to work on, an opportunity to read, learn, teach, discuss, have fun and offer help to departments within your own organization and the community in general (if nothing else, answer a few questions in a technical forum)? Just so, that I don’t digress, let me think and write about each point:

> You’re on the bench = you don’t have enough opportunity to learn new technologies and it’s bad for your career.

So all projects that all developers work on use the latest cutting edge technology, right? Wrong! There are Non-IT companies out there who still haven’t got over Visual Basic 6.0 and many more that are still a little reluctant to move from .NET 1.1 to 2.0.

"We already have MySQL so it would be nice if we can just use that for the project instead of moving to SQL Server 2005. We already have .NET 1.1 and will not be upgrading to 2.0 until next year. We don’t want to use WPF since it’s still in Beta and RC stages."

Any of that sounds familiar? I’m not saying there’s anything wrong with these statements. It’s a part of the job to provide the best solutions to clients using the tools that are available at hand and keeping the project cost minimum. But being on the bench for a couple of months gives us an added opportunity to go wild, pick our favorite tools and develop what-ever-it-is that we want to develop!

It gives us an opportunity do more-than-just-code. It gives us time to read articles, read blogs, write articles, blog a little more actively, learn things we always wanted to learn and strike out items on both – our Professional and Personal TODO lists of life.

Given the choice, I’m curious what a developer (just for the sake of discussion, let's assume he's a DotNet developer) who makes a lot of noise about being on the bench, would prefer - working in a Visual Basic 6.0 project and billing a client or being on the bench and have fun working on .NET 3.0 pieces? Personally, I would prefer the later; but I haven’t had the pleasure of enjoying some On-the-bench time for the past few years – so, I have no right to pass judgements and we're using .NET 3.0 pieces in the project I'm involved with so I can't even complain! :)

> You’re on the bench = your company isn’t doing well and is going to shut down.

In one of my first jobs, I worked in a company that shut down a few months after I switched jobs. When a firm is about to shut down, it’s usually pretty easy to make out. The stock prices, the ambience, the announcements, the changes in policies, cuts in budgets and everything else that happens in a company about to shut down is very different than things that happen in the normal course of business. Based on what I know, It usually begins to suck and as an employee you can feel it, even if there are no formal announcements! Organizations with huge numbers of employees don't just shutdown one-fine-morning! Unless of-course, you can feel it that your company is about to close operations and pack up, isn't connecting your being on the bench with your company shutting down, being way too paranoid and a little dumb?

> You’re on the bench = you’re not important and there’s nothing you have to offer to the company so you should move on.

Personally, I find the most frustrating. Every client office I’ve visited, every firm I’ve worked at, (I haven’t worked at many - I’m not very good at the change-your-job-musical-chair game :)) there are always things to automate and problems that technology can solve. Walk up to people in different departments. Talk. Offer help. Some of the Excel COM EXEs in .NET, I’ve written for the finance department of our firm, in my free time and weekends have been the most logically challenging and rewarding pieces of code I've written. I continue to support them in my free time, because it’s a rewarding experience. If nothing else, go ahead and participate in an open source project. It’s a Win-Win situation because it helps others and gives you challenging problems you can solve!

Write re-usable components, frameworks, user-controls, web services or anything and post them on the company intranet, or maybe publish them out to the whole wide world. Lookup the Bug Tracking system of an on-going project in your organization and offer them SVN patches, conduct trainings, clear certifications, train others, blog, conduct presentations, participate in forums… seriously, how can you run out of things to do, just because you're not officially assigned to a project?

Coming back to where I started, what is wrong with being on the bench and not working on a real project for a few months? While I ask what’s wrong in not writing code for a client, for couple of months, Jeff Atwood goes one step further and questions: Does writing Code Matter? He advices:

"Try to spend some time talking to people instead of the compiler… 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."

Being On-The-Bench for a couple of months, gives us some time to do just that – it lets us stop talking to a compiler and do whatever it is that we want to do. Including perusing ideas and initiatives we always wanted to pursue. 

If you are someone who looks for a change everytime you're on bench for a couple of months - The next time you’re on the bench,  may I suggest not playing the change-your-job-like-you're-playing-musical-chair game.

Instead, why not strike out a few items from your Professional and Personal TODO lists of life and get them done, so that you can be a better professional and a better person? You do have Professional and Personal TODO lists for life, right? If not, now is a good time to start making them. :)

posted on Friday, December 15, 2006 10:53:12 AM UTC  #    Comments [2] Trackback
Posted on: Sunday, November 12, 2006

A few months ago, I was presenting in a New Employee Orientation Seminar. I was expected to speak about my professional experiences in past 7+ years of software development and 4+ years of work @ eFORCE. It was the last presentation in a three day program and everyone looked a little tired and bored so I decided to speak about my stupidities in the past 7+ years of software development and 4+ years at eFORCE instead. It was all about all the stupid mistakes I had made in the past 4+ years and what I had learnt from them. It was fun giving that presentation and the audience was great.

During the presentation I asked a few fundamental questions to the audience:

  1. What do you do?
  2. Why do you do it?

Answers like - "I'm a Tester", "I am an Engineer" or "Because it's what my job requires me to do" were not allowed. It's always interesting to hear some other answers. Some of the other answers I've heard are quite interesting. Once you remove the standard answers out, the question becomes as interesting as "Why do people write open source software?" (ok, that post is for some other day :)).

Michael Hunter seems to answer the first question right on his blog title. What does he do? He has been Making Developers Cry since 1995. That's the kind of answer that makes my day! :) Seriously!

People writing / testing / coding / designing and analyzing software today, are here for different reasons. I've discussed this with friends, strangers, colleagues, acquaintances and pretty much anyone who has anything to do with Software, that I've had a chance talk to. What do you do? And Why do you do what you do?

Most answers are interesting. Not all sound as interesting as Hunter's blog line, but I "get them". They make sense. I've been lucky. I have never met a programmer, tester, technical architect, project manager or business analyst who is really sorry that he is, what he is. Most of the ones I've met or talked to, like what they are doing.

Some haven't really thought about it. That's ok. But I've not yet met a software-person who's sorry or apologetic about being a programmer or what-ever he / she is. Maybe it's just because of the place I work at. Maybe it's because our interview process kind-of makes sure you like what you're doing before you get in!

So, long story short - I don't know any programmer who's pathetically sorry about being a programmer and I don't know what it would be like to meet one.

A couple of days ago however, I received this email forward which had been sent by a Senior Engineer I know. This was just a casual forward of a random poem he had found somewhere on the web. It was sent to a dozen other good developers, good testers, good business analysts and other people who were pretty good at what they do. You know, the kind of forwards that you get, and then you forward them to others because you find something in it interesting, funny or casually amusing. Yes I did find it a bit funny which is why I guess it was sent to all of us so that we could get some kick out of it! Here is the poem from the email which was signed by the name of "Author Unkown":

If I could meet the guy who wrote this poem, I would have a lot to say to this "Author Unknown". Here's how it would go:

"Wow! You sound so pathetically helpless, you're almost funny!! Dude! You joined Software Development for all the wrong reasons! Actually, you would have written similar poems for anything else that you might have done in life.

Let's Analyze the above lines a bit, shall we? On one hand you claim that the software world has made you wealthy and on the other you 'need' the money this profession pays you! Even you poem lacks logic, I'm sure your code is no better.

You need to stop everything else and start learning how to code. Now! But I don't think you'll do that, because you don't seem to like anything that requires any form of hard-work anyways. Which kind-of explains why you can't get away and find something else to do.

You're just a good for nothing, confused little cry-baby. But don't worry, if you keep composing contradicting poems like these, which we all find funny, and can forward to each other, we'll all have a charity fund for you so that you can go out and have fun with your honey and not have to work too hard!

On a side-note: I think there are plenty guys in India who could genuinely use that charity fund. So cancel that idea. You don't deserve it, you depressing insect who doesn't even have a name!!" :)

Jokes apart, that just sounds like a mean and controversial thing to say and I'm not a mean person. And of course, there was no way I could meet this "author unknown" guy and fix him like a major bug resulting out of bad design should be fixed. So I decided to pack my objectivism in a box and not even try to think about what I would say to this guy if I could meet him. It was nearing Friday and I had builds to push and work to do!

It was within a few hours, yet another email dropped from in my inbox. Apparently, I was not the only person who had problems with this poem. This was from a mentor, who also happened to be in that list of all people who just happened to have received that email. He had seen the poem, and had hit the reply-to-all button.

His email was a really motivating poem he had composed in a short span of time (I'm not sure if he would be ok, with me posting his poem on my blog. So, I'll just wait till he says it's ok to post it here or till he posts it on his blog or something and then I'll update this post with the text / link or something more about it.)

Okay, now that we had a discussion going, and my build had been pushed, it was time to hit a reply-to-all and post my very own personal version of this poem, which would have otherwise remained in my personal journal. Here's how my poem / email went:

After seeing the poems, this one was mostly composed for my personal journal. But since we have 2 versions of the same poem already – here’s mine. It’s a little long though… I get carried away when I write for myself :)

I start my mornings
Thinking about last night's error-codes and warnings

It's an hour's trip to the workplace.
The streets are like a mad rat race.
But I am happy, a smile on my face
Because last's night bug...
Oh, that was just the database!!

I figured it out!!
I'm a better coder now.
When I see the same bug again,
I'll know the “why” and the “how”.

With 32 new emails, my laptop is finally on.
Good! I say. 32 new battles that can be won.
Time is short; I must pick the wars I fight,
And just like my life, keep my code,
Processes and philosophies light :)

I must manage, I must learn,
Make mistakes, and definitely earn,
No, not money! The money will come!
Let me chase something that's chased by none.

The crazy day moves on, I take a pause.
To look back at the day that "was".
Teachers, Friends and strangers say,
That I should follow their way.

But I took a turn I wanted to take
For No-one else, but my own sake.
I think It was the monitor's light,
Or maybe the curly brackets and the semi-colon’s might :)
But it felt, and still feels like, love at first sight.

With no big degrees and no big college names to write,
I knew it would be a difficult fight,
But why do easy crap, I thought...
I'll simplify and get the difficult stuff right!

Then I snap out of reflections and stop thinking about the past.
It's time to get up and move ahead. Steady, yet fast.
Mustn't think way too much,
Just solve anything, that’s thrown my way, as such!

Give Presentations, Contribute, Argue, Write Blogs, Articles, Code, Document,
Design stuff and be an Analyzer.
The day moves on and I'm just a little wiser.

Its late at night and the street-dogs bark at my car.
As it speeds towards my home that's far,
I wake my family up at midnight,
And on their faces, I see a smiling light.

We laugh, we joke, we eat and talk.
The weekend's near, we’re planning a long walk.

The day finally ends…
With a tired body, a heavy head,
I go to sleep and sleep like the dead.

But the sleep brings me bliss.
Because doing my karma, is what I didn’t forget or miss.
Tomorrow is going to be another day,
And if you've got a thousand new battles for tomorrow…
well, bring them on, my way!

The way the divine and me choose together,
And at times, it’s a little bumpy just like bad weather.
But fighting the bad weather is just a part of the game.
If I did anything else I would go insane.
Little, but Quality time, spent with the ones I Love,
tell me that my efforts aren’t in vain.

(Ok, that was the philosophy part – now, just like life, let’s have some raw objectivism… :))

And then there are guys that say –
“But you work for money and fame”
“Yes”, I say – I bloody well do!
Money, fame and a big fat name,
And I wish anyone, who loves what he does,
just the same! :)

It’s not “just a profession”! It’s who I AM!

And It goes on and on for many more lines… but I think I’ll stop here! At the end of the day it’s all about the perspective :)

Cheers,
Rajiv.

P.S. – I think I’ll blog this! :)

And then I received more than one emails telling me that I should in fact, seriously, blog this.  I’ve seen other poems in the past that are a little depressing, (some of them are even cute or funny in their own way and they mean no harm) but this one was just way too depressing to not criticize blatantly. So, here it is. Officially blogged. My poetic reply, thoughts, views and stand on the so called, Programmer-Poetry from Mr. "Author Unknown" who is nowhere close to being a programmer. Something that would otherwise go to my personal journal, published live.

This poem, which started as a fun-email-forward, helped. Becuase it gave a chance to everyone in the mail trail, to take a pause, and ask themselves the two important questions, which I'm going to ask again, to everyone reading this post.

So, what do you do? Why do you do it? Have an interesting answer? Drop me a comment poem! :)

posted on Sunday, November 12, 2006 5:21:40 PM UTC  #    Comments [4] Trackback
Posted on: Tuesday, October 31, 2006

When I first came across Microsoft development Platforms, in the QuickBasic days, I was hooked. Because the tools allowed me to produce results. Single handedly. In a short span of time. I could write proto-types and see things happening.

Even today, my reasons for sticking to Microsoft tools and technologies (and trying to bring developers from the "other side" over to Microsoft tools and technologies :)) remains the same - Productivity.

A couple of days-to-a-week and I can cook up POCs that convey the fundamental vision of a huge module to everyone involved. We can have brain-storming sessions, take notes. They don't like what they see? I can move big chunks around and give them something they want in a matter of hours!

Whiteboard meetings / Conference calls > light weight documentation > quick releases (every month or so) > Feedback (cycle). That's how most Microsoft Developers (me included) love working.

A few days ago, an ex-army officer who is now a HR person in a software development firm, wanted some help on how to do Business Analysis asked for my help. He wanted me to review the detailed Use-Case Documents he had written for an internal project that he was analyzing for his company.

This was his First Attempt at Business Analysis and he had already prepared:

  1. Lengthy Use-Case documents.
  2. Visio Wire-frames that were as detailed as capturing widget level validation!
  3. Detailed Visio Flow Diagrams.

He was a smart individual taking his first steps towards Business Analysis and has asked for genuine advice. It was time to take a pause and have a little bit of discussion. My sole objective was to convince him about a few things:

  1. Writing complicated documents and making complicated diagrams, has nothing to do with "Business Analysis".
  2. Business Analysis is no different then rest of Software Development, where Occam's Razor and Kiss are the only two principals that work. Not Waterfall.
  3. Knowing what you are doing is more important than making really complicated diagrams on what you are doing.
  4. Use simple tools. (Unless of-course, in very rare situations, when you have to use complicated ones!)
  5. The best Analysis and Design tools ever are White boards, PostIt Notes and the Human Brain! :)

Steeve Yegge is his long Rant about agile says:

"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!"

It's interesting to know that even something as light and flexible as Agile doesn't sound light enough to Steeve. I wonder what he would have to say about Waterfall, RUP and writing a detailed 12 page Login Use-Case document :) Anyways, I digress. On a serious note however, isn't the same statement valid, in practically anything you do in life, including Business Analysis?

Being lightweight in a Software Development firm like wearing casuals at work. In a more mature organization / teams / work-cultures they'll understand. In lesser mature ones - they'll look at you with knitted eye-brows when you walk into office with that black T-shirt and Blue jeans. But that's OK. As long as you keep shipping quality builds on time.

I've always believed in putting some thought into what you're building before you start building it. But, I was never quite a Use-Case document guy myself. So what do I feel about some other techniques of documenting requirements:

  1. White board diagrams? - Definitely!
  2. User stories? - Sure, as long as they don't go more than a couple of paragraph each.
  3. HTML Mockups? - Sure! (As long as someone else makes them based on white board diagrams :)).

Scott W. Ambler makes an interesting point:

"The longer your project team goes without the concrete feedback of working software, the greater the danger that you're modeling things that don't reflect what your stakeholders truly need"

I've heard of projects, in so called Huge Indian Software Consultancy firms, where there are specialized teams for synchronizing Use-Cases with code, Specialized guys for just filing bugs (These are guys who file bugs NOT find them!) and specialized guys for Formatting these Use-Case documents and versioning them. I've heard stories of projects failing in these environments from friends and I am told that when they do fail it's a very ugly process basically focused towards: "We have the documentation and the proof! Let's track down the culprit!"

A friend who works in one such Large Indian Software Development Firm describes their check-in process:

"We're not allowed to check-in code or fire builds. We check-in to a different source control and email the Build Manager. Who reviews our changes and commits them to a QA source control system. A Business Analyst runs those changes and verifies that they confirm to his Use-Cases. Then the tester runs Test-Cases, which are built based on Use-Case documents and does manual testing after which the Build Manager checks our changes into the Primary Source Control System which only he has access to. All changes including caption changes of labels go through this process. We build based on Requirements that have been analyzed carefully!"

I had to quote him on this one. It's been weeks since that discussion with him and even though the words aren't exact, but the idea is precisely that.

Then there are companies where people have one meeting and start writing code. A person I was interviewing explains their Process and how they Analyze Requirements and Develop software:

"Some of us use Visual Studio 2003 while some have moved to Visual Studio 2005. We are all free to choose our own IDE, frameworks and do our thing with code. We have a couple of meetings with the clients... and then we code."

Wow! Both aspects sound equally scary to me. The first one, more often than not, leading to Analysis Paralysis followed by a search-for-the-guilty phase every time something unexpected happens and the second one... let's not even talk about that. 

Walking on the middle path is difficult. You need focus, balance and a team that takes work seriously. At the end of the day, if you really think about it:

  1. Shipping regular weekly builds and having Continuous Integration and letting everyone "see the status" is difficult - Sending weekly status reports in word files is easy.
  2. Shipping a fully functional POC is difficult - Making Use-Case diagrams and Flowcharts (which, most of the time, don't cover all flows) is easy.
  3. Having a white board brainstorming session with the stake holders and managing scope are difficult - Writing a 26 page Use-Case document that confuses your client is easy.

Didn't we all come here because we wanted simplify and get the difficult stuff right? Analyze this! And btw, please don't write a detailed lengthy Use-Case document on this Post! :)

posted on Tuesday, October 31, 2006 8:02:56 PM UTC  #    Comments [4] Trackback