parts. Multiple client types. Servers working together. Networking and firewalls. Datastore replication and analytics. Cloud servers for spiky demand. External APIs and Integration.
because I have not had time to make it shorter.” Thursday, 28 February, 13 It’s easier to address a subject with a lot of words than a smaller number of better-chosen ones. It’s easier to address a business/user need with a larger, more complicated system than a simpler, better-designed one.
February, 13 Large Software Systems usually solve larger, more complicated problems. They have intrinsic complexity. They may require more complicated solutions. This makes it even more important to simplify wherever possible.
to scale. Small software systems that need to scale usually become large software systems. Scaling can introduce a lot of complexity: distributed computing, caching, robustness.
on Multiple, Hyperthreaded Cores in Multiple Machines on Multiple Networks in Parallel all Communicating Thursday, 28 February, 13 Now we have: - multiple threads - in multiple processes - in multiple virtual servers - running on multiple hyperthreaded cores - in multiple machines on - multiple networks - all communicating - all running in parallel
or when caches or databases are very widely spread. Keeping consistency across all instances and all datastores can be too much trouble. Non-traditional datastores; eventual consistency; map-reduce; hadoop.
external apis and services - core systems with client systems - different technologies - different communication apis - REST; WS-*; Messaging; Database; Exchanging Data Files over FTP. - shared models, anti-corruption layer
which are copies of the communication structures of these organizations” Conway’s Law Thursday, 28 February, 13 The environment in which you build software has a big impact on the software you build.
New development technology can be fun for developers. I’m not saying you can’t use node.js, but do you know why you’re using it? JWZ: “Some people, when confronted with a problem, think ‘I know, I’ll use regular expressions.’ Now they have two problems.” Technophilia can help/hinder recruiting if you’re using a technology that people want to use, it will be easier to hire. If you’re using a technology people don’t want to use, it will be harder.
a means, not an end. What is the problem? How does this process solve it? Adopting a process wholesale. How people work is the implicit process; does it need to be explicit?
do - vendor, consultant, coworker. If they can’t explain, that’s their fault, not yours. Are they unable, or unwilling to explain? Or maybe it’s really, really complex. Does it have to be?
These can sometimes be acronyms or references to complex technology names gone overboard: WS Splat. Other times, they’re increasingly vague and meaningless: Web 2.0, AJAX, Cloud.
supposed to solve? Do we have that problem? Will this solve it? Everything is a tradeoff. Don’t just think about benefits, think about costs, downsides. Almost no guideline is true for all situations. “Wouldn’t you want” Reasonable-sounding bad idea.
draw the line? Do you know what the dependencies are? What they’re used for? Does your project depend on multiple versions of the same dependency? Due diligence.
Architecture Astronauts, Joel Spolsky • Architecture Astronauts Take Over, Joel Spolsky • It Came from Planet Architecture, Jeff Atwood Thursday, 28 February, 13
by Aranya Sen • data centre photo by Steven Kreuzer • complexity by Domenica Nardone • watch movement photo by Guy Sie • silver bullet by Ed Schipul Thursday, 28 February, 13