The process of building a new house and developing a new software application share similar concepts and methodologies. If we examine how a house is built then we must start from the conception. When my father built his current house a few years ago, he had the pleasure of having to deal with the entire process of building a new custom house based on a simple list of requirements. Once he and my mother defined their list of requirements they started to look at floor plans and model homes so that they could decide which type of house they would like to build. Once they selected a basic floor plan designed by a construction architect they then had to consult with him to make any adjustments to the initial blue prints prior to any actual construction work could be done. After they my parents and the architect agreed on the finished design a general contractor was hired to ensure that my parent’s home was to be built based on the architecture drawings and blueprints created by the architect. These documents allowed for contractor and construction works to understand what tools, supplies and time will be needed in order to accomplish building this house.
As this process was underway my parents and the architect adjusted the blueprints and architectural drawings based on new ideas that my parents contributed to ensure that the house that they were building was exactly what they needed. This process went on for several months and was finally completed when my parents and the contractor agreed that everything according to the blueprints and architectural documents supplied by the architect was completed.
Now if we look at the previous example it is pretty easy to see how the methodologies of building a house could practically mirror the process of creating a new software application. A new piece of software initially starts out as a general idea much like my father having the idea to build a new house. Once the general idea of an application is accepted by the appropriate parties then research needs to be done to define what actually needs to be done in and by the system based on defining the system’s requirements. Once requirements are defined then the basic concepts of an application can be designed by using tools like flow charts class charts, and sequence diagrams to map out how exactly a process will work within the application along with any surrounding interfaces they may have to interact with the new system. After the basic workflows in the architectural documents have been defined and the resources need to complete the project have been collected then software engineers can build the desired system based on the initial requirements within the context given in the architectural documents because they define the framework of the new system.
As the new system is developed stake holders will constantly tweak the architectural design and workflows in order for the best possible solution to be created that will fulfill their needs. These changes are determined by constantly testing and reviewing the new system as it is built to ensure that it meets the current needs of a customer or business. Once all of the system requirements are built based on the architectural documentation the requestor of a system validates that the state of the system is correct, and then accepts the as completed.
In order for both of the scenarios listed above to be successful the following insights need to be applied to each example
- Software just like a building has an architecture
As a kid I can remember playing in an old tree house built next to our pond. It was simply constructed with a small wood floor, 3 foot walls on 3 sides, a blue tarp as a roof, and a rope ladder that allowed access to the tree house. If we compare that old tree house to a modern day sky scraper similarities will immediately come to mind, both structures have walls, roof, floor, a method for exit and entry. Both of these structures originally started out as a simple design with a simple purpose envisioned by the architect and was physically created through various construction processes.
Software just as a new building starts out as a simple concept that is created through various development processes until the original of the architect concept takes on a physical implementation. It is important to note that architecture of an application or a building in fact exists without a physical implementation but is directly linked to it physical implementation.
- Properties of structures are induced by the design of their architecture
If we look back at the old tree house example we will find that the only way to enter the tree house was by accessing an opening in the front of the house about 8 feet in the air, so the ladder was needed based on the design having an entrance 8 feet off of the ground. Additionally, this tree house was designed to be placed in a tree at the height of 8 feet so the design also induces the need for a floor in the tree house so that once a person enters in to the structure they will not simply fall 8 feet to the ground.
This same concept can also be applied to the world of software development. An example of this can be seen by designing a web services or a new web application the design requires the need for network connectivity if the system is to be accessible to anyone not located on the server in which it is hosted. The need to access the system remotely is the driving factor in the design to include network connectivity as a property of the implementation.
- Recognition of the distinctive role and character of an architect, the person responsible for the creation of the architecture
In the first example pertaining to my parent’s new house, the role of the architect was vital to enabling my parents’ house to be constructed. When an architect starts to build design a house based on a conceptual idea they need to understand basics of structural engineering along with a strong sense of how individuals will attempt to use the space that is being designed. In reference to my parent’s house an architect had to initially design a few sample floor plans that act as a starting point for a new home. These starting points are then altered based on the needs and requirements of the individuals purchasing the implementation of the architect’s idea with additional input by the purchaser.
The same activities are true for a software architect designing a system based on a concept of a workflow, requirements and existing proven design patterns so that the most efficient design for a system is created that will be implemented and executed within a digital environment. The Architect must be well versed in various development, testing, and deployment technologies along with a very good understanding of how the users intend on using the new system as well as the realities of how they currently understand and utilize the existing systems.
As you can see an architect regardless of disciple needs to have a keen understanding of the engineering and logistic aspects of designing a system as well as be able to envision how the system will be used in order to appropriately design a system that is implementable and usable by its eventual end-users whether it be people using a building or a piece of software.
- The actual process is not as important as architecture
It has been said that there is more than one way to skin a cat. This statement is very true and applied to architecture in that there is more than one process to implement an architectural design. If we go back to my old tree house, the architectural design required a floor, 3 walls, roof, and a method to enter the structure. In no way was a specific construction process required to be executed in building the tree house. What were required were actual implementations of the architectural design in the form of a floor, walls, roof, and a ladder. It really did not matter if the floor was built by the use of a ladder or scaffolding, the floor just had to be built. In the same respect, the tree house also required a roof, there was need to hang shingles or build a roof out of terracotta tiles when a tarp would simply meet the needs of the roof requirement.
The same could be said for software development in regards to utilizing specific process in order to accomplish a task based on a specific architecture. If architecture is independent of its implementation then why would it matter if the system is developed with C++, C#, VB.Net, Java, or even Cold Fusion? It should not really matter because the architectural design is just the concept of how to implement a system and the actual implementation can be done in one or more various processes utilizing one or methodologies as long as the implementation meets the architectural design specifications, systems requirements and is accepted by the sponsor of the project.