Therefore, an architect is responsible for defining the best architecture in order to solve the problem at hand. In order to do that the architect should have technical roots and technical acuity to grasp technical issues and collaborate with the team to solve them. The architect will have the global view of the system and would be responsible of identifying the major issues that have to be addressed to avoid failure.
An architect has to be close the developers and able to answer questions and provide guidance to the rest of the team. He has to be fond of writing code and familiar with the technology the team is using. A good architect will be a combination of being a excellent technologist, strategist and politician.
The difference between the team leader (or lead developer) and the architect is the scope and the responsibility. The architect has a broader scope that includes interaction between different components, security, response time, etc.
Many times the architect role is considered a "promotion" or the next step in the hierarchy for a lead developer. But that may be a mistake because unfortunately not all the great developers or leads have the broad talents required to be an architect.So, what should we do to achieve such a worthy goal? Here is a (mixed) list of subjects to learn and practice (not exclusive, just a starting point):
- Different architectures: Which well known architectures are available?
- Security: How to secure applications and systems, which options are available, benefits, etc.
- Concurrency: How to run process in parallel? Implementation, Benefits, drawbacks....
- Communication and Services: Why be service oriented? What kind of services are available?
- Testing: TDD, functional testing, how to write scripts to test web or desktop apps.
- Storage: Which databases or alternative methods of storage are available?
- Development methodologies: Which ones are available? Why should I use one instead of the other?
- Agile planning and management: How does it work? What is the difference with classic management?
- Source Control Management: SVN, CVS, GIT...
- Continuous Integration: What? Why? When
- Development platforms: Rails? J2EE? .NET? GWT?
- Politics: How to be politically correct and identify managers and customer needs.
- Communication: How to communicate with your team, managers and customers effectively.
- Requirements: What should they look like? When is enough?
Sometimes, architects specialize in one technology or framework (i.e: Web Services Architect, .NET Architect, Testing Architect). I think is natural to have more experience in a particular technology than other but that doesn't mean that you should ignore the rest. Not always the job you are working on will help you to develop or to grow towards being and architect. That, I'm afraid to say is up to each of us.
As any software professional you have to research, read books, blogs and try to meet others with the same goals. Keep your information up to date, find tendencies, success stories, antipatterns (patterns to identify failure) and guidelines.Here are some books I like (see the link for the full information) and think can be helpful:
- Patterns of Enterprise Application Architecture
- Design Patterns
- Manage It!
- Enterprise Integration Patterns
- Refactoring to Patterns
- Java Concurrency in Practice
- Enterprise Recipes with Ruby and Rails
- Software Architecture in Practice
- Documenting Software Architecture, Views and Beyond
There is no certified recipe, you will find all kind of architects with many strengths and weaknesses. As with any other role, try to find architects that inspire you, people that you respect that will help you to keep your spark alive. Follow them in their blogs, books and conferences. They would lead you to other great professionals for sure.
Here are some of mine:Seagull architect".