Ceteris paribus

Recently, for a multi-hospital chain, we did a project that included evaluating and prioritizing their architectural principles for a new identity system. This is what we came up with. The list is useful, I think, not because of the order but because the process we went through to come up with it created consensus among the team about what tradeoffs we were going to have to make in the course of deploying the system. You, of course, will make different tradeoffs and your prioritization will be different. But the idea remains the same; all things being equal, is it more important to you to save money or have a flexible system? What do you mean by ‘save money’? What do you mean by ‘flexible’? Is saving money in the short term? What is the short term? And so forth.

1 Security (including de-provisioning and audit)

2 Reliability (disaster recovery/fault tolerance/availability; Service availability for auth = 99.998% , removing a user, others)

3 Agility (long-term; ease of integration of future applications/services; speed of implementation)

4 Flexibility/extensibility (drives abstraction/transparency, open architecture, system homogeneity)

5 Maintain-abilty (ease of management, simplicity)

6 Cost (within bounds: geometric progression)

7 Performance

8 Scalability (acquisitions, new hospitals, new services (on the order of tens of thousands)

9 Operational mode (excludes deprovisioning, removing access; includes moves, adds, changes)

10 Adaptability (provided its reliable: software — low; hardware: already have a plan)

11 System homogeneity (within the bounds of this project; not relevant)

eBay architecture

This presentation (.pdf), subtitled “Striking a balance between site stability, feature velocity, performance, and cost” is an interesting view into the architectural design of a massively large Internet service. The authors, Randy Shoup and Dan Pritchett, describe scale out (horizontal scaling), not up, in all tiers. They release 100,000 lines of code per week, which I find hard to believe. They’ve rewritten the entire app in Java (J2EE) but its a highly customized environment using mostly servelets.

“The Development Abstraction Layer”

From Joel on Software:

A young man comes to town. He is reasonably good looking, has a
little money in his pocket. He finds it easy to talk to women.

He doesn’t speak much about his past, but it is clear that he spent
a lot of time in a soulless big company.

He is naturally friendly and outgoing, and quietly confident without
being arrogant. So he finds it easy to pick up small gigs from the
job board at the local Programmer’s Cafe. But he rapidly loses interest

in insurance database projects, vanity web pages for housewives, and
financial calculation engines.

more…