'Having plans for a software product sometime in the future, I would like to know the best way to design a software product. Architecture (i.e. components and relations between components) first or the GUI?
Thanks.
'Having plans for a software product sometime in the future, I would like to know the best way to design a software product. Architecture (i.e. components and relations between components) first or the GUI?
Thanks.
I'd say there is no difference. If you have a skilled architect in your team - there would not be any problem developing both at the same time. If your architect is inexperienced - you will have lots of hassle either way.
Added: Given your comment, here is what should drive your choice:
1) If your project is highly feature oriented (for example some self-service system, maybe some bugtracker engine,etc., - anything that has complex functionality) - you should go with architecture first. Otherwise, you will find out that your complex architecture do not fit into the GUI you made, leading to GUI and architecture changes and lots of problems in future.
2) If your project is aimed to be highly user friendly, lets say something like facebook, last.fm or even stackoverflow.com - you should go with GUI first and architecture later. This way you will ensure that all the user-friendliness remains the same as it was designed by the cost of some additional hassle with architecture (architect will need to design architecture given the GUI).
Sketching or prototyping the GUI and discussing it with your team (or customer for customer projects) can clarify the domain model behind and reveal a whole lot of business rules and requirements that would have been ignored otherwise.
Whether or not you do the eventual GUI design later on still remains open, but not thinking about the interface at all before designing the architecture is IMHO somewhat risky.
An GUI can help the architect both capture as well understand business requirements especially those that may not be explicitly captured by the user as part of requirements documentation.
To cite an example: In one of our application requirements, the user mentioned having sets of data entry fields grouped together - based on some business logic. Since when doing the GUI, it was decided that the groups should not be visible all at once and a tab page kind of structure was preferred for display, usability questions like data to be retained by the application when moving across the tabs, technical questions like should all the tabs be loaded at once or on demand etc were obvious to the architect. Clarification of these questions user interface resulted in the architecture having to accomodate various means to meet these requirements.
I do think that desigining the UI first and having it as a reference when working on the architecture is a better option if that choice is available.
I think it depends on the type of your software. Usually I would like to confirm the most difficult part first. If your software GUI (and interaction?) will be complex and important, I would suggest to design the GUI (and interaction) first. (e.g. you are designing a painting tool or text editing tool)
For a while i thought the correct answer was 'architecture'.
True story: about four years ago, I presenting the architecture for a software project to the executive team as part of our quarterly budget review process. The project didn't get funded. Later, i asked why; one of the execs told me that no one knew what i was talking about, nor was it clear to them how much work had been done, nor how much was left to do--'too uncertain' they concluded.
About a year later, i gave another set of project summaries at the quarterly budget review. Having learned a valuable lesson, this time, for my group's most significant early-stage project, i showed a GUI--little more than a wireframe for the main dashboard in which only a few of the buttons were actually clickable, followed by a set of wireframes for each of the main sub-directories. For two days (and nights) work, our guys did an excellent job--clearly i was able to show the executive team exactly what the app would do.
The result: not funded. i asked one of the execs why--he said "well it seemed to us you've got a complete application--we didn't see that there was any development work left to do. And nice job by the way!'
Surely there's a lesson here, though i still have no idea what it is.