I don’t even need an outline to write this chapter.\n\nOf all the topics I talk about, this is perhaps one of the most exhausted; continually asked about, questioned, and evaluated.\n\nI’ve talked about this topic so much that I dedicated an entire YouTube playlist to all the videos I’ve done on the topic, and that list is continually growing.\n\nWhat am I talking about?\n\nThe age-old debate of whether or not you should become a specialist or a generalist.\n\nShould you become a “jack-of-all-trades” and a “full-stack developer,” or should you specialize in one or two areas of software development and “go deep?”\n\nWell, it turns out this is sort of a false dichotomy.\n\nThe real answer is both.\n\nLet’s find out why.\n\n
The Power Of Specialization
\n\nBefore we get into the debate, I want to start off by showing you just how important and beneficial specialization is.\n\nLet’s suppose that you were on trial for a murder.\n\nYes, a murder.\n\nYou didn’t do it—I know you didn’t—but you still need to prove your innocence.\n\nWhat do you do?\n\nDo you hire a lawyer who is good at tax law, divorce law, real estate law and criminal law?\n\nOr, do you hire a lawyer who specializes in criminal law, specifically defending people who are convicted of murder?\n\nI don’t know about you, but if the rest of my life is on the line, I’m going to choose the specialist every time.\n\nMany people say they want or value a generalist, and they think they do, but when it comes down to it, they pick a specialist every time.\n\nI’ll give you another example.\n\nI wanted to get some crown molding done throughout my house, because I am pimp like that.\n\nAnyway, I was looking for carpenters or contractors to do the crown molding when I came across this one company who specialized in crown molding. In fact, the name of their company was Kings of Crown.\n\nAll they did was install crown molding.\n\nThat is all they did.\n\nWho do you think I chose?\n\nDid I want to take a chance on a carpenter or contractor who did some crown molding, or did I want to call the crown molding “experts” and get the sure thing?\n\nThat’s not to say there isn’t any value in having a broad base of knowledge, or being a generalist to some degree (there are times when I’m looking for a general handyman), but it is extremely valuable to be a specialist of some kind—or at least to market yourself that way.\n\nThink about it this way.\n\nDo you think that fictional murder trial lawyer knows about other areas of law other than murder trials?\n\nOf course he does.\n\nHe might actually be pretty good in multiple areas of law and have knowledge in several fields.\n\nBut he advertises himself as a murder lawyer, because he understands the power of specialization.\n\nThe same for those crown molding guys.\n\nDon’t you think they could probably handle other carpentry jobs?\n\nOf course they could, but they choose to specialize because it’s much more profitable to do so.\n\n(By the way, even businesses themselves greatly benefit from specialization.)\n\n
In Order To Specialize, You Have To Have A Broad Base
\n\n\n\nOne thing that many software developers don’t understand is that just about all specialists are also generalists, but no generalists are specialists.\n\nWhat do I mean by this?\n\nI mean that, usually, in order to acquire the skills of a specialist, a great deal of general knowledge is required and accumulated along the way.\n\nIt’s very difficult to be a good specialist without also building a broad base of general knowledge about your field.\n\nMy brother-in-law is studying to become an oral surgeon.\n\nIn order for him to do that, he had to first go through dental school and become a dentist.\n\nNow, he’s not going to be doing general dentistry very often, but to him, filling a cavity or doing some general dentistry work is cake.\n\nHe’s probably better than most generalist dentists, simply because he had to learn all that and more in order to become an oral surgeon.\n\nThat doesn’t mean that every specialist is a good generalist, or that they keep their skills up to date, but in general (ha ha) you’ll find most specialists generally do. (How do you like that sentence?)\n\nThis is all to say that specializing does not preclude you from being a generalist also, it just gives you more options and makes you more valuable.\n\n
It’s All About The T-shaped Knowledge
\n\nWhat you really want to strive for is what is known as T-shaped knowledge.\n\nIt means that you have a broad base of knowledge in your field, and then you have at least one area of deep, specialized knowledge or skill.\n\nAs a software developer, you should strive to be well-versed in best practices, algorithms, data structures, different architectures, front-end, back-end, databases, etc.\n\n(Basically, everything we covered in the section of this book titled “What You Need to Know About Software Development.”)\n\nBut, you should also pick at least one area where you are going to go deep.\n\nYou need to pick some specialization that will set you apart from the masses and greatly increase your value.\n\nWhen you build up your personal brand and market yourself, you are going to use this specialization to do it.\n\nIf you want to make waves, you need a small enough pond.\n\nIn the HUGE pond of software development, being a generalist will make it more difficult to even make ripples, at least at first.\n\nSo, yes, work on being a well-rounded software developer.\n\nDevelop a broad base of knowledge and grow that base, little by little, year after year.\n\nBut also pick some specialization that you will dive into and become a master at.\n\nEventually, you can even have a “comb-shaped knowledge,” where you have multiple deep specialities, like Elon Musk.\n\nBut start with one.\n\n
But Everyone Says They Are Looking For Generalists
\n\nI know, I know, every job description says that they are looking for good software developers who can wear many hats or work with the “full stack” or can be a jack-of-all-trades.\n\nThey want you to possess every skill under the sun.\n\nIt’s all a lie, I tell you.\n\nA big fat lie.\n\nI guarantee you, if you have the exact skills that are required for a job, if you are an expert in the framework or technology that company is using, they are going to be much more likely to hire you than a generalist.\n\nWhat companies are really saying when they say they want someone who is a generalist, is that they want someone who is adaptable and can learn quickly.\n\nThe fear is that they’ll hire someone who can only do one thing, so they try to safeguard against that by making the job description state that experience with their framework or technology stack is not necessary, even though that’s not completely true.\n\nDon’t get me wrong, it’s not an intentional lie.\n\nI do believe hiring managers honestly think they want generalists, but like I said, what they really want is someone who is versatile and flexible.\n\nYou can still be that and be a specialist.\n\nAnd like I said before, your best bet is to sort of be both.\n\nGet that T-shaped knowledge so that you do have a broad base, but go deep in one area so that you can be the expert in the exact technology or skillset that matches the job you apply for.\n\n
You Can’t Even Be A Generalist Today
\n\nIt’s not really possible.\n\nThe field of software development and technology is so large, and changing so rapidly, that you can’t know it all.\n\nYes, you can have a broad base of knowledge.\n\nYes, you can understand fundamental principles.\n\nBut, no, you just can’t understand enough about everything that exists out there to really call yourself a generalist anymore.\n\nEven if you are a “full stack” developer, you are going to have to pick a stack or two. You can’t know them all and be effective by any real measure.\n\nIt’s not just computer science and programming where this phenomenon is occurring either.\n\nEvery major profession is moving towards more and more value on specialization.\n\nConsider how large medicine is today.\n\nGeneralist doctors have trouble diagnosing underlying illnesses and problems because there are just too many possibilities.\n\nAccountants, lawyers, financial analysts and just about every kind of engineer have to specialize to be effective, because knowledge domains are growing to such large extents.\n\n
But What If I Specialize In The Wrong Thing?
\n\nThen specialize in something else.\n\nIt’s not that big of a deal.\n\nOne of my good friends, John Papa, specialized in a Microsoft technology called Silverlight.\n\nAnd then Silverlight was axed by Microsoft and it’s now as dead as a doorknob.\n\nBut did John throw his hands up in the air, give up and decide to live in his car?\n\nNo. Because he was already a specialist, he had built up a reputation and a following.\n\nHe just shifted and pivoted to another specialty that was closely related.\n\nNow John is a specialist at developer SPA (Single Page Applications), and he’s doing even better than he was before.\n\nFar too many software developers I talk to are so afraid of picking the wrong thing to specialize in that they don’t specialize in anything.\n\nThey remain stagnant in their careers for years, paralyzed by fear, always considering the “what ifs.”\n\nDon’t do that; just pick something and go with it.\n\nIt’s a much better choice than doing nothing, and you can always change course and switch directions later on if you need to.\n\nPlus, you’ll find that once you learn how to go deep into one specialization, the next one is much easier.\n\nMany skills that don’t seem transferable, are, and developing the ability to “go deep” is valuable in itself.\n\n
So, What Should You Do?
\n\nRegardless of where you are in your career, pick some kind of specialization to pursue.\n\nDon’t worry if it’s not the “right” or final one.\n\nStart with one, build your personal brand around it, and decide to go deep.\n\n
|Hey John| Should I choose a speciality based on my interests or on what I’m doing for my current employer?\n\nThis is a tough one.\n\nSome things to consider:\n\nIf you specialize in something other than what you are currently working on in your day-to-day job, it’s going to be very difficult to get the time to build the expertise you need and to find the depth required to really specialize.\n\nIt’s certainly possible. I know some people who are doing it. I’ve done it myself in the past, but just realize it’s going to be a somewhat difficult path.\n\nHowever, it is a good way to switch into something new, possibly something you really want to do.\n\nIf you can find something to specialize in that you currently are working on at your day-to-day job or that you can incorporate into it, you are going to get a double benefit from that specialization.\n\nIf you don’t have any strong feelings either way, I’d go this route.\n\nFinally, you might be best off switching jobs into what you want to specialize in so that you can work on it all day.\n\nPerhaps start off learning your desired specialization and building a reputation around it in the mornings before work and/or in the evenings, and when you have enough traction, jump to a new job that will use that speciality.
\n\nErr on the side of picking something too small and specific rather than too broad.\n\nDon’t be a C# developer: be a C# developer specializing in a specific C# framework, or technology or even technology stack.\n\nTry to go as small and detailed as you can. You can always branch out and expand later.\n\nMy friend Adrian Rosebrock is a very successful software developer and entrepreneur who specializes in a specific Python library for computer vision.\n\nYou wouldn’t believe how successful he has been with this particular niche, even though it’s extremely small and focused.\n\nAt the same time, work on building up your general knowledge of software development—your broad base.\n\nLearn how to write good code.\n\nLearn about the underlying principles and technologies that may manifest themselves in many ways, but really are never changing at the core.\n\nYou either want to learn things that are deeply focused and directly in your specialty, or broad enough to be widely applicable and somewhat timeless.\n\nDon’t try and learn a bunch of different programming languages and frameworks that you will likely never use.\n\nFollowing this approach, you’ll set yourself apart and set yourself up for success.\n\n
