The following ad-hoc lists are technologies and techniques that any Chief Architect or CTO will come equipped with in order to design (or redesign) systems.
When I am faced with the challenge of developing a new system or refactoring a legacy system, these are the item that I consider as I go through my design process.
- Message Buses
- Async Processing
- Async Communication
- Refactoring into a different language (managed language, scripting language, DSL)
- Moving to a different Operating System
- Migratio to the Cloud
- Specialized infrastructure (SSDs, GIGE, FPGA/GPU)
- Canonical Object Model
- Common Data Format (FIX, XML, FAST, SWIFT, FpML)
- Metadata and Code Generation (including the ability to define new products quickly)
- Complex Event Processing
- SOA/Breaking embedded processes into exposed services
- Rules Engines
- Big Data/Hadoop
- Specialized Databases (Object databases, tick databases, KDB)
- BPM
- Monitoring and Alerting and Visualization
- UI Refactor (thick->thin)
- Mobile
- Providing KPIs where no existed before
- Distributed Caching
- Grid Computing
- Replacing custom processes with a vendor/open-source product
- Replacing a vendor product with custom processes
- Replacing end-of-life software
- Combining multiple products from the same companies to reduce license fees
- Change of development methodology