FREE Subscription to Dr. Dobb’s Digest: Same Great Content, New Digital Edition
Site Archive (Complete)
Architecture Blog: The .NET/Java Architect Training Program
Architecture & Design
PATTERN LANGUAGE

Modeling, Managing, Making it Right.

by Jonathan Erickson
IF YOU BUILD IT

... Will they Come?

by Arnon Rotem-Gal-Oz
October 02, 2007

The .NET/Java Architect Training Program

A side effect of my decision not to become an independent consultant at this time means that I have to shelve some of the projects I was considering. One of these projects was to create a training program for software architects which I was discussing with a couple of training centers here in Israel.

Since It seems I am not going to promote it, I thought I'd share what I think a training program for .NET/Java architects should look like in the hope that someone would find it useful and do promote it (or parts of it).

Soft Skills
The way I see it architects needs a bunch of soft skills to be able to perform their roles. Here is the list I identified in the past. (By the way, I began a series of posts on each of these skills and never got to finish it -- maybe it is time that I will :) )

  • Leadership. Influencing others to accomplish tasks and following your guidance
  • System thinking. Understand decisions and constrains in the wide scope pertaining to whole of the solution at hand. This includes
    the ability to abstract problems.
  • Strategic thinking. Understanding decisions and constrains and their alighments to the overall business of the company.
  • Organizational politics. Understand the environment you operate in and how it influences you.
  • Communications. Making sure you get your point across.
  • Human relations. Understand the "people" aspects or human
    factors and dynamics. This includes things like negotiation, pragmatism etc

I am not sure if you can teach all of them, but few courses that can help (in my opinion) include:

  • Negotiation/Persuation. Anything based on Getting to yes, Getting past no, and The power of a positive no should be fine.
  • Presentation Skills. While getting the architecture and technology right is what matters, if you can't explain it to the different stakeholders you're toast.
  • Strategic Planning. This has to do with the vision thing I expect architects to manifest. Note that having a vision should not be confused with future-proofing a solution. future-proof means excess work not needed. Having a vision is knowing where you want to end -- it can still be perfectly valid to completely re-write your applications along the way

Project Management
While the architect is not the project manager (mostly anyway), I think understanding the constraints coming from the project management point of view is very important.
Since most environments call for a mix of agile and formal disciplines (hey, you've got to be pragmatic). I would train architect both in SCRUM and RUP (or some other formal methodology). Also while not all environments needs this I would give an 2 days overview of important standards. The first would be IEEE 1471, which defines a standard for documenting software architectures. I would also teach ISO 90003 and CMMI.

It should be noted that the ISO 90003 is much better than the previous incarnation (ISO 9003) as it basically lets you define what you want to do to cover the different areas. The standard just helps you make sure you think about the various parts of project management (requirements, environment etc.). For instance, I
demonstrated how key areas of 90003 can be mapped to SCRUM to get it approved on my last project.

Languages, Design, and Patterns
I would want the .Net/Java architect training program to include at least two of the following languages:

Ruby
Scala
Erlang
F#
Python
Groovy
OCaml

The reason for this is that these languages have different design goals than .NET and Java so learning them gives you additional perspectives and broaden your horizons for other ways of thinking (even if you don't
use them in your project directly). You might have noticed that there's no .NET or Java training here. The reason for that is that's a prerequisite as far as I am concerned. You should master at least one object-oriented principles -- hopefully aspiring architects already know this. However, I often see people who discovered some of the principles by themselves but haven't heard about all of them. I am talking about
principles such as Liskov Substitution, Principle , Open Closed Principle, Single Responsibility Principle , IoC containers, Don't Repeat Yourself, and YAGNI (I summarized my opinion on most of them in this paper)

The next step is to cover some design issues like Domain Driven Design, UI Design, Database modeling, Database alternatives l(after all the database is dead, right? )

Advanced Design Patterns
When most people hear the term design patterns they think about the GoF patterns. There are however literally hundreds of design patterns. Some of them are even worth learning :) . For instance, there are patterns for concurrent and parallel systems like Proactor, Reactor Half-sync/Half-Async etc; Workflow patterns like Cancelling partial Join, Recovery Action etc; SOA patterns (okay, so I am still working on that :) )

Architecture Workshops
Another important part of the training, in my opinion, is to do some workshops and actually try to apply some of the material covered.

  • Architecture Evaluation. Workshop 2-3 days. It is probably worthwhile to delve a little on scenario based evaluation techniques such as LAAAM and ATAM. While I prefer evaluating architecture in code, the scenario based thinking is very valuable for eliciting architectural requirements
  • Distributed Systems Architectures workshop. I'll expand on this in the next post

Lastly, there are also a few miscellaneous subjects like architect 101, the SPAMMED architecture framework, Agile architecture, Behavior Driven Design , common frameworks (though hopefully this would not be needed ) like Spring/Spring.Net, Hibernate/NHibernate, iBatis etc.

PS: Note that there are a few architect training programs available out there . One is offered by the Software Engineering Institute (SEI) and includes a six courses. SEI program seems to be focuses on formal
sides of architecture as it includes courses on documenting software architecture and ATAM (You can see an old presentation I have on ATAM here).

Dana Bredemeyer also offer architect training. Dana offers several workshops that cover the software architecture profession.

TOGAF (which is more of an enterprise architecture framework) offers both a certification and courses
Lastly, IASA is considering creating a software architect program and has a few courses in development

If you know any others I'd be happy to hear about them.

Posted by Arnon Rotem-Gal-Oz at 12:44 PM  Permalink




 
INFO-LINK