Sunday, 19 October 2014

Denying State

Recently I attended a great talk about Lamba Architecture by Carlos. I particularly liked how information is underlying a tight control of accuracy, a concept that systems like HyperLogLogF1 or Storm with Algebird have since some time. In my JAX 2012 Keynote I stated that Eventual Consistency will move into Hyper-Consistency that focuses more on perception than technical isolation. I could very well imagine Lamba Architecture being combined with CQRS, where some parts of the UI are "noisier"(a bit like VoIP scatter, coming from a queues and workers implementation) than others (maybe implemented using a functional paradigm). In functional programming as well as in event-driven systems, state is mainly neglected. But sometimes state is necessary, because it occurs in the real world, and addressing it in an immutable manner, just storing all information, can become costly, slow and inaccurate and insecure. By encapsulating functional logic and immutability where it makes sense, pairing it with a more state-driven, fuzzy, approach an architecture can scale more heterogeneously. The functional parts could be RESTful, and the fuzzy ones streams.

But the more complex these ideas become, the more they seem to be used as an excuse for random technology choices - especially in multi-paradigm solutions, e.g. ones based on JavaScript. They are getting used by people I refer to as Hipster Coders. Although the term hipster has become non-descriptive and contradictory, there is a core to it: You can call it quality or design but in the end it's simple: Not caring. Caring is the opposite of cool, it's boring. Hipster coders don't actually care about appropriate technology, the business context or the user. They care about their personal fun. The hipsters were just the last step in a long history of defaming care. They took away the rebellion. From Hip Hop, Rock, last but not least the Geek and Nerd world - hollowing out every possible idea until it could be mass-customized into an ironic pop-culture t-shirt. Hipsters celebrate obsolescence. Their hedonic need to be "on the cutting edge" (Boym) rather than beyond the edge is meagrely covering the capitalistic rationale behind it: The perpetual, infinite,  reformulation of techno-scientific merchandise (Lyotard). Hipster coders use technology like fashion uses materials, as a status symbol with an arbitrary defined lifespan.

A good example is Microservices, an architecture pattern that gained traction as fast as a cat meme. A mix between SOA, DevOps, REST and Cell Architecture, Microservices build mainly on the availability of automated virtualization and out-of-the-box distributed infrastructure. They are a worthwhile answer to heavy infrastructure blocks that come with corporate processes designed to kill any form of agile solutioning. But they come with the cost of "Integration at every level" - a technical debt in the long term a Hipster Coder could not care less about. As mobile and social require distributed architectures, this debt is easily accepted in favour of time to market. But once the systems stabilise, operations cost will rise. I agree, versioned services running in their own container make a lot of sense. As does decoupling code from nonsense anachronistic operations onboarding processes. For some components, though, a shared infrastructure just makes total sense. Forcing everyone into a directed messaging model will eventually lead to an uncontrollable network of dependencies. Once the append-only databases start stalling debugging will be hard. Microservices should be used to get rid of noise in the development cycle, not so isolate your fancy pants from the context of the world.

Dear Hipsters, maybe you would be better off with a bit of Normcore.