Do you get business value in focusing on the intricate details of a solution and thinking through every scenario and factoring the design around them? In the past I would spend way too much time focusing on the detail and flexing my technical muscles by tweaking nerd knows and turning dials ..... did it help with the end solution or did it hinder me?
I have fallen foul myself in the past of not focusing on what is actual important to my employer, these days however I have a slightly different view of life (must be old age). A couple of simple examples from both my personal and professional life of when I might have ended up focusing on the technology rather than end value to what I was trying to achieve;
I ran Linux as a desktop for a year or two, this was back in the day when you had to often craft your own packages, spending hours tweaking things to get them working on your system. Did this all help with my productivity, did I do my job better? If I think about it, probably not, more time was spend getting tools working. While I might have looked cool it didn't make me better at my job. The end solution for me was to use a Mac, yes I tweak knobs for productivity but mostly things work and its easier to collaborate on things.
Another example is my blog, I used to run my own web server with Wordpress. Spending hours on themes, plugins, patching and general feeding and watering. I spend more time in fact managing it than actually writing blogs (which was the main purpose). I moved to a SaaS offering of a simple blog engine (Ghost) which means I can when I have 5 minutes I can quickly write a post in markdown and then publish it when ready. I changed my focus on what was important and added value.
The final example was within my data centre designs (or any infrastructure designs), I spent a large amount of time learning the Cisco commands and the thousands of tweaks I would make so things ran 'better'. While maybe I got a negligible improvement in performance of some protocol, timer or other widget and looked like a guru I failed to realise that my tweaks made supporting the environment much harder, operations teams had to be able to troubleshoot and understand these settings with out the benefit of spending hours learning them
Don't get me wrong sometimes you get value in doing the above, what you should do is take a step back and look at the bigger picture. Work out the business value (how you make the company better at what ever it actually makes money doing) and then focus on that! You never see in annual reports that an engineer tweaked a timer on a protocol that brought in % revenue increase, or that a VM was deployed in the most beautifully hand crafted way or how about how good patching the kernal will be!
Undifferentiated Heavy Lifting
So what does matter in many companies, especially in the new digital world with competition coming in all directions (in particular startups being able to directly compete with huge organisations like never before)?
Its the application code used to provide whatever business value. Everything else doesn't provide direct value can be classed as undifferentiated heavy lifting.
Some organisations actually offer business value (thats the business they are in) in solving some of these! An example is my last employer - Cisco, who focus on creating the best router or switch they can so customer and just use them!
Example of undifferentiated heavy lifting technology that we mostly accept these days as solved and willing to let others do for us are;
- Data Plane Services (Cisco, VMware, Open vSwitch, IO Visor)
- Network Controllers (ACI, NSX, Open Daylight, ONOS)
- Carrier Networking
- Network Management & Orchestration
- Virtual Machines
Thats not all, the following are examples of undifferentiated heavy lifting that I have seen first hand customer trying to be the 'best in the world at' but get limited business value from;
- Operating systems
- Containers (OCI is a foundation for this)
- VM Managers - (CNCF great tools in this space)
- Application Platforms (CF is an example)
- Programming Frameworks (node, spring, rails are examples of this)
Why not let the experts in those layers solve those layers using their expertise allowing you to focus on things that bring value to the orgasinastion that pays you!
Why try and be the best in the world at creating a platform to run containers when you can use something else. You could do it and you would certainly learn a lot but support probably becomes a problem and you will be decreasing your velocity in delivering to the business which will add huge risk.
A great videos that convey this message better than me is (I used some of their thoughts in this blog);
So what's your point?
I myself got all excited when I discovered Docker and how easy it is to create a container and get an application running. I realised that very quickly that you needed many other components to run Docker in production and at scale. You could spend your life integrating and bolting all these components together to get a distributed system/platform for running your containers. They you would have to feed and water this setup!
So when Cisco started work on projects like Mantl I got even more excited about containers! The idea of the project was to make it easy to deploy all of these best of breed tools security and in a repeatable fashion. Deep down however you still ended up running each of them on their own (using their own individual UI). The solution resonated with customers and seemed to solve some of the problems of running containers. The following is a slide showing what makes up Mantl (I used this deck in a Cisco TechHuddle for customer and partners)
If really interested you can see a version delivered by a couple of colleagues;
It then dawned on me, when I asked the question "why"! What is the problem we are trying to solve and how does that actually help the business deliver value within my customers. Does the business really care if an application is running on a container, VM or bare metal ...... No! What does the business want?
- Application running and able to scale to meet demand and self heal
- New version of the application in customers hands quickly to counteract competition and be the leader in their space
- Fast feedback on the application usage and impact on revenue
- Run in cost effective way with no down time
- Protecting customer details and the business from the world
Now do these directly equate to running applications in containers, oh all the undifferentiated heavy lifting needed? Probably not....can containers help, probably yes.
I then got even more excited when I started to look at PaaS solutions like Cloud Foundry (more info here. The logical answer to me then was let Cloud Foundry do all the heavy lifting and it can decide how best to run my application when I provide the code! Having the platform can then allow me to focus on how I could add real value to the business.
I firmly believe that this is the way forward, which is one of the reasons I left Cisco and joined Pivotal. I have over my 15 odd years in the industry spent a large amount of time doing the undifferentiated heavy lifting, working on 6 month projects to bring a new application to market or the quarterly upgrade weekends. The IT world has been learning from the previous mind set and everything is changing which means having the right platform is critical to enable developers getting applications in customer hands while IT teams "get out of the way".