I've always discouraged ivory tower development-- teams where developers are cloistered away for years in their high towers, working on technical software wizardry. These developers have no idea how users will respond to their software they're creating. They probably couldn't even tell you the last time they met a user! In the absence of any other compelling evidence, developers assume everyone else is a developer. I hope I don't have to tell you how dangerous that is.
In my experience, the more isolated the developers, the worse the resulting end product. It doesn't help that most teams have a layer of business analysts who feel it is their job it to shield developers from users, and vice-versa. It's dangerous to create an environment where developers have no idea who the users are:
I gave a presentation to an all-hands meeting for a division of Sun, and I asked the group to raise their hands if they'd met a live customer in the last 30 days. Couple of hands went up. "The last 90 days?" One more. "The last year?" Another two. There were over 100 people in that room directly responsible for deliverables that went straight to users... in this case, Java training courses.This flies in the face of some software development models that believe if you've done your specifications right, there should be no need for the "workers" (programmers, writers, etc.) to ever come in contact with real users. That's nonsense. What users are able to articulate before they have something is rarely a perfect match for what they say after they've actually experienced it. It's just like market research: people can't tell you in advance exactly how they'll react to something. They just have to try it. And you have to be there to watch. And listen. And learn. And then take what you learned and go back and refine. Which is why the old waterfall model is pretty much the worst thing to ever happen to users.
Make the effort to expose your developers to users throughout your project lifecycle. Bring one developer from your team to every meeting with users. Involve developers in your usability and acceptance testing. Nothing removes a developer's Homo Logicus blinders faster than seeing a typical user struggle with basic computer applications. Developers simply cannot comprehend that the average user doesn't even know what ALT+TAB does, much less how to use it. They have to see it to believe it.
Most projects I work on these days are internal. I define internal projects as projects where users are forced to use your application whether they want to or not. So much for free will. And, too many times, so much for concerns about software quality. As Joel says: sadly, lots of internal software sucks pretty badly. It's true. And it is sad. This is another form of Ivory Tower Development: what incentive do I have to care about the concerns of our "customer" when their job requires them to use my application?
I'd much rather work on projects with paying customers, or at least treat internal projects as if users were paying real money for your product. That engenders what Eric Sink calls a mutual trust relationship:
When people buy software from you, they expect a lot, both now and in the future:So, by asking users to pay for your software, you are asking them to trust you. But how much do you trust them?
- They trust that your product will work on their machines.
- They trust that you will help them if they have problems.
- They trust that you will continue to improve the product.
- They trust that you will provide them with a reasonable and fairly priced way of getting those improved versions.
- They trust that you are not going out of business anytime soon.
The vendor/user relationship is like a relationship between two people. And relationships don't work without mutual trust. If one side expects trust but is unwilling to give it, the relationship will fail. So often I see software entrepreneurs who don't want to trust their users at all. It is true that trusting someone makes us vulnerable. Just as in a human relationship, trust is a risk. We might get hurt. But without that trust, the relationship isn't going to work at all.
I've actually begun to think that internal departments [of large companies] should act as micro-ISVs, charging their users for the applications they build, and actively marketing and selling them to other groups inside the organization. I think that would lead to a leaner, meaner, and ultimately more healthy organization. Plus, the boondoggle projects so common at large companies would die naturally due to lack of demand.
Ivory Tower? This analogy makes my current situation sound prestigious. I’d like to call it a dimly lit mine shaft. I currently work on a project with a team of contractors who are physically separated from the corporate office. So not only is this project dealing with a “disconnect” from the main line of business, but they have an entire team of individuals that are interested in the tasks they have at hand and not in the success of the overall project as a whole. I am very curious as to how this project will succeed (or if I will be around long enough to witness it).
Geoff Dalgas on February 8, 2005 3:09 AMAre you referring to offshoring or just plain outsourcing?
But yeah, isolation is a huge risk with those kind of projects too. That might be what you're there for-- to act as a technical business analyst and keep the offshore developers on track with user needs.
Jeff Atwood on February 8, 2005 5:11 AMG'day Jeff, and thanks for something to think about. I am just starting to think about my own model of development, and started looking at XP (especially stories) as a way to get some "shared vision" from my (in-house) customers. Cheers,
Thomas Williams on February 8, 2005 8:59 AMI know this is a bit off topic, but it's not offshore, it's overseas!
I'm sick of people calling them offshore developers. They're not programming in the middle of the ocean floating around on a boat.
Drilling for oil can be done offshore. There is no such thing as offshore developers. It's overseas.
Emre on December 7, 2007 5:29 AMAMEN! Thankyou!
I have an excellent suggestion on how to facilitate these meetings: How about, after hours, users calling get the option:
"Press 1 to speak to a representative in India about the problem, where its now daytime and people are awake and at work. Press 2 for the personal cellphone and/or home phone of a development team member nearest you. Be assured if they don't answer the phone, our automated attendant will provide you with a personal home address, so that you can send a thankyou letter."
Jason Kennerly on February 6, 2010 9:29 PMThe comments to this entry are closed.
| Content (c) 2012 Jeff Atwood. Logo image used with permission of the author. (c) 1993 Steven C. McConnell. All Rights Reserved. |