 |
|
 |
Hi,
Do I see more and more article coming out from specific parts of the world where standards are now implemented and they think they just discovered the middle of the universe?
I really don't understand why you always take the approach that "we need a great/perfect design that 1000 dumb programmers can implement".
And "document till you drop, ‘cose programmers are to dumb to understand anything anyway".
"They are just machines, they are not allowed to create, come up with ideas, and their opinion is limited to their cubicle."
But it's a nice try to explain in a 1 page article what others explain in 1000 pages books.
Corneliu.
PS>> Please refrain from using "shortcuts" that only you know to decipher and makes reading of the text harder but they look cool. (gr8,u...)
|
|
|
|
 |
|
 |
And BTW what does that "pukka" mean?
I've never seen it in any software related design book .. and a search on Google returned me this as the very first result:
Large Natural Breasts and Nipples - SNOTSYKIMSSNOTSYKIMS. Superior perverts can talk to each other and me at yahoo snotsykim. Note: Pictures on this page should look crystal clear - if not See Here. ...
www.pukka.net/snotsykims/ - 29k - Cached - Similar pages
|
|
|
|
 |
|
|
 |
|
|
 |
|
 |
There was no implication article that developers do not possess the required abilities to do things on their own. Low level design would most likely be done by developers who would coordinate with the architect(s). The theme of the article was to extend the design so that there would not be much deviation from it in the coding stage.
Another advantage of doing the low level design is that it would be easier for a new team member to understand what is to be done and what is being done.
Hey, guess who is on some remote desert island in the middle of nowhere .
|
|
|
|
 |
|
 |
What you explain is a variation on Extreme programming. I used this software engineering method in my last project. And well, I have to say it works pretty well. You get a more agile way of working then with other methods.
There are a few things I would like to point out on this way of working. Experience is a must in this way of working. People that work with this method have to know what they are doing, otherwise this method won't work very well.
Next, designing in pairs is indeed better than coding in pairs. As long as everybody sticks to the design the program will work, even if you don't work in pairs. And if you don't work in pairs during programming, you get double man-power for creating the code. Designing alone is not doable, you never know everything on your own. So a second mind on the case is always nice
WM.
What about weapons of mass-construction?
|
|
|
|
 |
|
 |
Its gr8 to know that used this approach already. It would be worth it if you could publish your experience as a case study for the developer community.
|
|
|
|
 |
|
 |
I will have to discuss that with my fellow developers. But I think they will let me do that .
WM.
What about weapons of mass-construction?
|
|
|
|
 |
|
 |
I discussed the subject in the development team, and I got permission to share our experiences on this website. They thought it was a great idea to share it, because they think that other people can learn from the mistakes we made (and the good things of course)
WM.
What about weapons of mass-construction?
|
|
|
|
 |
|
 |
What I like:
- breaking the gap between designer and coder
- The "Design/Entity Matrix"
What I disklike:
- to much formalism
A good designer must be able to implement what he designs, he must have an eye on "his" coders and their skills.
Complete specification down to each method contract is IMO necessary only if you have the Designers from Ivory Tower, or your coders are better typists, or your team is fluctuating to much.
Suggestions - I try to avoid formalizing a process, if it can be "fixed" with some insight and a few simple policies / guidelines.
Rather than skeletoning every method, declare some standard patterns (e.g. RAII vs. Open/IsOpen/Close, Exceptions, etc.), emphasizing design and interface consistency, and understanding the design.
Documenting rationales for design decisions is another one - IMO the best investment into a flexible design.
Anyway The design/entity matrix sounds interesting. You can quickly see how far certain decisions would reach, detect conflicts, etc. Creating and maintaining it seems to be a pain however.
I never really know a killer from a savior boost your code || Fold With Us! || sighist | doxygen
|
|
|
|
 |
|
 |
Thanks for your feedback. Glad you liked the traceability matrix. If by formalism you mean too strict a process then I agree. It is better for each one to figure what suits them best. "Formalism" may suit the CMM-5, ISO 9002 companies which have a formal/generally accepted process with all the corresponding artifacts.
Also could you tell me what IMO stands for. It sounds familiar. Where can I get more information on it?
|
|
|
|
 |
|
|
 |
|
|
 |
|
 |
A lot of software methodologies are simply wrong because they try to draw analogies from the construction industry with software design mapping to building design and "coding" mapping to construction.
This is simply wrong because both "design" and "coding" are equally design stages, just at a different level. The "construction" part of software is what happens when you compile your software and is instant.
Any methodology which treats coding as being the construction phase of software development is simply wrong from the start. Coding == design. Just a different level of design to the "design" part.
|
|
|
|
 |
|
 |
maybe i'm wrong but your suggestion looks like you are taking a dig at construction rather than saying anything of worth. what are your credentials in comparing the two fields.
if coding == design let us just dump design permanently. we can just have requirements and coding. IT saves a lot of worthless effort too.
if coding == design please fire all the software architects and designers. design patterns now becomes the book for idiots and OOP is what we say when the application crashes. also salaries-- == profits++
if coding == design is like going to war without a battle plan. or flying into space without a flight plan. just point your soldiers and pilots in the general direction and figure things out along the way.
so what if we end up in hell. i'm sure we can fix that evil too. just rework the contract so that it goes into maintenance and charge it to the customers. i'm sure they understand that money isn't everything.
anyway i'll give the (anonymous) devil his due. u may have figured out something brand new and when i get round to thinking (i sometimes do that ) i may start to understand it.
|
|
|
|
 |
