The primary purpose of this article is to describe some of the characteristics worth considering when developing a computing architecture. By architecture we mean the choices about the hardware and software you will using to run and develop your business solutions.
The importance of the below points will depend on the size and type of your business, however, a good appreciation of the considerations when developing a solution is needed to avoid the pitfalls many developers fall into. Developing a good computing architecture is not rocket science, its just good sense.
An architecture should not confine the business into using a specific solution to a problem. It should allow for the widest possible number of solutions.
An architecture should be portable between different platforms. This aids both the flexibility of the architecture, as you are not tied to a specific type of hardware or operating system, and the Scalability, as systems designed on low performance systems can be ported to systems with high performance.
An architecture should be able to scale up to meet the requirements of the business. It is no use developing systems which need to be rewritten when the business grows.
An architecture should be reliable. It should be able to cope with increasing demands without becoming less reliable. This means it should have a consistent way of increasing the load without affecting the performance of the system.
An architecture should last a long time. It should be built on widely used, and well supported open technologies, rather than closed proprietary technologies which are changed frequently by vendors.
An architecture should make complex systems look simple - in abstract. In other words, while computer systems are complex, there should be a higher level abstract view of the architecture which is simple to understand.
An architecture should allow developers to develop applications rapidly to meet the changing needs of the business, and not restrict their ability to deliver new functionality.
An architecture should ensure that systems to not degenerate into 'Big Balls Of Mud', where only a select few engineers understand the complex and intertwined code.
An architecture should give the developers the ability to develop systems which perform to users expectations.
An architecture should be compatible with a wide variety of common systems and applications. It should be able to utilize existing software and systems.
An software development platform should make code testable. This includes automated tests for unit tests, functional tests and integration tests.
An software architecture should be open to extension and closed to modification. Code which is well tested and reliable should be closed to modification as far as possible. By designing software to be open to extension rather than modification quality and reliability are supported.
Note: I wrote this article back in 2001. I've since also added a few items on suggestion from other developers.