I'm trying to transition from a senior level engineer to a Software Architect. I believe the key to that transition is designing applications that can scale to take enterprise level performance loads. That in turn boils down to the following questions:-
- Most production systems are distributed, i.e. several nodes sit behind a domain address and share the work load as determined by a load balancer.
- How to do Capacity Planning for such a system:-
- number of nodes
- amount of memory and processors on each node
- How do you performance test such a system.
- If such a load balanced cluster exists at a middleware level, What is the best way of running a batch job over that cluster?
- How does such a system maintain state or sessions?
- How to determine the best technology stack for a given application?
- When would you use an asynchronous channel of communication? JMS or Kafka?
- How would you determine if a regular RDBMS such as Oracle or a NoSQL system such as Cassandra needs to be used?
- When would you use object caching systems like MemcacheD or CouchBase?
- How to trace requests that flow across several clusters e.g. an incoming HTTP request for a page view could flow across a front server cluster and then proceed to a middleware cluster before hitting the DB and then back..
I hope to find the answers to all these questions and come up with blog posts for each of these.. Architect en route.. :)