|
 |
To solve this issue what we need to do is put even more effort on the design and not less.
isn't necessarily true. The design is driven by requirements, and I've found, especially in the engineering field, that:
1. requirements are almost constantly changing--different people have different views on the requirements
2. the technologies that the engineers use keeps changing which affects requirements
3. the engineers themselves can't really explain how they do things or they want things done, so when you show them something they say "oh, that's not what I meant".
The design effort has to be well-placed. I've found that the best designs for this kind of an environment are the ones that are very flexible, abstraction is used to the point of almost eliminating OOP, data structures are abstracted so they can be easily modified without breaking other parts of the application, workflows are scripted instead of hard coded, and the application code itself consists of simple, compartmentalized processes with zero entanglement with regards to other processes, data structures, and objects.
Marc
MyXaml
Advanced Unit Testing
|
|
|
|
 |
|
 |
this concept of design is flexible, gives the structure of the application but gives limited help the coders. so they end up do their own thing and the final 'design' is obtained from reverse engineering.
Your concept justifies not putting too much effort into the design but how practical is it from the development point of view. Even specifics need to be explained so that the developers do exactly what is stated in the design.
|
|
|
|
 |
|
 |
Even specifics need to be explained so that the developers do exactly what is stated in the design.
I'm an engineer who works in Software, so I can see your point. However, I agree with Mark. Having the 'developers do exactly what is stated in the design' means the users end up with what they asked for. In my experience this is rarely what they want, and even less frequently what they need.
A generic design methodology is much better - specifying what something should actually do being more improtant than saying exactly how it should be done.
|
|
|
|
 |
|
 |
The issue in the session I had mentioned claimed that since change happens so often the best way to handle it is to continuosly test the new code instead of spending time improving the design.
I personally believe that design should be flexible enough to accept change while at the same time give clear inputs to the programmer so that they dont create any class or method on their own.
This is why I believe a 2 level design process would help satisfy both flexibility while preventing the programmer from extending the design unnecessarily. Any change should be implemented in the design first. My main concern is to ensure that the design doesnt end up a being meaningless to the developers.
|
|
|
|
 |
|
 |
RedSunBeer wrote:
I personally believe that design should be flexible enough to accept change while at the same time give clear inputs to the programmer so that they dont create any class or method on their own.
I've worked on a project like this and it is most frustrating. The developer begins to feel that anything that is not perfectly described in the design has to be approved. You begin to wonder why the extra man power was put in place to create a mountain of documentation that is almost at the level of the source code and why not just create the source code in the first place.
RedSunBeer wrote:
This is why I believe a 2 level design process would help satisfy both flexibility while preventing the programmer from extending the design unnecessarily.
Jeez, you must work on some very very relaxed projects if you (or your developers) have time to extend the design unnecessarily.
RedSunBeer wrote:
My main concern is to ensure that the design doesnt end up a being meaningless to the developers
From what I see, the rate of change means that most documentation is useless in a matter of months, and is usually going out of date in a matter of weeks. I'm going with Marc on this one and his idea of a more generic design where the detail can be filled in later.
Do you want to know more?
WDevs.com - Open Source Code Hosting, Blogs, FTP, Mail and Forums
|
|
|
|
 |
|
 |
What I do when I am working with a couple of my customers on the requirements is: Make a document in which the requirements are "hard coded". This way everybody knows what to expect from the software. Also this will help when testing the software against requirements. You can make a checklist from the list of the requirements and check off all the items that are done.
Everything that's not in the requirements list won't be implemented is my motto, when working with several customers.
WM.
What about weapons of mass-construction?
|
|
|
|
 |
|
 |
Hi!
I couldn't help noticing that the session you've attended must have been a very strange one: A session on design telling you not to use it?
The problem you're describing here is as old as software development: The user/customer wants something and the developer has to build it. Without the user telling exactly what he wants the developer can only guess and usually the result is not what the user expected.
The steps in between are writing specifications and developing a design of how to fulfil the requirements.
There are many ways to do this, for example UP for the process and UML for the notation or structured modelling methods (SA/SD, (S)ERM), which are usually easier to understand for the user.
One of the main problems is that you'll have to find means of communication all stakeholders can understand. With just pseudo-code I guess you'll have problems describing the solution to the user and having the user verify that your solution is what he wants.
There are lots of modelling techniques out there, each containing a way to design systems. Why not use on of them?
Greetings,
Mav
|
|
|
|
 |
|
 |
quality uml diagrams with lots of explanatory notes would be a big plus from development point of view. designers must ensure that the uml diagrams clearly explain the implementation to the developer.
|
|
|
|
 |
|
 |
what to do when the design changes -> do generate the pseudo code again and test the design or make respective changes to the Code.
Yes, TDD helps a lot to test the design and code whether it is meeting the requirements
Ashith Raj
|
|
|
|
 |
|
 |
thanks, better inputs in design reduce poor output in development.
|
|
|
|
 |