Are We There Yet?

by Jacob 29. January 2007 17:19

"So when will you be done with this development project?"

I don't know about you, but I hate this question. There simply is no good answer for it. It seems like such a simple question with a simple DateTime valued answer. One of these days I swear I'll answer with, "Oh, I'll be done next Tuesday at 2:34pm." just to see what happens.

And seriously, businesses hate that we have such difficulty answering the question. It seems perfectly reasonable for them to want to know when they can plan to have the new processes that they know they desperately need. Developers demand high salaries and are ostensibly professionals, they should be able to give a professional answer, right?

The Road is Well Paved

The thing is, software development is a lot harder than people expect it to be--and this includes software professionals. Even simple software projects can run afoul of hidden complexities that can destroy well meaning estimates and make everyone unhappy. And no matter how you hedge your answers, people simply don't remember all your caveats, maybes, and what ifs that you use to indicate uncertainty.

The end result is that developers seldom make their ship-by dates and companies become disillusioned and impatient with all software development. That's not helpful for anybody, but it's pretty much the rule anymore.

And the fact of the matter is that the vast majority of developers (and development managers) never learn how to answer the estimate question. They'll move from company to company, repeating the cycle of hope, suspicion, and disappointment over and over again. Which works well enough for the developers in the boom times when the demand for development is so high that mildly talented house plants can get hired as developers.

So a lot of people are making the same mistakes over and over. Businesses can be excused for assuming that this is simply the way things are and feel confident in their distrust of software professionals. They've been there, done that, bought the t-shirt.

Paying the Toll

This environment causes developers who care about these kinds of things a lot of heartburn. Everyone pays for the ongoing cycle of disillusionment. I believe that this is what really prompts posts like the recent ones from Ted Neward talking about professional ethics. And I've been known to throw my own hat into the ring as well.

We get tired of paying for the sins of those who have gone before. And I'm not referring to the messed up legacy code we stumble into, either. Frankly, messed up code is the least of your problems coming into a situation with a client who has been burned by previous developer promises. Companies that have had deadline after deadline missed have a degree of mistrust that is very hard to overcome.

We pay for this distrust in a hundred different ways. The thing is, trust is a paying commodity in business. Working with partners you trust means a whole lot of overhead you can simply skip. An analogy: if I trust a plumber to fix my sink quickly and professionally, I can go get a burger and leave him to it. It's only when I don't have that trust that I have to pay the additional overhead of having someone I do trust watching to make sure he's not napping under the sink.

Want to see a business manager go into a dreamy fantasy? Ask them what it'd be like to be able to trust their software developers (in house or not). The more experience they've had with developers the more intense the fantasy.

The Rubber Meets the Road

We have a couple of areas of friction in businesses that exacerbate this situation. The main disconnect with business managers is that we have borrowed terminology and tools from other disciplines without understanding that our processes are fundamentally different. It's tricky because the temptation to use manufacturing terminology is immense. After all, we are creating a product of sorts. This makes so much sense on an intuitive level that it's hard to realize that the comparison is misleading and potentially dangerous.

I wish we could retrain everyone to make analogies to other business specialties. Scientific research or law come to mind as potentially useful analogies because both are similarly plagued by the impact of unique situations, changing ground rules, and unforeseen complexities. It would be interesting to investigate how managing software development like a patent application or drug research would change how we look at the problems involved. We might have stumbled onto iterative cycles and responding to altered requirements a whole lot sooner, for example.

Paying Attention

The real problem, though, is that most developers (and even most development managers) don't take the time to learn about common friction points. Nor do they take the time to build relations with their business counterparts so that you have some political capital (aka trust) to use when it is needed. It's easy to forget that much of the progress in software development practices are pretty recent in terms of business processes. After all, business managers don't move at the speed of light and changes tend to take time to penetrate those layers.

Which means that a whole lot of industry advances aren't even theory yet in the board room.

And the fact of the matter is that you cannot expect a business manager to understand what makes Agile practices work. Or the reason that strong unit testing saves time over the long run even though it takes more time up front. Learning to communicate at a level that is sufficiently detailed for smart business decisions without getting bogged down into the jargon inherent in any specialty is an invaluable skill, and one best learned earlier than later. That means thoroughly understanding those theories yourself--not just on the surface or in buzzword compliance. It also means learning to communicate that understanding from orbit, 30,000 ft, 5,000 ft, and right on the ground. This is hard to do. It takes practice. It also takes exposure to business manager types. I'm not sure which is harder...

Something to think about, though: not learning this skill leaves you at the mercy of those who do learn it.

My point, though, is that it takes both. You have to learn your profession so thoroughly that you can deconstruct its "best practices" ("design patterns", whatever) and rebuild them from basic principles on the fly. AND you have to learn to communicate that understanding comfortably to people of varying familiarity with software development in a business environment.

That's what it takes to be a true professional. It's easy to let those two skills fall out of balance. Individuals who understand both are invaluable to a company. Also rare. Companies who discover someone capable of both are often surprised at how much smoother things run with that person placed where they can do the most good--a point Jeff Atwood's latest on becoming a better programmer drives home.

So I don't have a formula for quick and accurate estimates. Just a lot of hard work. Still, here's a tip for free: anyone asking for a firm delivery date is inherently assuming BDUF. Once you know that, you know where to start your answer.

