7 Practices of Excellent Developers (And All-Around Awesome Humans)
Tags: beginners, career, productivity, codenewbie
Published: 2020-09-08 22:04:41

We all want to achieve our biggest career goals, but too often we focus too much on the goal and not the method we use to achieve that goal.

Often that results in a never-ending cycle of excitement, motivation, failure, burnout, and giving up, only to start the cycle over again when we have another idea of newly kindled motivation.

When it comes to starting and building a successful career as a developer, it is just as important to focus on the little things you do every day as it is to focus on your goals.

Goals make good destinations, but terrible maps.

Combined with the right practices, setting good goals is an excellent way to achieve career success.

But goals on their own can lead to frustration because we have not created a proper system to actually achieve them.

Today, I want to go through 7 practices, things you should be cultivating and working on every day, that can accumulate over time to build an excellent career.

By focusing on doing these things a bit at a time, every day, you make your own system designed to achieve your most ambitious career goals.

Let’s get into the practices.

### Be a generalist
Jake of all trades, master of none is a phrase usually used with a negative connotation, but that is completely backward.

Unless you know exactly what you want to do with your life, and you never want to do anything else, and that thing is a very specific skill, then being a generalist trumps being a specialist every time.

If you want to be the world’s greatest violinist, then you should specialize in violin, but other than very specific goals like that, you’re better off being better than most people at most things than you are being the best in the world at one thing.

Learning and synthesizing multiple skills is the key to creating value in your own life and others.

It offers more job security, especially as AI advances. Computers can be programmed to do just about any one specific task vastly better than a human.

Our economic value lies in being able to take multiple skill sets and use them together to create something that brings pleasure to our fellow man in some way.

But what about mastering subjects? What about the 10,000-hour rule?

If you look at the studies done to reach numbers like those, they are all done on skills that have a very specific goal that is always the same.

Let’s take golf and chess, two common examples of why we should pursue endless laser-like focus on one skill.

Golf and chess have one very specific outcome, and that outcome is achieved by repeatedly doing the same things as efficiently as possible.

Whether swinging the club or learning when to move the pieces, the goal is the same.

But what about with a discipline like programming or design? Where the goals change with every project and are almost never consistent?

When we look at abstract skills like that, the people that excel are the ones who spread out their knowledge to different domains.

For more on this, I highly recommend reading Range by David Epstein and watching his debate with Malcolm Gladwell.

So what skills should we focus on as developers?

For developers, I believe the three most important skills you can learn are coding, design, and marketing.

The integration of these three skills forms the foundation of every successful software company in the world and learning how to combine them effectively to solve real-world problems will make you an indispensable developer.

If you drill down into those and become well-versed in multiple languages and frameworks, multiple types of design, and multiple marketing methods, you will be of extreme value to any software company out there.

You should also take the time to learn sub-skills within those disciplines. Learn multiple languages and frameworks, learn different types of design, learn different marketing tactics, strategies, and principles.

Combine that with universally useful skills like effective communication and writing, and you have a recipe for a lucrative, rewarding career.

Then, and this part is important, use and practice those skills by building real things.

Rather than building little toy apps, learn the skills in their real context. It’s the best way to learn.

But there is a fine line here.

We want to actually be great at these things, not mediocre at all of them.

In his book, How to Be Better At Almost Everything, Pat Flynn lays out the 5 principles of being a generalist, which help guide us in how we can be the best generalists we can be.

These principles are:

* Skill Stacking > Specialization
* Short-Term Specialization 
* The Rule of 80 Percent 
* Integration > Isolation 
* Repetition and Resistance

Let’s go through these briefly and see how we can apply them to become excellent developers.

#### Skill Stacking Over Specialization
We’ve touched on this already, but the basic premise is that learning multiple skills, and then learning how to combine those effectively to solve problems is the way to go.

The alternate and I believe inferior route for general success in life, is to specialize in one single thing.

In the context of web development, this means becoming proficient in multiple languages, frameworks, and complementary skills so you have a wide range of skills to pull from to solve problems.

I think this is especially important in the world of web and software development, where new technologies can come and go very quickly.

Specialize in the wrong tech stack at the expense of everything else and you may have some trouble growing your career when that stack falls out of favor.

#### Short Term Specialization
This is how we ensure that we don’t become mediocre in all of the skills we’re working on.

