Modern Enterprise IT
In the midst of the constant storm of new movements in software (DevOps, CloudNative, Infrastructure as code) and technology (Containers, Schedulers) it’s easy to lose track of exactly what we’re all trying to accomplish. Must Win speaks to Enterprises all the time about how they can adopt new tools and methodologies. It’s a lot to cover, but this post outlines how we believe software development in an enterprise should happen. It includes our philosophies, processes, and even tool recommendations for your own implementations. For readers that like to skip around, here’s what we’ll be discussing:
- Traditional IT Responsibilities
- The Ideal IT Organization
- Velocity = Direction * Speed
- What does this look like in practice?
- The amazing ROI of Modern IT organizations
Traditional IT Responsibilities
IT organizations in enterprises are typically tasked with enforcing compliance and security rules and to maintain the stability of the product. Effectively they act as an inertial force within the organization. This is often portrayed at odds with software development and releasing new (and therefore risk-bearing) features.
The Ideal IT Organization
As software continues to infest more industries, major enterprises are building out or modernizing software organizations within their firms. The goal of these organizations, as with any business unit, is to deliver value for the firm. A Modern software IT organization is almost more of an “infrastructure” team. It aims to shed dated “cost center” stereotypes and instead aims to maximize the velocity of the other software developing teams within the firm.
IT should be an enabling force within your enterprise
Velocity = Direction * Speed
Direction is the factor that accounts for whether we moved closer to our goal. A mature product process looks something like this:
Mature organizations have defined guiding purposes. They track key metrics that indicate progress toward those purposes, and then they drive product changes in an experimental fashion. The results are measured and either incorporated into the product or not, and the cycle repeats.
Speed is how long it takes to get something “done.” When deploying software, “done” is an overloaded term, but here’s our definition that includes both the developer and IT perspectives on what needs to happen for a software deployment to be well and truly done.
What does this look like in practice?
In most enterprises, getting all these things done is a zoo.
Different teams in most enterprises are working on some or most of these things independently, using different technologies. And they’re probably skipping some of the important best practices. When a single organization provides an enabling structure for all the software development happening in the firm, you can get a handle on the duplicative inefficiencies happening all over the enterprise. It also provides a centralized platform to enforce company wide compliance rules.
How do I put my Modern IT platform together?
There’s a plethora of tools out there that can be combined a myriad of ways, but these are the basic components:
A scalable automated build system
There are tons of CI systems. The cloud offerings are good. If you have to run a highly scalable CI system on premise, there are still a lot of options. We’ve seen these built with Jenkins on Mesos, on kubernetes, and even seen them built ad-hoc with Drone.io, Kafka and Docker.
A deployable artifact repository
A cloud-native hosting solution
This could be for either virtual machines or containers.
The key point here is that all deployments are immutable and reproducible — which adds up to being very testable. Depending on your needs, hosting solutions can also be on-premise or in the cloud.
Secure network isolation
A true multi-tenant platform will require different applications to have separate network spaces. This is also a security best-practice. Usually these are included by cloud providers in the form of “virtual private clouds.” On-premise solutions will utilize something like vSwitch for VMs or a software-defined networking solution like Weave, Flannel or Contiv for containers.
Searchable logging aggregator
With applications running all over your cluster, it’s hard to isolate problems when they occur. A logging service that includes user sessions and request tracing makes debugging distributed applications way easier. There are a bunch of solutions for this: Datadog, Splunk, FluentD, Elastic Search/Kibana.
A metrics system
Instrumenting your production systems provides you the insight you need to monitor and improve your application performance. You can alert on service interruptions or degradations, and even understand latencies between your systems. There are a bunch of commercial metric systems available depending on your cloud host like CA APM, NewRelic, SPM, CloudWatch, but many companies actually roll their own metrics analysis systems and dashboards.
An autoscaling solution
Auto-scaling services under load is super helpful to stressed out operations teams, but defining how a service should scale depends on what it is. Services can be memory bound, CPU bound, even IO bound, and knowing when to scale out is key. Cloud providers universally provide autoscaling solutions, but on-premise offerings don’t necessarily. Most enterprises end up rolling their own small micro-service to handle this if they have specific needs in this area.
Compliance / Security testing tools
These are useful tools to prevent expensive data breaches and make sure everyone in your organization is following reasonable security practices.
User Analytics A/B Testing
In our “Definition of Done” from earlier, A/B tests passing was one of the final elements that ensures your product teams are running the right direction. Smart enterprises provide their teams easy access to a/b testing backends so that the dev teams actually use them. These services are usually backed by a data analysis team that does the statistical analysis on experiments, publishes key metrics to the firm, and runs any necessary business intelligence reports. These systems are not well-standardized and are usually built ad-hoc for each organization. There are a bunch of good building blocks out there though:
The amazing ROI of Modern IT organizations
In most enterprises, each of your development teams is (or should be doing) all 19 steps on the way to done. In a well-structured Modern IT company your developers are focused on only the first 5 steps, so you’re maximizing their work that delivers the highest value to the firm. Only one (or two, if you separate analytics) of your development teams are focused on the other 14 steps.
By centralizing the build+test+deploy+compliance pieces of delivering software, you save each development team a TON of time. Companies like Pearson are seeing setups like this increase developer productivity by 20%, and reduced infrastructure costs by 45% on average by improving bin-packing and right-sizing. These results are consistently supported by the CA Technologies industry survey of 1300 IT professionals regarding continuous delivery technologies.
Must Win would love to help your enterprise adopt Modern IT. If you’re looking to discuss, strategize or implement any of these toolsets, reach out to firstname.lastname@example.org and reference this post.
Mike Ihbe is a founding partner ofThe Must Win All Star Web & Mobile Consultancy.
Mike is an expert in a wide array of technologies and has loads of experience managing fast-moving dev teams, designing systems, and scaling large applications. When not on the job, he can be found cooking delicious meals on ski slopes in exotic locales.