Emerging Technology 2014 Q2

Techniques

At Alliants we're Agile everywhere, but frequently our clients are not. There's an interesting trait with our non-agile clients: they tend to have very large multi-year projects running. The way to solve any problem is to wrap it in a big budget and throw a large solution at it. This is frequently a bad way to solve a problem. One area which has kept my attention is that of Master Data Management - the flawed idea that you can get control over all your data, centrally, canonically and make it governed and useable. 

Enterprise or Master-Data Management is starting to show its cracks. Its cultural change is too large, and its priority is not large enough to bring it into business focus. Its not just size. Its principles should be challenged now too. Modern companies accept that data is denormalised, agile, siloed, and in different states of correctness. Having a more incremental approach is superior than boiling the data ocean. Using agile to sort the highest priority items by business need is greater than trying to sort out everything in the companies architecture.

Architecting for speed of development has been a mantra of mine over the last few months. Large systems, in large enterprises, typically get designed with cost reduction and risk avoidance as attributes of the design. This is fine if that is your goal but in most environments this isn't the case. Building large monoliths, with long releases, entrenches this slow, risk-averse culture into the organisation. By building architectures which are fast to change and cheap to replace, and selecting tooling and frameworks which facilitate this, an organisation can retain its ability to innovate quickly. It is this idea that Alliants are taking our larger clients through - the way you architect your organisation and its systems determines the culture you want, it isn't just techy-stuff you can ignore.

Platforms

Docker's philosophy to infrastructure draws heavily on the analogy of the shipping container. A standard box, of standard size, used in ships, lorries, trains, all around the work. It asks why can't we deploy an application to a server, laptop or desktop using the same reusable components. Anyone who has had to develop a web application knows this - in Alliants we almost exclusively develop on Macs, but deploy on Linux machines. Although there is good interoperability between linux and (BSD-based) OS X it isn't perfect and issues can arise. Docker could prove to be a solution to interoperability - as well as a contained (haha) way of scaling.

Angular.js seems to be coming into the mainstream - certainly from how many people request us to help support it this year. If there is to be resolution in the JavaScript MV* frameworks war then its looking like Angular, backed by Google, is a winner. But angular is old news. TypeScript by Microsoft is starting to look interesting and looking like a real contender to Dart. Definitely technologies to start to watch.

Libraries & Languages

Functional languages, once consigned to an academic's drawers, are making a resurgence as programmers are reaching for them when a system's performance and integrity are both critical. Clojure for example powers Akamai the massive content delivery network utilized by Facebook among other. Twitter famously switched its back-end to Scala from Rails. Haskell is used by AT&T for its network security. And Erlang is used extensively in telephony, and recently came into focus as the language behind the massively scalable WhatsApp infrastructure.

Functional languages are criticised for have pretty dense difficult syntax, but that may change. Last year our alumnus lead developer, Joe James, introduced us to Elixir, and I'm kinda hooked. Things I love in the language are its pattern matching, which, like Erlang, feels like an acceptable Prolog. The pipe operation makes function currying look beautiful [(out(inside(rather.than(_self_)))); ]. It takes a sensible approach to immutability allowing for variable re-assignment, but not allowing for a change in state of the variable. And being built on the excellent Erlang virtual machine, comes with super hardy resilience, without the syntactic onramp that Erlang carries over from Prolog.

With functional programming becoming more popular as companies want multi-core scalability, Elixir's easy syntax, modern style, and Erlang interoperability make it exciting. For those who find Erlang or Haskell a little daunting Elixir could become the answer to functional, resilient, and concurrent programming. DISCLAIMER: Its not quite near stable yet!