“But that is not good design..” is a refrain I have heard in countless software design meetings arguments. And usually these arguments devolve pretty quickly into philosophic disagreements based on opinions rather than facts. This obviously begs the question – so what is good software design? I’ll add my own opinion to this ongoing discourse with 7 design principles of good software design.
1. Functional
A few months ago I was at a Lean Startup Meetup where one of the panelists was the VP of technology of a well known company that had just acquired a smaller company. Software architects working for her were commenting that the design of the acquired software was terrible, when one of them had the sudden “insight” – “but we just paid millions of dollars for this, because the shi*t works!” And that to me is the first and foremost principles of good design. Any piece of software must be able to execute its core functionality well. Otherwise it is all for naught. Good software is functional.
2. Robust
I was showing off my mad coding skillz in asp.net/mvc to a friend of my mine who happens to be a software architect. He gave me a kind fatherly look and said “this is all fun and good, but can you write code that will live on for years and years? This phone that you are using has a piece of code that I wrote 5 years ago”. Which brought me to my second epiphany about good software design. Its got to be robust. But what does robust really mean? To me it means three things – software is resistant to failures, it is able to recognize when failures occur, and it is able to recover from failures. Good software is robust.
3. Measurable
My third design principle was not a sudden a-ha moment for me. But rather it grew on me gradually, as a result of working in environments that were extremely data driven, sometimes ruthlessly so. It should be possible to measure how the software is doing out in the wild, outside of the confines of my test fixtures. Of course the actual measurement metrics would differ based on the business and nature of the software. An oft used metric for web applications is the number of HTTP 500 ISEs that are returned. For UI based applications, it is usually the number of seconds for the UI to respond. But if you find yourself writing software without putting any thought as to how to measure it (whatever measure means for you), know that you are violating a good design principle. Good software is measurable.
4. Debuggable
I remember the days working as a developer in an e-commerce company (yes, that one), where I would get paged because the ordering system was misbehaving. I would be the only developer debugging the live system, all the time surrounded by a bunch of manager-types who would demand “status” every second minute. Walking through the code in that situation was – to put it mildly – not fun. And it brought home to me the realization that any software I write should have logging that is not just there for the heck of it, but that would really help me debug when the need arose. Since then I have put in debug APIs on my web services, put in ability to dump debug state upon demand, etc. Good software is debuggable.
5. Maintainable
One of the ways in which recruiters try to attract software developers is by telling them that in the new company, they will be writing brand new software from scratch. Which highlights the fact that a lot of work that software developers do is maintaining software that somebody else wrote a while back. Software can be easy to maintain if has consistent styling, good comments, is modular, etc. In fact, there is a lot of literature on good software design that just focuses on design principles that make it easy to make changes to parts of the software without breaking its functionality. Good software is maintainable.
6. Reusable
Software developers worry about writing reusable software incessantly. A lot of software developer interviews that I have sat in (as an observer, interviewer, interviewee) invariably pose an algorithm question – “how can you find the least common ansector in a tree”, then the follow up is – “how can you make it more general”. But note, that this is #6 on my list. That is because generilizing a specific solution is hard and time consuming. And a lot of times nobody ends up reusing that piece of code anyway (of course you can argue that it is because the code was not reusable enough to begin with…). So unless you are absolutely sure that you are going to reuse this piece of functionality elsewhere, and you can time bound the effort of making it reusable, do not try this at home. Nevertheless, good software is reusable.
7. Extensible
Surprisingly, the topic of maximum number of design arguments I have sat through makes it last in my list. Usually, this is brought up when you are building infrastructure software. And it usually starts with – “but suppose that tomorrow somebody wants to add X here…”. Be wary of this design principle. Be very wary. Unless “tomorrow” is a real date in the future, and “somebody” is a real person, this design principle can lead you down a deep rabbit hole with nothing but dirt at the bottom. But I have to say this – really good software is extensible.
[…] What is GOOD software design? […]
I like reading your blog because you can always get us fresh and cool things, this time you again give us a wonderful write-up about the reality of nature in difficult times. I think that I should at least say thanks for your hard work. BY – software development company
I loved your article post. Fantastic.
Thanks again for the blog.Really looking forward to read more. Really Great.
“Appreciate you sharing, great blog.Thanks Again.”
[…] What is GOOD software design? – I would add that a good design is not always easy to do. […]
Thanks a lot for the blog.Much thanks again. Will read on…
I simply want to mention I am just new to blogging and absolutely loved you’re web blog. Likely I’m going to bookmark your blog post . You surely have fantastic articles and reviews. Thanks a lot for revealing your website.
Everything is very open with a really clear explanation of the challenges. It was definitely informative. Your site is very helpful. Thanks for sharing!
I simply special your own blogging site and additionally attitude.
You can be excellent.
Thank you when it comes to adding this in turn so i wish to investigate more
away at a later date.
Stunning thing keeping a site scrub combined with good obtaining each and every spammy posts.
Are you currently have steps regarding private writing a blog blog
to take care of the application without having fake?
And then any opinions to construct that has nice good quality such as
your home?
Hi for my the english language 🙂 it becomes not even items indigne names, hope that you can perceive
amazing post you got here, thank you for making it available!
[…] camino no distinguiremos entre diseño bueno y diseño malo. Ese mismo fallo lo cometen también en este otro, que nos indica en el segundo punto que el buen diseño debe ser “robusto”. Esto no […]
Link exchange is nothing elose however it is only placing the other
person’s web site link on your page at proper place and other person will also do same in support of you.
You’re so cool! I don’t suppose I’ve read a single thing like that before.
So nice to find another person with a few original thoughts on this topic.
Seriously.. many thanks for starting this up. This site is one thing that is
needed on the internet, someone with a little originality!
It is in point of fact a great and useful piece of info.
I’m happy that you shared this useful information with us.
Please stay us informed like this. Thanks for sharing.
hop over to this website
What is GOOD software design? | avilay
c-batang.co.kr
What is GOOD software design? | avilay
website designers firms In nw10
What is GOOD software design? | avilay
Kitchen
What is GOOD software design? | avilay
More easily said:
Correctness
Understandable
Maintainable
Efficient
Malden Rushett Information About Web Design
What is GOOD software design? | avilay
Appreciating the time and energy you put into your site and detailed information you present.
It’s nice to come across a blog every once in a while
that isn’t the same old rehashed information. Great read!
I’ve bookmarked your site and I’m including
your RSS feeds to my Google account.
This is a comment to the webmaster. I came to your What is GOOD software design? | avilay page by searching on Google but it was hard to find as you were not on the first page of search results. I know you could have more traffic to your site. I have found a site which offers to dramatically increase your website rankings and traffic to your site: http://re2l.in/1fe I managed to get close to 500 visitors/day using their service, you could also get a lot more targeted visitors from Google than you have now. Their service brought significantly more traffic to my site. I hope this helps!
[…] camino no distinguiremos entre diseño bueno y diseño malo. Ese mismo fallo lo cometen también en este otro, que nos indica en el segundo punto que el buen diseño debe ser “robusto”. Esto no suena mal, […]
1) Good software is functional
2) Good software is robust
3) Good software is measurable
4) Good software is debuggable
5) Good software is maintainable
Hi!
You Need Leads, Sales, Conversions, Traffic for wordpress.com ? Will Findet…
I WILL SEND 5 MILLION MESSAGES VIA WEBSITE CONTACT FORM
Don’t believe me? Since you’re reading this message then you’re living proof that contact form advertising works!
We can send your ad to people via their Website Contact Form.
IF YOU ARE INTERESTED, Contact us => lisaf2zw526@gmail.com
Regards,
Moye