Search
 
     
   
   
 
Advice For Software Architects
 
 

By
Dr.Thomas J Mowbray

Chairman - iCMG

If you have a focus for your career, gaining the knowledge you need to advance can be relatively easy. For software professionals, simply doing more to build your expertise is all that is needed in most corporate environments. For example, we often ask software people what books they have read. In the west, most professionals are familiar with Design Patterns. And many have purchased the book by Erich Gamma and co-authors that established the field of design patterns. [Gamma 95] Some have even read it. However, it always surprises us how few people have read anything further on this important topic.

For software architect books, the situation is even worse. Possibly because there are fewer popular books. But more likely because people are not really focused on software architecture as a career goal. In this book series, we are eliminating the first obstacle to establishing a software architecture profession, by publishing a common body of knowledge about software architecture theory and practice. However, making this information available does not automatically change people's reading habits.

So, if the average software professional only reads about one book per year, just think what you could do in comparison. If you read 3 books on design patterns, you would have access to more knowledge than the vast majority of developers on that important topic. In our own professional development, we try even harder. At least a book each month, and if possible, a book every week.

Some books take longer than a week. For example, the 1000 page book on the Catalysis Method. [D'Souza 98]. In our opinion, it contains breakthroughs on component-oriented thinking, but so few people are likely to read it thoroughly (except software architects), that it becomes a valuable intellectual tool for making you (the reader) a thought leader, as the entire industry moves through the difficult transition to component-based development.

Getting ahead on book reading is a clear-cut way to differentiate yourself from the software masses. Converting your book learning to real-world success is also straightforward. You can apply your knowledge on your current projects. You can covert your knowledge into briefings and tutorials that put you in visible leadership and teaching roles. You can share you knowledge at conferences and professional groups. And you can write.

The key transition that leads to success starts with sharing your knowledge one to one (e.g. inefficiently), and proceeding to knowledge sharing with many at a time. In our own careers, when we began to share knowledge in one to many situations, the appearance of success came with it. Since, for most people, appearance is reality, success is easy to attain. The much more difficult challenge is maintaining success, once you've achieved it.

Word of Caution

The software architecture career path is a difficult one for many reasons. While becoming a competent software architect can be difficult; maintaining your skills is usually even harder. Here are some of the key reasons why the architecture career is difficult:

Nascent Body of Knowledge
Confusion and Gurus Professional Jealousy
The Management Trap
The Software Crisis
We discuss each of these in the following subsections.

Nascent Body Of Knowledge

First of all, the body of software architecture knowledge is not well established. Software architecture is a relatively new field of computer science. There is not much software architecture taught in schools. Academics have not yet sorted out many fundamentals. In fact, there is still much discussion and disagreement on the basics. However, many practicing software architects believe that sufficient knowledge does exist.

The practice of software architecture is much more mature than many will admit. Hopefully, you will gain this understanding too, after reading further. In the absence of widespread agreement about software architecture theory, you have to be your own expert. To be a software architect, you have to acquire your own set of knowledge and strong set of beliefs about how to do software right. No one book or software method will give you everything that you need to be an effective software architect.

Confusion And Gurus

There are many published software approaches, which claim to provide the benefits of software architecture, but can't deliver on their promises, in most instances. In fact, the software industry has created many technology fads and trends, which are based on incomplete principles. When these approaches are applied in practice, software projects fail. And guess what? The overwhelming majority of corporate development projects do fail, by being cancelled or overspending for under-delivery.

The software products industry has not suffered based upon this almost universal failure of corporate development. In contrast, it has thrived. These failures are characteristic of a vast corporate software market, populated with companies that are struggling to deliver their internal software. New products and software development ideas are constantly being produced, in a never-ending attempt to meet the needs of the struggling software masses.

As a software architect, you have to be an evangelist and leader for your software team. You need to sort out what works and what does not work from the myriad of conflicting software approaches and products. This is not easy because there is a tremendous onslaught of marketing information generated by vendors and industry experts that tend to contradict your architectural messages. It is your fate to have your architectural decisions frequently contradicted and obsoleted by the commercial software industry. One of your key skills as a architect, is to make sound decisions that can survive the ravages of time and commercial innovation.

Professional Jealousy

The more successful that you become, the more some people will resent your success. Many software professionals are genuinely nice people. But there are many people in our profession who have large egos. We all have egos that can be abrasive, but whether you intend to compete on the basis of ego or not, professional competition can create serious problems in software organizations and in your career, unless you are careful.

As a software architect, professional jealousy is a factor that you will have to watch for vigilantly. You must learn to conduct yourself with a certain degree of humility, and be prepared to defend yourself when necessary. Learn to never take any comment personally; it's always a mistake. Consider that someone you just met who appears to be acting quite rudely, might be acting in their usual manner, in the eyes of people who already know them and disregard their behavior.

The Management Trap

As you become more successful in your software career, it's more likely than not, that you will be joining the ranks of management, since most companies organize around a single management ladder. If you are good at what you do, it is natural for management to want you to mentor and supervise other people doing it too. The company can try to get the productivity of several good performers based upon your experience.

As your administrative responsibilities increase, your time to perform technical work can decrease dramatically. Because there is less time on technical tasks and less time for maintaining your technical skills, you can lose your technical edge. If you chose a software career because you enjoyed technical work, you can lose one of your most important motivations for your work. Being a software architect is quite different than being a manager.

A software architect is a direct technical contributor, whereas a manager contributes indirectly by coordinating the actions of other people. Together, managers and architects make highly effective leadership teams. In our experience, combining the two roles can work only temporarily.

A software architect can avoid becoming a manager if he establish a personal professional policy. If you don't want management duties, you must learn how to say so. For many of us, one of the most difficult transitions is learning how to say "No." For example, you have to avoid lateral promotions that lead to management and administrative roles. In some organizations you will become trapped in a management role, because the company does not have a technical ladder.

At a certain level of seniority (typical of software architects), you may be surprised, one day, to find yourself assigned responsibilities on the management organization chart. One this is decided, it is very hard to reverse. The best approach is to declare your expectations (e.g. for technical assignments) when you first take the job. And repeat your policy often.

Defining Software Architecture

An increasing number of software professionals are claiming the title: software architect. In our opinion, very few of these people know what software architecture is, beyond an informal understanding. Have you ever been involved in a discussion of the question: "What is architecture?" The term "architecture" is one of the most abused words in software technology. Later, we will describe one of the common miss-uses of architecture; then, we answer the question "What is architecture?" with a conceptual standard that is in widespread use today.

Architecture Misuse

Too often, architectures are used as sales tools rather than technical blueprints. In a typical scenario, a fast-talking technical manager (the "architect") presents a few high-level view-graphs to convince you of the greatness of his product or system. This is a presentation of a marketing architecture. Most marketing architectures are directed externally at customers and not at software developers. Marketing architectures are fine for advertising the features of commercial products, but they only provide limited technical information for developers.

The problem with marketing architectures is that they are decoupled from the development process. The so-called architect is a manager who delegates most technical details to individual developers. Unless the architect manages the computational model (including sub-system interfaces), the architecture is unlikely to deliver any real technical benefits. Architectural benefits that are easily compromised include: system adaptability (for new business needs) and system extensibility (for exploitation of new technologies).

Even though there are many competing definitions of software architecture, experts emphasize the importance of architecture, especially for component-based applications. As component reuse and software complexity increase, architecture is growing dramatically in importance. We shall soon discuss several architecture-centered approaches, which support business change, technology innovation, and design reuse. Reuse of architectural designs benefits component reuse, because design reuse is often much more effective than software reuse alone.

This article is an edited excerpt from the forthcoming book by Raphael Malveau and Thomas J. Mowbray called Software Architecture: A Field Manual, to be published by Prentice Hall in early 2000.

 

 
     
Copyright © 2006 iCMG. All rights reserved.
Site Index | Contact Us | Legal & Privacy Policy