Tags: , , , , , , , ,

Management

Comments


January 30. 2007 23:55
Joshua Volz
I am starting to get into the habit of avoiding answering this question.  Instead of giving them a date, I explain that I am going to do a prototype, and show it to them, and they will make suggestions and then I'll make changes.  This process will continue until they get what they want.  Usually this works because of two reasons:  (1) they are involved, nobody likes to be kept in the dark, and (2) In the end, they get what they want.  Most people are willing to work through a process, even without time constraints, if in the end they are going to get exactly what they want.  It's a powerful motivator to let the process work itself out - if they retard the process by forcing dates, they are, by definition, making us give them not exactly what they want.  They know it, and they know they can't blame us, since they aren't working within the process.  Naturally, this bothers them, and they would rather get what they want.  It also gives them the option of ending the process when the product is "close enough."  It gives them more control over delivery time, which they naturally like.  <br /><br />If they do force a date, then I just work to that date, trying to get as many features done as possible.  Usually, I will try to get a round of review in before the final date, that way they have a chance to get some input in and see what progress is being made.  The shorter you can make these cycles (I like two weeks) the better your customer feels.  Also, it keeps you from going too far without input from your customer.  <br /><br />In summary, I am finding that business people are more used to a fluid system than we think they are.  Yes, they are trying to coordinate things, but they are used to dealing with seemingly random changes in schedule and work habits (particularly small business owners - their lives change on a daily basis).  Make sure, in the end, you give them what they want, and explain that the system you have setup will get them to that goal.  It works, honest.


January 31. 2007 20:26
Jacob
Joshua,<br /><br />Yeah, working on a progressive release basis can be useful. The drawback from a business perspective is also it's strength: you keep going until you're done. This plays havoc with the ability to plan both in terms of time and money. Being able to show steady progress ameliorates this somewhat, but it can still be a (major) concern.<br /><br />The other thing you contend with are those clients who want to give you a spec and "pick it up" later. They don't want the project to take up so much of their time. I'll actually walk away from this type of client if that vibe is too strong, but sometimes you just have to work through it.<br /><br />I guess my broader point is that there are a lot of factors at play in a programming/business relationship and many of the skills needed to make it work are just that: skills. If you have a way that *generally* works well enough, that's cool. And certainly educating customers in processes that work is a large part of what I'm talking about. It's just also important to be able to adapt to the situation as it unfolds and to build a basis of trust with a client by showing you can interact in ways that are comfortable for them.


February 13. 2007 09:20
Yin-So Chen
Jacob - <br /><br />Yes biz folks certainly can learn more about software development - I've expressed that view point pretty extensively in www.yinsochen.com/.../. <br /><br />On the other hand, if biz folks have to ask developers "are we there yet" - developers have failed. <br /><br />This is a hard lesson to learn (and I've earned it the hard way) - but the truth is, once we've communicated a date - we own the date, until we change it. <br /><br />I've found that with proactive communication, biz folks might not like the bad news, but they like it A LOT BETTER than no news. And they will trust you more, because they will perceive that you are part of the team looking out for everyone's best interests. <br /><br />That's why it is important for devs to learn other skills besides technology.  And there is no better way to learn than just do it - proactively. <br /><br />Thanks for the good article.


February 14. 2007 03:22
Jacob
Yin,<br /><br />Communication is the key, really. If you ever find you *have* to give a date, you're right that you'd better live up to it and make sure that communication is flowing so that business-side managers know what is going on and where things stand.<br /><br />What I'm talking about is bigger than "merely" upholding your end of any bargains you've made, though. What I am saying is that we have to make sure we truly understand what the needs of the business are, that we are dedicated to furthering those needs, and that we know how to work with the business managers in doing so.<br /><br />The reassurance that you can "talk human" with the marketing and accounting and legal and project management (and so on) is, all by itself, a way of building the trust you need to see software projects through to successful completion. The key is to make sure everybody is united and working as a team instead of confused, struggling, or undermining the efforts of others in the company.


August 8. 2007 13:41
Joshua Volz
Yes, communication is the strongest and most important tool in your arsenal.  I agree that it is important to build trust.  Ideally, you would do a couple of small projects (ending in resounding success) before you tackle something that is more complex and that has a higher risk of failure (late, bugs, etc.).  That builds trust, and indeed that trust can be important capital.  

I was concentrating more above on saying that it is important to educate the customer on the methodology of software creation, particularly the parts they have to be involved in.  


August 8. 2007 15:16
Jacob
Joshua,

If a customer wants to know more about the methodology of software creation, then by all means, educate them as much as you can. My point in the above is that most customers don't want to and shouldn't have to learn about the methodologies of software development. You, the professional, should be prepared to explain and communicate your reasons from base principles at the level the customer (or business manager, or whoever you need to convince) can appreciate. Expecting them to learn your own discipline is a self-defeating expectation.

Comments are closed

Information

    Recent Posts

    Calendar

    <<  September 2010  >>
    MoTuWeThFrSaSu
    303112345
    6789101112
    13141516171819
    20212223242526
    27282930123
    45678910

    View posts in large calendar
    Disclaimer
    The opinions expressed herein are my own personal opinions and do not represent my employer's view in anyway.

    © Copyright 2010 Scruffy-looking Cat Herder