Taking your career to the next level as a software developer: 20 tips to help you stand out from the crowd in today’s market!

This article first appeared on Medium.

Photo by Donald Giannatti on Unsplash
Photo by Donald Giannatti on Unsplash

Whether you’re stuck in a boring job for years, just landed your first job, or starting up as a software developer, and you wish to explore what’s next in terms of growing your skills, this article should help you get a sense of what your options are to improve your career and stand out as a software developer. Stand out besides learning advanced topics and growing vertically in your area of expertise that is.

The points in this article are some of the lessons I learned in more than 20 years of teaching myself about computers beyond coding. This is how I landed my first job where I climbed my way up to lead the tech team in a very short time while being the youngest one on the team. It’s what my passion led me to do, and helped me become an all-rounder.

Everyone’s journey is different, and I’m not suggesting that sticking to one path would work for everyone, or that success is defined by how all-rounded a person is. If you find that you’re already doing some of the things discussed below, and this article makes you feel better about it, then I’ll have fulfilled my goal with writing it. Otherwise, this is my invitation for you to consider doing some of the things that helped me personally get better at what I do best.


While you don’t necessarily have to grow in any way for some software jobs, there are many reasons you might want to improve your skills. Your motivation might be getting promoted in your current job, or increasing your chances of finding a better job, or maybe building your own ideas and bringing them to life.

The demand for skilled software developers is high, but so is the supply. In such market, you need to stand out by creating a need for your skills. Widening your perspectives can make you a much more desirable talent to acquire for companies if you could get them to recognize your work and diverse set of abilities.

Overview / TL;DR

The following tips are discussed in this article:

  1. Solutions are short-lived, frameworks are forever: Look for opportunities to create long term solutions instead of patching things up.
  2. Everyone speaks code, few speak human: Put yourself out there, and improve your communication skills, both verbal and written.
  3. Things don’t always go as planned: Plan for failure when writing code.
  4. Find the bigger picture: Learn from your developer and non-developer teammates to understand a project’s lifecycle.
  5. Nothing is perfect: Look inside your familiar, everyday tools and find ways to improve them.
  6. Keep a record: Log what you’re doing, either publicly or using notes.
  7. Write a lot: Document recurring processes for future generations.
  8. Disassemble and inspect: Learn how others in the business do it.
  9. Be humble: You only stop learning when you think you know everything.
  10. Make mistakes and learn from others: Don’t let the fear of making mistakes hold you back.
  11. Don’t settle: Be aware of your options and mindful of your time.
  12. Write good history: Write code responsibly even when you don’t have to.
  13. Be in the loop: Stay up to date with daily news.
  14. Create your own challenges: Keep your brain stimulated when learning new technologies.
  15. Learn your way around text: Learn to manipulate and transform different text formats.
  16. Learn your way around media files: Learn the basics of editing photos, audio files and videos.
  17. Find out what kind of learner you are: Try courses, screencasts, books, documentation, and see what works best for you.
  18. Plan for the endgame: Prepare for your own future outside of writing code.
  19. Have fun: Find an effective way to restore your stamina.
  20. It’s a bumpy ride: People can be successful in many different ways. Don’t be overwhelmed by the future and take it slow.

1. Solutions are short-lived, frameworks are forever

Don’t develop solutions, develop solution “frameworks” for solving today’s problems and all future similar problems: think scale, unless it’s absolutely not necessary in the near future. Similar-looking pieces of code and other code smells are often a plea for a refactor that builds some architecture around them.

Having said that, it’s equally important to know when to stop. Sometimes it’s best to copy/paste or repeat the solution for a recurring problem instead of spending time building a framework for something that is clearly not planned to be scaled anytime soon. In such cases, the architecture meant to “solve” the problem would only add unnecessary complexity and become a problem in itself.

It’s easy to get distracted and start abstracting everything once you’re hooked on the idea of designing frameworks to solve problems, but keeping things simple is just as important.

2. Everyone speaks code, few speak human

Knowing how to speak the language of the average person to bridge the gap between all the technical jargon of the business and communicating with someone outside the field is a skill that many technical people starting up or locked up in their cubicles isolated from the outer world struggle with.

Conversation skills help you explain your ideas and challenge other people’s ideas and make efficient arguments without making logical fallacies. Domain knowledge is of course key, but if you also have the skill to speak your mind in a clear and effective way you can go much farther.

