Software
REQUIREMENTS
SW REQUIREMENTS
Mistakes at software developments
Iteration Zero
Pre Development stages
Before we start coding
The contract process
Preventing contractual dispute
My Coding Methodology
Extended Questions and remarks
Top Reasons why Projects Fail
Episode 188: Requirements in Agile Projects
Quality Triangle
Cone of Uncertainty
Top Reasons why Projects Fail
Requirements and Test Sets
Mistakes at software developments
Silo mentality
Episode 188: Requirements in Agile Projects
Planning REQUIREMENTS
Black Spots on Roadmap
Requrements - key to success
Requirements checklist
“Do it right” or “Do it ASAP”?
Software Design
Design/Specification
Mission Creep
Complexity
Lateral thinking
Reducing complexity
SW Projects
Basecamp alternatives
What Is Software Design
Iterative Prototyping
Designing and prototyping
Requirements and Prototyping
Mobile Prototyping Essentials
Introducing Design Methods
11 lessons
Patterns for Influencing Behaviour Through Design
Visualize the future with rapid prototyping
Think design talk
Wizard Of Oz Prototype Walkthrough
Construx: An Ounce of Prevention
What can we learn from software engineering and why?
Formal Specification
Episode 149: Difference between Software Engineering and Computer Science with Chuck Connell
Agile Requirements - Earl Beede
REQUIREMENTS  
SW - REQUIREMENTS Ambiguity
REQUIREMENTS


SW - REQUIREMENTS Ambiguity
SW - REQUIREMENTS Ambiguity
REQUIREMENTS: Understanding the needs of the customer and make it clear specifications and system requirements, is the crucial first step.
IMPORTANT :: To be able to make more realistic estimate of the expected workload and start planning, we should have answers to these two CRUCIAL questions upfront:
1. What assumptions and contractual preconditions have not been yet fulfilled -- so we can NOT start to make any estimate of the volume of work and start to plan the development?

2. Have the end user/ client CONFIRMED the future solution mockup (interface layout, desired software walk-through, operating procedures document or prototype, requirements checklist ), before the coding has started!?

The first step toward developing accurate and complete specifications is to establish correct requirements.Establishing correct requirements is extremely difficult task and is more of an art than a science.
---------------------------------------------------------------------------------------------
DESIGN / SPECIFICATION: Definition of necessary (time, cost and working methods), human and technological resources for the realization of future system is next step.
FEATURES: Customers sometimes have only a vague idea of what may be required for certain features to cost. For this once communicated clearly the costs, you can readjust the features specification, and get a second, more contained, project definition with the budget acceptable to the customer.
-------------------------------------------
Why Have Official Requirements?
------------------------------------------
An explicit set of written requirements, specifications and design guidelines is important for several reasons.
Explicit requirements help to ensure that the user/customer rather than the programmer drives the system's functionality. If the requirements are explicit, the user can review them and agree to them.
Explicit requirements also help to avoid arguments. If you have a disagreement with another programmer, designer or customer, about what the web system, program or applications is supposed to do, you can resolve it by looking at the written requirements, specifications and design guidelines.

------------
PLANNING
------------
* Make sure to plan before starting the development or implementation.
Without adequate planning, it is difficult to really understand what it will take to complete a project successfully. Lack of planning leads to inadequate preparation, unexpected problems, and poor execution of milestone tasks.
Poor planning is a worst practice because:
If you don't have written plans, you are using your memory to keep track of things, what is unreliable and dangerous. Planning is an excellent tool for getting things out in the open. Good planning forces you to think about your projects before you set about doing it and to put your thoughts down on "paper". This alone can help you prevent many project failures and delays.
Without plans, it is difficult, sometimes even impossible to get a clear picture of all the things that you are working on and what still needs to be done.

-----------------------------
DATA AT THE BEGINNING
-----------------------------
At the beginning I am focused on data repositories, all files in the system, and their data records structure. And what must be done in order to process input files into desired output behaviour and data. What are the test scenarios, and if the customer has provided test data together with requirements?
It is important that the customer provides or at least validates "test data sets, input files and desired output " together with "desired feature requirements".

