How to prove to our users that they are not being cheated? [closed] - privacy

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 10 years ago.
Improve this question
I have an information theory question about how to prove (or at least give statistical evidence) that an auction website is not shilling its users.
We recently launched a pay-per-bid auction website. It is a new type of auction where the users pay to bid on timed auctions. Each bid raises the price and increases the time of the auction. The last bidder when the time runs out gets to buy the item.
The problem is that users are suspicious that we may be cheating them. I have no such intentions as the trust of my users is of paramount importance to me. However, the model could be implemented by other unscrupulous sites and it would be straightforward to cheat bidders. I need to put measures in place that will show our users that we are legitimate.
I am committed to running an honest operation. The challenge is how to prove this to the world? Any approach will need to be balanced with preserving the privacy of users.
Some ideas I have are:
show IP address of each user
solicit testimonials from winners who
have received their merchandise. Have
them mail in photos of them with
their merchandise and a recent cover
copy of their local paper.
show some broad information about each user, such as home state and country
I am looking for any suggestions.
Update
Some great suggestions. So far:
Provide behavioral information about each users:
when joined
which auctions took part of
stats for auction - bids placed, cost
do not publish personally identifiable information. No IP address, since people who did not win could exact retribution on the winner.
public forum for discussion and address questions
solicit testimonials from users to show that people do win and do receive products.
how can we show in the testimonial that it is not "invented" by us? I am thinking of perhaps asking to include a photo with a recent local newspaper. This would be hard to fake on a large scale, and how distribution of winners through time and locality.
Do you believe it would be OK to show the home State and Country of user, or would that be too much personal information?

Provide as much information as possible to users, such as who won, how much was paid, how many buys/sellers a user has made, etc;
Provide a feedback mechanism on individual auctions and users;
Have a public forum for discussion on results, support issues and complaints by users;
Don't require users to use other pay services you provide to get results, such as your own snipe system;
State your policies clearly on your Website. This should include, at a minimum, a privacy policy, discussion of how the site works, an FAQ and steps you've taken to prevent any appearance of impropriety or conflict of interest (eg employees aren't allowed to participate); and
Have a complaints and dispute resolution mechanism.
This isn't a technical problem. It's a social problem. The only way users are going to feel confident in the results is with transparency and professionalism.

Isn't that something like swoopo.com?

It first and foremost must be designed well and look professional enough that people will trust it. People are remarkably good at detecting a poorly designed website and will not respond well to it.
This may be a hard market to get into since there are such well established alternatives, but the best way to gain users is by word of mouth from existing users. This takes time, but is most effective.
Don't go violating people's privacy and publishing their information jsut because they use your site. People won't like it and won;t come back.
Provide a feedback system for users (a la ebay) where people can see other real people that are pleased with the service.
Also a public message board for comments and complaints would help comfort people as well. Good Luck!

Be ware of providing too much information though, depending on your site, your users may decide that they do not like it when too much privacy is revealed to others when they bid on something. For example, if I'm a customer and I just purchased something expensive, I do not want my user name or email shown to other people who'll start spamming me to buy a cheaper version of what I just paid for. Some others may take offense at being out bid and grief the person who out bid them by running a DOS on their IP, for example.
Yes you should protect your own site's reputation, but if you do not take actions to protect your users, you may end up losing some of them.
I think the best way to improve your reputation is through usage (may be hard), or through some reputable review sites.

Giving out IP addresses of users might be risky, and ultimately it's something that a fake site may fake as well.
I guess one way of gaining trust is to use a trustworthy authority to approve you. IOW, delegation :) let someone else solve the problem for you. e.g. Users will tend to trust you more if you're backed by someone like PayPal. That would cost you, though.
[philosophical]
The main problem is that in order to gain trust you need to provide what sociologists call "honest signals". And honest signals are usually costly. That's a problem in business because it means you have to sacrifice your earnings in order to get more customers on-board, and then balance that equation. IOW, customers and shareholders have different incentives. But as a "starup" trying to gain the trust of a user base it would make sense to signal your honesty by costly gestures. You might make less money initially, but eventually, once you're big enough, that signalling would no longer be necessary.
So what kind of honest (costly) signal can you send? Well, maybe instead of soliciting testimonials from winners you should Pay them a symbolic fee. Make it worthwhile for users to help you prove the site's authenticity by disclosing information about themselves or the transaction, and in turn make it up for them with discounts, rebates, whatever.
Anyway, I'm pretty sure you won't gain trust by simply handing out people's information to everyone without asking them. Let people do that for you, and compensate them, thereby signalling your intentions in a costly (honest) manner.
[/philosophical]