The better of a communicator you are, the more opportunities you can make for yourself. Nobody is born a great communicator, so you can always learn to become one. Generally speaking, you’ll never ever regret the time spent practicing to become a better communicator.

It’s often easy to avoid having to learn proper communication skills as a developer in many companies because there are other teams to handle it. My advice is, throw yourself out there and insist on developing this skill, however difficult and uncomfortable it might be.

If you’re too shy, start by forcing yourself to have conversations with your colleagues, then widen the circle from there. It’s rewarding in every way because you’ll often find interesting people to keep around.

Written communication is also crucial because it allows you to transfer your experience to a bigger audience in unexpected places over many generations. You can force yourself into taking on writing projects and asking for feedback to improve your written communication.

3. Things don’t always go as planned

One of the things that make more experienced developers’ code stand out is how well they handle failures. Developers with less experience tend to design their code around happy scenarios, but those with more experience will foresee how things could go wrong based on the variables at play, and plan around every possible problem depending on its type and severity. This is especially important for things that can fail silently.

Every problem needs to be handled separately. Some problems can be dismissed, others need to stop execution and report back to the user. Some problems need to send an email to affected users, others need to report to a bug tracking system to be reviewed by developers.

More than often, logging errors is not enough to find problems, that’s when collecting data about user funnels comes in handy and provides information on broken features that are not reporting any problems otherwise.

4. Find the bigger picture

Don’t stop at one part of the project lifecycle. Most of us will have a specific role in every project, but knowing about different parts of a project can be extremely enlightening to help you make better decisions. Whether it’s development parts from frontend to backend to deployment, continuous integration and system administration, or running the business from the very early stages where you would need to find connections and prepare the perfect demo and the perfect presentation to secure investments and raise enough funds to make an idea come to life, or making business decisions when you have millions of users that could make or break your business.

You may find a passion for another area of the project lifecycle and decide to make a switch, but even if you don’t, it helps you see things a lot better when you know all about what it takes to go from zero to production.

Every day we stumble upon many opportunities to learn and grow. Be it colleagues talking over a lunch break, discussing something on Slack, or someone asking for help.

5. Nothing is perfect

No matter how good your tools, frameworks, codebase, and processes are, there’s always a chance to improve things. Always be on the lookout to recognize good opportunities to grow a certain area of your work, be it a process that could be optimized to run faster, a pattern that could make maintenance easier, or a deployment strategy that helps improve the time to recover from fatal issues.

Know this for sure, no system is 100% flawless, and when you learn to recognize the flaws you create a need for yourself. I say “good opportunities” because sometimes what we think might improve a process or a tool could either be already out there but we didn’t find it yet, or could be inefficient to solve (takes more time to solve than it saves).

Even if your work is not recognized in your organization or as an open source project, you’ll learn a lot from the experience of refining your daily tools and revolting against the status quo. Some ideas may sound too absurd to be implemented, but eventually turn out to be much needed solutions or at least inspire other great ideas. It’s best to give it a shot if you see any glimpse of potential than to just dismiss it on the spot.

If you’re lucky enough to be using open source frameworks or tools, you could start looking there, otherwise, you can explore popular projects on GitHub and look for opportunities to give back to the open-source community. This helps in many ways including:

  • Helps you get your name out there and make connections.
  • Builds a portfolio of open source contributions.
  • Allows you to practice collaborating with strangers. The more you put yourself out there and the more conflicts that arise when not much is at stake the better.
  • Gives you a chance to work on experimental projects you may not be able to do in your day job because they seem worthless at face value.
  • Allows you to have your code reviewed by strangers, and get feedback from people with more experience than yours!

6. Keep a record

Keep an activity log of what you do and the impact that your actions had on the outcome. You can use a dedicated digital platform such as Polywork, or a personal (preferably synchronized) note-taking platform such as Apple Notes, Google Docs, or even a physical notebook / journal.

Safe rule to follow is: if it’s significant and positive, post it publicly on LinkedIn or Polywork. Otherwise log it to your personal journaling solution of choice.

You’ll appreciate having an archive of events when you’re updating your résumé, because we often forget the things we achieved over the years if we never had to put them into words and numbers before. Being able to describe your value and sell yourself pretty much determines how good of an offer you’ll receive in your next job.

7. Write a lot

