One of the coolest things about Tesla’s business, apart from its success and all that, is the use of vertical integration. Elon Musk does this as well with SpaceX. I think software engineers have a lot to learn from this. We have a tendency to specialize, and it leads to inefficiencies in what we do.
One area of interest here is Development Operations. A common case with DevOps is that the DevOps technicians are shared resources, and developers sort of shrug and assume someone else will set up the Web server, security, load balancers, etc., and DevOps in turn assumes that the developer has taken these same things into account as they wrote their software.
Increasingly granular models of SDLC, which have moved to digestible ‘stories’, have further moved the developer away from the infrastructure and servers.
I think that a key aspect of a very successful development team is to have a makeup that includes:
- Developers (UI, Middle Tier, Database)
- QA, including integration QA
- DevOps
And all three must have enough overlap in responsibilities and knowledge to build for each other, rather than ‘throwing things over the fence’
For instance, a topology of a pair of web servers behind a load balancer, which then communicate to a pair of middle-tier servers that are themselves behind a load balancer (in a separate network) that access a highly-available database server is a recipe for a rocky release if everyone did their job and didn’t realize the integrated nature of the project.
My preferred solution is to be vertically integrated where developers must wear separate hats, as developers, DevOps, maintainers, as analysts, and as architects. And DevOps should wear separate hats as DevOps (primarily), architects, developers and InfoSec consultants.
QA also plays a big role here. If QA is testing user stories, they are often testing too narrow a scope. They, too, need to be able to test the aspects of the architecture the encompasses DevOps.
How far does this go, you ask? One can easily get carried away with all this.
Well, this does not mean that they should be able to install from base metal, but they should at least be able to spec a server. I really expect a relatively senior technical person in IT to have some ability to install a server OS of some sort. And probably be able to spin up a local VM to try new stuff, but I agree that it is unrealistic for a developer to know vlan topology.