Have real time chat on the bidding pages, like IRC. People can only bid by typing "#bid $200" or something in the chat window. That way users can interrogate anyone they think might be a bot or whatever. They can also discuss the product for sale and warn others if it's a fake listing or whatever. You need to show people they can trust the site. People trust people.

Remember sitting through a talk on use of cryptographic methods to prove various facets of auctions were conducted properly. Googling "cryptography" and "auctions" together should provide some starting material if your interested in this approach.
http://www.youtube.com/watch?v=IzVCrSrZIX8
http://www.cs.virginia.edu/crab/Auctions.ppt

Jeff Atwood talked about this on www.codinghorror.com last month.
http://www.codinghorror.com/blog/archives/001261.html
I had never heard of the concept before. He does explain it fairly well.
Cathy

You cant without lying.
The only way to win is by sheer luck. You just call your lottery tickets "bids".
Shame on you.
EDIT:
Some opinions on penny auctions
Profitable Until Deemed Illegal
Penny Auctions: They're Gambling

Open source?

This is a matter of trust and so is a social, not technical issue.
Even if you open-sourced the code and/or had an information theoretical proof, how many of your customers would understand it?
In situations like this, many companies rely on a the word of a trusted third party who has inspected the company's operations. The third party stakes its reputation on its public statement that the company is doing business correctly.

Related

How do you keep yourself updated with latest technology trends, considering that technology today is enhanced almost every day?

It's most asked question in IT job interview so I want to know what should the way that I explain the answer of this type of question asked to me.
"One machine can do the work of fifty ordinary men. But, No machine can do the work of one extraordinary man"
The simple meaning of new technology is to make work or effort simpler or make it easy.
Not just technology but everything that may changes you update yourself with it.
To keep updated with technology you need to use technology, specially latest enhanced technology.
The concept is: by doing so (using technology) it will become obligatory for you to keep track of any new or emerging technologies through reading, searching etc.
I am not claiming that this is something you should do. Its one of the way what you try to do to make yourself updated to some extend with the pace of technology change.
you should go and subscribe yourself to various RSS feeds, go frequently to some great sites (dzone, javalobby etc.) and look for blogs/articles which deserves a read.
Things which you don’t know in this case deserves more read and i start googling stuff to get more details.
see, technology products will not succeed if they are developed for their own sake, nor simply to help users complete a specific task. Technology products succeed when they are incorporated by users into their daily lives in ways that serve their fundamental needs as people - fundamental needs such as relating to others and keeping in touch, even when they are miles apart.
The truth is nobody fully understands knows how today’s technology might be used tomorrow. If the recent past is anything to go by it’s likely that people will certainly find innovative and as yet unthought-of ways to communicate and keep in touch.
Thanks,...!!!

Scrum stories and behind the scenes features [closed]

