vege - Fotolia
Just five years ago, it was common for programmers to be expected to master all levels of the software stack. If your company built a web app using PHP for the back end and MySQL for storage, it hired developers who knew all about PHP and MySQL. They probably knew Linux, too, since that would be the most common deployment platform for such an app. In addition, the company either expected its own employees to be able to handle app deployment and management, or it outsourced those tasks to a cloud provider.
Now fast forward to the present, where an approach like this is no longer viable, not because programmers aren't as good as they used to be, or because cloud services have become less useful. It's because software delivery today has become too complex for full stack developers to handle, even if they outsource some tasks to a cloud hosting provider.
Your mileage may vary and full stack developers are not totally obsolete. But if you want to make the most of the staff and infrastructure resources you have on hand, you should ask yourself whether you need to build a development team out of programmers specialized in different areas instead of relying on full-stack expertise. In other words, do you need Ops?
The changing development landscape
Before explaining how to decide whether or not you need Ops, let's outline why this has become the question du jour in today's software development and delivery landscape.
It has been only five or six years since DevOps exploded into developers' lexicons. But very much has changed since that time in terms of both the way programmers think, and the types of technologies available to them.
DevOps has altered developers' mindsets by encouraging them to prioritize agility, modularity and scalability more than ever. In the past, a great developer was expected to be a Renaissance man (or woman). If you could program expertly in C, yet also knew all about web design with HTML and CSS, and could manage an Apache HTTP or Microsoft IIS server to boot, you would be highly employable.
The DevOps revolution has shifted priorities, however. Specialization and deep expertise in specific languages or frameworks are now more important than being able to do it all. For instance, it's better to be really good at databases, and have only a basic familiarity with programming and markup languages, than to claim to know everything.
Meanwhile, software itself has also changed significantly over the past several years. For example, if you wrote a Java app a decade ago, you only had one Java runtime -- Sun's -- to contend with. And it was probably a safe bet that if your Java app required a database, it used MySQL or a close variant of it.
Fast forward to the present, however, and a lot has changed for Java developers. There are now two main Java runtimes: Oracle's and OpenJDK. A good Java app needs to work with both runtimes, but a good Java programmer may have expertise with only one of them. Meanwhile, MySQL is no longer the only storage game in town. Organizations are increasingly migrating to NoSQL storage, which may or may not be compatible with traditional SQL queries, depending on which particular NoSQL platform one uses.
The result of change such as this is software stacks that are much more diverse and variable. They're also constantly changing as newer programming and deployment solutions emerge, and organizations upgrade to take advantage of them.
Trying to find a full stack developer who can deliver true mastery of all elements of an ever-changing, complex app is no longer realistic for many organizations. Nor is a cloud provider that supports only certain deployment options.
So, how do you decide whether you need Ops, or can get away with full stack developers? Here are some considerations to weigh:
How complex is your software stack?
Just because the average software stack today is more complex than it was five years ago does not mean yours is. If you still develop in legacy frameworks, and that approach works for you, then Ops may be overkill.
If, on the other hand, you have adopted a more complex stack that involves several specialized components, an Ops approach is likely to work better.
How agile do you need to be?
The DevOps revolution has made agility -- which means the ability to scale and change on demand, a priority. From the perspective of development and deployment, agility requires being able to easily swap out one component of the software stack for another; for example, maybe you want to be able to switch from MySQL to MongoDB, and to change deployment and hosting platforms, for instance, from a Linux to a FreeBSD environment, at will.
If agility is important, Ops is your answer. But if you don't foresee the need to modify your current workflow and tool set, full stack developers can give you what you need.
How many developers can you hire, and how much can you pay them?
Andy Shora relates an interesting anecdote about asking candidates for programming jobs to rate their own skill sets. Most at first claimed to have a decent amount of expertise with a broad array of tools. But after being pushed further to identify their real areas of specialty, they admitted that they were much stronger in certain areas than others.
If you have the budget to hire enough good programmers to cover all of the areas you need, then you should adopt an Ops approach and have someone on staff who specializes in each part of your stack. On the other hand, if you only have the budget to hire a few programmers, you'll want to go with full stack developers who can adequately address each of your needs, even if they lack deep expertise in specific ones.
Alternatively, if you have a lot of budget, you could try to hire the very best programmers out there -- the ones who can legitimately boast true expertise across your entire stack. They exist, but they are harder to find, and they demand higher salaries for their skills. If you can't afford them, you'll be best served by hiring "commodity" programmers who cost less money but are able to do one thing and do it well.
How much do you plan to grow?
If your business is already mature and doesn't plan to expand by offering new products and services or increasing its scale, full stack developers will probably work for you. However, if you plan to keep growing and add new technologies to your portfolio, you'll benefit from the modularity and agility derived from Ops.
As Jeff Knupp puts it in an article that pushes back against what he sees as a DevOps tendency to kill developers, "not every company is a startup, though it appears that every company must act as though they were." His message is that startups are more likely to benefit from Ops than larger, established ones. There's nothing wrong with admitting that.
If there's one crucial takeaway from the information above, it's that there is no universal answer to the question "Do you need Ops?" DevOps has drastically changed software development and delivery, generally for the better. But what's new and cool is not always better for everyone, and there is nothing wrong with full stack developers, or cloud hosting, so long as you're certain that they are the best fit for your particular needs.
Full stack developer: Do you have what it takes?
Doing DevOps the right way
Transforming Agile and DevOps