We all know that being a competent software developer and achieving career growth is about more than just writing code. Often we talk about "being a good communicator". This is also important, but I also think these are only two of several skills or sub-disciplines involved in being affective at your job and generally having a fulfilling career (possibly with pay increases along the way).
Here are a list of five key concepts I've thought of that can lead to an effective and fulfilling career. If you can think of equally important concepts not touched on here, or feel like I should have arranged things differently, feel free to leave a comment. This is a great discussion point!
This is the first basic element of software development—coding. This may seem obvious, but in the name of being great at other components of the craft, some folks truly do lose sight of the fundamentals.
Coding skills can be honed by general practice, reading blog posts, and generally hanging around coding sites like this one. Immersion is important for adoption of the nuanced elements of good coding—and is a general theme of this whole post.
One important element in adopting effective coding skills, especially for newbies, is to avoid being sucked into new and exciting domains before you have allowed yourself appropriate opportunity to master some basic concepts in software development.
Unfortunately narrowing on what the basic concepts are is not so straightforward, so everyone's journey is one of personal discovery. However, generally avoiding FOMO and shiny object syndrome is the best way to develop the right skills.
This is that second important concept for software development that is brought up a lot. You must be able to accept guidance, provide guidance where appropriate, and generally become great at communication. Any trope that software developers are inherently not good communicators is patently false. It might be true that our industry attracts a lot of introverts (the truth is we also attract a lot of extraverts and everything in between), but communication skills stretch far beyond personality traits.
In my experience, the best communicators are folks that value communication as an important aspect of their work, and the worst are those that do not. This is not about absolute capacity to communicate, it's about devotion to the concept in general. If you think communication is not important, or perhaps not within your skillset, you will likely become a bad communicator. I believe that is the causational direction here, not the other way around.
Good communicators are folks who believe they are capable of being a good communicator.
Here is a thought-provoking post about communication in software...
If you hang out around DEV you will see a lot of posts about the latest GitHub features, VS Code extensions, VIM advice, AWS services, etc.
Software development has always been about staying just plugged in enough to understand what's being released and what might change the way you think about your code—without being so plugged in as to get distracted. This is a delicate balance.
This post is a good example of the kind of post to keep an eye on...
Keep your eyes and ears perked for interesting ecosystem movements in terms of open source and commercial software without being so consumed as to develop the aforementioned shiny object syndrome.
Even the most knowledgeable coder in the world can fall prey to productivity traps. Sometimes personal productivity is a matter of life arrangements and distractions, sometimes it is a matter of mental and/or physical health. Sometimes it is a matter of productivity software tools and shortcuts.
Your personal productivity habits will always need refreshing. Learning new things often leads to learning new productivity tricks—especially if you adopt a lot of new things stemming from the "ecosystem awareness" pillar.
Reading about productivity doesn't always need to be an "aha" moment, often it is a nice reminder of something you already do in some capacity.
Don't get into the habit of being set in your current productivity hole. Reflect and refresh often. Take breaks, find ways to socialize outside of tech.
If the first four pillars are essentially setting up the pins for an effective software career, this is where you knock them down. Career management is about having good communication with your managers, and when needed, capacity to know your worth and find new managers.
All else equal, I believe in long and fulfilling careers with fewer total companies, but don't pursue this path if it is going to be detrimental—and it often is. Knowing that you have the capacity to leave for the right opportunity is important.
There is a lot of advice around leaving your job and job seeking, so I'd prefer to focus on the effective career management within the job. I think this is about pro-active boundary-setting, not letting important things go unsaid, and generally setting expectations on an ongoing basis.
Here are a couple posts which demonstrate thoughtfulness about one's career...