Tech world is full of buzzwords, and the "software architect" is one of those: I've seen many managers recruiting software architects without having a solid understanding of its meaning. What really distinguish a software architect from an engineer? I've briefly touched this aspect during courses for one of the biggest defense company in Europe.
We live in a epoch marked by deep changes in the human society, Internet and technology enabled everyone to access knowledge by smartphones in our hands. From a society traditional affected by an underflow of information, we shifted to a society overwhelmed by overflow of data. The large availability of sources affected all life aspects, including software development: we need to rethink how we build systems.
In 90’s engineers would have designed communication between two systems by TCP sockets and binary protocols, which required ad-hoc state machines and substantial implementation efforts. Today communication is instead addressed reusing proven solutions, that automatically generates documentation and fault-tolerant code. As for software engineering, many ideas, algorithms, frameworks, and components, are today available, and a modern engineer designs software knowing what to reuse by integration, and what to develop from scratch. Moreover, he makes the software a valuable asset for the future of the company, in such a way that the design supports the software evolution and reduces the long-term maintenance costs.
The software architect is an engineer that makes large use of synthesis to design, having an overall long-term vision of the system purposes.
A good architect must know what are the "essential software problems" (e.g. the communication, the reliability, the availability, and so on) and how the available technological solutions can effectively cope with them, focusing on long-term costs and business evolutions.
Now, what do you need for your future projects? Are you looking for a developer or who shapes technologies for your business?