In every job, you’ll be exposed to processes that you will be repeating often. By documenting those processes you will:

  • Leave a legacy for everyone else to follow and appreciate.
  • Make it easier for yourself to repeat those processes.
  • Become confident about delegating those processes at any point in the future.
  • Recognize bottlenecks and optimization opportunities easily.
  • Improve your technical writing skills using feedback from those following your documentation.

8. Disassemble and inspect

One of my favorite ways to learn about how things are done in the industry is by inspecting existing production projects and studying them. For example, when I started learning JavaScript and CSS, I learned a lot more from the Chrome dev tools inspector than from documentation and/or videos.

This doesn’t stop at frontend development though, and while things could get more complicated with other technologies, there’s almost always a way to debug and disassemble stuff to learn about their internals.

9. Be humble

It’s only when we think we know it all that we really stop learning. No matter how good you are, there’s always more to learn, but you won’t recognize this if you convinced yourself that you already know everything you need to know.

Having confidence in your abilities is important, but if you can also manage to be humble you can encourage people around you to give you more constructive and honest feedback that you can use to become a better version of yourself.

Every now and then take a look back at your code from last year. If you find it to be ugly and cluttered then you’re on the right track. It means you’re starting to tell apart clean[er], [better] quality, [more] scalable and maintainable code from code that just works. Allowing yourself and others to criticize your work allows you to move forward.

10. Make mistakes and learn from others

The more mistakes you do earlier in your career the more prepared you become to face future challenges. If your current job doesn’t provide a safe environment for you to learn and make mistakes, find a way to make one yourself.

For example, in my first job I created staging servers myself because we didn’t have any, and in my second job where hardware development was involved, I labelled some of the chips I worked with as “ testing” chips to prepare myself mentally for any possible issues as a result of experimenting with them.

Our fear of making mistakes holds us back from improving our skills, and by allowing ourselves to make mistakes, we can build confidence in what we‘re capable of doing, and what we can bring to the table when things really go wrong.

You can also learn “for free” from the mistakes that others around you make. By closely watching their mistakes unfold, and paying attention to what the cause, resolution and process were, you can gain insight and experience that will help you avoid making similar mistakes in the future.

11. Don’t settle

Your job may be great compared to your previous job, or to the stories you hear from your friends about their jobs, but you should always be open for or at least aware of better opportunities.

I’d like to stress the fact that I’m not encouraging job hopping, but if you’ve been stuck in a job where you find that you’re unable to improve yourself, and only sticking around because it’s comfortable, you should learn to appreciate your time and be on the lookout for a better opportunity. Be mindful of how you spend your time every day because once a day passes it’s gone forever, so make them count!

12. Write good history

A software developer is after all an author, you could either be creating great content for people in the future to build upon and learn from, or non-maintainable code that needs to be discarded and refactored as soon as you hand it over to someone new. Your decisions on the structure, level of optimization, readability, scalability, and documentation determine how long your code is going to live.

Nobody expects fresh developers to write great code, but if you keep it in mind you’ll eventually get there. This is especially important if you’re starting a new project with a clean slate.

It’s also worth mentioning that writing good commit messages, even if your job doesn’t require it, opens up many opportunities for you and others to learn, reuse and debug. Good, descriptive commit messages that justify decisions made in the moment are essential to avoid repeating mistakes in the future.

13. Be in the loop

In a world where not a single day goes by without at least a few hundred new software projects come to life, whether they are frameworks, forks, tools, services, or libraries, it’s crucial for every aspiring software developer to be familiar with the daily headlines surrounding their interests. Unlike most other fields, the software industry is full of new opportunities and challenges that keep evolving every day.

Find your favorite way of being in the loop, be it Twitter, newsletters, news aggregators, or YouTube videos. All that matters at the end of the day is that you get your daily dose of updates somehow.

There are many tricks you can learn from experts in the field, when you’re not looking for them, that can improve your daily life, workflow and widen your perspective.

14. Create your own challenges

Whether it’s for fun, or it’s a problem you’ve always wanted to see fixed or implemented differently or a closed source tool that you wish was extendable, or an extension for an existing platform that could help you do things better or speed up your work, always create quests for yourself.

When I’m interviewing someone and they tell me they didn’t do this or that because nobody asked them to, it’s the least exciting and inspiring thing to hear from a candidate because it (usually) means they don’t have any curiosity to discover and that they only follow what they’re told. Even when you’re stuck in an environment that doesn’t naturally provide enough challenges, keep your brain stimulated and challenged by creating your own problems.