Closed. This question does not meet Stack Overflow guidelines. It is not currently accepting answers.
This question does not appear to be about programming within the scope defined in the help center.
Closed 5 years ago.
Improve this question
As I understand things, the Scrum backlog is composed of a series of Stories that represent something for the end user and this is further decomposed into Features.
If this is the case, where does all the behind the scenes features go that aren't really linked to a story but are still useful?
For example, say I'm making an application that catalogs the contents of a hard drive. A story wouldn't require it but having an md5 hash on each file would be a nice feature for flagging duplicates.
The classic template to write good stories is: "As a <role>, I want to <action> so that <business value>" (or variations around this) and a story should indeed provide business value. Why? Well, if a story does not communicate the business value it generates, how could a (very likely non technical) Product Owner evaluate its importance and prioritize it accordingly? Writing good stories increases your chances to get them rated as important and thus implemented.
A great tool to find good business value is the 5 Whys (which is used for root cause analysis, i.e. finding the root cause of a problem). The cucumber documentation explains very well how to use it to find some "good" business value and has a very good sample, so, instead of paraphrasing it, I'm quoting the explanation below:
Business value and MMF
You should discuss the "In order to"
part of the feature and pop the why
stack max 5 times (ask why
recursively) until you end up with one
of the following business values:
Protect revenue
Increase revenue
Manage cost
Increase brand value
Make the product remarkable
Provide more value to your customers
If you’re about to implement a feature
that doesn’t support one of those
values, chances are you’re about to
implement a non-valuable feature.
Consider tossing it altogether or
pushing it down in your backlog. Focus
on implementing the MMFs (Minimum
Marketable Features) that will
yield the most value.
Here is an example taken from an IRC
chat session in #cucumber:
[5:08pm] Luis_Byclosure: I'm having problems applying the "5 Why" rule, to the feature
"login" (imagine an application like youtube)
[5:08pm] Luis_Byclosure: how do you explain the business value of the feature "login"?
[5:09pm] Luis_Byclosure: In order to be recognized among other people, I want to login
in the application (?)
[5:09pm] Luis_Byclosure: why do I want to be recognized among other people?
[5:11pm] aslakhellesoy: Why do people have to log in?
[5:12pm] Luis_Byclosure: I dunno... why?
[5:12pm] aslakhellesoy: I'm asking you
[5:13pm] aslakhellesoy: Why have you decided login is needed?
[5:13pm] Luis_Byclosure: identify users
[5:14pm] aslakhellesoy: Why do you have to identify users?
[5:14pm] Luis_Byclosure: maybe because people like to know who is
publishing what
[5:15pm] aslakhellesoy: Why would anyone want to know who's publishing what?
[5:17pm] Luis_Byclosure: because if people feel that that content belongs
to someone, then the content is trustworthy
[5:17pm] aslakhellesoy: Why does content have to appear trustworthy?
[5:20pm] Luis_Byclosure: Trustworthy makes people interested in the content and
consequently in the website
[5:20pm] Luis_Byclosure: Why do I want to get people interested in the website?
[5:20pm] aslakhellesoy: :-)
[5:21pm] aslakhellesoy: Are you selling something there? Or is it just for fun?
[5:21pm] Luis_Byclosure: Because more traffic means more money in ads
[5:21pm] aslakhellesoy: There you go!
[5:22pm] Luis_Byclosure: Why do I want to get more money in ads? Because I want to increase
de revenues.
[5:22pm] Luis_Byclosure: And this is the end, right?
[5:23pm] aslakhellesoy: In order to drive more people to the website and earn more admoney,
authors should have to login,
so that the content can be displayed with the author and appear
more trustworthy.
[5:23pm] aslakhellesoy: Does that make any sense?
[5:25pm] Luis_Byclosure: Yes, I think so
[5:26pm] aslakhellesoy: It's easier when you have someone clueless (like me) to ask the
stupid why questions
[5:26pm] aslakhellesoy: Now I know why you want login
[5:26pm] Luis_Byclosure: but it is difficult to find the reason for everything
[5:26pm] aslakhellesoy: And if I was the customer I am in better shape to prioritise this
feature among others
[5:29pm] Luis_Byclosure: true!
So, let me start: why would it be nice to have a md5 hash on each file (which, expressed as you did, is an implementation detail and doesn't communicate any business value)?
There is no "scrum" backlog, only
Product Backlog by the product owner that has Business Values
and
Sprint Backlog by the scrumaster/developpers which list tasks traced back to a story.
I am updating for precising the distinction between a Vision Document and a Product Backlog as for Business Value:
Business Vision Document (Strategic Level) are all about Business Value as well as Product Backlog. But Product Backlog is equivalent to Functional Specifications in other traditional methodologies that is it is something CONCRETE or OPERATIONNALLY directly implementable by the team not just a VISION from a high level managing director.
Of course product backlog itself should be tracable to Vision Document Items.
At the end of the day, agile is about doing what works for you to be productive. These kind of answers are for you to decide what works.
It may just be an implementation detail of another story, or it may be a story unto itself.
What ever makes your group most productive is what it should be.
I would place them by something like:
"Non user-stories" or "NUS"
"Programmers Only" or "PO"
"Behind the sences" or "BTS"
Followed by a short description of the feature.
So:
BTS: catalog filesystem
PO: find file type with magic bytes
Strange! I'm making the same application! :-)
Update:
So, I read wiki, I think we need an extra log (the Sprint backlog).
Wiki says:
Sprint backlog
The sprint backlog is a document containing information about how the team is going to implement the features for the upcoming sprint. Features are broken down into tasks; as a best practice, tasks are normally estimated between four and sixteen hours of work. With this level of detail the whole team understands exactly what to do, and anyone can potentially pick a task from the list.

Is geographic distance still a problem? [closed]

Closed. This question is off-topic. It is not currently accepting answers.
Want to improve this question? Update the question so it's on-topic for Stack Overflow.
Closed 9 years ago.
Improve this question
There are a lot of good solutions for audio and video conferencing, task, calender and document management. We got specs, uml diagrams, code generators, etc.
But still companies pour tons of cash so that people can be physically there even in the times of recession and i wonder why?
Nothing beat a face to face meeting. Period.
I work with a remote development team every day and I can only support other responders in saying that NOTHING beats working face-to-face. You need the subtle cues of body language, facial expression, and the ease of communication when you're physically present such as doodling on a whiteboard. Video conferencing is a close second but the organizational issues are difficult to overcome (meeting rooms, webcams, bandwidth...).
Communication through documentation works to some extent, but is often perceived as unnecessary overhead by developers who drank the Agile kool-aid. I try to use the phone, skype, MSN or e-mail as much as possible, but it works better with those people of the team that I've actually worked with in-person for at least a few days.
Distance isn't to much the problem, to be honest. You're either co-located or you're not.
We use a combination of Skype IM, Skype Voice, mobile phones and email to keep in touch. We haven't really got into webcams properly, but even then, there's something about face to face contact you can't really replicate with technology.
I think most companies see splitting up their workforce as a step-change. A company that started out with homeworkers is better able to find and establish an office to move them into than the other way round. Money is only one consideration - it really does change the way the team works, and if you get it wrong, you don't have a team, you have a bunch of solo developers who actually take longer to do things.
Of course, it's also easier to recruit and mentor new members of the team if there's an office for everyone to work in.
Many people do better face-to-face. Many people do just as well at a distance. However, people in management tend to more focused on interpersonal relations, which generally means they're face-to-face people. So, as a general rule, people in management tend to dislike or distrust meeting at a distance.
Furthermore, meetings are very often unproductive. This applies to meetings at a distance and face-to-face meetings. Indeed, it's significantly easier to get off-topic, unprofessional, and unproductive when meeting face to face. However, when an at-a-distance meeting is unproductive, it's almost always seen as such because it was at a distance. It can be exceptionally frustrating to deal with the technology and limitations of remote meetings, and it's infinitely easier to blame the situation and the technology for your lack of productivity.
To sum up: people are a problem.
I have a few cynical and contrary opinions on this, based on my experience working for a large Australian organisation with branches all over the country and my current remote work for a US company.
Cynically - face to face works so you can do deals off the record. This may not be as corrupt or as underhand as it sounds but an astounding amount of management-level decision making happens where people negotiate relative tradeoffs involving influence, favors accrued and owed and stuff which is hard or embarrassing to quantify. Even when an organisation has a commitment to using teleconferencing, groups emerge who negotiate off-camera and thus acquire a competitive advantage.
At the purely technical level, I think face-to-face is nowhere near as important as cited. The political issue is in drawing this distinction - if you label your stuff as non-political and safe to do via remote comms, you are explicitly labeling the other negotiations as somehow not safe. Another aspect is that people looking to move up to management need to become visible and a known player in the face-to-face discussions.
Developers, including myself, are notoriously poor at picking up the non-verbal cues cited above (just ask my wife!). In a relaxed atmosphere of trust, they can use emoticons and in-jokes explicitly in IM sessions without worrying about translating someone else's expression, especially across cultures.
IM sessions, with the ability to search the transcript, are far more efficient than verbal or video conversations, when discussing projects. If you don't pick up some nuance at the time someone says it, you can go back and examine the exact sentence in context.
I use video chat infrequently and the main use of voice chat is so I can talk to my boss in his spare time whilst he's driving. Those are good conversations to give me a general feel for how things are going but usually inadequate for technical.
Here's a podcast that talks about distributed software development: Managing Commercial Software Projects. Here's a blurb from the show page:
Andy Singleton is an entrepreneur who
has long studied and practiced the art
of distributed software development.
Influenced by the open source and
agile movements, he has arrived at
some startling conclusions about how
to manage commercial projects. Among
them: don't interview people, don't
estimate schedules, and don't spend
time in teleconferences. In this
conversation with host Jon Udell he
explains why not to do these things,
and what to do instead.
I thought it was pretty interesting.
Face to face meetings provide a lot of visual feedbacks which you do not get in other means. This is must if you want to discuss important subjects like architecture, reviews etc, which tend to be slow or useless if done over phone, email, twiki etc.
Typically status updates can be done via other means, we normally use Skype, Twiki, Email, Phone keep in sync.
I really like communication via IM, email or phone. It's totally ok and I really appreciate using it.
Now comes the big "but" (with a single 't'):
You are not able to "just walk over" your colleague and ask him** a short question. For sure, you can IM him or mail him. But it will take some times till he answers your question.
The other point is drinking coffee. You cannot just drink a cup of coffee with him and talk about your problems.
If you let your brain release your thoughts, problem will disappear. And that's one reason behind drinking coffee with colleagues.
I really need personal communication. I need it. About 70% of the communication can be replaced by IM or whatever, but the 30% are very important.
** him = him/her
Some 80% communication is non-verbal, video conferencing helps a bit, but is not good enough.
There have been studies done over success rate of business negotiation and project cooperation depending on type of communication used. It was ranging from 90% success face to face, to less then 10% with email and text only IM.
For example one of such studies, conducted by Harvard Business School professor Kathleen L. Valley yielded for example such results:
"among 24 four-person decision making
groups interacting via computer, there
were 102 instances of rude or
impulsive behavior. Another 24 groups
that interacted in person yielded only
12 remarks of that nature."
Related Wired article: "The Secret Cause of Flame Wars"

Type of Team Lead: More Programmer || More !Programmer [closed]

Closed. This question is opinion-based. It is not currently accepting answers.
Want to improve this question? Update the question so it can be answered with facts and citations by editing this post.
Closed 8 years ago.
Improve this question
Yesterday I had a team leader of another team say that they took a while to figure out something I wrote on a wiki page because I referred to obtaining code from source control as "checking out" which apparently confused them. They said that they were use to Clear Case and had only heard of the term "joining a project" and said that they haven't really programmed much for a long time.
While this is fine, what it then made me think of is the different types of team leaders I've had over the years. I've had some that have been almost purely managerial and I've had those that are programmers that do managerial things at the same time.
Do people have a preference as to what kind of team leader they have? How do you care if your team lead is active in the development of your product? I find team leaders who actually sit and code like the rest of the team more likely to understand things like (from my experience):
things aren't always as simple as they sound. Team leaders I've had who don't code or rarely code at all believe everything is a piece of cake and shouldn't take much time at all (which perhaps might be the case if you want to hack it together)
they are more understanding that developers don't always like sitting in long meetings and do their best to avoid getting their team into as many pointless meetings as possible
they understand what you say from a technical point of view. Those that might not have coded for a while might not be up to speed with a lot of the new technologies, techniques or lingo
I find it much more satisfying to have a team leader who has the mind of a developer and likes to get their hands dirty in the code as well. Perhaps there are some people out there that like team leads who distance themselves from the actual coding side of things and simply doles out the work, or perhaps another type of team leader that I haven't mentioned?
A team leader has to be a coder -- they can't lead the team unless the team respects them and where they're taking everyone.
A team manager, on the other hand, can either be a coder or someone who is just well organised and knows when to ask questions and interface to other management.
It is possible to find both a manager and a leader in the same person, but more often the roles (should be) separate and distinct.
You should read the book Managing Humans. I am of the opinion managers should keep their hands out of the code. They have more important responsibilities like keeping people away from developers, so they can do their job. Having them jump into development creates confusion as they aren't in it enough to know what's going on and have their time divided between that and other things, so it is difficult to count on them for major pieces of functionality. Plus, it really sucks when you have to tell your manager that something they just wrote needs to be changed, and you have to go back and redo it. Managers are really their to jump on the grenades for the rest of the team, so they can focus on accomplishing the task at hand.
That being said, should manager's know about software engineering? Yes of course they should, that's the field they are in. Should be know how to code in the latest and greatest whiz bang technology? That shouldn't really matter as long as they get how software development works.
I have no preference, I can't, I have to work with all of them, even though too many cooks spoil the broth. On a multi-developer typical project I have a technical lead, project manager and a non-technical customer. Of course, divisional and programme management will each stick their head in.
There are a number of types of leader, each have their own traits:
Non-technical customer: "The customer is always right." Often wants a moon-on-a-stick. Will call both the management and the technical bods and take the best answer as gospel.
Team manager/line manager: Somewhat pastoral role. Not particularly interested in the project I'm working on right now. Steps in when there is a decision to be made between project priorities. Probably really wants to be a coder, and delegates all the rest of his work that he can to his subordinates.
Project manager: Varying degrees of technical know-how. Is concerned only with timescales and costs. Does not understand, "I don't know how long its going to take, I need to play with it for a couple of days first to get a feel."
Team leader/technical lead: Just another developer, but with more experience. Responsible for technical decision making that will affect the whole project. Often fighting with the project manager to carry out good engineering practice, even though it will take longer in the short term.
Team leader/glorified secretary: Someone who is supposed to lead the team, but acts as more of a secretary. (Usually a grade above the team). Answers the phones, insulates customers from the technical bods. This works fine until they ask a technical question, where the glorified secretary tries to blag his/her way out of it, and eventually they work around the secretary and talk direct to the team.
We typically have a PM (non technical) who manages the project from an admin. viewpoint and a Tech Lead who manages the technical aspects and provides technical leadership to the team.
The Tech Lead will code parts of the project and will probably be the main (only) developer for the "Proof of Concept" stage.
On some smaller projects, they are the same person but it's a rare combination.
The absolute worst Software Leads/Chief Software Engineers that I've worked with were the ones that wanted to be intimately involved in the technical details. Too many important tasks were either missed or just not done. Managing a team is a full-time job. If the lead wants to get involved in the technical aspects it will certainly come at the expense of the managerial aspects.
I’ve only had 2 Software Leads/Chief Software Engineers out of dozens that I thought were worthwhile. While both were previously software engineers, those days were long gone for both of them. They knew it. They didn’t even try to pretend. Their job was now to manage. Their job was to make sure the developers had every chance to succeed. They did their best to remove all obstacles and make sure everyone was making progress.
I have a theory, but have never seen it in action, that the best software lead would be someone who is not, nor ever has been a software developer. They specialize in the true spirit of management, specifically that of being a facilitator. Unfortunately, most managers are more politically motivated or are just in the job because they've reached their pinnacle technically.

Requirements Gathering

Locked. This question and its answers are locked because the question is off-topic but has historical significance. It is not currently accepting new answers or interactions.
How do you go about the requirements gathering phase? Does anyone have a good set of guidelines or tips to follow? What are some good questions to ask the stakeholders?
I am currently working on a new project and there are a lot of unknowns. I am in the process of coming up with a list of questions to ask the stakeholders. However I cant help but to feel that I am missing something or forgetting to ask a critical question.
You're almost certainly missing something. A lot of things, probably. Don't worry, it's ok. Even if you remembered everything and covered all the bases stakeholders aren't going to be able to give you very good, clear requirements without any point of reference. The best way to do this sort of thing is to get what you can from them now, then take that and give them something to react to. It can be a paper prototype, a mockup, version 0.1 of the software, whatever. Then they can start telling you what they really want.
See obligatory comic below...
In general, I try and get a feel for the business model my customer/client is trying to emulate with the application they want built. Are we building a glorified forms processor? Are we retrieving data from multiple sources in a single application to save time? Are we performing some kind of integration?
Once the general businesss model is established, I then move to the "must" and "must nots" for the application to dictate what data I can retrieve, who can perform what functions, etc.
Usually if you can get the customer to explain their model or workflow, you can move from there and find additional key questions.
The one question I always make sure to ask in some form or another is "What is the trickiest/most annoying thing you have to do when doing X. Typically the answer to that reveals the craziest business/data rule you'll have to implement.
Hope this helps!
Steve Yegge talks fun but there is money to be made in working out what other people's requirements are so i'd take his article with a pinch of salt.
Requirements gathering is incredibly tough because of the manner in which communication works. Its a four step process that is lossy in each step.
I have an idea in my head
I transform this into words and pictures
You interpret the pictures and words
You paint an image in your own mind of what my original idea was like
And humans fail miserably at this with worrying frequency through their adorable imperfections.
Agile does right in promoting iterative development. Getting early versions out to the client is important in identifying what features are most important (what ships in 0.1 - 0.5 ish), helps to keep you both on the right track in terms of how the application will work and quickly identifies the hidden features that you will miss.
The two main problem scenarios are the two ends of the scales:
Not having a freaking clue about what you are doing - get some domain experts
Having too many requirements - feature pit. - Question, cull (prioritise ;) ) features and use iterative development
Yegge does well in pointing out that domain experts are essential to produce good requirements because they know the business and have worked in it. They can help identify the core desire of the client and will help explain how their staff will use the system and what is important to the staff.
Alternatives and additions include trying to do the job yourself to get into the mindset or having a client staff member occasionally on-site, although the latter is unlikely to happen.
The feature pit is the other side, mostly full of failed government IT projects. Too much, too soon, not enough thought or application of realism (but what do you expect they have only about four years to make themselves feel important?). The aim here is to work out what the customer really wants.
As long as you work on getting the core components correct, efficient and bug-free clients usually remain tolerant of missing features that arrive in later shipments, as long as they eventually arrive. This is where iterative development really helps.
Remember to separate the client's ideas of what the program will be like and what they want the program to achieve.
Some clients can create confusion by communicating their requirements in the form of application features which may be poorly thought out or made redundant by much simpler functionality then they think they require. While I'm not advocating calling the client an idiot or not listening to them I feel that it is worth forever asking why they want a particular feature to get to its underlying purpose.
Remember that in either scenario it is of imperative importantance to root out the quickest path to fulfilling the customers core need and put you in a scenario where you are both profiting from the relationship.
Wow, where to start?
First, there is a set of knowledge someone should have to do analysis on some projects, but it really depends on what you are building for who. In other words, it makes a big difference if you are modifying an enterprise application for a Fortune 100 corporation, building an iPhone app, or adding functionality to a personal webpage.
Second, there are different kinds of requirements.
Objectives: What does the user want to accomplish?
Functional: What does the user need to do in order to reach their objective? (think steps to reach the objective/s)
Non-functional: What are the constraints your program needs to perform within? (think 10 vs 10k simultaneous users, growth, back-up, etc.)
Business rules: What dynamic constraints do you have to meet? (think calculations, definitions, legal concerns, etc.)
Third, the way to gather requirements most effectively, and then get feedback on them (which you will do, right?) is to use models. User cases and user stories are a model of what the user needs to do. Process models are another version of what needs to happen. System diagrams are just another model of how different parts of the program(s) interact. Good data modeling will define business concepts and show you the inputs, outputs, and changes that happen within your program. Models (and there are more than I listed) are really the key to the concern you list. A few good models will capture the needs and from models you can determine your requirements.
Fourth, get feedback. I know I mentioned this already, but you will not get everything right the first time, so get responses to what your customer wants.
As much as I appreciate requirements, and the models that drive them, users typically do not understand the ramifications of of all their requests. Constant communication with chances for review and feedback will give users a better understanding of what you are delivering. Further, they will refine their understanding based on what they see. Unless you're working for the government, iterations and / or prototypes are helpful.
First of all gather the requirements before you start coding. You can begin the design while you are gathering them depending on your project life cicle but you shouldn't ever start coding without them.
Requirements are a set of well written documents that protect both the client and yourself. Never forget that. If no requirement is present then it was not paid for (and thus it requires a formal change request), if it's present then it must be implemented and must work correctly.
Requirements must be testable. If a requirement cannot be tested then it isn't a requirement. That means something like, "The system "
Requirements must be concrete. That means stating "The system user interface shall be easy to use" is not a correct requirment.
In order to actually "gather" the requirements you need to first make sure you understand the businness model. The client will tell you what they want with its own words, it is your job to understand it and interpret it in the right context.
Make meetings with the client while you're developing the requirements. Describe them to the client with your own words and make sure you and the client have the same concept in the requirements.
Requirements require concise, testable example, but keep track of every other thing that comes up in the meetings, diagrams, doubts and try to mantain a record of every meeting.
If you can use an incremental life cycle, that will give you the ability to improve some bad gathered requirements.
You can never ask too many or "stupid" questions. The more questions you ask, the more answers you receive.
According to Steve Yegge that's the wrong question to ask. If you're gathering requirement it's already too late, your project is doomed.
High-level discussions about purpose, scope, limitations of operating environment, size, etc
Audition a single paragraph description of the system, hammer it out
Mock up UI
Formalize known requirements
Now iterate between 3 and 4 with more and more functional prototypes and more specs with more details. Write tests as you go. Do this until you have functional software and a complete, objective, testable requirements spec.
That's the dream. The reality is usually after a couple iterations everybody goes head-down and codes until there's a month left to test.
Gathering Business Requirements Are Bullshit - Steve Yegge
read the agile manifesto - working software is the only measurement for the success of a software project
get familiar with agile software practices - study Scrum , lean programming , xp etc - this will save you tremendous amount of time not only for the requirements gathering but also for the entire software development lifecycle
keep regular discussions with Customers and especially the future users and key-users
make sure you talk to the Persons understanding the problem domain - e.g. specialists in the field
Take small notes during the talks
After each CONVERSATION write an official requirement list and present it for approving. Later on it would be difficult to argue against all agreed documentation
make sure your Customers know approximately what are the approximate expenses in time and money for implementing "nice to have" requirements
make sure you label the requirements as "must have" , "should have" and "nice to have" from the very beginning, ensure Customers understand the differences between those types also
integrate all documents into the latest and final requirements analysis (or the current one for the iteration or whatever agile programming cycle you are using ... )
remember that requirements do change over the software life cycle , so gathering is one thing but managing and implementing another
KISS - keep it as simple as possible
study also the environment where the future system will reside - there are more and more technological restraints from legacy or surrounding systems , since the companies do not prefer to throw to the garbage the money they have invested for decades even if in our modern minds 20 years old code is garbage ...
Like most stages of the software development process its iteration works best.
First find out who your users are -- the XYZ dept,
Then find out where they fit into the organisation -- part of Z division,
Then find out what they do in general terms -- manage cash
Then in specific terms -- collect cash from tills, and check for till fraud.
Then you can start talking to them.
Ask what problem they want you want to solve -- you will get an answer like write a bamboozling system using OCR with shark technoligies.
Ignore that answer and ask some more questions to find out what the real problem is -- they cant read the till slips to reconcile the cash.
Agree a real solution with the users -- get a better ink ribbon supplier - or connect the electronic tills to the network and upload the logs to a central server.
Then agree in detail how they will measure the success of the project.
Then and only then propose and agree a detailed set of requirements.
I would suggest you to read Roger-Pressman's Software Engineering: A Practitioner's Approach
Before you go talking to the stakeholders/users/anyone be sure you will be able to put down the gathered information in a usefull and days-lasting way.
Use a sound-recorder if it is OK with the other person and the information is bulky.
If you heard something important and you need some reasonable time to write it down, you have two choices: ask the other person to wait a second, or say goodbye to that precious information. You wont remember it right, ask any neuro-scientist.
If you detect that a point need deeper review or that you need some document you just heard of, make sure you make a commitment with the other person to send that document or schedule another meeting with a more specific purpose. Never say "I'll remember to ask for that xls file" because in most cases you wont.
Not to long after the meeting, summarize all your notes, recordings and fresh thoughts. Just summarize it rigth. Create effective reminders for the commitments.
Again, just after the meeting, is the perfect time to understand why the gathering you just did was not as right as you thought at the end of the meeting. That's when you will be able to put down a lot of meaningful questions for another meeting.
I know the question was in the perspective of the pre-meeting, but please be aware that you can work on this matters before the meeting and end up with a much usefull, complete and quality gathering.
I've been using mind mapping (like a work breakdown structure) to help gather requirements and define the unknowns (the #1 project killer). Start at a high level and work your way down. You need to work with the sponsors, users and development team to ensure you get all the angles and don't miss anything. You can't be expected to know the entire scope of what they want without their involvement...you - as a project manager/BA - need to get them involved (most important part of the job).
There are some great ideas here already. Here are some requirements gathering principles that I always like to keep in mind:
Know the difference between the user and the customer.
The business owners that approve the shiny project are usually the customers. However, a devastating mistake is the tendency to confuse them as the user. The customer is usually the person that recognizes the need for your product, but the user is the person that will actually be using the solution (and will most likely complain later about a requirement your product did not meet).
Go to more than one person
Because we’re all human, and we tend to not remember every excruciating detail. You increase your likelihood of finding missed requirements as you talk to more people and cross-check.
Avoid specials
When a user asks for something very specific, be wary. Always question the biases and see if this will really make your product better.
Prototype
Don’t wait till launch to show what you have to the user. Do frequent prototypes (you can even call them beta versions) and get constant feedback throughout the development process. You’ll probably find more requirements as you do this.
I recently started using the concepts, standards and templates defined by the International Institute of Business Analysts organization (IIBA).
They have a pretty good BOK (Book of Knowledge) that can be downloaded from their website. They do also have a certificate.
Requirements Engineering is a bit of an art, there are lots of different ways to go about it, you really have to tailor it to your project and the stakeholders involved. A good place to start is with Requirements Engineering by Karl Wiegers:
http://www.amazon.com/Software-Requirements-Second-Pro-Best-Practices/dp/0735618798/ref=pd_bbs_sr_2?ie=UTF8&s=books&qid=1234910330&sr=8-2
and a requirements engineering process which may consist of a number of steps e.g.:
Elicitation - for the basis for discussion with the business
Analysis and Description - a technical description for the purpose of the developers
Elaboration, Clarification, Verification and Negotiation - further refinement of the requirements
Also, there are a number of ways of documenting the requirements (Use Cases, Prototypes, Specifications, Modelling Languages). Each have their advantages and disadvantages. For example prototypes are very good for elicitation of ideas from the business and discussion of ideas.
I generally find that writing a set of use cases and including wireframe prototypes works well to identify an initial set of requirements. From that point it's a continual process of working with technical people and business people to further clarify and elaborate on the requirements. Keeping track of what was initially agreed and tracking additional requirements are essential to avoid scope creep. Negotiation plays a bit part here also between the various parties as per the Broken Iron Triangle (http://www.ambysoft.com/essays/brokenTriangle.html).
IMO the most important first step is to set up a dictornary of domain-specific words. When your client says "order", what does he mean? Something he receives from his customers or something he sends to his suppliers? Or maybe both?
Find the keywords in the stakeholders' business, and let them explain those words until you comprehend their meaning in the process. Without that, you will have a hard time trying to understand the requirements.
i wrote a blog article about the approach i use:
http://pm4web.blogspot.com/2008/10/needs-analysis-for-business-websites.html
basically: questions to ask your client before building their website.
i should add this questionnaire sheet is only geared towards basic website builds - like a business web presence. totally different story if you are talking about web-based software. although some of it is still relavant (e.g. questions relating to look and feel).
LM
I prefer to keep my requirements gathering process as simple, direct and thorough as possible. You can download a sample document that I use as a template for my projects at this blog posting: http://allthingscs.blogspot.com/2011/03/documenting-software-architectural.html

Resources