Be good at one thing, not average at everything

Steven Yung on January 10, 2018

(Credit to Jessica for the photo) The web is constantly evolving and improving over time and there is already so much to learn and much more as ... [Read Full]
markdown guide

From my experience, becoming good at a particular language or framework doesn't necessarily make you a better developer. Coding experience and building a good programmer mindset by learning from more experienced developers and reading books like Clean Code does make a difference.

I have been coding in many languages and, at some point, you realize that they are all just abstractions to solve common problems: get an element, call a service, print this string, update data, etc.

So I partially agree with you in that you should try to learn one thing at a time (three things max is my rule). But first and foremost focus on the fundamentals and don't be afraid to play around with new technologies and occasionally jumping off your learning path and try something entirely new (say, Machine Learning). You never know what new opportunities may come from it!


Agree. As Bruce Lee put it...

Don't get set into one form, adapt it and build your own, and let it grow, be like water. Empty your mind, be formless, shapeless — like water. Now you put water in a cup, it becomes the cup; You put water into a bottle it becomes the bottle; You put it in a teapot it becomes the teapot. Now water can flow or it can crash. Be water, my friend.


I definitely think fundamentals are an essential thing to learn.
I guess the point I was trying to make is that if you work with, let’s say one framework, for a long enough time. You will eventually master the in and out of it. And when you reach that point, you will start to focus less on the framework itself and more on how it was built and how it solve common issues. And that’s when, at least for, I really got passed the framework and start working with real concept like design pattern for example.


< strokes white beard >

This is fine advice for your first year or so of your career. After that, you can quickly be pegged as 'that Laravel guy', and in the minds of your managers and colleagues, it's all you know. Moving up means that you have to move on, but you might not have a diverse enough CV to interest another employer.

My experience has been that the best colleagues have been those who have a really broad range of experience...they are able to pull from all of those when confronted with a new problem. IBM likes to talk about 'T'-shaped contributors, those who have broad, but not necessarily deep, experience, but are able to dive deep when they need to. That's the sort of person I would look for when hiring.


I like this: "IBM likes to talk about 'T'-shaped contributors, those who have broad, but not necessarily deep, experience, but are able to dive deep when they need to".


This is one of those very-well-described mental models. I just felt inspired to look up its origin:

The earliest reference is by David Guest in 1991.[1] Tim Brown, CEO of the IDEO design consultancy defended this approach to résumé assessment as a method to build interdisciplinary work teams for creative processes. In the 1980s and probably earlier, the term "T-shaped man" was used internally by McKinsey&Company for recruiting and developing consultants and partners, both male and female by then.


I think you're pretty right on with this comment Perry.

My first job was in a .NET environment, mostly writing and maintaining API integrations but my primary responsibility was improving/updating/maintaining an integration with an ERP system via a Windows service. I quickly became "the expert" in the ERP system integration and was the guy that got all of the calls escalated from support. I still occasionally get an email from the devs that took over the project for help.

My second job, I was looking for something different and ended up working in Salesforce. Completely different environment all the way down to the source control and OS I was working in. The lack of breadth hurt me moving to the new role.

Logic is logic, so that wasn't the hard part of the move. The hard part was picking up so many different technologies at once. It really was jarring and reshaped my thinking on the subject. Previously I focused on going as deep as I could with .NET to the detriment of my other skills. Currently I am focusing on gaining a broader understanding of the base technologies that are underpinning the majority of the "flavor of the week" technologies so I can pick them up faster in the future.


I've done everything from hardware design to drivers in (many flavors of) assembly to large COBOL programs to C++ monstrosities to async webbish APIS and websites and that's why I can jump in at any level if needed. Usually, I just see how the pieces go (or could go) together better than anyone with the kind of "focus" recommended in this article ever could.

I agree, maybe you need to do this early on to remain employable, but it's a self-defeating long-term strategy in a fast and always faster moving industry.


As i don't have a single preference, i have been jumping from one technology to another, i keep telling myself that maybe this would be better and much more interesting and once i start it the same thing happens again.
How do i choose one thing to focus on?

I loved the post so much by the way.


Thanks for the kind word !

If you don’t have any particular affinity with a language or a framework, you can work torwards a specific goal you want to reach. Try starting small and specific like front-end development with [insert any javascript front framework], and grow from there to framework-agnostic front-end developer for example.


For me what is working is trying to be good on software development not focusing on technology or frameworks, I'm focusing on multiple things but with a single objective, nice post thanks for


Really interesting choice ! I guess for me it was more centered around technology choices but focusing on one domain is definitely something I will look into !
However, for someone beginning, let say, video game development, which is a pretty big and complex domain. I would still advice them to focus on learning one framework like Unity and slowly but surely work towards other things gravitating around that same domain afterwards :)


