What is the essence of good software design
Moderator: General Moderators
-
alex.barylski
- DevNet Evangelist
- Posts: 6267
- Joined: Tue Dec 21, 2004 5:00 pm
- Location: Winnipeg
Re: What is the essence of good software design
I hear ya...it's the way I thought a few years ago too.
It's not just about supporting non-javascript users. It's about supporting both users equally well. Honestly when I made that decision to factor that into the design it really helped improve the overall architecture and structure of my codebase.
I use AJAX willingly when I feel it would enhance the user experience, like AJAXing calls to a list of records to improve the performance and responsiveness. Again, in my experience when you start with that design in mind from the get go, adding AJAX just kind of falls into place naturally there after. Whereas if you develop from day one with AJAX support you eliminate the possibility of ever being backwards compatible.
When I design everything I target the largest common denominator and only as the application evolves and I have a better understanding as to who exactly is using it, do I begin eliminating some backwards compatibility (if anything).
There really is no reason, other than laziness, ignorance or time and captial to not support every browser and every conceivable user. Obviously pleasing everyone is a pipe dream but the closer you come to that goal, the better off your software sits, right?
Cheers,
Alex
It's not just about supporting non-javascript users. It's about supporting both users equally well. Honestly when I made that decision to factor that into the design it really helped improve the overall architecture and structure of my codebase.
I use AJAX willingly when I feel it would enhance the user experience, like AJAXing calls to a list of records to improve the performance and responsiveness. Again, in my experience when you start with that design in mind from the get go, adding AJAX just kind of falls into place naturally there after. Whereas if you develop from day one with AJAX support you eliminate the possibility of ever being backwards compatible.
When I design everything I target the largest common denominator and only as the application evolves and I have a better understanding as to who exactly is using it, do I begin eliminating some backwards compatibility (if anything).
There really is no reason, other than laziness, ignorance or time and captial to not support every browser and every conceivable user. Obviously pleasing everyone is a pipe dream but the closer you come to that goal, the better off your software sits, right?
Cheers,
Alex
Re: What is the essence of good software design
Can you really compare "laziness, ignorance" to "time and captial"?
Of course we would all like to support everyone on every platform with every feature. However, you have to balance your priorities against your schedule and decide what gets implemented first and to what degree of support. Again, I'm not talking about simple content sites, but complex, interactive web-applications. With a proper design (returning now to the subject of the thread
) adding support for fringe users later should be an easy task.
You want to put your best effort out first, and if it succeeds you can add the slimmed down less friendly version for people without current technologies.
Of course we would all like to support everyone on every platform with every feature. However, you have to balance your priorities against your schedule and decide what gets implemented first and to what degree of support. Again, I'm not talking about simple content sites, but complex, interactive web-applications. With a proper design (returning now to the subject of the thread
You want to put your best effort out first, and if it succeeds you can add the slimmed down less friendly version for people without current technologies.
-
alex.barylski
- DevNet Evangelist
- Posts: 6267
- Joined: Tue Dec 21, 2004 5:00 pm
- Location: Winnipeg
Re: What is the essence of good software design
No of course not...haha. I didn't mean to compare them...but to say it's either of the two, although sometimes it can be both.Can you really compare "laziness, ignorance" to "time and captial"?
Re: What is the essence of good software design
touchealthough sometimes it can be both
- Christopher
- Site Administrator
- Posts: 13596
- Joined: Wed Aug 25, 2004 7:54 pm
- Location: New York, NY, US
Re: What is the essence of good software design
I think this comment made this converstation click for me. Perhaps what makes the developers of WordPress, phpBB, etc. successful is that they really see no need in spending time making a page faster that users are not complaining about. They instead spend their time listening to users and coming up with good solutions to those user's real needs.PCSpectra wrote:Your missing the point. What if I could deliver the exact same page that did everything yours did but 10 times faster?
Think about things like WordPress' plugins or phpBB's mods -- things that make a select group of programmer cringe. The reason that they are interesting and good solutions is that they seem conceptually "bad" but in practice are actually "good."
The language that most of us use is a similar example. PHP is considered rubbish by Java, Python, Ruby, etc. programmers. But PHP and other "bad" languages have changed programming forever because what they really do is good practices in a better way. They allow the programmer to focus more on what is important.
So my theory is that some of those horrible code bases actually implement good practices in new, creative ways -- hence their success. Their developers focused on what was important and didn't care if people criticized things that really were not really problems.
(#10850)
Re: What is the essence of good software design
I don't know who those "select" group of developers arethings that make a select group of programmer cringe. The reason that they are interesting and good solutions is that they seem conceptually "bad" but in practice are actually "good."
I think wordpress concept of plug-ins is briliant. It is in my opinion the number one key to its success, the ability to add a ton of functionality with simply dropping some downloaded scripts under a certain directory is invaluable. It is the translation of this concept into PHP language that I have a problem with. I never argued the strength of the concept, I just think the design and implementation could stand improvement. Does it matter to end-users? in this case, probably not. Does that in turn makes the design a winner? I think not. I guess this is where we will never agree.
Also, despite me pleading desperately, you avoid commenting on whether design to specifications alone is possible or not. If possible, I would like to hear it.
- allspiritseve
- DevNet Resident
- Posts: 1174
- Joined: Thu Mar 06, 2008 8:23 am
- Location: Ann Arbor, MI (USA)
Re: What is the essence of good software design
Well said.arborint wrote:I think this comment made this converstation click for me. Perhaps what makes the developers of WordPress, phpBB, etc. successful is that they really see no need in spending time making a page faster that users are not complaining about. They instead spend their time listening to users and coming up with good solutions to those user's real needs.
Think about things like WordPress' plugins or phpBB's mods -- things that make a select group of programmer cringe. The reason that they are interesting and good solutions is that they seem conceptually "bad" but in practice are actually "good."
The language that most of us use is a similar example. PHP is considered rubbish by Java, Python, Ruby, etc. programmers. But PHP and other "bad" languages have changed programming forever because what they really do is good practices in a better way. They allow the programmer to focus more on what is important.
So my theory is that some of those horrible code bases actually implement good practices in new, creative ways -- hence their success. Their developers focused on what was important and didn't care if people criticized things that really were not really problems.
Re: What is the essence of good software design
Thought user experience had nothing to do with the design or architecture?PCSpectra wrote:It's not just about supporting non-javascript users. It's about supporting both users equally well. Honestly when I made that decision to factor that into the design it really helped improve the overall architecture and structure of my codebase.
-
alex.barylski
- DevNet Evangelist
- Posts: 6267
- Joined: Tue Dec 21, 2004 5:00 pm
- Location: Winnipeg
Re: What is the essence of good software design
Sure that is a part of it...perhaps even a huge part of it...but they also reach their level of success due in part because it's free and open source and the viral marketing those solutions receive.I think this comment made this converstation click for me. Perhaps what makes the developers of WordPress, phpBB, etc. successful is that they really see no need in spending time making a page faster that users are not complaining about. They instead spend their time listening to users and coming up with good solutions to those user's real needs
I never said mods were conceptually bad...they just become a problem when they are over done. SugarCRM has to many modules to really be a CRM...it's almost a web based operating system. That introduces complexities and while it makes it more useful to some it makes it more a hassle to others. I can understand the appeal. I have a different vision I suppose, from that of applications like WordPress I see a kinship with solutions like 37Signals I guess.Think about things like WordPress' plugins or phpBB's mods -- things that make a select group of programmer cringe. The reason that they are interesting and good solutions is that they seem conceptually "bad" but in practice are actually "good."
Good practices in what context? Sure they solve interesting problems and they do it well enough to keep most users happy...but it could be much better, more secure, etc.So my theory is that some of those horrible code bases actually implement good practices in new, creative ways -- hence their success. Their developers focused on what was important and didn't care if people criticized things that really were not really problems.
I disagree not brilliant...it's been a zillion times before...whether they are plugins, hooks, etc...its just a way of modifying the application without hacking the core.I think wordpress concept of plug-ins is briliant.
Zing!!! Stole the words right from my mouth.I never argued the strength of the concept, I just think the design and implementation could stand improvement. Does it matter to end-users? in this case, probably not. Does that in turn makes the design a winner? I think not. I guess this is where we will never agree.
Did I say that verbatim or are you quoting only a single statement and ignoring surrounding arguments?Thought user experience had nothing to do with the design or architecture?
I have said several times (I think) that user experience is impetus to a software systems success...but I also said I prioritize it as much as I do design and quality assurance testing...
Cliche as it is:
http://www.fastcompany.com/magazine/06/writestuff.html
I wish I got into developing mission critical software so there are no margins for error. Then my pedantic personality would be satisfied.
Cheers,
Alex
- Christopher
- Site Administrator
- Posts: 13596
- Joined: Wed Aug 25, 2004 7:54 pm
- Location: New York, NY, US
Re: What is the essence of good software design
We don't have to agree. The market has voted that it is a winner. That's what I mean by objective.pytrin wrote:I think wordpress concept of plug-ins is briliant. ... Does that in turn makes the design a winner? I think not. I guess this is where we will never agree.
pytrin wrote:Also, despite me pleading desperately, you avoid commenting on whether design to specifications alone is possible or not. If possible, I would like to hear it.
I think the thrust of modern design principles is to design to reality. That has been the reason waterfall design has been largely abandoned. If you admit up front that you don't fully understand the problem, then you are free to learn as you go. The essence of Agile is that designs be based on real knowledge learned during development, not just conjecture.pytrin wrote:what about design fulfilling requirements regardless of what those requirements mean to actual users? you don't think the structure of code that fulfills a set of requirements can be called design? I'm pretty sure you can relate to the situation I describe in my last post. Is it really impossible to separate the act of converting specifications to code from the underlying meaning of those specifications to users?
I don't think that there is such a thing as design requirements in the sense that I think you are using it. Requirements are only external to me. I don't consider best practices, methodologies, patterns, etc. to be requirements -- they are tools we use to meet the requirements. Certainly there are accepted ways to use those tools. But you need to know when to not use the standard tool. And know when to break the rules as well as how to follow them.
(#10850)
Re: What is the essence of good software design
Huh? I dont believe I took anything out of context, I was just pointing out that considering the user experience in a different context, prompted you to refactor your conceptual model to become consistent with the user context of the domain. You let the users context _drive_ your design, in essence. All the things you listed are part of the design process, but the fact of the matter is that the user experience is the _essence_, it is the broadest concept that encapsulates all the other concepts you listed. The choosing of an implementation language for instance, comes down to the user wants again, if you trace the cause and effect of the design decisions to their roots ( or what the developer "wants for the user" in some people's cases ).PCSpectra wrote:Did I say that verbatim or are you quoting only a single statement and ignoring surrounding arguments?
For some people performance matters, for others it doesn't. Therefore it is not a property common to all good designs. If we're trying to discuss the essence we need to talk about broader concepts instead of narrower ones. I'm using the term user interchangeably with stakeholder, because I guess some people put their needs over their users.
Like allspiritseve implied, effect cannot be linked to cause, only visa versa. If we're going to discuss the cause ( the drive behind a good design ) we have to at least agree on some common attributes of what drives that design otherwise the arguments will become incoherent. There's lot's of metrics of code quality we could talk about, but before we go down that path let's resolve how so many code bases that don't exhibit these properties got popular.. The fact they were free wasn't it. What differentiates a failing OS project from a succeeding one then, if the invariant of code quality to success has been broken. My theory is hype, some one takes a risk and uses it. After the user is done using it he reflects to himself about his experience. If he feels positive he is more likely to tell a friend, depending on the statistical outcomes of peoples corresponding positive or negative feelings towards the project, a positive or negative feedback loop kicks in. Macintosh is obviously well aware of and exploits this phenomenon. Microsoft fails in their marketing footsteps
Imagine what would happen if some marketing guru figured out the principles behind what makes people feel good about that very act of telling a friend ( the essence of viral marketing perhaps? ). I believe these theories I've proposed are not only true, but I also believe when played out "in the field" so to speak, they can far outweigh other metrics such as code quality metrics. The more people you help the better your design is ( according to me and arborint ). You can have a great design and horrible implementation and visa versa. Like I said design is something that happens on a whiteboard or UML modeling program, the more user contexts you are able to take into account, the more accurately your abstractions will match the domain. What I'm getting at is that if you just speculate what the user's context is, without bouncing ideas off actual users, you're statistically much more likely to roll out a bad design. You might think its a great design but your users might disagree. Even given static requirements, you can model the domain differently within those requirements.
Re: What is the essence of good software design
The market never voted on the design of the code - cause most it doesn't care. You said it yourself you constantly hear people complaining about the design of wordpress - the little that care voted it to be bad. The fact that it doesn't change much cause they are a minority (us developers) doesn't immediately vote up the design. As with any other walk of life, the problems of the minority usually do not make a difference to the big picture.The market has voted that it is a winner. That's what I mean by objective.
This is somewhat analogous to me with the beef us developers have with IE6 - it's such a pain to support and it holds us back from implementing new and exciting technologies (that could actually benefit our users), however time and time again it has been proven that simply explaining to users that newer browsers are more secure / faster / more advanced / more standards compliant does not make much of a difference. Does that make IE6 design to be a winner? or is Microsoft simply a monopoly that can crush the opposition by providing its browser with its OS? considerations that have nothing to do with software design allow software products to be successful. Does this improve their design by default? to me that's a somewhat twisted view to look at things.
- allspiritseve
- DevNet Resident
- Posts: 1174
- Joined: Thu Mar 06, 2008 8:23 am
- Location: Ann Arbor, MI (USA)
Re: What is the essence of good software design
Microsoft crushed the opposition because they didn't just provide IE with windows, they integrated IE into the OS so much that the little e symbol simply became "the internet" to a majority of users. Explaining security benefits and speed tests to someone who doesn't understand what a browser is, is kind of a lost cause. IE was designed with that integration in mind, so yeah, it does kinda improve the quality of their design. It still sucks, as we'll be paying for that for many years to come... but it was a brilliant move on their part.pytrin wrote:This is somewhat analogous to me with the beef us developers have with IE6 - it's such a pain to support and it holds us back from implementing new and exciting technologies (that could actually benefit our users), however time and time again it has been proven that simply explaining to users that newer browsers are more secure / faster / more advanced / more standards compliant does not make much of a difference. Does that make IE6 design to be a winner? or is Microsoft simply a monopoly that can crush the opposition by providing its browser with its OS? considerations that have nothing to do with software design allow software products to be successful. Does this improve their design by default? to me that's a somewhat twisted view to look at things.
- Christopher
- Site Administrator
- Posts: 13596
- Joined: Wed Aug 25, 2004 7:54 pm
- Location: New York, NY, US
Re: What is the essence of good software design
This is where we disagree. I say the code is the application. Everyone who installed WordPress voted for that code. That's a reality vote, not somebody's opinion. And ultimately that is what counts with software.pytrin wrote:The market never voted on the design of the code - cause most it doesn't care. You said it yourself you constantly hear people complaining about the design of wordpress - the little that care voted it to be bad. The fact that it doesn't change much cause they are a minority (us developers) doesn't immediately vote up the design. As with any other walk of life, the problems of the minority usually do not make a difference to the big picture.
I don't think you can use Microsoft's monopolistic destruction of Netscape and beyond as reasonable example of anything. Even Microsoft can't do that anymore. But if you include that example in in this discussion, it further reinforces my point that the perceived quality of the source code is much less important user, domain, and now market factors. It starts to look more and more like relentless pursuit of the user is key to success.pytrin wrote:This is somewhat analogous to me with the beef us developers have with IE6 ...
(#10850)
-
alex.barylski
- DevNet Evangelist
- Posts: 6267
- Joined: Tue Dec 21, 2004 5:00 pm
- Location: Winnipeg
Re: What is the essence of good software design
Just to keep this convo going until were all cramped in the fingers...It starts to look more and more like relentless pursuit of the user is key to success.
Define success.
Software is developed for many reasons:
1. Education
2. Entertainment
3. Commercial gain
Or stroking one's own ego. Software is frequently developed just because. I have developed thousands of lines of code I never thought would be useful to anyone and yet many people have downloaded and used my code:
http://www.codeproject.com/script/Artic ... amid=26623
http://www.sourceforge.net/projects/texocms
I would say the majority of open source software is not developed for altruistic purposes but rather to scratch an itch. The majority of the time the software will prove useful to someone else.
While I agree the user experience is very important, what I think your missing is the fact that no software is totally useless, except maybe a fibonaccio number generator one might write in high school, and even then it's good for educational purposes.
So yes, the user matters but I think you both are focusing on a fact that is so obvious, it subconsciously dictates the drive of every software project regardless of how focused one might be on tangibles, like performance, validation, etc...
Open source software is notorious for focusing on the developer or tech savvy and yet it is somehow remarmably successful in the end user arena, how? Maybe because it's free and people will put up with a lot more when something is free, such as poor support, bad performance, buggy software, insecurities, etc.
Having worked in both open source (commercially) and closed source...I can honestly say...paying clients are a lot more demanding than those getting something for free. So again I bring the attentio back to the tangibles argument being important. It was kind of assumed the software would by nature of being developed by another human being, would solve other human problems.
Cheers,
Alex