|
Michael P Butler wrote:
A lot depends on the quality of the specification you receive from the "customer".
You get your customer to write the spec? Hmmm. The way we do it is this.
1. Customer tenders for project, or calls us (or we call them.)
2. We write a sales proposal and they accept it. This is done with a bit of consultation with the client. In it we define the broad scope of the proposed solution.
3. I go in and start analysing and designing the solution. I go onsite, talk to the client, look at their current systems, talk to people in the office. This goes on for about a week or so.
4. I start pulling together all my notes and ideas, putting them into a functional spec which defines down to the last page and button what the solution does and how it works.
5. We then cost the project (hopefully not too far off the initial sales proposal) and then the developers and I sit down and start planning the whole thing.
We plan each component but also how each component fits into the bigger puzzle.
Overall we spend a good few weeks, if not a month or two, speccing and planning the project. Then we go into coding.
Michael P Butler wrote:
Yes, but that does tend to mean bring bad habits over to "commerical projects" too.
True. It is a hard habit to break.
regards,
Paul Watson
Bluegrass
Cape Town, South Africa
"The greatest thing you will ever learn is to love, and be loved in return" - Moulin Rouge
Martin Marvinski wrote:
Unfortunatly Deep Throat isn't my cup of tea
Do you Sonork? I do! 100.9903 Stormfront
|
|
|
|
|
Then half way through the developement he signs a change order that screws up half of the design.
Tim Smith
Descartes Systems Sciences, Inc.
|
|
|
|
|
Tim Smith wrote:
Then half way through the developement he signs a change order that screws up half of the design.
That is why our Specification document (before planning) is a signed contract with all our clients. Planning and development do not proceed without their sign off saying that the solution we produce is what is written in the spec.
If they do change their mind though half way through we re-cost the changes and it's impact on what we have already done. We then present them with that extra costing and then they sign that off. The project timeline is also changed of course. All of this is signed and agreed to by legally binding contracts.
At the end of the day while it is frustrating to have changes half way through a project we ultimatley like it in monetary terms as we normally increase our hourly-rates for mid-project changes. If the client does not like it then we tell them to wait until the project is finished, and signed off, and then do their changes in a "Phase 2" project.
We are very strict, anally so, about all this because in the long run it is best for the client and us. After a successful project the client normall agrees and has a good laugh at all the changes they wanted half way through a project and are glad it is in phase 2 rather.
regards,
Paul Watson
Bluegrass
Cape Town, South Africa
"The greatest thing you will ever learn is to love, and be loved in return" - Moulin Rouge
Martin Marvinski wrote:
Unfortunatly Deep Throat isn't my cup of tea
Do you Sonork? I do! 100.9903 Stormfront
|
|
|
|
|
Yup, exactly how it should be.
As much as I would like to say you are wrong, up front spec is the best solution when it can be applied (which is all the time if they allow you to do up front research.)
Tim Smith
Descartes Systems Sciences, Inc.
|
|
|
|
|
Tim Smith wrote:
As much as I would like to say you are wrong
Errrr umm, thanks, I think...
regards,
Paul Watson
Bluegrass
Cape Town, South Africa
"The greatest thing you will ever learn is to love, and be loved in return" - Moulin Rouge
Martin Marvinski wrote:
Unfortunatly Deep Throat isn't my cup of tea
Do you Sonork? I do! 100.9903 Stormfront
|
|
|
|
|
Paul Watson wrote:
I chose 1 and I hope anyone can explain to me why they would choose anything but 1*
Most of the time it's not the choice of the developer but rather a dumb management (I think it's called "increased producvity").
Since the pool title is "How much design and planning do you do?" and not "How much design and planning do you/would you choose to do?" I am forced to choose other options, even thought personally I would opt for no 1 as well.
Paul Watson wrote:
Remember we are talking commerical here. Not our home/hobby projects were it is agreeably way more fun to just dive into the coding.
I think it's the commercial side that suffers on the design part more than "hobby projects" (home projects, being often a testing ground for technology don't require as much design since you will dive into unknown and want to be flexible).
|
|
|
|
|
George wrote:
Since the pool title is "How much design and planning do you do?" and not "How much design and planning do you/would you choose to do?" I am forced to choose other options, even thought personally I would opt for no 1 as well.
Well luckily we do, do 1 where I work.
regards,
Paul Watson
Bluegrass
Cape Town, South Africa
"The greatest thing you will ever learn is to love, and be loved in return" - Moulin Rouge
Martin Marvinski wrote:
Unfortunatly Deep Throat isn't my cup of tea
Do you Sonork? I do! 100.9903 Stormfront
|
|
|
|
|
Paul Watson wrote:
Well luckily we do, do 1 where I work.
I guess you can do the things right, but my place makes the in-house programming and it severely lacks on the development process side, eg. it's totally based on *"magic".
* "Magic" is created when developer writes code with no specification and documentation so effectively only he knows how the code works and what it does.
|
|
|
|
|
Paul Watson wrote:
Remember we are talking commerical here. Not our home/hobby projects were it is agreeably way more fun to just dive into the coding.
My hobby code is usually much more well designed than my commercial code. Hell, thats about the only time I actually get the opportunity to do any *real* design work.
"Thank you, thank you very much" Elvis.
|
|
|
|
|
Stan Shannon wrote:
My hobby code is usually much more well designed than my commercial code
So which of the two, in your view is more of a "success" at the end of the day?
regards,
Paul Watson
Bluegrass
Cape Town, South Africa
"The greatest thing you will ever learn is to love, and be loved in return" - Moulin Rouge
Martin Marvinski wrote:
Unfortunatly Deep Throat isn't my cup of tea
Do you Sonork? I do! 100.9903 Stormfront
|
|
|
|
|
Paul Watson wrote:
I chose 1 and I hope anyone can explain to me why they would choose anything but 1*
I'm a strong believer that you should not start programming without a design. However, there is only so much you can do on a white board.
I'm sure everyone has found out on numerous occasions, that many things pop up once you start coding. You just *can't* think of everything beforehand without it taking months.
That's why I picked #3 which is they way I work. More specifically, I try to do it as follows:
1. Do the overall design. See what the requirements are and architect the overall 'black-box' architecture.
2. Pick the first box, and do a design for that. The level of design depends on the complexity of the box.
3. Code the box.
4. Repeat at #2.
Obviously this is very simplistic, and in the 'real-world' you have multiple programmers doing things simultaniously. You also have other pressures which others have discussed. However, the overall idea is still the same.
-Oz
---
Grab WndTabs from http://www.wndtabs.com to make your VC++ experience that much more comfortable...
|
|
|
|
|
Agree. We use a process of incremental development at my shop as well.
CodeGuy
The WTL newsgroup: over 1100 members! Be a part of it. http://groups.yahoo.com/group/wtl
|
|
|
|
|
I'm with you. I feel like I have waaaaay too many choices when I'm told "don't worry about the specs, just go".
I love Visio. I love UML. I love Rose. I have more notebooks filled with scribbled designs for this and that. And most of that is just for hobby projects that never come to exist.
The project/contract that I'm currently working on would drive you nuts, I'm sure, because it's starting in on me. It's a simple re-engineering job. Hardware and software. They're the hardware guys, so they've spent on the order of several years planning, spec'ing and designing the new hardware.
Guesses as to how much time was spent planning the software? None. Well, ok, a little. I have what they call a specifications document, but it's really just a wish list. No one really spec'd it. No one did any design. And it's just as well, because they're still coming to me and saying things like "you remember that calibration process you wrote? well, now it has to work like this..."
I've found that there are people who you just can't explain to them why you can't expect good things to come of just sitting down and typing out whatever comes to mind.
That's why I really want the IEEE to certify some "Software Engineering" program somewhere so I can go, get my P.Eng., and hopefully be considered in a different class to the "professionals" who write sh*tty software and give me a bad name.
<phew>
J
|
|
|
|
|
Oh yeah, forgot to mention... the software is used to detect cracks in the fuel channels of a nuclear friggin power plant.
Ok, back to typing whatever code comes to mind...
J
|
|
|
|
|
Reviewing the entire design before you code corresponds to the earlier stages in the waterfall model of software development. Case studies and papers (e.g. Harvard/MIT Sloan reviews) have shown that following the waterfall model generally doesn't create a good software product that is useful to the customer. This is because the customer doesn't actually know themselves what they want and only have a general idea of how they would like the software to work.
No matter how much time you spend designing, there will always be something missing or wrong with the current design which would handicap the software. To create something that will actually be useful to the client, you have to be able to allow some changes to be made without having to resort to tons of rescheduling everytime a suggestion for a new feature is made (unless it's a feature that requires too much redesign).
That's why nowadays most managers and software shops have shifted to a paradigm in which changes are embraced via a software devlopment process that isn't as structured as the waterfall model. Many of them have found that new software methodologies such as XP (Extreme) Programming and Agile Development allows them to create software that meets the clients needs better. Most of the core concepts in these new methodologies emphasize less up front design and more rapid prototyping to enable the customer and the developer to see design flaws earlier and more quicker. Only partial designs and documentation are created such that they are sufficent enough to quickly create the product (or prototype). A lot of the code is usually throw away code, but that is expected with the newer methodologies and is okay since a better design and a more useful feature set evolves via the process.
If the customer only gets to see most of the feature set interoperate after months of design and development, and after seeing it decides that the previously designed features wasn't really what they wanted then you've just wasted your own as well as the client's time.
|
|
|
|
|
That is why you break projects into phases. Building section by section with an eye on each section to fit into the next section. At any time you can take a different path just by chaning the next phase, which has not had months of code work put into it.
The problem with XP and Agile Development is you find one project seriously compromises and takes over a small company. You end up prototyping till you are blue in the face and every one in the company gets involved, whether they should be or not. You waste both your time and the clients time with meetings where you sit and show them the new prototypes.
If you take london for example where it takes at least an hour to get to a meeting and then an hour to get back to the office, then prototyping becomes innifecient and time consuming. You rapidly find yourself at the end of the "analysis and design" phase with just some slapped together code, no agreements and a zillion more ideas. That is also a big problem with XP. Design agencies have found this out long ago. If you present a client with a bunch of options they start to get side tracked, coming up with all sorts of other things, instead of focusing on the project.
Also believe me, I like prototyping, but when a client sees a prototype website which looks quite good and was created in two days, no amount of explanation will make them believe that the full website will take two months. They don't get that a prototype is slapped together, like a house made of string and tin foil and that a proper "house" will take much longer to build. They think you are ripping them off and bad blood enters the relationship.
We have tried everything and find that rigid but small phases work best. Component by component, with sign off and around-the-board agreement.
regards,
Paul Watson
Bluegrass
Cape Town, South Africa
"The greatest thing you will ever learn is to love, and be loved in return" - Moulin Rouge
Martin Marvinski wrote:
Unfortunatly Deep Throat isn't my cup of tea
Do you Sonork? I do! 100.9903 Stormfront
|
|
|
|
|
Paul Watson wrote:
That is why you break projects into phases. Building section by section with an eye on each section to fit into the next section. At any time you can take a different path just by chaning the next phase, which has not had months of code work put into it.
The problem with this is that the client doesn't get to see all of the major features interoperate with each other. Building the system in stages only allows the user to see the already developed stages working together. What happens when you've finished developing the next stage, shows it to the client, and the client finds out that the newly completed module works great but invalidates their idea of the way the previous modules should work? Then you would have to redo the previous components. It would be far more beneficial to allow the client to see almost everything the client wants in a prototype first.
Paul Watson wrote:
The problem with XP and Agile Development is you find one project seriously compromises and takes over a small company. You end up prototyping till you are blue in the face and every one in the company gets involved, whether they should be or not. You waste both your time and the clients time with meetings where you sit and show them the new prototypes.
More time does need to be invested in using these methodologies, but it's time well spent. People should be emphasized over processes. Going to a corner and coding for a few weeks after receiving the signed off specs and then returning with the code does involve less meetings. But the client doesn't get to see the module gradually grow and thereby doesn't have a chance to let the developers know that the current module won't be adequate enough for what they want to do. Stopping development and correcting the design early before anymore coding takes place saves more time and frustration over the time saved by less meetings.
Paul Watson wrote:
If you take london for example where it takes at least an hour to get to a meeting and then an hour to get back to the office, then prototyping becomes innifecient and time consuming. You rapidly find yourself at the end of the "analysis and design" phase with just some slapped together code, no agreements and a zillion more ideas. That is also a big problem with XP. Design agencies have found this out long ago. If you present a client with a bunch of options they start to get side tracked, coming up with all sorts of other things, instead of focusing on the project.
Try tele or video conferencing, or just exchanging e-mails instead of flying over everytime. After you get them started on how to get the latest version (either via a SCC system, e-mail, etc.) and run it then you won't have to make so many trips. The idea behind rapid prototyping is that showing prototypes whittles down the options since the client has a more concrete idea of what they really want after seeing a couple of prototypes. Each prototype should get closer and closer to the actual feature set to be built. If not, then you need to spend more time talking with the client about the previous prototypes before prototyping another.
Paul Watson wrote:
Also believe me, I like prototyping, but when a client sees a prototype website which looks quite good and was created in two days, no amount of explanation will make them believe that the full website will take two months. They don't get that a prototype is slapped together, like a house made of string and tin foil and that a proper "house" will take much longer to build. They think you are ripping them off and bad blood enters the relationship.
I agree with you on that one and that it is a disadvantage of protoyping. However, I feel that properly educating the client that a prototype is just slapped together UI code and that a more robust and scalable solution requires considerably more effort would be effective for most cases.
Paul Watson wrote:
We have tried everything and find that rigid but small phases work best. Component by component, with sign off and around-the-board agreement.
I guess those methods are not for everyone. Use whatever works best and not just what everyone else is using. XP and Agile have worked well in previous development environments that I've been involved with and thus just have a bias towards those processes
|
|
|
|
|
There is one really great thing from XP that I use all the time: "Write the test programs first". I found it most helpful, although you need some self-discipline to make this work
I vote pro drink
|
|
|
|
|
Yes, it does take a while to get into the habit of writing test programs before you write the code. After you write testing units a couple of times, you wonder how you ever lived without them Of course, if I'm on a deadline and don't have the luxury of doing so, then I just screw it and go ahead with writing the code But if the code is to go into a reusable library, I'll usually invest the time in writing the testing modules to make it easier to perform regression testing when I go back into the library to change something.
|
|
|
|
|
Well,
For really big, complex or new systems it's almost inpossible to come up with
a correct design in the first place.
So there is the need to redefine and clearify the desing later on, as
the knowledge about the system to be build grows.
This is especialy true for systems build on new technology or in
a new application domain.
That's the reason I voted 3.
If the app to be created is an instance of an already good
understood business domain, than Option 1 is more likely to be
applicable.
I am a signature virus!
Help me spread and copy me to your sig!
Ooops I am infected
|
|
|
|
|
I am working with industrial systems that are not documented so I have to reverse engineer the code . Also I have prepare for a new system (largely undocumented) and I have my system talking to 3 other systems , all undocumented . Although the basics of my design where done before I started , facts uncovered during the work has led to several fundemental changes . The systems are in use 24 hours a day 7 days a week , there are no backup systems , there is no test system and every time I run a test it can stop the entire factory production for up to 40 minutes at a time. Design ? Yes please , but it aint always possible. In this case I would have spent several years documenting code that would have then been binned. I have to work to a rather vague and moveable IO spec that I have to generate as best I can by looking at the old code.
|
|
|
|
|
I disagree. I think that 6 is the only viable choice.
Yes, coding must wait until the design is fleshed out and everyone has had a chance to review and agree that it is ready to start coding on.
BUT. No design is ever implemented exactly the way that it was originally conceived. Has anyone ever started on a project and finished it without making changes to the the software spec? Sometimes even changes to the requirements are needed..
Because you are talking about commercial products here, the customer is involved. Even if you are making a product to be sold and not one on a contract, customers will have input into it's final design and their input is never the same as it was when the product was conceived.
just my 2 cents,
Sef Tarbell
West Des Moines, Iowa, USA
"A mind all logic is like a knife all blade, it makes the hand bleed that uses it." --Rabindranath Tagore
|
|
|
|
|