I disagree with the title. This age-old saying is often misquoted, but is appropriate for how I feel:

"A jack of all trades is a master of none, but oftentimes better than a master of one."

However, I do agree with not spreading your focus too thin and avoiding overwhelming yourself with trying to learn everything all at once.


Wow, that is a big misquote! I had no idea. Thanks for sharing -- the negatives connotations of 'Jack of all trades, master of none' has always haunted me a little. Really happy to see the positive side of it, now armed with more context.


How come negative? I always thought about it as positive. I actually used that quote in few inerviews (that lovely question of "how would you describe yourself?" ) and often got the job because of it.

I actually used that quote in few inerviews

Which means the jobs changed often, which long-term is unreasonable. You'll probably find the people that liked it had very little attention to detail.

I'm an unashamed generalist, I make that work for me but I wouldn't like someone saying they were a jack of all trades. Underpinning any generalist should be a good grounding in the core of problems they explore. It's okay to be ignorant of new ground if it's not relevant. It's not okay to be ignorant of the basics.


I had the same problem, and i decided to focus on back-end development so i agree with you in that point (learn one thing and master it then develop your skills and other skills if you want), i'm learning PHP and Laravel, could you give me some advises and how should i learn (tutorials and stuff) and i will be grateful ;) and many thanks for the post ;)


Thanks for the kind words!

If you try to learn Laravel, Laracasts is one of the best place to go. You have to pay for it but to me it’s worth every penny.


As said in the post, when you start to have a better understanding on the whole framework start building a project (something you think will be useful to you). this will expose you to issue and challenge you in a way tutorials can’t. you will have to search on your own without anyone grabing you by the hand and you will improve a lot along the way.


I agree, to some extent. I've been a Microsoft technologist for 25 years, and understanding and keeping abreast of certain core technologies makes you very marketable. If I am interviewing someone, however, I would like to see some breadth with keeping up with the latest changes in the technology which often means new frameworks, COTS packages, databases, infrastructure. The other thing I look for in an interview is how well the developer can solve problems given to them and what is there approach at solving it. If they can solve it with their core skillset which i happen to be looking for, even better, but what I'm looking for is the interaction that takes place in solving the problem as well as the thought process. Also software is so much more than just a language these day. It's about design and architecture, testing, requirements processes, and delivery. I look for the developers understanding of the software process as well as the technical skill.


This is a good advice for those who just graduated college and/or for those who are just starting a career in programming. Because that was my experience. I focused on one thing so I can earn a living out of it.

But if the point of this article is about LEARNING, then I totally disagree. People learn differently. There are those who learn more and faster by hacking into different technologies, frameworks, languages, etc. And that includes me. Until now, it continuously improves my ability to adapt to a new technology, language, and start working on it fast. My employer commended me for that. They threw me to different projects and I can work on it. They're happy about it.



However, you really start pushing your limit and the limit of your tools when you focus on one thing: one framework, one language, one project, etc. And you will get deeper knowledge along the way.

I suppose it depends on how much focus you apply, and what you define as one thing, one framework.

You can get really skilled at hammering if you dedicate yourself to it. The problem is that there are better tools for all but the most narrow of tasks, and all of a sudden the notion of one-thing, one-framework, one-language disintegrates like cheese through a grater. Of course, if you disingenuously assume carpentry is one thing, then I suppose you're right in that alternate reality you created where sawing wood and hammering is all you need, it probably would do to focus on that one thing and not medieval sword crafting for example.

I'd strongly suggest if you do keep at PHP, you do not remain tied to a framework, but pick something less open to the whims & fortunes of developers. Perhaps you'll still use Laravel, but you'll pick PHP itself as your specialisation, or network applications, or performance engineering PHP. Something that is more likely to survive the next HackerNews article.


Great and interesting article. Nice job!

Contributing to your article, I agree totally with you. I think are not only one way to be a better developer, are so many ways to reach that goal.

If you like PHP and you want to be better at that programming language, focus on that language, learn everything about that (i.e. frameworks, design patterns, better practices, more, more and more).

If you like Javascript and have the same goal, do exactly the same thing.

If you like Machine Learning, do exactly the same thing.

What I think it makes some dev a better developer or a great developer or a ninja developer. . . is the capability to solve problems. Think in this, everything that a developer does is related to solve problems for the people and even for the same devs. That ability to solve complex problems and create effective solutions with order, with good practices and making the things easy for his users with no matter what language or framework, is what makes us better developers. Because at the end, we are all developers solving problems and is the only thing that matter.


I think I have to agree with this article!

