Recently, I’ve become aware of a rise in the number of technical industry / vendor certifications stressing the importance of communication with consumers of IT resources — call them customers if that sounds less clinical and makes you more comfortable. This got me thinking. Two such certifications currently live in my repository, so I believe I can speak from experience:
- VMware Certified Design Expert (VCDX)
- HP Master Accredited System Engineer – Converged Infrastructure Architect (MASE-CI)
Talk with the customers? That’s crazy talk! Honestly, I find myself trying to understand why this is such a revelation. I am not saying that I disagree with this direction; on the contrary, I see this as a critical component of any responsible design process. My challenge today is understanding what is all of a sudden driving the industry to emphasize a seemingly intuitive concept.
Background
In my background I have experience in both IT infrastructure support and software development. Because of the software development component, characteristics of a workload have always been near and dear to me: I was that crazy developer who needed to understand the footprint of my application on the infrastructure. In fact, I believed that I was unable to effectively develop for a platform unless I understood how that platform handled resources like CPU, memory, disk and network.
Remember when we had a 64K envelope in which to develop our applications? Imagine how much efficiency had to be coded into the applications to balance functionality with size. This created a serious learning curve for me whenever I was asked to develop for new platform. Sure, I could have just taken my existing code and “search and replace” ported it, but that wouldn’t have been very efficient and I was not about to compromise. Apparently, I can be kind of a pain to work with, but I like to think that I produced more efficient solutions tailored to specific platforms.
Efficiency
Speaking of efficiency, most of us in the IT industry are familiar with the “over-size” engineering concept: build a box big enough that whatever we try to put into it will fit. The potential for waste is pretty obvious, and became very evident during the x86 server sprawl of the late 90′s/early 2000′s. Virtualization (server, storage, network…) was the hammer brought to bear here to collapse silos of trapped capacity and allow sharing of resources without the need to change the over-sized boxes we put our stuff into.
Unfortunately, virtualization can only do so much to drive inefficiency out of an environment. At some point, the components which have been virtualized must be “right-sized” to accurately reflect the needs of the workloads running within them. Doing that requires understanding of what those workloads are doing, how they are used, and any cycles associated with that use: monthly batch jobs, specialized backup processes, or seasonal demand.
A Fundamental Difference
I don’t think anyone would argue that infrastructure teams have evolved with a different focus and mindset than development groups. Most infrastructure teams have grown up from “IT support” teams whose job was to keep the existing computer systems up and running. That’s it: make sure the file/print/mail/database server doesn’t go down… and make sure the PCs can talk to them. In my experience, a vast majority of teams retain this focus and understanding how the systems are being used is barely on their radar. I’ve heard loud and clear from a lot of “old school” IT support personnel that they really don’t (and shouldn’t need to!) care about how the platform they provide is being used:
“That’s not my job. I’m just here to provide infrastructure that is resilient. As long as it’s running, the users should be happy.”
I may be in a consulting position now, but I’ve been there and I can’t disagree enough. Sure, it is possible to build IT infrastructure without talking to consumers about actual requirements. I see it all the time: we’re building the network with a 10Gb core because we don’t want that to be the bottleneck. Or, similarly: we’re building a SAN and we need 16Gb FC and 75TB capacity so we don’t run out of space.
Maybe you can design and build the best network/storage/virtualization infrastructure on the planet, but does it meet the needs of your consumers? What if your consumers’ workloads are compute heavy and barely touch the existing 100Mb network and 2Gb SAN connections? You just spent your money in the wrong place and way over-built and overpaid for your amazing solution… in the wrong areas.
In development, we have a parallel concept: spend your time optimizing the code that will be executed the most. If I have code that is executed once a day and code that is executed several times a minute, where do you think I should spend my time optimizing? You got it. The typical challenge is in determining where to focus our energies. For that, you need requirements. From consumers.
KEY POINT: Don’t build something in a vacuum and just assume it will be useful.
As a developer, I’ve got a challenge that forces me down a certain path: how can I even begin to develop anything without first capturing some requirements? Sure, I can build an application or server shell, but what if the actual requirements for the project turn out to involve building a plugin for an existing system rather than a standalone solution? Yup, back to the drawing board.
Cloud?
When I think about it, this is a fundamental challenge of IaaS cloud solutions, aside from the more common ones: connectivity, security, portability, etc. Cloud models are all about sharing, agility and cost efficiency. In order to most effectively utilize resources and drive costs down in an IaaS cloud, understanding of the workloads within the compute units (VMs) is required. For many, though, that level of transparency is in direct violation of the whole ‘cloud’ model. How do we strike a balance between providers and consumers to ensure adequate performance for minimal cost while maintaining enough translucency to provide security?
Thought
Working with resource consumers to both gather requirements and convey what is possible using a given technology or platform is a key workflow for any software development activity. It should likewise be a critical path component for any infrastructure implementation, including specification of cloud solutions. Fortunately, it seems that the industry is catching on: becoming a better IT guy (or gal) requires skills in gathering requirements from the consumer. This is true whether you are a salesperson, consultant, or internal IT department resource.
Obtaining the required information from the workload owners is a whole different story and one I’d like to discuss in a future post.
{ 0 comments }






















