Business Requirements are Bullshit
steve-yegge.blogspot.com
steve-yegge.blogspot.com
I call bullshit.
This article was so full of it, the more I read, the more I had to change into higher waders.
As I normally do when responding to a post, I started pulling out the statements I wanted to respond to, highlighting them, and putting my response below. After 10 minutes, I had the Magna Carta. This is simply too much wrong with this article to respond in the usual way.
So instead, I'll just say this...
Get this and get this good, fellow hackers: When anyone says "analysis" or "requirements gathering" is bullshit, there can only be one reason why: they don't know how to do it.
Sure, there are antecdotes and case studies of people building great software without talking to users first, but they are in the extreme minority, and anyone proposing doing this all the time is doing a disservice to his readers.
In order to find out what people need from software, you don't "grill" them, "interview" them, or "role play" (whatever that means). You get with them and "live their lives" and suffer with them, understanding what they must accomplish, how they must do it, and what's stopping them now. How do you do this? Any way you can. Change uniforms and shovel shit with them. Do their job for a day. Put them together in a room, feed them, give them beer (optional), and get them to bitch about it. Identify every single data element related to their tasks. Connect tasks and data to objectives (You may find that half of what they already do is a waste of time.)
In short, do whatever it takes to find out what you need to know to develop your software. This is hard work. Hardly anyone does it now, and relatively few have ever done it. Steve Yegge certainly hasn't. If he had, the data in this rant would have been very different.
Sorry, Steve, I normally enjoy your columns. Do us all a favor and don't say something can't be done because you've never done it. Next time, write about something you've already done. Then we can all resume learning from you again.
Formula for blog entry:
1) Pick an area that most newbies don't get (ie, requirements) 2) Blather on for a while about all the ways they are done wrong 3) Miss the point of the topic. In requirements, you list what you do, then do it. Instead confuse key terms, like "user" and "customer", or "grill" with "be immersed in" 4) Try to be funny 5) Make sweeping conclusions that are obviously incomplete in the real world "Code only for yourself" -- so everybody with a need now has to have a programmer with the same exact need? Wow. 6) Throw in some generally accepted wisdom ("find something good and take stuff out") as a way of tossing the crowd a bone 7) Profit!
As a general rule of thumb, if somebody comes to you with a common phrase from software engineering and makes a sweeping statement (a friend just blogged "reviews are worthless!") then they are either pulling your leg a little bit or don't know what the heck they are talking about. The usual method of attack is to describe how something is commonly done and then disparage the concept by way of association.
The point of that long winded article is don't build something unless you are going to use the product or personaly know a lot of people who will. Never ask people you don't know what they want it's stupid. Take the segway it's cool but it's clearly something people want in the abstract even if it's not useful 99% of the time which is the type of thing you build when you ask people what they want without having any idea what you want to build.
This is a great idea, and the real way to address the problem Steve suggests: Become the business.
However, the majority of your criticism of Steve is way off base, because the methods he describes are not strawmen, but the actual methods described in most of the software engineering requirements books. If you look at Karl Wiegers book, Software Requirements, which is considered by many to be a leading reference on the subject, it describes a process much like the one Yegge criticizes.
Thank you, Matt. You have just demonstrated my number one concern about the nature of discourse here on hacker news. The issue of "book contents" vs. real world experience.
I don't know you and certainly don't mean to pick on you, but calling my criticism of Steve's article "way off base" merits this response...
First a little of my background. Even though I've been a hacker my entire professional life, I had the good fortune to be mentored by an industrial engineer from a user department. He did one thing extrememly well and taught me how to do it: solve business problems to make money. This is the stuff that is rarely taught in any book, much less one that is "considered by many to be a leading reference on the subject".
Shocking as it may seem, many books on business systems and IT offer very little and many are simply wrong.
I have not read Karl Wieger's book and feel out of place evaluating it. However, I did read the synopsis and all 45 reviews on Amazon. Nowhere did I see mention of any of the things from my OP that I know work every time. Instead I saw lots of mention of techniques like rational rose, entity-relationship diagrams, use cases, and modeling. As anyone who has successfully conducted analysis will tell you, these techniques were never actually designed to achieve results; their purpose is to control the people and the process, not the outcome.
I stand by my original criticism of Steve's article. He is dead wrong about analysis. He doesn't respect it, probably because he doesn't know how to do it. Your comment makes me wonder if the same holds true for you.
That said, I am very interested in the things that you know work every time. I'm sure I'm not the only one.
So his title (Business Requirements are Bullshit) was just bait. I guess I took it.
I once wrote a hn post with a lot more "meat on the bones" about what works. Here it is:
I also think that your response is off-base though. Taking your own statements:
1) Steve is wrong to call "Requirements gathering" bullshit because you know how to do it properly
2) "Requirements gathering" as taught in most accepted books and other texts is bullshit
If you then throw in:
3) Steve was referring to the "Requirements agethering" as taught in most accepted texts (and, I'll add, practiced in many large organisations).
Then we get:
4) You're referring to your own special brew of "Requirements gathering", which has little to do with what Steve was talking about!
Unfortunately, when most people say "Requirements gathering", they refer to the standard, accepted processes taught in books and large consulting companies. And those, as Steve declares, are largely bullshit. I worked in a large, process-driven IT consulting firm for 4 years, and I can affirm without a doubt that the processes they used to gather requirements would fail miserably at attempting to produce a great start-up product.
No offense to them, but when it comes to understanding what others want, they aren't able to do it, and often lament, criticize, put down, or devalue other people's actions or responses that don't make sense (instead of trying to understand them). For instance, many hackers can't fathom why so many people use Facebook (and don't try to understand that target population, but just ignore it or write a blog post about how Facebook has no value to them).
If you have the ability (and I really think it is a skill that you have to train) to understand other people and their motivations and needs, then I would suggest doing what edw is saying. But, from experience trying to teach my own hacker friends, this ability is very hard to learn.
Unfortunately for hackers, making what they themselves want often only caters to a small niche market in the vast world of people out there, so it might be useful to invest some time in learning how to understand other people, or team up with someone who has that ability in one form or the other.
The literature on the subject tends to gravitate towards formal techniques: Dance instruction, sex education, grooming, fashion. Not so much because these are the essence of romance, but because they're much easier to describe in print. And because the people who turn to books are not the ones whose relationships are going well, but the ones who need help -- and when the going gets tough, formalism can be a very useful tool. Nobody consults a lawyer on a first date, but when you need a divorce formal procedures come in really handy.
I don't know, but "The Six-sigma Process for Romance; Taking the Guesswork out of Finding Love" sounds like the title of a New York Times Bestseller to me.
I'm with several of the commenters. There's a big difference between books and reality. I'm not going as far as edw with his "modeling controls the discussion" (e-gads! Get this man a UML primer and be quick about it!) but there's a long, long way from a guy peddling a book to a guy you'd actually want helping you to do anything.
I'm not throwing books out. Not by any means. Lots of my friends have written software books and I'm peddling one myself nowadays. Got a bookcase full of some good and some not-so-good books. But it's a medium, and the medium has its quirks.
For me, the point Steve makes is that the optimum is to build for yourself. The feedback loop is instant. That's where the best software gets written. When developers wake up at 3am with some idea for a feature that would make the software they want, work better.
If you're trying to write software for others, it's going to end up as mediocre and probably not entirely what they wanted.
Stop for a minute and notice how absurd this statement is.
99.9% of all software ever written was for others. Was it all mediocre and "not entirely what they wanted"?
This is the entire reason for systems analysis and requirements specification. You don't need to do any of this for the software you're writing for yourself. You must do all of it and do it well when writing software for others; that's how you insure that it's exactly what they want.
In my experience, there is a lot of software out there that is deemed valuable by management, produces good ROI, but is despised in some way by its users. I'd say the majority of it. (And I've been in many dozens of shops as a consultant.) That will fly for internal software for a big company, but not for a web startup.
Another way of saying it: really doing "systems analysis and requirements" right puts you in the user's shoes. That's the part that matters, not the artifacts produced by the process. (I'm preaching to the choir here, I know.) In fact, the "systems analysis and requirements" process matters not a bit, only the result, which should be getting the real user experience into the heads of development.
How about people writing languages, compilers etc. You don't think they use them??
I'd say the majority of open source software is written for yourself rather than others. People contribute the most when they are using that software.
You don't have to be the only customer/user of your software, but it helps to be a customer/user of your own software. That's what I mean by writing for yourself.
http://answers.google.com/answers/threadview/id/43888.html
I'm saying that the ERP, accounting, banking, claims processing, ecommerce, order entry, scientific, etc., etc., etc. software they work on is for someone else. They dwarf those working on games, compilers, and open source.
Welcome to the real world.
Scientific software is often started by someone who uses it and tends to work well.
You're probably right about that.
But enough of it works to run the world. No small feat.
Having lived and breathed (and somehow survived) in the enterprise environment that employs the vast majority of the programmers out there, I can agree with that proposition whole-heartedly.
Yes, 99.9% of the software that gets written is mediocre at best. A shockingly large proportion of it is downright abysmal, but most of it is mediocre. Thankfully, we don't get to see most of that software since it is safely locked away inside the mega-corporations that pay hordes of programmers to write it.
It seems to work pretty well.
When I said I'd like at least a month to actually go and do the jobs of the people and companies in the target demographic, I was told we didn't have time for that.
I suspect what the "business correspondent" wanted to know was something more like:
"My customer wants me to build him a new billing system. Their top managers have some defined strategic objectives but no-one I have met seems to actually know what this system should do in any detail. However, they can all detail the bad things that would happen if it did not do (whatever it is) perfectly from day one. Now how do I find out what to build them?"
Now that question is the one that development teams face every day.
The same is probably true of just about any other business-focused software; most developers aren't hedge-fund traders, auto mechanics, laywers, hotel managers, etc. yet somehow people manage to build specialized software for those fields. You need people in the organization that understand those fields and what's involved, but the motto of "make something you yourself want" just doesn't apply when you're writing software to run an entirely different kind of business. Developers can be mountain bikers on the weekends, but they're generally not insurance agents or doctors in their spare time.
Also: requirement gathering in that market is just as frustrating as Steve says it is in the consumer market. I've dealt with lots of people who ask for features and then change their minds or realize they didn't really know what they wanted.
But imagine how much better the software will be when the developers know as much as hedge-fund traders, auto mechanics, etc. If you look at a book like Martin Fowler's Analysis Patterns, you realize that a deep understanding of the domain is crucial to building a good model to support it.
Still think I should be using my own product day in day out?
Of course this isn't always possible, but it's the way to better products.
Put another way: I'm not the target user of any of the most valuable (or most lucrative) software I've created-- and I don't think that's a rare condition.
Had I built that software for myself, it wouldn't had have any traction with the employees in that company.
But if you truly want to build a great product, one that does the things that your clients didn't even know they needed until you wrote it, well, there's only one way to find out about those sorts of requirements - do the job yourself. Your software will never fulfill these unrecognised needs, and will hence never be truly great.
It's back to the whole Mac circa 1982 thing again. No-one would tell you that they needed a graphical interface to their computer if you had asked in 1982.
I think you can do requirements gathering. But the right way to do it is to have smart actual users talking directly to smart actual devs. Even here, there is a chance for misunderstanding, but at least it's not compounded. (I suspect that the "telephone" game is an example of a nonlinear exponential process.)
Unfortunately, middle managers defending their personal fiefdom will sometimes actually tell you that it's specifically not going to happen. In large organizations, upper management generally wants their representative to be the filter between the devs and the users, because software is generally an instrument of control. (Through workflow, even if the app has no explicit workflow framework, but that's another story.)
Often in large organizations with a software project, devs and users will find some way to get together and talk face to face. It's a sign.
I find in my own software that the best thing to do, if you're improving an existing process, is to watch (or participate in) the current process, with an eye toward the parts which waste time or irritate people.
In any case, after the initial study, it's crucial to back out of the details of the process and think about the overall goal to be accomplished. You don't want to waste effort evolving a process that's been badly distorted by existing software, when you could simplify the process immensely by writing something directly focused on the actual goal. This is an intensely creative/intuitive phase of the process, so it often takes several iterations (from a fresh state-of-mind each time).
Once you think have the perfect solution, go back and make sure that it solves all the problems noted in step 1. If it doesn't, try again.
Corporations sometimes have a funny definition of "risk." Sometimes, Risk(changing to a sane process) < Risk(reproducing unnecessary complexity of existing process).
(This is not software that my friend wrote. He ported the "numerical integrator" program used to track the Space Shuttle in orbit and calculate abort trajectories during launch. And yes, he showed me the program with the keypad! Another thing: as I was walking around at JSC, I saw a "Unix for Dummies" book back there!)
Surely there must be an enzyme cocktail that can evaporate poop! You would not use it indoors, only for outdoor use. But there must be something that will decompose dog poo super fast. Any organic chemists here?
It doesn't mean that there isn't money to be made each step of the way.
And: People do not know what they want, or to be more precise, decisions of liking or not liking something are made seconds before the person becomes concious of their choice, so most of the people's desires are subconscious and what they say they like is simply a justification and not their true wants. (which has been proven through psychology research)
Of course both the advices are sound, but man what awful and utterly terrible writing.
The guy is patronising, his speech is in your face and he has no consideration whatsoever for my time. He babbles and rambles about useless stuff when I simply want to get to the point of what he is saying and move on.
So to give him a bit of his own medicine, was he actually writing for himself? Or was he writing for others?
The answer is rhetorical of course, he knows his stuff so there's no need to write what he knows unless it is aimed at others. So he is not writing about himself he is writing about others.
Now that he wrote for others was his writing mediocre?
Perhaps, I certainly think so, but was it how should I put it, popular? Well 64 comments from fellow hackers, loads more in his own blogg, probably loads of nutters linked to it.
So would he care to define mediocre?
I just do not know how anyone can read his blog to be honest.
Hello by the way, my very first comment, I'm Andrew, Nice to meet you all :)
I've seen more than my share of applications done in the "this is how I would use it" fashion and the results have been disastrous. I am sure there are examples, perhaps a first take or prototype that reflects what your ideal it and then you whet it with people out in the market, but you have to ask yourself "what problem am I trying to solve?". You have to ask yourself (cause if you don't someone else will) the "so what" question.
It's not about the process, which is where a lot of requirements gather bogs down (IMO, every time you talk with a current or potential user, or even a hater you are collecting requirements). It's about really caring about the problems you are trying to solve and why someone would care about the way you want to solve it.
It's amusing that in the comments someone cites SCSI as proof that coding to a standard can be sufficient. The trade association holds "plugfests" ( e.g. http://www.scsita.org/news_events/plugfests/plugfests.html ) specifically because coding to standards isn't sufficient and sometimes you have to actually try the things out with other peoples' hardware to find out if things actually work properly.
Its great when the users are all techies ... but in my opinion most of the desktop apps suck ... openoffice is a piece of shit.
I totally agree with edw519 ... this guy just doesn't know what a product developer does or how to do it. Contrary to the elitist hacker opinion that these people don't know what they are doing ... effective, methodological product developer actually do contribute significantly to finding out what people want. A lot of programmers need to let go of their egos and realize that they are not know-it-alls.
What if the requirements are complicated?
Go ahead and develop an arbitrage system, a medical claims processing system, or a repetitive shop floor control system without "complicated enough" requirements and see how far you get.
A few years ago, I worked for a company that did patient management software (including billing). In the effort to get the product to market, they neglected documenting the requirements of the billing portion. Over time, because of the requirements of our each of customers were different (depending on what entity they billed, the rules for the billing were different), the application turned into a mess of stuff that was never well-documented (fortunately, I didn't work on the billing app). Had they done a bit business requirements gathering before building, they could have likely saved time and money by designing more flexible software.
It's also worth noting that this wasn't some big, lumbering corporation--it was a start-up.
He should get himself familiar with the concept of division of labor...
In the same vein, I'll bet that if actual accountants were to design a piece of accounting software, it would probably rock pretty hard. (Assuming of course, that the accountants in question were also competent designers/developers.)
Well, unless you're Tony Stark.
There has _got_ to be a better way to find out what the user really wants. Tools like balsamiq are a start, but it seems like this is a HUGE area that needs improvement.
"Take what's essential, discard the unnecessary, and make it your own."
That's the point I got from Steve's post.
And that's how I dealt with his rambling.
Meta-great post.
That's what I took from it anyway :/