Some blog posts ago I philosophized about the definition of software architecture and gave some examples I found in the internet, that were truly excellent … but somehow didn’t match perfectly well to me. I thought about this topic for a while and now I want to give you my definition. Not for software architecture itself, but for the role of the software architect:
A software architect observes quality attributes, questions functional requirements and acts as an advocate of the longevity of a software product. She achieves this by communicating to a variety of stakeholders, like project, risk and product managers, and by being a technical leader for the software development team. She is responsible for documenting decisions and the high-level design.
And let me add for the role of the embedded software architect:
An embedded software architect does this in the context of an embedded system, which is a device that is not typically thought of being a computer, yet still has microprocessors inside that run embedded software. For this kind of projects typically computing resources are limited and special realtime or safety requirements must be met. The embedded software architect’s responsibility is to supervise the achievement of these special requirements. It is also typical for embedded software to run on special hardware, like a dedicated PCB (printed cirquit board) with specially taylored chips. The embedded software architect is involved in the hardware/software codesign and acts as an interface to the electronics department.
A very comprehensive collection of definitions for the term software architecture can be found at http://www.sei.cmu.edu/architecture/start/glossary/index.cfm (scroll down until ‘software architecture’).