Coming from a system and engineering background and working as a software engineer and manager for 15 years, I have always been looking at how to systematically run the IT department of the largest enterprises in the world. Public clouds have made it possible to systematically run an IT department at any size by allocating resources via code and defining governance in an exact and tangible manner. These two adjective are of ultimate importance. I am going to briefly talk about each in this blog but before doing so I am going to state my vision around writing these series of the cloud-organization blogs.
If in the past, IT department’s assets the software and the hardware were treated as different types of resources and were managed separately, in the cloud world, they have converged into the same type of resource. These days allocating a set of servers or cluster of databases is not any different than developing a set of enterprise applications. We can use Infrastructure-as-Code (IAC) to define the infrastructure which also include all the security rules and polices also defined as code aka Security-as-Code (SAC). IAC, SAC, and applications (I call the latter Application-as-Code or AAC to be consistent and avoid confusion from now on) are all kept in a code repository (GitHub for example), built and tested using the continuous integration (CI) pipeline, and deployed to various environments (DEV, QA, PROD) using the continuous deployment (CD) pipeline. A modern IT organization treats all of its assets as code. This new way of conceiving IT is revolutionary and makes administration tasks like business continuity and disaster recovery (BCDR) as simple as deploying the latest version of an application to the production.
I can now specify my vision:
- To code the entire IT department (I call this IT as Code or ITAC) and
- To specify hierarchies of IT staff each in charge of architecting, developing, maintaining, and releasing a specific level of the ITAC.
Based on this vision, the CTO role is specifically defined as setting up the governance which is to set who is in charge of what portion of ITAC. This definition is exact since all responsibilities of a given head of unit is coded (I call this Unit-as-Code or UAC) and is tangible since when UAC is released it produces hardware and software assets that are managed and owned by the unit. Management is also precisely and consistently defined based on best IT processes like agile or continuous software delivery. This way we can say head of each unit is in fact the delivery manager of his or her UAC.
How the entire ITAC is split among various managers and how efforts among managers are coordinated is what I will try to think and write about in these series of blogs.