Like most people, I always keep my eye on moving technology trends.

But I don’t care about trends, I care about what makes sense.

What makes sense - Kubernetes

Let me first explain what I mean by "what makes sense".

If I’m baking a cake, I use an electric whisk rather than a hand whisk. I definitely don’t use a wooden spoon.

There will be improvements on the electric whisk - such as all in one kitchen mixers (you know, those big things with the bowl that do everything from have blender attachments to grinding attachments etc etc etc).

There may be small single handed electric whisks etc. I want to see what I think is the best way, then pursue that avenue and explore what people have innovated in that space.

The most recent example in the tech world is Kubernetes.

Containerisation makes amazing perfect sense.

I want to keep my app running in its own isolated lightweight environment. Virtual Machines feel like the wooden spoon in this - as does bare metal. As soon as we started using containers, we quickly had many many containers and organising and managing them became a nightmare - enter Kubernetes.

This is what I mean by pursuing a particular avenue.

Kubernetes is the kitchen mixer in all this.

In this blog post on software trends ...

I’m going to break this down into categories based on my experiences (mostly of pain using things).

Categories:

  1. Languages
  2. Databases
  3. UI Frameworks
  4. DevOps
  5. Kubernetes

So, let's get into it. I've added useful links to all the new technologies at the end of each section - so I hope you find this useful.

Happy reading!

Languages

I recently wrote a blog posts on moving from C# to F#, and about my talk given at .NET Reading Meetup.

The ides of moving from C# to F# has grabbed me for two main reasons:

  1. Domain Driven Design (DDD) is so easy using the likes of F#, using Object oriented Programming (OOP) for business process is painful.
  2. I truly believe that OOP has had its day, we should now be looking to use languages that help us a lot more with our day to day real tasks (not just writing boilerplate over and over again).

There are some other smaller reasons that I find big drivers; code is easier to read because there is less noise (brackets, braces, semi-colons, redundant keywords); manipulating lists of data because of the way functions can chain; immutability of F#.

Lnguage-wise, I’m keeping my eye out for those areas where I can make bigger uses of Functional Programming Languages in general.

Things like F#, Clojure, Haskell, Elm.

As a footnote on language,  I’ve actually also translated this into the frontend as well, you can go fully functional using the likes of Elm, CycleJs or semi functional using the likes of ramda js. React actually draws on a lot of functional principles - especially Redux.

https://elm-lang.org/

https://fsharp.org/

https://fsharpforfunandprofit.com/

Databases

Databases are in need of a serious update,  in my opinion.

SQL is a bit old hat, it was designed for use on disk drives.

And we’re in the SSD (NVMe) era now.

There are document databases like MongoDB, RavenDB etc etc.

There are Graph databases such as Neo4j.

But none of these has really grabbed me.

But what really piqued my interests, over a year ago, was Kafka.

Kafka

Kafka is an immutable event sourcing store.

According to their website, Kafka is used for building real-time data pipelines and streaming apps. It is horizontally scalable, fault-tolerant, wicked fast, and runs in production in thousands of companies.

It was designed from the ground up as an array like store to take advantage of that fast forward reading. What really got me thinking was this immutability.

The fact you could push bits of data and to read a document you can just forward read all the documents and just merge them, similar to

Object.assign({}, item1, item2, itemn)

in javascript.

This has been swirling around my head for ages, and what I would really like to see is a database built on this kind of technology - Datomic seems somewhat close. Y

ou’ll be forgiven for thinking - why not just use Kafka? It’s built on Java and this causes some performance problems,

I’m also not fond of KSQL - I think there is a lot of improvement that can be done in this space. I’m definitely open to suggestions.

So for 2020, I’m really keeping my eye out for an Immutable Database, something I can just chuck partial records at, then gives me the complete up to date record, with full history.

And that also isn’t built on Java. I'm still looking ...

https://kafka.apache.org/

https://www.confluent.io/product/confluent-platform

UI Frameworks

So, I’ve played around with and used quite a few UI Frameworks over the years.

JQuery (yes!), KnockoutJS, Angular 1x, Aurelia, React, Cycle JS.

They’ve all had their pros and their cons. Like many people, have kept with React.

There are two reasons why:

  1. Redux - because the pattern is just awesome
  2. JSX - because I really don’t like “technical” separation of concerns. I want my “template” next to my JS etc. I don’t believe in templates, I want components.

But watch our React, there is this new kid on the block. Svelte.

If you don’t know of it, I urge you to check it out. It is blindingly awesome and for me this is the one to watch in 2020.

Also, if you haven’t seen CycleJs, this is a functional UI framework.

And it is really cool. It makes a lot of sense in general - and in my opinion fits better with RxJs ( which most devs should be using anyway).

https://svelte.dev/

https://aurelia.io/

https://cycle.js.org/

https://ramdajs.com/

http://reactivex.io/

DevOps

Wow, what a topic DevOps is, and how it has grown.

Assuming that we are all following DevOps processes, we need great tools to support that.

I currently love Azure DevOps because it really is the all in one complete tool.

But there are others I have my eyes on like CircleCI, TravisCI and AppVeyor.

They all have their little quirks.

Recently I’ve had more exposure to Infrastructure as Code which really should be booming now.

Infrastructure as Code (IaC) is the management of infrastructure (networks, virtual machines, load balancers, and connection topology) in a descriptive model, using the same versioning as DevOps team uses for source code. Like the principle that the same source code generates the same binary, an IaC model generates the same environment every time it is applied.

IaC is a key DevOps practice and is used in conjunction with continuous deployment.

There are two things on my radar for completing that DevOps process:

  1. Terraform
  2. Pulumi. But what is Pulumi? It is a language agnostic and (in my opinion) "real" infrastructure as code framework. So you can create your cloud infrastructure using JavaScript, Typescript, Python and they’re working on C#.

https://circleci.com/

https://travis-ci.com/

https://www.appveyor.com/

https://www.pulumi.com/

https://www.terraform.io/

Kubernetes

So I’ve mentioned this earlier as the Kitchen Mixer, and it can be a whole topic on its own.

In fact, a lot of the individual parts can be whole topics.

It feels to me as though Hashicorp is a front runner for providing infrastructure tools. Things like the popular Consul, Vault and of course Terraform.

So if you’re not using something from Hashicorp then I would just advise you to check it out.

One thing I’m interested in, as I’m sure other people are, are Service Meshes., with Istio being my one to watch this year along with Linkerd.

I will be doing some in-depth analysis of these in the near future as I’m slightly more interested in the application side of infrastructure than the infrastructure side of infrastructure (networking, disk provisioning, node scaling etc) - yes, that does make sense (to me at least!).

I’m also on the look out for good load balancers, I’ve been using Traefik and quite like it, it has some powerful features around load balancing with bias - so this is my one to watch in this space.

I’m very wary of the Nginx stuff at the moment.

I do use the docker Nginx web server usually as a reverse proxy or to host my UI and it works well. But after the Nginx troubles in the news I may look to use something else.

https://www.hashicorp.com/

https://istio.io/

https://linkerd.io/

https://docs.traefik.io/

Final thoughts - on immutability, data integrity and functional concepts

With a few arbitrary categories can I draw a conclusion?

Yes, yes I can.

Immutability and Functional are the themes running through these categories - and I would like to see these carried through to Kubernetes.

In systems with fast movement of data, pacy transactions and innovations, it is paramount that data integrity remains intact.

Through the use of Functional concepts, languages and frameworks I believe we can easily achieve that and even up the pace.

Go forth, and innovate.