What are the design principles of software design?

What "real world", general principles of software design / engineering are likely to make the greatest impact on the quality of the final product?

  • I'm looking for empirical principles - things discovered on the job / in the field that are not often discussed by textbooks or manuals...especially any principles that dispense with - or minimize - over-bearing requirements, documentation, management interference etc. Impact and agility is the key here.

  • Answer:

    The one thing that will make the single greatest difference to the quality and success of your software project is to give your developers well defined acceptance tests before they start coding and get them to show the testers that they have done their best to meet them before they start testing. This is best done with an agile approach. The reason this makes a big difference is that 50% of features/stories/usecases/requirements fail when they are tested and retested. If you can get this down to 10% you will achieve an enormous reduction in waste and risk and a big increase in productivity,  speed and effectiveness. I know I've done it.

Murray Robinson at Quora Visit the source

Was this solution helpful to you?

Other answers

I've got the impression you are not going to like my answer, if you are looking for something technical :-) The greatest impact on the quality can be achieved with a few simple principles: 1.- Find the right people 2.- Maximize communication For example, if you need to analyze requirements, find people with hard- and soft-skills, AND enough experience in the the domain. They have to understand what the user needs (which often is not what he wants), and comunicate it all along the project. That being said, there are many other principles you can apply, for example: - Be lean, avoid unnecessary activities - Have a clear and understandable vision, communicate it and keep pushing it along the project.

David Cabrerizo

Design good "blank slate" screens. Ignoring the blank slate stage is one of the biggest mistakes you can make. The blank slate is your app's first impression and you never get a second...well, you know. The problem is that when designing a ui, it's usually flush with data [...] However, the natural state of the app is one that's devoid of data. When someone signs up, they start with a blank slate. - http://gettingreal.37signals.com/ch09_The_Blank_Slate.php

Ted Goas

In my experience there are two factors that have a huge impact: - The amount of Scope creep[1]  (manage your scope, handle changes appropriately, at the very least recognize them as changes) - Have stable footing under at least your current iteration/sprint/what-have-you. Agility is highly important but you need to have some fixed and approved requirements to avoid building on quicksand. Also, don't forget Boehm's curve[2]. [1]: http://en.wikipedia.org/wiki/Scope_creep [2]: http://www.agile-process.org/change.html

Walter Flaat

To  add to David's answer:  Be Pragmatic. Don't be afraid to break the rules when they don't fit your scenario. Every process and methodology works for as long as they work. If a scenario arises where the process doesn't fit, don't fight it. I think the first rule of Agile should be - "In case of emergency, break any rule"

Harel Malka

Related Q & A:

Just Added Q & A:

Find solution

For every problem there is a solution! Proved by Solucija.

  • Got an issue and looking for advice?

  • Ask Solucija to search every corner of the Web for help.

  • Get workable solutions and helpful tips in a moment.

Just ask Solucija about an issue you face and immediately get a list of ready solutions, answers and tips from other Internet users. We always provide the most suitable and complete answer to your question at the top, along with a few good alternatives below.