It can be very tempting to jump from one bandwagon/fad/language to the next, and you will be able to write "hello world" in 30+ languages. But getting really good at one language/framework will make you a better developer in the end: diving into the internals of the framework's source code, contributing to the ecosystem, solving "hard" problems, and so on.

I've also come to believe that choosing a "niche" wil actually make it easier to market yourself (for instance as a freelance dev), because it's immediately clear to a potential client what your expertise is, rather than the somewhat overused "full stack web dev" moniker.

Having said that, knowledge of a broad range of topics is also essential, because it gives you the context and background to be able to come up with solutions. So it's a bit of "and ... and", not "either": have general knowledge about a broad range of topics, and go deep in a few.


The main issue is HOW to focus on 1 and only one thing?!
There are so many interesting things going on in tech now and technical debt is bigger and bigger and there is less and less time every day... :(

Besides, we need to get social, exercise, invest in our relationship and spend time with family...


i had just got to this point in my journey to be a freelance front-end dev , all these shiny new tools and then i came across this article that just set me strait.. appreciate the lesson and will definitely meditate on my current goal instead.


when you learn and become fluent with your tools, that's when you start learning to programme beyond the framework or language and start implementing general concept which will be universal to any technology you know.



I think you should always pursue what picks your interest, there's so much stuff out there to learn from other languages and technologies that even when choosing to overlap stuff you can learn so much.

But I do like what you said about learning stuff that complement you, for some people the goal is to be the best knife, for others the goal is to be a great Swiss army knife; it depends on your career goals as a developer, maybe learning some of everything would be of more benefit to you if you want to become a manager in the future.


Definitely agree. It’s all about you deciding what you want to work towards to. For me, it’s a more full-stack profile. For other it will be exclusively back-end with Node.js.
It’s up to you to set your own goal and always try to push forward :)


Good post. I recently wrote an article about how to stay focused as a software engineer that also is some kind of advocera-guide. Check it out :)


This is good advice, but only if you are a junior developer with less than 2-3 years of experience.

If you want to advance professionally, you have to not care about tools, frameworks, languages, etc.

I think you're on the right path, you just have to force yourself to keep learning new languages, don't stick your head in the sand.

When you have 15 years of experience in programming, you are able to introduce new languages to yourself and to the company with no problems, identify idiomatic ways of using them, and teaching your collegues about it.

In the end, you'll notice that it's not something special. A new language takes about 2 weeks to master, and 2 more weeks to learn its idioms, afterwards continuous "lifelong" learning but in small steps about its ecosystem.


I have the same thought too. I used to jump to different stacks before, but when I started learning web development and learned a lot from my senior, I told myself "This is not enough, I'll try my best to learn deeper!". Since then, I started reading about patterns of development and always ended-up wanting to satisfy myself by applying what I've read and improve my coding style.

Now, I am looking to try something new, something more challenging. I hope I get enough time to focus on it.


First, let me say 'good' and 'average' are basically the same words. If I were to reframe it, I'd say 'expert' vs. 'competent.'

That said. There are so many opportunities for folks who are competent at a bunch of things, and I fit into this category. If I were to decide tomorrow to choose an expertise, and let everything else fall off my map, I'd be out of a job. I'm, as someone said in a comment above, a 'generalist.' Because, frankly my org (and most orgs I'd want to work for in the nonprofit space) can't afford even one developer, nevermind a team of them. They need folks who can do everything well.

So I fill a niche. It's one I'm really happy filling, and there's a space for us in this industry.

Just my opinion.


I think I agree with you! I'm trying to learn more from PHP and Laravel. There's this feeling that I have to learn lots of frameworks and programming languages because there's so much work out there. However, it does not sound bad to become good at one thing before getting to learn another.

Although, as Gabriel says, it's a good idea to try to learn three different things at the same time if you will. I mean, there's so much code and stuff on the internet that we don't have the time to study all of that.

I'm watching some videos on Youtube,, Udemy, Codecademy, etc. They have lots of videos an examples to study and learn but I think if I focus on one or two things, I could overcome that goa and go for the next one.

Don't you agree?


Totally agree, that was the point of this article even if I think the title was somewhat misleading, implying that you should stick to one thing forever, while what I meant was really to push that extra mile to learn deeper before jumping to something new !

Glad this was understood !


You can get away with being average at one thing, if no one else on your team knows it or is interested in learning it.

I've built a career on that principle!


This is the best article , so far I have read about career planning.


Great article, now tell me how do I manage this kind of focus being a JavaScript developer? I always feel like being accused of not knowing this or that tool!!


I aim to be perfectly mediocre instead of gutter level crap 👀


Great post. Very good especially in this ever changing times.

Question would be what if the knowledge, current you have learned becomes outdated?

code of conduct - report abuse