|
According to User Story And Use Case Comparison[^] User Stories were invented to replace use-cases, where the developer spent ages writing a description that was too technical for business people. So [he] says to the business people: "Tell me the stories of what the system will do. Write down the name of the story and a paragraph or two."
It seems the whole point is Business writes the user stories to, critically, take ownership of them - so they stay interested and don't just say "it's too technical, I'll leave it to the developer" often with an accompanying "No, that's not what I wanted ..." because they've not got ownership.
So by that measure you shouldn't be writing the user stories.
By asking have you missed any User-Stories?, you first need to answer have you missed any Users?
I'd suggest drawing the use-cases with the actors to identify them. For example, as an Engineer Actor I'd say you should consider: Maintenance, Testing, and Proving. Then (quietly) use these as suggestions to the Business, bring up the suggestions and to make them think they were their ideas so they have some buy-in and can be persuaded that they have ownership.
|
|
|
|
|
I agree with Jonathan that you as a developer should not really be the Product Owner.
However, if you are both the Product Owner and the Team then you are the one to write the User Stories.
A User Story tells something of value to a user - that is why we can put a Business Value on it.
Here is an example from one of your bullet points: "Parking access control".
Ask Who and What and Why?
The answers are your user stories e.g.
"A Customer should be able to see how many free parking lots that are left when getting near a Parking Basement Entrance".
The why's do not need to be elaborated in the title, but you need them to determine a business value and the priority of the User Story (priority partially hinted by should[^])
You break this story into a number of tasks needed to fulfill the user story. Tasks are of whatever you need to do e.g. talk, purchase, seek, read, write, code, assemble, install, upgrade, etc.
The estimates of the tasks is the estimated cost of the user story. The business value and estimated cost gives you an estimated velocity; a number quite useful when you select user stories to put into a sprint.
When you complete a task, you log how much time you used on it. When all tasks for a user story are complete the business value with the total used time gets you the actual velocity.
The quality of your user stories dictate the quality of your estimated and actual velocity. A good user story has an obvious business value and is easy to break down into small set of simple tasks. A small set of simple tasks are easy to estimate and can be completed within a sprint. Hence, both estimated and actual velocity benefit from a good user story.
Kind Regards,
Keld Ølykke
|
|
|
|
|
Hi,
I need to architecture a WPF application that will interact with Hardware device(s).
I am planning to use MVVM architectural pattern and DI in order to provide modularity.
Here are the components of it.
Suppose we have a Hardware called as 'Car'.
There can be different type(s) of Car such as Ford, GM, Skoda etc.
The Cars will have features. Some of them are common to all the cars and some are specific to the Make and model.
Common features can be - 4 wheels, engine, steering etc.
Different features:
Ford - Music system, Auto lock etc.
GM - Automatic transmission, Power steering etc.
Skoda - Airbags, Antilock breaking system(ABS) etc.
Application should load screen according to the car.
The hardware will interact through a set of commands.
Each type of hardware will have their set of commands.
For E.g: Suppose total we have 50 commands for the all the types.
Supported commands by each type:
Ford - 30 out of 50
GM - 40 out of 50
Skoda - 20 out of 50.
I am planning to architect as shown below.
- An abstract class for the Car to interact with the hardware which will be a Model.
- Each type of Hardware/car will be another Model.
- There will be View-Model for each type of Car(Ford, GM and Skoda). We can have VM for different make of cars, if required.
- Similar to View-Model, we'll have Views(Screns).
I need to architect the Hardware Abstraction Layer(HAL).
By HAL, i mean to say a layer which will interact with the Hardware and should be extensible. So, in future if a new type of car comes, interaction with View-Models and Views should not change.
The HAL will be responsible of sending/receiving the commands.
A small representation of the MVVM architecutre will be as follows.
-----------------
| Car View |
-----------------
|
|---------------|-------------|
---------------- ----------- ------------
| Ford View | | GM View | | Skoda View |
---------------- ----------- ------------
-----------------
| Car ViewModel |
-----------------
|
|-----------------------|-------------|
----------------- -------------- -----------------
| Ford ViewModel | | GM ViewModel | | Skoda ViewModel |
----------------- -------------- -----------------
------------
| Car Model |
------------
|
|-----------|------------------|
-------------- ---------- --------------
| Ford Model | | GM Model | | Skoda Model |
-------------- ---------- --------------
|
-----------------------------------------------
| |
---------------------------------------- ---------------------------------------
| | | | | Hardware Abstraction Layer(HAL) | | Database Access Layer(DAL) |
| Send/Receive commands | | | | | | |
---------------------------------------- ---------------------------------------
|
|-----------------------|------------------------|
----------------- ----------------- ----------------------
| Actual Ford car | | Actual GM Model | | Actual Skoda Model |
---------------- ----------------- ----------------------
There will be DAL also, in order to work in offline mode.
I am thinking of having each type of car as a Module and there will be main part in the application wherein each of the modules will be loaded.
So, Ford Module will be have FordView, FordViewModel, FordModel.
Questions:
1- What could be the best way to architect such an application?
2- How can we bring modularity?
3- How can we bring extensiblity?
4- How does the interaction between different objects take place in a loosely coupled manner?
5- I'll be using Microsft Ribbon. How can we have interaction between different buttons in the Ribbon and modules or screens?
6- Any nice article/case study/link to understand the architecure.
Please let me know if any other information is required.
Appreciate the response and time.
|
|
|
|
|
Praveen Raghuvanshi wrote: I am thinking of having each type of car as a Module
I would call it an adapter but yes that is it.
Praveen Raghuvanshi wrote: 2- How can we bring modularity
By using adapters.
Praveen Raghuvanshi wrote: 4- How does the interaction between different objects take place in a loosely
coupled manner?
Huh? Which "objects" do you think are interacting?
Praveen Raghuvanshi wrote: 5- I'll be using Microsft Ribbon. How can we have interaction between different
buttons in the Ribbon and modules or screens?
That isn't really a architecture question. And obviously if you want to look at that the first step would be to look at the API and figure out how it works and THEN attempt to answer your question.
Praveen Raghuvanshi wrote: Please let me know if any other information is required
Figuring out exactly how and what you are going to persistence is going to be a significant problem.
|
|
|
|
|
|
Questions:
1- What could be the best way to architect such an application?
Don't know particularly but whatever method you use do it thoughly
Consider your hardware being on a broadcast bus
2- How can we bring modularity?
First define what you mean by a module, h/w and s/w engineers have different ideas of what a module is I asked this on one project and the best answer I got was 'lego-like' - because it was on a project poster.
Once this was defined things started happening.
3- How can we bring extensiblity?
Again define it: work through a use case as to how you would extend the system. does a maintenance technician
take a new module and just plug it in? does it then need new software installed to accept new hardware or will the hardware deliver it or say where to get it etc
4- How does the interaction between different objects take place in a loosely coupled manner?
One possibility: Set up a message passing mechanism between objects and use a setup phase:
i.e. Tell Module A to do Task1 when it gets Message 1 and then send out Message 2 (but not till it's told to)
Tell Module B to do Task2 when it gets message 2 and then send out Message 3
and an execution phase:
Send Message 1 to Module A and wait for Message 2 from Module 2 to show completion.
5- I'll be using Microsft Ribbon. How can we have interaction between different buttons in the Ribbon and modules or screens?
Don't know offhand
6- Any nice article/case study/link to understand the architecure.
Look at http://en.wikipedia.org/wiki/CAN_Kingdom[^] described in more detail http://www.kvaser.com/images/Papers/ck301p.pdf[^]. The principles here allowed me to take a non-functioning 'modular' system and make it modular, extendable and above all work.
|
|
|
|
|
Appreciate your inputs!
I'll check on them.
Praveen Raghuvanshi
Software Developer
|
|
|
|
|
Guys, I am a software developer and want to improve my design skills.
Anybody suggest me some good books on Software Design and Architecture?
Thanks
MSR
|
|
|
|
|
|
|
Right now I'm facing an issue I had faced much times, but now I decided go deep in it. (for our purpose, let's consider PHP with MySQL)
What's the most convenient method to get a collection of records from a database?
A) Query a collection of records and populate an array of objects through a loop, or
B) Execute a loop on an array where each object is initialized through his own method (with, of course, one query for each record)
A pros: less connections or data traffic.
A cons: duplicated code to retrieve same data, increasing maintenance.
B pros: a standar method to get data, minimizing maintenance.
B cons: most connections or data traffic.
I known that each option can be applied for each context, but I bring this question to a context where we have no idea of the future implications.
Please, give your opinion or suggestions, or tell me where I can find a publication specifically about this issue.
Thanks
|
|
|
|
|
I do not know the oddities of PHP. I'd go for getting all data from the database in one query, and then create the objects from those data: the communication overhead between the application sending the queries and the database is not zero, and with a database running on a different machine things may slow down terribly.
I do not understand why that should cause duplicated code - but that might be a php issue. In C#, methods can be written such that there is no duplicated code required.
|
|
|
|
|
That's the way I'm going on for a while: one query for all.
The duplicate code occurs cause you need one query to retrieve a collection and another query inside the class to retrieve data of a specific record. Both queries retrieve same fields, and if, for some reason, you need to change fields, you must change both queries.
|
|
|
|
|
Use a constant.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
hmmm.. It can be an option.
|
|
|
|
|
Next time, you can post in the PHP forum.
It might get more people to answer your question.
|
|
|
|
|
I was doubted about the right place to post. This question is not specifically about PHP. I know how to do it. PHP is given just as an example. My doubt is about the best method, whatever language we could use.
|
|
|
|
|
Paulo S X Soares wrote: A cons: duplicated code to retrieve same data
Whatever you mean by that it isn't happening unless you are doing something wrong.
|
|
|
|
|
Let's see an example.
I already have the class clsUser. The class has the GetData method, used to retrieve data and fill an $User instance.
$User=new clsUser;
$Result=$User->GetData($ID);
In GetData method there is a query like "select ID,Name,Type,etc... from Users where ID=".$ID.
In other point of the application, I need a list ou users for some purpose. I use a query like "select ID,Name,Type,etc... from Users where <whatever>". See that the fields list is the same in both queries. That's what I call duplicated code.
|
|
|
|
|
Paulo S X Soares wrote: n other point of the application, ...That's what I call duplicated code.
The you should be using a database layer with appropriate idioms - which would avoid that.
|
|
|
|
|
Hi,
I have good development experience, have been in developing projects more than 8 years. But I had been asked to design complete end to end software for a project. It involves designing DB, WCF Server, communication protocols(like xml formats, schema ..etc) . As I am new to design the software, need help on quickly learning on designing the product like DB design and system design. Please help me to learn those aspects quickly to do build software. Please suggest me how to start with , like good books/links/tutorials. Especially on designing DB and web service protocols and communications. I don't have much time to learn though. So your suggestions/guidance will be great help.
Thanks in advance.
|
|
|
|
|
DavJes wrote: Please help me to learn those aspects quickly
It depends on what you mean by "quickly" but in general that isn't going to happen.
If the project is smaller then it probably isn't going to matter but a larger multi-application system isn't going to be designed quickly even if you already knew how to do it.
Myself I used Visio and Word to create my design documents. Visio for diagrams and Word for the actual design.
DavJes wrote: Especially on designing DB
Depends on the data. If you know what the data is and have some experience with database tables then all you need to do for the design is document each table and the values that go in each. You don't need to specify column sizes in the design unless there are requirements that specifically indicate sizes. A diagram with some comments following on each table is sufficient.
DavJes wrote: web service protocols and communications.
This is either trivial or very difficult depending on what the system does and what the methods are supposed to do. But in general you can specify each method is pseudo code and document input and output values. Documenting every method and variation probably isn't needed.
|
|
|
|
|
For database-design, I'll always recommend Normalizing upto BCNF. For webservices, I'd recommend the book "SOA patterns" from Manning. As the title says, it focuses on (design) patterns; using predefined code-structures that can be easily communicated about makes 'architecting' a bit easier. http://www.joelonsoftware.com/[^] has some nice reads touching the topic.
DavJes wrote: I don't have much time to learn though Learn a bit each day; no project starts with a 'perfect' architecture.
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|
hey thanks for the info. Please just guide me to learn how to do DB design and webservice architecture, I appreciate your help. Any good books, or links which can help. I understand it can't be learnt overnight, but at-least i will make it a point to learn faster.
thanks
|
|
|
|
|
DavJes wrote: Please just guide me to learn how to do DB design and webservice architecture Can't give more pointers on webservices than the book I mentioned. I've listed some resources on database-normalization, which would be the preferred design IMHO.- MSDN[^], explains up to rule #6
- MSDN[^], tips
- Wikipedia[^], with examples and explanation. (Links halfway details on every step)
- SqlMag[^] has a nice introduction on the topic, as well as a link that explains when normalization should be skipped.
Personally, I don't go all the way, just upto BCNF. It's boring and tedious stuff to learn and apply, but I wouldn't recommend it if the advantages don't outweigh the disadvantages; the result will be more confidence in the model used, fewer design-errors, and within a few tables you'll be normalizing your structures without effort.
The reason I recommended Mannings' SOA patterns[^] is because it focuses on the most-used patterns; a pattern is a proven and reusable solution, and that's always a nice thing to have in any architecture. I also recommend it because I read and enjoyed it myself
Bastard Programmer from Hell
If you can't read my code, try converting it here[^]
|
|
|
|
|