How many full-stack developers does it take to screw in a lightbulb? Just one, if you can find one. Perhaps you should look for a unicorn instead.
There is a remarkable trend in software development that has been growing along-side the divergence of specialized software development skills: the rise of the full-stack developer. To be sure, the full-stack developer existing long ago, as earlier programming languages and form factors (long before we called them that) enabled programmers to code, compile and execute a “Hello World” program and instantly have this helpful message appear on the end user’s display. Of course, we didn’t call them “full-stack developers” back then. They were simply called computer programmers or software engineers.
What is a Full-Stack Developer (FSD)?
A FSD is a software programmer who has software development skills spanning user interface development, back-end server coding and integration to tie it all together with databases and other existing information in the enterprise data ecosystem. Sometimes the term “Web Generalist” or “Web Full-stack Developer” is used to specifically refer to the full-stack spanning just web-based applications.
In order to be a successful FSD one must possess other computer skills too:
- Server architecture, data networking, virtual servers, scaling methods, hosting environments, DevOps practices, multi-threading, multi-tenancy, memory usage, local and remote storage, user and data security
- Data structures, data formatting, data transformation, parsing, keys, modeling, normalization, databases, non-relational, relational and big data
- Integration, secure data transport, APIs, digital certificates
- UX/UI for web, mobile and desktop app experiences; not to mention specific coding languages: visual design and layout, understanding human interaction, information design, workflow steps, simplifying user steps and clicks and understanding what job the user is
- Frameworks aplenty, open source projects, etc. This may be the single hardest part of the FSD challenge as it’s an area of constant change and updates that one must remain current on
And, oh yeah: business rules and logic. FSDs should be able to learn and understand the business rules and logic, understand the larger ecosystem of the business data and how it’s used by others up and downstream from the applications being built. Can you master all of the above and still have a reasoned conversation with non-technical people in the business about the requirements of an upcoming project? You could be a FSD.
To be sure, a FSD doesn’t need to know all programming languages. Let’s be reasonable., There are over 800 different programming languages. The good news is that a FSD probably only needs to master about a dozen languages and scripting syntaxes to claim FSD status. But that’s a lot. Of course, it’s not just any random dozen of the combinations from the neighboring alphabet soup, but whatever dozen the FSD has, you can be assured that lucky number 13 will rear its ugly head about halfway through the next project.
You might as well throw in the contemporary resurgence of topics like AI and data analytics as well as newer computing phenomenon such as augmented reality and conversational UX just to seal the deal that a FSD is as rare as a unicorn.
But let’s stay on this vision: FSD’s are the fearless “go-to people” in your software team who can make projects happen and troubleshoot and fix any problem.
Why Are FSDs in High Demand?
One word: SPEED. Without a FSD you need more people to work on all the separate parts of the project. Adding more people to a software project slows it down. It’s a well-known phenomenon, documented by computer science scholars in the mid-1970’s (see, No Silver Bullet). However, just to be sure, project teams everywhere frequently run unwitting experiments to reconfirm the axiom.
Smaller and more agile teams can run circles around larger unwieldy ones. Software methods attempt to mitigate the issue by breaking complex software down into pieces to be solved separately by smaller teams over time. That’s fine until you need something big and complex done quickly. “Seriously, we don’t have time for sticky notes and iteration planning this time, the business needs this now. Put away your crayons and start coding.” More seriously, agile methods run much more efficiently when more universal developer resources are assignable to the next open task.
Here’s a scenario that might sound too familiar: With only one open headcount and a lot of ambition, you have to make it really count (and cover all bases including known and unknown). So instead of another specialized software developer, you shoot for the moon. The coveted FSD. And politically speaking, if the recruiting team can’t deliver a FSD, then it’s their fault the team failed, right?
According to Wirth’s Law (also attributed as Page’s Law, Gate’s Law and May’s Law) software efficiency halves every 18 months, thereby compensating for Moore’s Law. [Reference: https://en.wikipedia.org/wiki/Wirth%27s_law] Software has become so complex because it’s doing more stuff. It’s securely managing and enabling thousands of concurrent users accessing data on databases with terabytes of storage from remote and wirelessly connected diverse multi-lingual user interfaces while predicting the future, flagging fraud and generating hyper-cryptic error messages while supported by an elastic array of cloud and hybrid servers. The increased complexities of modern software have created the need for software developer skills specialization. The FSD concept pretends to simplify it.
You have three options to build a FSD team.
- Find them: recruiting and selection.
- Train them: on-going certification.
- Equip them: provide your developers with FSD capability.
In my next two blog posts, I’ll discuss the merits of these options.