Adam's Technology Radar for 2019
Well, another year has come and gone and so has the technologies I am most interested in. Every year I evaluate what’s hot, what’s not and focus my learning on the things that I think are going to be good for my career and my current and future employers.
This year I have three main areas of focus and they are Serverless, WebAssembly and Artificial Intelligence. These three general areas will be an underlying focus of mine throughout the year as well as my Clojure and functional programming studies. I am really looking forward to these topics. Some of them, I am very familiar with and others are going to be a stretch to say the least.
Serverless and WebAssembly might be considered the same topic but I am approaching them from two different directions. For Serverless, I am approaching it as an experienced user that wants to know more about what and when can things go wrong. We use AWS Lambda at work heavily and I always have to caution my coworkers that Lambda is not a good default choice without thinking.
Is anything a good choice without thinking? I think not!
Things to think about
- How many times will this function execute?
- Do I need to coordinate between function instances?
- What happens when we reach our 1000 concurrent executions?
- Will a single function run so much that it stops other functions from running?
- What is the backup plan when AWS Lambda experiences an outage?
You might be thinking that some of these things are unlikely, but I have seen most of them in production. These questions and their answers should be thought about and figured out before you fire a Lambda into production. Don't get me wrong, I think it's a good start for a platform, but it's not perfect, like every other technology. I do believe we are going to be seeing a lot more FAAS in the future and in places you didn't expect it. Psssssssst; it's WebAssembly!
Further Reading
WebAssembly the Javascript killer! Just Kidding. I know what you're thinking, isn't it a bit early to dive into WebAssembly? I would agree if I were talking about frontend UI for the browser. What I'm talking about is using WebAssembly and V8 Isolates embedded into products like what Cloudflare is doing with their edge functions called Workers.
Cloudflare Workers is a neat feature of their content delivery network (CDN) where you can run a WebAssembly functions at the edge. I think this is neat because you can now do things that you could never do before like API validation or authentication on the edge of a giant CDN. As an eventual bonus, you don't have to do it in one language, you could do it in any language that compiles to WebAssembly. For now I think they are only supporting Rust and Javascript.
Besides Cloudflare and Fastly, I can see a bunch of uses for this type of embedding custom processing at the edge or core of a product. How would you like to embed a C# or GoLang WebAssembly function into Redis and skip the Lua language? How about using WebAssembly as the new Docker on Kubernetes? WebAssembly was born and will evolve in an untrusted sandbox with security built in.
Further Reading
- Serverless Performance: Cloudflare Workers, Lambda and Lambda@Edge
- Introducing Cloudflare Workers: Run JavaScript Service Workers at the Edge
- Rust and WebAssembly
- Edge programming with Rust and WebAssembly
- Programming WebAssembly with Rust
This choice is a no-brainer. I think everyone in the IT industry is talking about this, working on it, or learning about it and so am I. My specific interest is how can the models produced from training be used in anger at the edge of our software.
I am currently reading the book "Prediction Machines: The Simple Economics of Artificial Intelligence" and I really like how the book takes a look at AI from the perspective of an economist. One of the things that struck me about the book was the observation of when the cost of accurate predictions decrease, more value is placed on humans that interpret and execute. The SageDB and the IntelliCode plugin for Visual Studio are great examples of this AI enhancing costly humans.
I am not quite sure how and what I am going to do with this technology pursuit but I would love to try and put a trained model into a WebAssembly host at the edge of a network or as a replacement for a Lambda function. The year has just begun and I am looking forward to digging into these three technologies.
Further Reading
- Introducing Visual Studio IntelliCode
- SageDB: A Learned Database System
- Learned Cardinalities: Estimating Correlated Joins with Deep Learning
- Towards a Hands-Free Query Optimizer through Deep Learning
I hope I've given you some things to think about. Watch out for more blogs on each of my technology choices coming in the next few weeks and months. I now have my work cut out for me, how about you? What are you looking to learn and explore in 2019?