...................................................................................................................
Posted by marty cagan on October 14, 2010
I’m not the first person to come to this conclusion, but over the years, I’ve really come to dislike the entire concept of a “requirement.”
I’ve learned that so many things that look like “requirements” really are just a perception, or assumption, or an illusion.
Customers especially think they have “requirements” but really they’re just a hypothesis on what might solve some probably unstated problem.
Stakeholders have “requirements” that are really just their personal theories or assumptions on what might solve again a probably unstated problem.
On the other hand, I’ve learned that the true requirements are often not at all obvious at the start, and mostly emerge later when observing and interacting with real users.
I’ve also learned that the design directions you take will often lead to very different functional requirements. It really is true that form and function are completely intertwined. The old Waterfall theory of software had it essentially backwards.
It’s also rarely black and white, where a requirement is either totally absolutely essential, or not. Very often you can build up the value in one area to compensate for other areas. Or, if something isn’t feasible technically, we can come up with other approaches that suffice, or even work better.
I find defining and designing product is more like cooking in this respect in that if an ingredient is unavailable, you can often get creative and substitute something else or a combination of things that aren’t quite the same but may be even better. It’s the result that matters, not our pre-conceptions.
I much prefer Agile methods like Scrum over Waterfall because of how much less weight is given to “requirements” in Scrum. However, even if expressed in a user story, there are still dangers with Product Owners and their teams thinking something is more of a “requirement” than it really is.
Our only real requirement is to discover product solutions that work well for our users, our customers and our business.

------------------------------------------------
Early prototype risky and unfamiliar parts
------------------------------------------------
Have you prototyped risky or unfamiliar parts of the system, creating the absolute minimum amount of throwaway code needed to answer specific questions?
Divide and Conquer
As Edsger Dijkstra pointed out, no one's skull is big enough to contain all the details of a complex program, and that applies just as well to design. Divide the program into different areas of concern, and then tackle each of those areas individually. If you run into a dead end in one of the areas, iterate!
Incremental refinement is a powerful tool for managing complexity. As Polya recommended in mathematical problem solving, understand the problem, devise a plan, carry out the plan, and then look back to see how you did (Polya 1957).
Design is an iterative process. You don't usually go from point A only to point B; you go from point A to point B and back to point A.
Virtually all systems undergo some degree of design changes during their initial development, and then they typically change to a greater extent as they're extended into later versions. The degree to which change is beneficial or acceptable depends on the nature of the software being built.

---------------------------------------
Establishing Correct Requirements
---------------------------------------
The first step toward developing accurate and complete specifications is to establish correct requirements. As easy as this sounds, establishing correct requirements is extremely difficult and is more of an art than a science. There are different steps one can take toward establishing correct requirements. Although some of the suggestions sound fairly obvious, actually putting them into practice may not be as easy as it sounds. The first step is to negotiate a common concept with the customer/stakeholder.
There is a quote by John von Neumann that states "There's no sense being exact about something if you don't even know what you're talking about."
Communication between the business analysts, system designer/architect and customer is vital. There is no point in trying to establish exact specifications if the business analysts and customers cannot even agree on what the requirements are.
Problem stems from ambiguities in stating requirements. Ambiguous requirements can be caused by missing requirements, ambiguous words, or introduced elements. There are also missing requirements. "a group of people" in the above requirement is an example of ambiguous words. What exactly does "group" imply? A group can consist of 5 people, 100 people, 1000 people, etc.
It is important to eliminate or at least reduce ambiguities as early as possible because the cost of them increases as we progress in the development life cycle.

----------------------
Acceptance testing
----------------------
Acceptance testing is a testing with respect to user needs, requirements, and business processes conducted to determine whether or not a system satisfies the acceptance criteria of a given use case. It is usually performed by the expert-user, customer or other authorized entity to determine whether or not the system is acceptable. A test pilot is an aviator who tests new aircraft by fling specific maneuvers. In aeronautics top pilots, navigators and engineers conduct flight tests and at the end of the test missions they will provide evaluation and certification data.


----------------------------------------------------------------
Handling Requirements Changes During Construction
----------------------------------------------------------------

Use the requirements checklist before signing the development contract. If your requirements aren't clear enough, stop work, and make them right before you proceed.

Make sure everyone knows the cost of requirements changes. Clients get excited when they think of a new feature. The easiest way to handle such feature-intoxicated people is to say, "It sounds like a great idea. Since it's not in the requirements document, I'll work up a revised SCHEDULE and COST estimate so that you can decide whether you want to do it now or later." The words "schedule" and "cost" are more sobering than coffee and a cold shower, and many "must haves" will quickly turn into "NICE to haves."