Christopher Duncan is the author of the groundbreaking books, “The Career Programmer: Guerilla Tactics for an Imperfect World” and “Unite the Tribes
Ending Turf Wars for Career and Business Success”. In this interview he talks about and provides solutions to a variety of issues that software professionals face everyday. He also touches on how a software programmer needs to change his perspective to not only ensure that he succeeds but also help his organization do better.
IndicThreads >> Hi Chris! Could you introduce yourself to our readers?
Christopher Duncan >> Hi, glad to be here! Given that I’m now my fourth career doing writing, speaking and strategy consulting, I’m not sure which one of my multiple personalities to introduce. Having spent various phases of my life as a working class musician, a sales consultant and a cubicle dwelling programmer before starting my speaking business, it’s probably easy to see that like most programmers, I think one of the most important things in a career is to love what you’re doing.
IndicThreads >> The info for your book “The Career Programmer…” says that “Unrealistic schedules, unstable releases, continual overtime, and skyrocketing stress levels are legendary in the software development industry…” What do you think is so different about this industry that has resulted in this condition?
Christopher Duncan >> I see a lot of similarities between the music and programming business. In both arenas, you have a ton of people who do it for free in their spare time just because it’s so much fun. I think that the business environment takes advantage of that passion, which contributes to the problem. Mostly, however, it’s caused by the sparks that fly when two radically different worlds collide.
“I see a lot of similarities between the music and programming business…”
In software development, we’re constantly working with new technologies or trying new things. How long will it take? No matter how hard we try, if you’ve never done it before, you simply don’t know. Although many would like to believe otherwise, programming is complicated. Worse still, you’re constantly at the mercy of someone else’s code, whether it’s the operating system or the XYZ library you just bought to display those snazzy graphics. If it blows up when a customer runs your software, guess who they’re going to blame? It’s no wonder that the night watchman’s attack Chihuahua dives for cover every time a deadline draws near so he doesn’t have to dodge monitors being thrown from 5th floor windows by stressed out programmers.
“The sheer unpredictability of our product almost guarantees a certain amount of chaos…”
Now take that volatile, unpredictable world and match it up against a well run business. The suits, no matter how much I enjoy poking fun at them, are experts in organization, management and maintaining a predictable, well oiled machine. They approach software the same as they would selling canned tuna. They hire marketing people of a similar sort, who concentrate on moving the merchandise. The real problem arises when both of these folks start making promises and predictions. When you inventory tuna, you know what you’re getting into, and you can run a business and run your marketing strategies with confidence. Now imagine a food wholesaler with a million cans in the warehouse labeled, “Maybe it’s tuna, maybe it ain’t”, stacked right alongside another batch of cans sporting the confidence building phrase, “We’re reasonably sure this product won’t kill you.” The sheer unpredictability of our product almost guarantees a certain amount of chaos, and when managed in the traditional way, it’s a sure thing.
IndicThreads >> What are the primary reasons for the high amounts of stress experienced in software development jobs? Any simple remedies that you can suggest?
Christopher Duncan >> Well, the first suggestion I’d make is to avoid the tuna sandwiches in the cafeteria… To put it as simply as possible, the stress comes from one group of people being responsible for fulfilling the unrealistic promises and expectations of another group. The solution to this dilemma is for programmers to take human nature, company politics and matters of strategy as seriously as the do coding. When this happens, they learn to communicate more effectively with the people who make the decisions, giving them the opportunity to set the stage for a more realistic development cycle and ultimately, a successful release.
“Stress comes from one group of people being responsible
for fulfilling the unrealistic promises and expectations of another group…”
IndicThreads >> Most project teams would say that deadlines on their projects are unrealistic. Where do you think does the problem lie? Are estimation techniques in software development seriously flawed or is this more of a human problem?
Christopher Duncan >> You’ve really touched on the heart of the matter when you point out the human factor. As I mentioned earlier, it’s almost impossible to predict with 100% accuracy how long a non trivial software project will take because of the complexities and unknowns involved. However, neither marketing nor management cares about this because, like most people, their first concern is their personal career. Marketing wants to make sales, and they’re used to making whatever promises it takes to do this. Management is used to selling tuna, and they don’t want to be the one to tell their superiors that the cans the marketing folks are selling are really only half full because they’ll look bad when it comes time for a promotion.
“Think in terms of what’s in it for the manager to do it your way…”
|Chihuahua from The Career Programmer|
What’s the solution to this? As I covered in my latest book, Unite the Tribes, you have to learn to effectively promote your own agenda if you’re going to succeed in your career. For developers, this means that you have to be able to speak the other person’s language in order to persuade them to follow your scheduling recommendations. Simply put, you have to think in terms of what’s in it for the manager to do it your way. You then have to draw a straight line of logic from your proposed software, scheduling and management ideas to his personal benefit, giving him in the process the ammunition he’ll need to sell his decision to his superiors.
Does this sound like a lot of office politics that you don’t really want to be bothered with? No problem. Hope you have a sleeping bag by your desk. The person who can sell their agenda is the one who gets their way. That’s why programmers consistently lose on deadlines and a host of other issues, because they’re unwilling to learn any skill beyond the technical.
“Programmers consistently lose on deadlines and a host of other issues, because they’re unwilling to learn any skill beyond the technical…”
IndicThreads >> Another common issue is that of requirements creep. Most software teams complain that the client just doesn’t know what he wants.
Christopher Duncan >> Of course the client doesn’t know what he wants! Why do you think he needs you in the first place? This is yet another area where the typical programmer thinks that the world should come to him on a silver platter so that he can just sit back and play with the computer. The client doesn’t understand the first thing about the design of a computer program. He doesn’t think in terms of structured or object oriented logic. He’s unaware of the consequences of any decision he makes, and neither does he realize that he has to spell out every little detail or the ambiguities can lead the project into months of dead ends and restarts. It’s not his job to know this. He runs a tuna distribution center. If you want to know about how manage warehouse workers, route a fleet of trucks to distribution points nationwide, or get that fishy smell out of your clothes at the end of the day, he’s your guy. He has no idea how to turn all of that into a software system, and if you sit back and expect him to do it for you, you deserve what you get.
“Requirements gathering is “What” and not “How”…
Developers have to first master the art of requirements gathering themselves, which is the definition of “what” (not “how”). When they understand how to create a clear and completely unambiguous document that leaves nothing unsaid, that’s the first step on the road to a better client relationship. However, it doesn’t end there. They must then learn how to interact with the client, ask the right questions, draw the information out, and together with the customer paint a clear and precise picture of the software system. Then, and only then, the client can look at it and say, “Yes, this is exactly what I need, except for this one thing over here, which should be exactly this instead of exactly that.”
“You have to work with your client and help him clarify his thinking so that you can do the best possible job for him…
In short, you have to work with your client and help him clarify his thinking so that you can do the best possible job for him. When you do, you’ll not only avoid scope creep, you’ll have a happy client. And that’s something we all seem to forget about these days. The customer is truly what’s all important. Without them, and their money, you have no paycheck.
IndicThreads >> What’s the core idea behind your work “Unite the Tribes: Ending Turf Wars for Career and Business Success”.
Christopher Duncan >> A lot of it comes from the previous sentence. In this day and age where corporations are greedy and workers feel oppressed and taken advantage of, we all tend to forget about the critical interdependent relationship that exists between the customer, the company, and the employees. Your competitors want to take your customers away from you. If they succeed, your company loses revenue. No revenue, no paycheck. Throughout human history, the most prosperous people were those who lived in the most prosperous nations. Rich and powerful empires have more wealth to share than poor and struggling ones.
“Workers need to realize that they really should care about the health and profitability of the company…“
Consequently, workers need to realize that they really should care about the health and profitability of the company, because it’s in their personal self interest to do so. In a similar vein, companies need to realize that without the people, the ones who do the real work in the real world, they have no empire to begin with. When both sides learn to unite and take care of each other instead of building iron curtains, you have the makings of a powerful competitor in the marketplace, one that can dominate the territory by offering superior products and services to their customers. When this happens, it starts an upward cycle where everyone, the customer, the employees & managers, and the company as an entity all enjoy a better and better experience.
IndicThreads >> With the growth of software development outsourcing, things have changed a lot for software professionals in the developed world as well as professionals in the developing world, to whom things get outsourced. Any suggestions that can help both parties come to terms with this change and manage it better.
Christopher Duncan >> Those in the developing world are currently enjoying a prosperous time, albeit at the expense of the developed world. Their greatest risk is what befell many people here. It’s easy to start making a ton of money and assume that it will always be so. As individuals and as companies, they need to always be prepared for the next bump in the road. No path is ever free of potholes, and if you’re not ready for things to change, you’ll have a pretty rough time of it when they do.
“It’s easy to start making a ton of money and assume that it will always be so…“
The developers losing their jobs to cheap labor in other countries are going to have to make changes if they want to improve the situation. I’ll speak to a common problem in America, perhaps it exists in other developed countries as well. We have a real problem here with an ever growing and ingrained sense of entitlement, and programmers are not exempt from this. I hear a lot of people complaining about how it’s not fair, it’s not right, and companies owe it to their employees to not ship jobs overseas. It’s a moral and emotional argument, and it’s just plain stupid.
“In the real world, money talks, and companies listen…”
A company exists for one and only one reason – to make money. They owe no one but their stockholders. If you want idealism, go dig out your parents’ Flower Power t-shirts from the 60s and stage a sit-in. Out here in the real world, money talks, and companies listen. If you want to keep these jobs in the good old U.S. of A. (or whatever country you happen to code in), you’re going to have to show your management what’s in it for them. Why should they pay you $50 an hour when they can hire someone in China or Russia for $5? Having known people in the outsourcing business, I can assure you these numbers are real.
“You’re going to have to show your management what’s in it for them…”
You want ten times the money? Fine, I’m all for that. Now, how do you offer ten times the value? Sit down and make a detailed list of all areas of the development process where you and your local compatriots offer better quality, better productivity, higher dependability, greater security, and every other finite and specific value you can think of that will translate to the company’s bottom line. Now you’ve got something to work with. Along the lines of what I teach in Unite the Tribes, you have to then be able to sell your agenda to the people who can make the decisions, which means you’re going to have to acquire some people skills. Effective communications and better interpersonal interaction, by the way, is a productivity skill that you can sell, and it’s an edge you have over someone who doesn’t know your culture or speaks your native language poorly.
I’d like to digress briefly on this to illustrate a point. In my years of teaching sales, I commonly heard the complaint that people couldn’t make sales because the competition was cheaper. It’s the first sign of a weak or lazy salesperson. I consistently took companies who were priced higher than the competition and outsold everyone else in the field. Cheaper is not always better. Rightly or wrongly, people associate price with quality. That’s an angle even if it’s not true. If you can back it up with the simple statement that you get what you pay for and show how, over the long haul, it’s more profitable to pay more today and reap greater profits down the road, you’ve got a winning proposition. I’ll tell programmers what I told all my clients’ employees. Price doesn’t sell. Products don’t sell. Salespeople sell, and a good salesperson can sell anything.
“Cheaper is not always better. Rightly or wrongly, people associate price with quality…”
What’s that you say, you don’t want to be a salesman, you just wanna code? No problem. Hope you don’t mind doing it for $5 an hour. The bottom line is that if you want to keep your high paying jobs in your country, you’re going to have to come up with a good presentation on why it’s more profitable in the long run to pay more for you than less for someone else. And I hate to be unsympathetic, but for any programmer who wants to sit on their hands instead and just complain about how unfair life is, all I can say is that McDonalds is hiring, and it’ll soon be better money than you’ll make coding if you’re not willing to expand your skills.
IndicThreads >> What is your biggest concern as regards the software industry, something that we need to address right away?
Christopher Duncan >> Quality. Over the years, we’ve trained our customers to accept flaky software as normal. No one in their right mind expects to buy software that doesn’t have bugs. And yet, if they buy a can of tuna that makes them sick, it’s national news. As an industry, we did this to ourselves, and believe it or not, it’s not in the best interests of the company, though that may seem counterintuitive. Getting away with selling buggy software isn’t a win. It costs you big time in product support, and it also costs you when your customer base shrinks. Remember, when you decide to take your business to company B, you rarely write a letter to company A telling them why they lost your money, and neither does anyone else.
“Software Quality is my biggest concern…”
“Getting away with selling buggy software isn’t a win…”
For those of you reading, if you’ve paid careful attention to our conversation today, you’ll notice an overall theme, and it’s something I emphasize in Tribes. Lasting success is built on long term thinking. Short term thinking is what typically precedes shooting yourself in the foot. There’s an absolutely huge opportunity out there for companies and entrepreneurs who are sharp enough to see it. Quality and customer service in our industry is pathetic, and everyone knows it.
“Quality and customer service in our industry is pathetic, and everyone knows it….”
Sooner or later, a company is going to take the extra time up front to do it right and do it well. Sure, the competition will get their features to market first and win the first round of sales. But, slowly at first and more rapidly as time goes on, word will get out. These new guys have stuff that rocks. And when you call them, they treat you like you’re the most important person on the planet, because they really do care about their customers. When version 2.0 comes out, the competition will over promise and do all the standard vaporware tricks. But watch. People will start to wait. The competitors will shout from the rooftops that their neat and groovy features are ready today, while the new guys may never ship. And still, people will wait.
“The oldest trick in the book, one that’s surprisingly been forgotten in our industry:
Deliver the best quality and service….”
The new guys will finally release version 2.0, and even if it’s missing a feature or two, it will be a work of art and solid as a rock. Word on the street will build, and eventually they’ll dominate the marketplace through the oldest trick in the book, one that’s surprisingly been forgotten in our industry: deliver the best quality and service, use that as your marketing tools, and the world will throw money at you. The funniest part about it is that the competitors will never really understand why they eventually had to go out of business.
IndicThreads >> What kind of knowledge / skills are most important for a software professional of today, to be able to Unite the Tribes and also do well as a Career Programmer?
Christopher Duncan >> The most important skills come from the knowledge that quality, productivity and excellence are what truly bring success and stability. To make these happen in the real world, you have to master the strategies of human nature, and make that one of your highest priorities. Can you imagine what the software business would be like if companies found it more profitable to let the programmers do it right the first time? There would be parties in the streets!
“Quality, productivity and excellence are what truly bring success and stability…”
IndicThreads >> Thanks Chris. I am sure your thoughts will help our readers have a more fulfilling career and life. Any blog URL / email you would like to share?
Christopher Duncan >> To contact me for speaking gigs or take advantage of the articles & resources I have up for everyone, just visit my consulting company at www.PracticalStrategyConsulting.com. And if any of you are putting these principles into practice in your job, I’d love to hear your success stories and post them on the site – everyone loves a winner.
Thanks for the opportunity to chat!