I am very excited to announce that after 21 years as a freelance consultant, I am finally settling down: this month, I am joining endjin as a full time employee. I've been an endjin associate for over 7 years now, so this isn't a huge leap, but our trajectories have aligned in such a way that it makes sense to make it official.
My path to this point started a while ago—I've been fascinated by computers for as long as I can remember. One of my earliest memories is playing with an IBM 029 Card Punch at my father's office. (That makes me sound (slightly) older than I am. I was very young, and the device was fairly old by then.) I started learning to program when I was about 7 (on a Sinclair ZX81). I also loved playing with electronics, establishing a life-long interest in the whole system, from the hardware right up to the user-facing bits. While my first full-time job, writing kernel mode device drivers for network cards, was very much down in the details, for most of my career I've been drawn to problems that need a top-to-bottom understanding.
For example, when working for BSkyB I was the lead software developer on the UI prototype for their first ever PVR, the original Sky+ system. I also created an end-to-end proof of concept for their first dynamically updatable interactive in-TV app, which they later developed into their 'Sky News Active' product. This meant working with DVB multiplexers feeding into the satellite uplink. (I had my very own TV channel for a few months!) It meant bridging the gap between that real-time embedded world, and the more pedestrian world of enterprise RDBMS. And it meant thinking about the consequences of design decisions at all levels for end users. Seemingly arcane details about, say, buffering constraints in broadcast systems have important consequences for the end user experience, making this the kind of challenge where neither the "10,000 foot" nor the "down in the weeds" perspective is sufficient. It needs a readiness to zoom your thinking in or out to any scale, and an understanding of when it's safe to abstract, and when the leaks in the abstractions have consequences.
I've always loved sharing my excitement about technology, which has led to me writing various books and a few hundred blog entries over the years. I have been a teacher and course author for Pluralsight (and before that DevelopMentor), and I've spoken at various user groups and conferences all over the world. I was a Microsoft MVP for about a decade. More recently, the demands of having 3 young children have reduced my scope for community activity, but I'm aiming to get back to more public speaking and writing very soon.
Having been in endjin's orbit for much of its existence, I have always admired the company deeply. I love challenges, and endjin's history of taking on unusual and demanding projects makes this the ideal place to work if you want to be stretched. Everyone I've worked with at endjin has been very capable and enthusiastic, and I've been particularly impressed by how the company's culture helps everyone to make the most of their potential. The founders, Matthew and Howard, have done an amazing job of turning their idea of what a company should be into reality, and I'm looking forward to helping with that work.
As well as working on customer projects, my new role involves raising endjin's technical capabilities across the board. I'll be taking a broad view of endjin's work, and finding ways to improve how we do things across the whole company. I will be helping to enhance what you might call our technical capital, including our common intellectual property base and internal applications, our techniques and practices, and our technical communication, both internal and external.
I'll be continuing to work on a fascinating project that we're not quite ready to go public with yet. It provides a distinctive and powerful way to deal with the increasing volume and complexity of data being produced throughout the modern world's infrastructure. We're seeing increasing deployment of digital sensors and monitors in often weakly-connected environments, and these have enormous potential, but I think the industry needs to shift its outlook to unlock the full potential.
Developers today have to spend too long dealing with details that are far removed from the customer concerns they're really trying to solve. It's no secret that liberating developers from low-level matters boosts productivity. The very early days of computing saw the invention of subroutines and code libraries. Then we progressed from raw machine language to high-level programming languages. More recently we've seen developments such as the ability to bring 10,000 CPU cores to bear on a calculation without being in any way responsible for procuring enough 19" racks, or ensuring that data centre's air conditioning can cope with the resultant heat. Recent developments in cloud computing continue to abstract away a lot of the tedious details that used to get in the way of the heart of the matter, but many aspects of distributed systems still seem ripe for considerable improvement. Some specific workloads have good high-level support (e.g., Azure batch, and map-reduce-style jobs), but all too often it feels like we've not moved as far from the world of toggling in the bootstrap loader on the front panel as we should have. I expect considerable change in the way we tackle distributed coding in the next few years.
This is one of the most exciting moments of my career, and I can't wait to get started.