Just eight months ago, I wrote at length about how Ray Ozzie, Bill Gates' handpicked successor as Microsoft's chief software architect, was transforming the way the company delivers software and services for the 21st century. Earlier this week came the news that Ozzie is stepping down from his position at Microsoft and that CEO Steve Ballmer will not seek a replacement. Should I be shocked?
The official word is that Ozzie is leaving the chief software architect post because he has accomplished everything he set out to achieve. In his five years at Microsoft, Ballmer says, Ozzie worked tirelessly to bring Microsoft into the modern Internet era, spearheading such projects as the Live Mesh cloud storage service and the Windows Azure cloud computing platform.
[ Keep up on key application development insights with the Fatal Exception blog and Developer World newsletter. | Follow the latest in Microsoft technology with our Technology: Microsoft newsletter. ]
But not everyone sees Ozzie's tenure at Microsoft as a case study in success. According to the Wall Street Journal, some Microsoft insiders found his leadership lacking. Ozzie's well-known aversion to public speaking meant he seldom led meetings or spoke at company events. He also clashed with other execs, the Journal reports -- particularly Steven Sinofsky, who heads Microsoft's Windows division. Reading these accounts, the picture that emerges is that of a visionary software developer, one with grand ambitions and meticulously detailed plans, but who lacks the charisma and management skills necessary to inspire the rest of the company to fall in line.
In other words, I can hear some developers saying, he sounds exactly like a software architect. Which leads to the inevitable question: Was the chief software architect position ever really necessary at Microsoft? Are software architects relevant at all?
Blueprints for software success
The concept of the software architect is one that has developed over the past decade or so. As multitier architectures have increasingly become the norm for software projects, development houses have seen a need for a "master planner" to own the overall structure of the system, in much the same way that a traditional architect creates and maintains blueprints for a building.
Ideally, software architects should be generalists who have some knowledge of the design and implementation of every subsystem in their projects. That means they should be programmers, but they probably aren't involved in much day-to-day coding. Instead, they use tools such as Uniform Modeling Language (UML) to integrate the various subsystems in ways that are consistent and efficient, with uniform APIs and minimal duplication of effort.
For a company as big as Microsoft, the chief architect can also have a hand in integrating software development efforts across departments and product areas, to ensure that the company's entire software portfolio forms a cohesive whole.