Tuesday, July 10, 2012

Characteristics of a software architect



Using the film industry as an analogy, the project manager is the producer (making sure things get done), whereas the architect is the director (making sure things get done correctly).

As the technical lead on the project, the characteristics and skills of the architect are typically broad, rather than deep

the architect is a technical leader, which means that, as well as having technical skills, the architect exhibits leadership qualities.
Leadership can be characterized in terms of both position in the organization and also in terms of the qualities that the architect exhibits.

the architect is the technical lead on the project and should have the authority to make technical decisions.
The project manager, on the other hand, is more concerned with managing the project plan in terms of resources, schedule, and cost

since the success of the architect is closely linked to the quality of the team, participation in interviewing new team members is also highly appropriate.

Successful architects are people-oriented, and every architect takes time to act as a mentor and coach to the members of their team.
"architect" refers to the role, which may be fulfilled by either an individual or a team.
If the architect role is to be fulfilled by a team, then it is important to have one individual who is considered the lead architect, who is responsible for owning the vision and can act as a single point of coordination across the architecture team

Good architects know their strengths and weaknesses
it is often the case that an architect is supported by a number of "trusted advisors."
Such architects acknowledge where they are weak and compensate for these weaknesses by either obtaining the necessary skills or working with other people to fill the gaps in their knowledge

Day-to-day, the development team will often look to the architect to tell them what to do and often how to do it

Therefore, a good architect will have a balance of software development knowledge and business domain knowledge

architects should have a certain level of programming skills, even if they do not necessarily write code.

Specifically, the architect should have effective language skills, including speaking, writing, and presentation abilities. Also, the communication is two-way. The architect should be a good listener and observer, as well as a good talker.

Communication with the project team is particularly important, since the architect is not simply responsible for conveying information to the team, but also for motivating them

An architect who is unable to make decisions in an environment where much is unknown, where there is insufficient time to explore all alternatives, and where there is pressure to deliver is unlikely to succeed. Such an environment is to be expected, and successful architects acknowledge the situation, rather than try to change it. Thus, the architect needs to be "thick-skinned" since they may need to correct their decisions and backtrack at times during a project

Successful architects are not geeks only concerned with technology.

http://www.ibm.com/developerworks/rational/library/mar06/eeles/










  • The role of the Software Architect

Build durable architectures (Independence with regard to API/framework providers)
Promote genericity and abstraction
Bridge between developers, project managers, and business experts
Often mixed culture (.NET/J2EE/opensource)

the role is often close to the role of a technical expert.
An architect is often an ex-developer who has accumulated such experience as to reach a good level in expertise.
Communication skills are required.
Diplomacy and pedagogy skills are also required to be able to explain architectures, debate about them and have them adopted
An architect must be able to step back and take a higher-level look, which is often difficult for developers and projects managers because they are often too focused on a specific project and so on immediate needs
This means raising from the application level to the information system level.
an architect must be able to quickly read and analyze code.
An architect doesn’t take part to a project only at its beginning, but during the whole project’s lifecycle to ensure a right implementation of the design and architecture.
"Architects are a lot slower in getting a solution, especially if the problem is simple!"

http://madgeek.com/Articles/Architect/EN/architect.htm

Duties, Skills, & Knowledge of a Software Architect


primary duties of a chief software architect, including

    duties of an architect
    skills of an architect
    knowledge required by an architect
    duties of an organization to its architects and   architecture-based development projects
   
   
    Duties:
    A good architect provides a development team with all of the tools they need to put together a great system.
    Review and improve on existing systems, making use of new technologies and methodologies to seek continual improvement for existing systems.
    Provide high level guidance and direction on project work, making sure tha new projects fit in with an overall strategic vision.
    Strong communication with both technical and business teams
    Some duties are common between them only difference is about orientation.
    In which Project Manager aligned more toward Client interaction, People, Time & cost management.
    An architect can be of any type based on organization structure and its hierarchy
    An Architect must be good learner as Software Industry changing trands frequently
    Provide guidance to others on how software should be built
    abstracts the complexity of a system into a manageable model
    Act as a consultant-strategist for everyone
    he may have to wear multiple hats - as a "manager" to co-ordinate with all stakeholders, as a salesman to "sell" the idea behind his solution, as a "developer" to develop POC or pilot to prove that his solution will work, as an "executive" to drive through the implementation.
   
   
   
   
    Skills:
    An architect must be technically competent and a strong communicator (written, verbal, presentation...).
    Ability to impart knowledge to others
   
   
    Software is the living codification of ideas, brought together to achieve economic benefits for society and ultimately to bring enjoyment to individuals. Similar to living entities, software is subject to the forces of evolution and change, and ultimately has a mortality unless adaptation and growth is maintained.
    The role of the chief software architect is understand, codify and communicate the forces of adaptation and change while maintaining the organizational balance between economic drivers and technical capabilities.
   
   
    http://www.sei.cmu.edu/architecture/research/previousresearch/duties.cfm
   

