views:

1193

answers:

8

What are some good ways I can improve my system architecture design skills?

I'm particularly interested in designs I can learn from... can anyone shoot out some examples of good design practice, lessons learned, things to guide me?

+5  A: 
  1. Design some architectures (practice at topcoder.com)
    • Build them
    • Debug them
    • Help support them
    • Replace them
  2. Receive feedback.
  3. Learn from mistakes.
  4. GOTO 1

In order to be a good architect you will first have to be familiar with design patterns, algorithms, and relevant technologies.

Joe Philllips
-1: Left off steps: 1.1 Build them; 1.2 Debug them; 1.3 Help Support them; 1.4 Replace them.
S.Lott
+1, although try to avoid uses of GOTO like the plague
roryf
Thanks. I know that's the answer to any type of question like this. I'm hoping to gain as much insight as I can so that I may practice these steps with further guidance.
Cuga
A: 

Books are a good place to start.

Here is another topic with good suggestions

SnOrfus
+9  A: 

You could always enter architecture contests at topcoder.com. You'll get pretty good feed back from the reviewers and possibly win some money as well.

theycallmemorty
+1 for this. As a side benefit, it saves you several years of waiting as compared to @d03boy's method.
Rob Allen
Thanks, that's a great idea.
Cuga
+4  A: 

Check out Domain Driven Design by Eric Evans.

Miyagi Coder
Thanks! I'll check it out.
Cuga
+3  A: 

There are "methodologies", most of which say something like: get a requirement spec, for each noun in it, make a class, and for each verb in it, make a method, etc. etc.

I prefer a different approach. (The specific question there is about optimization, but it's really about overall system design.) The idea is to identify each kind of information that comes in and out. Who provides it, when, and in what form? From this you can identify a range of representations for that information, with pros and cons. You can identify how, why, and when to retain it, and how to minimize redundant representations. You can identify how to minimize the redundancy of the source code, and thereby minimize maintenance effort and bugs.

Mike Dunlavey
What would you recommend when I'm the one in charge of the requirement specs? For instance, in the example situation where I'm trying to dream up my own product. Can you think of any suggestions that could help me organize a system where the requirements are very soft/vague?
Cuga
I've seldom been in that position. I have made a little app for closing out charity auctions. I think it helped that I was one of the users, so I could be sure of what it should do. What I usually do is quiz the people who need it, and take extensive notes.
Mike Dunlavey
... I once heard an old salesman's adage: "Look for pain, and look for money." In other words, look for problems where people are suffering and will pay to get out of it.
Mike Dunlavey
+2  A: 

I'll suggest a book

Patterns of Enterprise Application Architecture

Tom
+4  A: 

Like any skill, it just takes time and lots of practice to learn. It's not so much about knowing the techniques, but building up a solid intuition to know when a technique will or will not work.

A big part of learning is learning from your mistakes. So make a lot of mistakes and make them as quickly as possible. Projects should be relatively short-lived. Dealing with buggy, poorly designed stuff you made will teach you nothing except the consequences of writing buggy, poorly designed stuff.

In your design, find the sweet spot between actually having thought about the problem seriously and coming up with a design you could actually finish. In almost every situation, the tendency is to over-engineer, so Keep It Simple, Stupid (KISS) and do the simplest thing that could possibly work. Keep in mind computers are not infinitely powerful --- they are unboundedly powerful. You can add whatever features you want to your system, but at some point you have to say "screw it, anything else the user wants to do, they will have to do it with pen and paper".

Tac-Tics
Well said. I especially like the parts about keeping it simple and learning from your mistakes. I've heard it said that if you're not making mistakes, you're not working, but a mistake you don't learn from is two mistakes.
Mike Dunlavey
A: 

Check out Grady Booch's work in progress, the Handbook of Software Architecture. Material is also available as podcast.

Microsoft have also published information on MSDN, such as the Application Architecture Guide.

Ola Eldøy