TL;DR Some of the tech concepts that were slowly moving towards the mainstream in 2017 seem to introduce a fresh breathe into the way we create software. These concepts (one I call "Unconscious Computing" & Distributed Ledgers) aren't only about pure technology (how we develop), but also how we sell, how we (& others) benefit from, what's the biggest value in the product created; hell - it's even about the actual boundaries of the product (that get less & less obvious). These are really interesting times to live.
It's that time of a year, again. Everyone's making a summary of the past year, so ... I won't ;P At least not a typical one - instead, I'd like to share with you one impression I've found interesting. As it's related to 2017 in general, it fits the season's mood, hehe.
Don't call me grumpy (just yet), but in fact we're building (/designing /selling) applications in a very similar way since I remember when. Languages evolve, new frameworks keep popping up, paradigms shift (like MVC making place for SPA+API), infrastructure models turn up-side down, but ... even if some of the trends had a significant impact on efficiency / priorities / economic conditions, we're still building applications VERY SIMILAR (also in terms of turning into revenue) to the ones created 20 yrs ago.
- new (/resurrected) concurrency models? Phoenix on the top of OTP (actor model) or Gin on the top of Golang (channels) feels pretty much the same as ASP.NET Core Web API (async/await)
- mobile revolution - apart from the concept of the "virtual app store" (which has made a huge difference, but in fact was just a "digitization" of traditional store concept), what's the significant difference between the iOS/Andy app & past generation web apps?
- IaaS/PaaS/FaaS cloud it's just about the financial entry threshold & more flexible cost model (yes, "serverless" FaaS as well)
- SaaS cloud - idea of componentization being re-invented once again, under different labels, with a different billing (pay-as-you-go) & less palpable than ever ...
- "Big Data"? It's just bloody batch-based data crunching, using algorithms known for decades (M/R), which has in the end evolved towards putting dialects of SQL "on-the-top" - do I need to say more?
- DevOps - yes, it's sort of a mindset shift ... all about automating what was earlier done manually, which is stil about creating an app pool, setting firewall rules, uploading static content, managing configuration by injecting the variable parts ...
- containers - another take on virtualization, just optimized to get rid of the "tax" constituted by bare OSes no-one really cared for
Yarns, Reacts, Dockers, Chefs, Hadoops, TensorFlows, EC2s, Akkas, Lambdas, TypeScripts, Angulars, Xens, Terraforms, Sparks, GCEs, Web Sockets, etc. - they were all the products of step-by-step evolution (with easy to trace ancentry lines), built on the top what was already proven & running for years (or rather decades).
YES, all of these inventions were very helpful, they've brought a significant efficiency boost, they spurred a lot of energy within the industry, but ... if you check the solutions we build on the level of "conceptual building blocks" they are deceptively similar to the ones from late 90s ...
It has been like that for years, BUT ...
... in 2017 something has moved (finally).
There are some new trends that actually may be harbingers of radical changes. Possibly in a different way than it was meant by their creators & originators, but still ...
I refer to "Unconscious" Computing & Distributed Ledgers.
These terms may look a bit confusing (especially the first one - no surprise, I've just coined it ;P), so I guess some more elaboration on what these mean would be gladly welcome ...
Until recently, all the interactions with computer software were in fact very similar - there was a "conscious action" of intended interaction with explicit UI on a dedicated device that was trigerring an event that got translated into RPC-like request (e.g. person clicking "new transfer" button on his personal banking webpage).
- Mobile app or web browser? Console game or e-book reader? Didn't matter.
- SOAP or JSON? HTTP or AMQP? Didn't matter either.
- Sync or async? Auth'ed with OIDC or ADFS? Same stuff really.
2017 has brought some novelty (to the mainstream) here. Computing is getting far more unconscious - interactions keep happening all the time, but what they do is "building up" the context: effects can happen much later, triggered "spontaneously" by the stateful model rolling all the time "in the back-end". Conversational bots, never-ending sales lead recommendations based on all your activities since "forever", learning neural networks that get better & better in learning your music preference - sure, there are still utilizing well-known building blocks like HTTP Web APIs or SAML tokens, but the concept of these applications gets significantly different -> everything we do is an input for computing, we don't intend to have data collected, it just happens as a side-effect of our lives.
"Traditional" PULL model becomes a thing of the past, replaced by PUSH that gets more & more discreet and impermeable.
If you think about it for a minute, it's a hell-of-a-change. Value is not in the code (algorithm) anymore, neither in aggregated data. All what matters is relevancy of up-to-date context built on sufficiently large & representable chunk of collected data. And in fact - model is not bound to any intended (limited) use, actual functionality evolves in unpredictable way, shifted by everchanging needs & expectations - Uber today may be a ride-providing service, but Uber tomorrow may be a whole smart city ecosystem (due to data collected by big enough pool of the drivers). Not a "service", but whole "ecosystem" ("digisystem"?) - actual solutions like that barely have any distinguishable kind of boundaries anymore.
In contrast, this term was not invented by myself - you've prolly heard about smart contracts or other distributed registries of multi-party transactions, implemented on the top of blockchain concept. Well, it's hard to not hear about them - hype level is overwhelming. Due to several (mainly technical, but not only) constraints adoption of this model is quite limited (actually, the level of skepticism is quite high), but there are few clear (& interesting) reasons why this trend will likely continue:
the concept of a service owner / service provider (as we knew it) is no more - any constraints / regulations are much harder to introduce / maintain - these are perfect conditions for very bold, very aggressive innovation that will possible suffer some failures, but doesn't want to be bogged down by implications of these failures (no "central" authority accountable, etc.)
"traditional" model of earning by being a service provider (/broker /maintainer) gets outdated as well; e.g. people / companies do not earn as "bitcoin emitters", "bitcoin central banks" - the idea is to build a platform, get as many active participants & make as much as possible from utilizing the strength of the platform itself -> capabilities not available in more traditional models
immutability of the code (not data or types) - distributed ledgers are not just about data, dapps include the code of smart contracts that is also an element of the agreements - gets executed when certain conditions are met. That brings an interesting feature: this code is as immutable as any other content put into the blockchain - a fact with no minor consequences that may introduce an interesting shift in terms of thinking about code (no bugs, only features ;P)
How to apply these most reasonably? No clue. Quite certainly key applications of distributed ledgers won't be about such obvious concepts as crypto-currencies (or other FinTech crap that just emulates traditional banks w/o banking licenses): we're just getting started with stuff that seemed most obvious.
Will anything good come out of these trends? I honestly don't know. Some past ideas looked appealing at similar stage as well, but we know how it has all ended. But these ones at least look like a chance for some new opening.