Are You a Software Architect?


There are a number of different qualities that you can look for in a software architect
and their past experience is often a good gauge of their ability to undertake the role.
you need to look deeper to understand the level of involvement, influence, leadership and responsibility that has been demonstrated across a number of different areas.


All you have to do is figure out what the requirements are and design a system that satisfies them
Broadly speaking, the software architecture on most projects can be broken down into two phases; the architecture is defined and then it's delivered.
Delivery of the software architecture
Definition of the software architecture



Definition of the software architecture
the architecture definition part of the role can be broken down further into a number of different elements



Management of non-functional requirements
Non-functional requirements need to be specific, measurable, achievable and testable if we are going to satisfy them
Sometimes the stakeholders will tell us that "the system must be fast", but that's far too subjective

Architecture definition:
It's fair to say that every software system has an architecture,
but not every software system has a defined architecture.
The architecture definition process lets you think about how you're going to take the requirements along with any imposed constraints and solve the problem.
Architecture definition is about introducing structure, guidelines, principles and leadership to the technical aspects of a software project
Defining architecture is your job as a software architect but there's a big difference between designing a software system from scratch and extending an existing one.

Technology selection:
it does have its fair set of challenges when you look at cost, licensing, vendor relationships, technology strategy, compatibility, interoperability, support, deployment, upgrade policies, end-user environments and so on.

Architecture evaluation:
an architecture works if it satisfies the non-functional requirements,
provides the necessary foundation for the rest of the code
and provides a sufficient platform for solving the underlying business problem
If you can test your architecture, then you can prove that it works. And if you can do this as early as possible, you can reduce the overall risk of project failure rather than simply hoping for the best.

Architecture collaboration:



Delivery of the software architecture

Ownership of the bigger picture:
sells the vision throughout the entirety of the software development lifecycle,
If you've defined an architecture, it makes sense to remain continually engaged and evolve your architecture rather than choosing to hand it off to an "implementation team".

Leadership:
Owning the bigger picture is one aspect of technical leadership
These include taking responsibility, providing technical guidance, making technical decisions and having the authority to make those decisions.

Coaching and mentoring:
While technical leadership is about steering the project as a whole, there are times when individuals need assistance
coaching and mentoring provides a way to enhance people's skills and to help them improve their own careers.
there's a big difference between coaching your team in architecture and design versus helping them with their coding problems.

Quality assurance:
From a software development perspective, these could include
coding standards,
design principles and source code analysis tools through to the use of continuous integration, automated unit testing and code coverage tools.


Design, development and testing:
The last thing that falls squarely within the role of a software architect is design, development and testing.
why shouldn't the day-to-day coding activities be a part of an architect's role?
the architect can experience the same pain as everybody else on the team, which in turn helps them better understand how their architecture is viewed from a development perspective.

Are you a software architect?
there's a high probability that those same developers are already undertaking parts of the software architecture role, irrespective of their job title.

http://www.infoq.com/articles/brown-are-you-a-software-architect/











Core Technical Requirements
Software architects must have a background in coding software using one or more programming languages.
This coding experience will be with complex and large-scale solutions in a team environment.

Soft Skills
The software architect must have excellent interpersonal skills

Issues during performance testing often require the architect to determine root cause and design a solution

http://www.ehow.com/list_6785106_software-architect-requirements.html#ixzz20ADaYwJX







Who is Right for the Architect Role?
Too frequently, "architect" is a promotion offered to top-notch developers in an effort to retain them
The best architects, then, are good technologists and command respect in the technical community, but also are good strategists, organizational politicians (in the best sense of the word), consultants and leaders.
http://www.bredemeyer.com/who.htm