A Good Architect
I've been thinking about this topic lately, "What makes a good architect?" I've experienced my fair share of bad architects as I am sure everyone else has. And the thing that I keep coming back to is that the bad ones are lacking simply: an egoless personality. Now, I stole the term "egoless" from "The Pyschology Of Computer Programming", but I think it fits for both programmers and architects as well (they should be one and the same actually). An architect should not be afraid to NOT be called an architect and she should not care about the title she has. I think a good architect like a good manager is a nurturer. They nurture ideas and let everyone contribute to the software goal. This also means that an architect must be able to teach as well. The ultimate goal should be to bring everyone up to the level of the architect. Information hiding or doing complicated things for the sake of doing of them to boost your ego is WRONG. An architect should design at the level of his team. What good is a design if no one understands it? If you as the architect come up with a design and no one understands it, you have two options. The first is to teach everyone and explain it until everyone does. The second option is to do a design that everyone understands right now with 1-2 new ideas. The outcome should be the same. It all depends on how much time you have. I actually like option two. I think on any one project, you should only introduce 1 or 2 new concepts to the team. Everything else should be familiar. This way you are pushing everyone forward (and maybe even yourself) because you are trying out something different, but everyone still has enough footing in the familiar to be effective. This grows the knowledge and experience of the team. Eventually, it will not be a matter of bringing everyone up to speed, because they will already be there! I love this sort of team building. Just remember the architect should never always be doing the "cool" stuff. I've run into too many architects that only want to do the "cool" stuff and leave the boring stuff to everyone else. Again, this is wrong. Let everyone else do something cool too...=) Help them along the way and bestow your knowledge on them through teaching an example. Let the ego go and watch the team become unstoppable. Soon, there will be no need for an architect because everyone on the team is one. Think of it this way, your job is to work yourself out of a job. You should eventually just be one of the team.