The goal is not to bounce around constantly between different things. The goal is to specialize in something in the short term, become proficient in it, and then switch it into maintenance mode while you learn something else.

A great way to do this in web development is to choose a tech stack, design system, and marketing strategy, combine them to build a small, but real product.

Then learn something else after it is completed.

#### The 80% Rule
This principle exists to make sure we don’t drift into specializing in anything.

Achieving 80% mastery of a subject and stacking that with knowledge of other subjects is more than sufficient to be successful.

In fact, you likely won’t even need to hit 80%.

A developer who has 50% mastery in multiple tech stacks combined with design and marketing is going to be infinitely more valuable to most companies that someone that has 95% mastery in a single tech stack but is ignorant of anything else.

They will also have much better job security.

It’s important to note the other reason for this rule is that once you hit a certain point, increasing your proficiency in a subject takes drastically more effort for increasingly diminishing returns.

It works much the same way as strength training.  You’ll see massive increases in strength in the first few months of training, where professional lifters often work incredibly hard for months or years to increase their max weights by a pound or two.

#### Integration Over Isolation
This is why we build real things.

It’s tempting to learn development by building little toy apps or novelty utilities, but it’s far more valuable to use and practice your knowledge in context by building a real app.

In this way, you become familiar with how your skill of choice is used in the real world. 

Your knowledge increases more along with your value to potential employers and clients.

#### Repetition and Resistance
Create every day and do things that are hard.

Following along with a tutorial is a great way to get introduced to new technology, but a poor way to achieve mastery of it.

If you want to truly learn something, you have to struggle and you have to do it consistently.

Following along with a course or tutorial feels good but gives a false sense of knowledge.

Anybody that has built something by following a course but then been baffled when they could hardly start on their own project knows this all too well.

Build something that doesn’t exist yet. Encounter errors and learn to fix them. Explore the ecosystem and learn to identify the best tools for the job.

If you feel your brain hurting and feel stuck on things, that’s a good indicator you are actually learning, so push through.

### Keep your focus
The world of web development is incredibly diverse and keeps getting bigger every day.

Figuring out where you should focus your effort can be overwhelming, and with new technologies being released every single day, that battle to stay focused never ends.

Keeping your focus on one thing at a time is crucial to your success.

When you start a project, finish it before starting a new one.

I like to keep a list of new technologies I want to try, and when I finish my current project, I’ll pick something new from the list, and begin a new project to learn it.

The ability to stay focused will make or break your ability to build real-world projects, which will make or break your ability to build a great portfolio.

Learn to focus.

A great way to do this is to assign yourself new projects in 30-day sprints. So you choose a new tech stack and spend 30 days building something with it.

This way, whenever you start to get a case of shiny object syndrome, write it down in your list, knowing that you can dig into it after your project is done if you still want to.

But how do you find your focus?

One of the hard parts about breaking into the field is how to figure out what to focus on first.

There are two ways I like to go about this.

First, if you have a company or companies in mind you would really like to work for, and you have your heart set on them, research their tech stack and learn that.

If not, figure out what is currently growing in the field and choose that. This should be pretty easy if you are active in the community, reading, and interacting with others.

An obvious choice at the time of this writing is React.

A decent place to start (but not something you should rely on exclusively) is to check out what projects on GitHub have lots of stars and seem interesting to you.

Compare that to what people are starting to hire for, and what existing companies are using to find a few options.

Be careful with relying on things like GitHub stars exclusively. They are not a good indicator of what companies are actually using in real-world, paying projects.

But they can provide a good starting point for your research.

There is no exact science and guarantee that you will pick a winning language or framework that will be popular 10 years from now. That’s where being a generalist and learning how to learn comes in.

You should never become stagnant in your learning and assume what you know now will be relevant in 5 years, or even 1 year.

Don’t stress out too much about your long-term focus, this will ebb and flow with your current job and with the industry.

But commit to relentless effort on your short-term focus. Once you start a project, finish it, and then start a new one using a different mode of the same technology, or a completely new one.

*Come up with problems that need to be solved, research the best available technology to solve it, and then learn and execute.*

Do this in short bursts to get small but useful projects created. Don’t jump around. Finish one project before starting the next.

This way you’ll actually learn and will build up an impressive portfolio in the process.

### Learn in public
This is one of the most valuable lessons I ever learned. If you did nothing but this you would skyrocket your chances of landing a great job.

The core concept is very simple.

As you are learning, write about it.