15. Learn your way around text

We handle text everyday on our computers, and as programmers we often have to manipulate text in ways that fit our needs. Some text transformation tools and techniques are essential to every programmer even if they don’t recognize the immediate need for them in their current position.

Examples include:

  • Describe patterns using regular expressions.
  • Filter JSON output with jq.
  • Select a node in an XML document using XPath.
  • Manipulate CLI output using awk.

Understanding some of the Linux CLI tools like grep, sed and find can prove useful even if you don’t work with Linux on a daily basis. Linux is everywhere because it’s powerful and versatile, and you can’t avoid it.

Even if you only know what can be done, but not how it’s done can help you along the way when you’re faced with a challenge, because it helps you know where to start looking for solutions.

16. Learn your way around media files

You can do all sorts of things on a computer beyond writing code. It’ll always come in handy if you know your way around some of the less basic applications that you can use to edit media files like GIMP (for bitmaps), Inkscape (for vectors), Audacity (for audio files), OpenShot (for videos), Blender (for 3D objects), and LibreOffice (for docs, spreadsheets and presentations)— or any alternative non-free applications.

Just the basics can get you a long way while working on your software projects in unexpected times and can give you a lot more independence to lead your own projects, and confidence to tell what’s doable from what’s not.

Do you need to know all of these? Absolutely not, but it’s always a plus if you take the time to explore them and learn how to do the basic operations. This also helps you make better estimates when faced with challenges that include handling and processing media files.

17. Find out what kind of learner you are

This only applies if you find yourself spending much more time than you should while trying to learn something. If this sounds familiar, take a step back to fix the problem moving forward. Some people learn better by reading reference docs, others prefer reading getting started articles, others prefer watching tutorial videos, or screencasts of field experts doing things quickly and efficiently, some people enjoy reading e-books, and others enjoy the smell of paper books.

This is different for every person. If something doesn’t work for you stop trying to make it work. Personally, my favorite way to learn a new technology is to get a general idea from an online article or a getting started guide, then go on to explore it in detail by creating problems for myself and solving them while making as many mistakes as possible.

18. Plan for the endgame

You don’t want to be stuck doing software development for the rest of your life. It’s not healthy and it may be too late when you realize it and wish to retire or switch careers. Plan ahead for your retirement or career switch, whether it’s 401k’s, personal investments, farming, running a restaurant, starting your own software business while being on top of things, or running your own SaaS to make some passive income to support your pension.

You’ll thank yourself later when you have allowed yourself to get prepared ahead of time. As fun as development can be for the first 20, 30, or 40 years, everyone wears down eventually and only those who plan ahead can survive the turmoil.

19. Have fun

It’s important that you find some time for yourself and your loved ones to restore your stamina and keep you stable. Your career should not stop you from being a good partner, child, parent, or friend.

I don’t want to take the fun out of fun, but I have to say this: it’s equally important to find an effective way to have fun. Something you do that resets you but also doesn’t take too much of your time everyday to do so. If you choose to reset your stamina with video games for example, choose ones that don’t engage you for more time than you can afford to lose.

20. It’s a bumpy ride

Real life is full of ups and downs, and people have different capacities and evolve at different paces, and that’s okay. The road is not going to be the same for everyone.

Photo by Patrick Federi on Unsplash
Photo by Patrick Federi on Unsplash

The reason why I picked this topic to discuss is that I get asked this question all the time on LinkedIn by fresh grads and junior developers. I do believe this applies to a lot more people though because I’ve interviewed many developers with many years of experience who only realize how limited their experience is when they start preparing for interviews while looking for a new job.

My hope with this article is to have helped draw a path from my personal experience to influence others, or at least inspire people to make some changes or pay more attention to how they go on with their daily lives to improve their careers.

About the author

My name is Muhannad Ajjan, and I’m a software developer at StuDocu.

Previously, I led a software house where I improved the reliability, security and scalability of their services, and developed the overall experience level in the company to compete with larger businesses and increase client trust.

I was also employee №1 in a startup where I built a product from scratch while being in the “kitchen” with the co-founders where I learned about the early stages of building a business around a product idea.

You can find more details about me on my personal website at isword.nl