That’s it.

Start up a simple website (you can do this easily with Dev.to) and just start writing about the projects you are working on.

Build real things that solve real problems, and write about the process.

Having your own website where you write about what you are working on is a massive signal that you are serious about growing your career and are looking to be an excellent developer.

This can be intimidating to do at first, and it’s one of those things that will give you analysis paralysis.

What do I write?

Do I have to have a custom-coded website that I designed myself?

What if my writing sucks?

You have to get past those roadblocks and just start.

Your writing will improve over time and deciding what to write about will become easier as you grow your following and build more things.

### Build relationships
I’m naturally very terrible at building relationships. I prefer to go solo, so it doesn’t come naturally to me. But it is absolutely essential to building relationships if you want to build a successful career.

Networking is a horrible buzzword that brings up images of awkward meetups, cheesy canned cold emails, and fake relationships.

But building real relationships is extremely valuable, and does not have to be awkward or disingenuous at all.

Building real relationships is one of the underutilized keys to building a successful career.

Every job you ever get will be the result of another person or people vouching for you. In the case of a cold hire from an application, that might just be the hiring manager.

But a lot of the time, the job will come because someone you know, who knows what skills you possess, thinks of you when they hear of an opening and refers you to the person hiring.

Some of the trust the potential employer has in the referrer transfers as they vouch for your ability to get the role.

This is how I found the position I have now, and it is how countless others have found incredible opportunities.

Many times, great opportunities are not listed publicly because someone already knows the right person for the job. Or if they are listed publicly, the people just sending in an application without any relationship or context are at a serious disadvantage compared to someone who has an existing relationship.

Your goal with networking is to know as many of the right people as possible and make them aware of your abilities and desire for new opportunities.

But what does this actually look like in practice?

There are many people out there who teach networking better than me, one of my favorites is Molly Beck. For a specific game plan for building a great network, I highly recommend you read her book, Reach Out.

She does a far better job than I could hope to do teaching networking.

### Solve real problems
One of the most dangerous traps new developers can fall in to is getting stuck in an endless loop of courses and tutorials.

You’ll go through countless different tutorials and courses and follow along while you build things, and the whole time you’ll be feeling great, thinking you’re learning a lot.

And then when it comes time to actually build something on your own, you’ll feel completely stuck.

That’s because while courses and tutorials are a great way to be introduced to new technologies and concepts, they are not great for the majority of your learning.

For that, you need to build your own real-world projects.

By real-world, I mean projects that you build in order to solve a specific problem that you or someone else has.

They should have real parameters for success and real challenges to overcome. Todo lists are great for being exposed to the basics and deciding if you want to learn more, but you should always build real things as the bulk of your learning.

Building real things that don’t have a step-by-step process is what you’ll be doing when you land that first job, so start figuring out how to do it now.

Embrace the struggle.

That feeling when you don’t know how exactly to do something, and you Google the crap out of it, try different things, fail, and eventually figure it out.

That’s real learning.

Doing that over and over again is how you’ll not only learn the best but build the best portfolio to prove your knowledge and skill set.

### Never stop learning
Staying stagnant is the enemy of success in any career, but more so for development and tech industries than most other fields.

Find relevant newsletters to subscribe to, continue to read posts on sites like Dev.to, and stay up to date on the industry and where things are headed.

When you find a new technology that looks interesting to you and looks like it might have some traction, schedule in some time to learn it and build something with it.

This way, you always have basic knowledge of the current tech and can scale up that learning as needed if you want a specific job or it is required for your current job.

Make sure you continue to learn about not only development but other related skills like design and marketing. See the section above on being a generalist for more on this.

### Cultivate discipline
Finally, there will be days when you don’t feel like doing any of this.

You’ll be tired, overwhelmed, angry, distracted, or a million other things.

Ignore that feeling. Keep going. Stick to your learning and your creating.

Professionals show up, amateurs wait for inspiration.

My favorite book on discipline is [Mindful Self Discipline](https://www.amazon.com/Mindful-Self-Discipline-Purpose-Achieving-Distractions/dp/0645138916) by Giovanni Dienstmann.

There is no shortcut here, there is no easy answer or hack to make all this magically easy.

There are, of course, smart and not as smart ways to go about doing things. But once you’ve figured out the system and know what work needs to be done you have to do the work.

You can also [follow me on Twitter](https://twitter.com/KenTheRogers).