The 101 to become a great software developer
Inspired by the amazing article produced by Emma Bostian, I took the freedom to create an updated list, adjusted to my own experience and reality as a software developer working in a startup within a corporate.
I’m not taking credit for the original post in any way, shape, or form. Many new items were added, and all items were edited to reflect my perception of software engineering best practices.
By providing and applying these 101 tips to become a great software developer, I honestly believe you will grow personally and professionally as a software developer.
I hope you enjoy it. Bring forward any comments, suggestions, or new ideas, so we can make it an even better list.
In no specific order:
1. Have your team (and leadership) supporting you
It is essential to have a safe space to try new things without fear.
Knowing that you have your team behind you brings confidence, motivation, and self engagement.
2. Continually rethink (and challenge) your architecture
Take time to assess your architecture in terms of single-point-of-failures, weaknesses, bottlenecks, security holes, etc.
3. Keep technical debt low
Technical debt can be described as the (hidden) cost of choosing an easy solution in the short-term that translates into high maintenance in the medium to long-term.
Identify and act on technical debt as early as you can.
4. Read documentation and source code
When using a new library/technology, take time to read the documentation and scan the source code. Make sure you are reading from the latest version and the “official” source of documentation.
Be aware that there is only one source of truth, the source code. So when in doubt, inspect the code itself.
5. Build with scalability in mind
Always build with scalability in mind because, if needed (or actually, when needed), you don’t need to go through a huge refactoring.
Be careful not to start scaling until you need to, but always keep the ability to grow when needed.
6. Do Inner Source
Inner Source is the establishment of an open source like culture within organizations.
Push for opportunities to work with other teams in your company.
The collaboration and open communication that comes from it will leverage your project to a whole new level of quality.
7. Set individual career goals
Spend the time to reflect where you want to go. This will help either to keep you motivated or to force you to steer in the direction you want to go.
8. Learn several design patterns
Design patterns are useful tools to better architect your code.
Having a basic understanding of them will help you in starting new projects.
9. Get involved in the community
Engage with the community, from meet-ups/events to merely commenting on blogs or participating in Twitter/Reddit/LinkedIn threads.
Don’t underestimate what you can learn from others in the community by simply listening or engaging in one-on-one discussions.
10. Be familiar with basic programming algorithms and data structures
Sorting and searching algorithms, data structures, number theory, among others. Learning these language-agnostic concepts can help you solve problems across all languages.
11. Be proactive
If you have the power and capacity to fix a problem, improve a process, or simply raise your hand to help, do so.
Between “I will do this” and “Can someone do this?”, I can guarantee everyone prefers to hear “I will do this”.
12. Choose technology with care
It is tempting to choose the newest technology just because it is fun and cool and you can experiment in the job.
Choosing a technology is a delicate balance of stability, maintainability, safety, robustness, community adoption, and many other factors.
Pick technologies that give you long-term assurances.
13. Don’t depend on a single framework or library
Depending on a single programming language can be limiting; depending on a single framework/library inside a language can be even more limiting.
Expand your knowledge into different frameworks and libraries, understand their scope, and only after their ins-and-outs.
14. Create a captivating team environment
Be proud of your work. Work towards having a balanced team, right tools, processes, and technologies.
Also, make it welcoming and keep it welcoming. Team energy is everything.
15. Be nice to non-developers (aka use effective communication)
There is sometimes a feeling of a dichotomy between developers vs. non-developers. From customers and users to product owners, even designers, effective communication is essential.
Adjust technical language to a less technical one, be understanding, and make bridges. Everyone has the same objective, to make great products or services.
16. Identify and remove distractions
Too many meetings? Too many emails or chat notifications? Too much noise?
Be proactive in solving them early. Turning off notifications/emails, noise cancelling headphones, having a no-meetings day are some examples of how to improve your productivity.
17. Stay up-to-date
In the constantly evolving software development field, it is important to keep up-to-date. Read books, follow trending open-sourced projects, check main topics from technology conferences.
Without getting overwhelmed (no one knows everything), maintain a good high-level picture of the technology landscape.
18. Don’t get attached to your source code
Code comes and goes. And constant refactoring is a natural process of software development. If you wrote a library which is now being rewritten or deprecated, don’t take it personally.
As you evolve as a software developer, so does your code. Appreciate that it’s taken to the next level and don’t identify with the source code you wrote in the past.
19. Listen, then talk
Listening is key in a constructive discussion.
When making an argument, build on top of what you heard.
Pause a discussion if you need to understand the topic better.
It’s ok to counter argue and oppose, but keep in mind that it’s a consensus both parties are looking for.
20. Commit source code early and often
When starting a new project, do not wait for a robust version before committing. Commit early and keep committing in small chunks.
It helps with code reviews, identifying bugs and code regressions, and simplifies reverts.
21. Avoid blind copy/paste
Blindly copying code snippets from the Internet (like Stack Overflow or other websites) can bring unwanted consequences.
From side-effects to performance degradation and security holes, a lot can happen in what seems “innocent” code.
Understand exactly what the source code does and read each line you copy before you submit your change.
22. Do not allow to be taken advantage of
Software development is hard, has a huge responsibility, and is mentally demanding.
It is of utmost importance to keep a mental/physical balance, feel accomplished and be financially and socially recognized.
23. Be a master of debugging
One of the most common tasks in software development is identifying a problem via debugging.
Learn how to do it well. Combining the right tools and techniques can save you hours.
24. Do not commit unused/commented code
There is (almost) no valid reason to keep unused code.
It only adds to maintenance, and given we have version control tools, no code is unrecoverable.
25. Embrace DevOps
DevOps combines software development (Dev) and IT/SRE operations (Ops).
This enables continuous integration and continuous delivery of products/services, accelerating the development process by removing silos.
26. Don’t be afraid to ask for help
No one knows everything. And if it saves time, getting an answer is better than searching for one yourself.
If you are stuck with a problem and you know there are people that can help, reach out to them without hesitation.
But, when asking for help, do your research beforehand, be concise and effective.
27. Do pair programming
Pair programming is a technique where two developers work together in a task, solving an issue/bug or creating a new feature.
Not only is this an excellent way to share knowledge, but it can also be more efficient, and can bring a higher overall quality.
28. Put on your manager shoes
Know what are the priorities and have a high-level idea of the latest business discussions.
This can help you be more agile, anticipating changes, and ease the relationship with the product team.
29. Focus on problem solving
Engineering is all about problem solving. This can be trained and improved, even outside of software development.
Figuring out what is broken, why is it broken, and how to fix it is not exclusive to engineers or scientists.
The everyday person should practice this skill.
30. Establish a healthy work/life balance
Be self-aware of your work/life balance. Take time to decompress and be with your friends and family.
Turn off emails or other work notifications outside work hours, remove apps from your phone.
31. Take vacations
Vacations not only disrupt your routine in a positive way, but it also helps you see things in a different way.
Get away from the screen (laptop, tablet, phone) and take that trip you’ve been wanting.
32. Take breaks during the day
Make sure you take a break every 2 hours.
A stop to stretch your neck, arms or legs or simply to get a coffee can reduce mistakes and get you refocused.
33. Trust the people you work with
Trust binds people toward common goals and purpose. And it’s reciprocal.
Alone you won’t accomplish anything, do the best you can and give trust to your team.
34. Under promise and over deliver
What is better? Under promise and over deliver or over promise and under deliver?
Expectations and reality don’t always match, but it’s always better to send a positive message of accomplishment than a negative one.
35. Don’t be a gatekeeper of your application
Gatekeepers are people that act as a go-between, sometimes refusing, controlling, or delaying access to the application they are responsible for, with no valid cause.
Open doors, engage and attract people, work towards solutions, not bureaucracy.
36. Learn to successfully work from home
Take actions to ensure a good experience when you work from home.
For example, set a quiet work space, invest in an ergonomic chair (you do spend a third of your day there), do not over-work (set strict office hours), take breaks, and go outside.
37. Build a cheat sheet
A “cheat sheet” is a set of notes used for quick reference.
A well organized “cheat sheet” of abbreviations, commands, and other helpers, can significantly improve your productivity.
And use [alias](https://shapeshed.com/unix-alias/) whenever you see fit.
38. Be aware of your weaknesses
No one is good at everything. Be aware of your weaknesses so you can ask for help and improve (no need to become an expert).
If it takes you more time to do a task, others can do it much better, or you simply procrastinate every time, you should self-evaluate and work on addressing it.
39. Choose the right technology (even if it is uncomfortable)
Resist the temptation of always using a technology you are most comfortable to solve any needs.
Each project is different, and some may require you to go into new exploratory paths. Embrace this.
40. Self-prioritize tasks
Have a to-do list, know the deadlines, know which ones are most important.
By self organizing your tasks on a daily basis, you can reduce stress and improve your productivity.
41. Challenge your current skills
Always “Is there a better way?” mindset. What you learned and what you apply should always be challenged.
You may be very familiar with a library/framework, but that doesn’t mean it will always be like that.
42. Deploy more often
Advantages in deploying and delivering more often include quicker client feedback, less likelihood of breaking changes, and more assurances on the continuous delivery pipelines.
43. Discover how to learn
Everyone is different. Some prefer books, some video tutorials, some hands-on code, and some prefer events and conferences.
Discover what works and doesn’t work for you and invest in it.
44. Be humble
No matter what title or role or responsibility you hold, be humble.
45. Recognize people
Positive reinforcement is a great way to build trust and improve morale.
Celebrate each win, give credit when someone does great work, and make them feel accomplished.
46. Clean up your source code branches
Reduce maintenance (and confusion) by deleting merged branches and/or deprecated ones.
It helps new developers onboard and, with good naming conventions, improves efficiency.
47. Write useful comments in source code
The code itself only tells you what is there, not why it is there.
Be conscious when writing comments (a bad comment is worse than none), but when you can further explain the intent,
clarify details or inform of potential side effects, do so in the form of code comments.
48. Learn from your failures
We all have stories of failures. The trick is not to overthink them but to turn them around in learning experiences.
What will we do differently next time? Self-reflect on your past failures to be better prepared for future challenges.
49. Name variables and functions appropriately
The hardest job in software development sometimes seems to be naming.
Take an extra second when naming; the overall quality of the code will improve drastically when variables and functions names are accurate to their purpose.
50. Keep an open mind
Be open-minded about the possibility of learning new skills, about different approaches to solve problems, about different philosophies and ideas.
Evolution and creativity come out of open-minded people that embrace new ideas and different points of view.
51. Manage meetings with care
It’s important not to be overwhelmed with meetings. If a meeting can be replaced by a notification (Slack/Mattermost) or email, do not have it.
And keep control of the time, they are easy to drag and side-track.
52. Invest in your CV and portfolio
Always have an up-to-date CV, invest in your portfolio (ex: your open-source account) and accomplishments (ex: LinkedIn).
This can open new unforeseen opportunities that bring you to new heights.
53. Learn to delegate
Delegating is the act of assigning a specific to a person or group of people. Learn your limits, how to delegate and when to delegate.
Effective delegation can boost productivity, improve overall motivation and share knowledge.
54. Learn other areas basics
Become a more well-rounded programmer by learning the basics about areas such as sales, marketing, design, operations and others.
55. But don’t try to learn everything in depth
But be aware that trying to know everything can drain your mind.
Get a high-level idea on most subjects and cherry-pick a small set you want to master.
Be conscious on what topics to learn and what topics to leave behind.
56. Take time to build a plan
When receiving a new task, allocate time to research on potential approaches or solutions.
Discuss them with experts beforehand, and only start development when you are convinced you have the right plan.
57. Honor your word
Honor your word and commitments. Word is important and, if you agree to do something, honor your commitment.
If you can no longer make the deadline, speak up early.
58. Be audacious
A bit of boldness can make you an even greater developer.
If you think you can apply an original, creative solution to a problem, do not hesitate.
59. Do (physical) exercise
The job requires sitting most of the time. And this will have severe effects on the body.
Physical exercise will help with mind-body balance.
60. Test test test
Tests are essential to guarantee a good delivery of software.
From unit tests to regression tests, integration tests, end-to-end tests.
Test your code, run them automatically on CI, and your product will be much more stable.
61. Be an optimist
Some people are optimistic by nature, others pessimistic.
There are days when you lose faith and problems are all you see, and others when you feel good energy towards your and your team’s success.
Positive thinking doesn’t mean that you ignore problems. You just approach hardship in a more productive and healthy way.
62. Surround yourself with friends and family
Surround yourself with people who improve you and encourage you to keep going.
You spend a high percentage of your day working, do it with people you trust and have your back.
63. Take responsibility for your mistakes
We all make mistakes. Taking responsibility and ownership of them is essential.
It keeps little problems from turning into big ones, allows you to learn from them, provides you respect from the team, and strengthens relationships.
64. Break things
How else will you know things will work if you don’t try to break them?
Test how your system reacts when a service or component is down.
65. KISS — Keep it (stupid) simple
The KISS principle states that most systems work best if they are kept simple rather than made complicated.
Aim for readability, elegance and simplicity. Less is more.
66. Be a mentor to others
Be someone others can learn from and discuss ideas with. Listen and provide your own experiences and thoughts.
67. Get feedback early
Your task doesn’t need to be completed for you to ask for feedback.
If you have doubts, are uncertain of the direction, ask a colleague to review the validity of your solution before you deliver it.
68. Share your knowledge
Your knowledge should not stay with you. Present it internally, at a local meet-up or conference.
Discuss ideas with your co-workers during lunch. Sharing your knowledge reinforces not only your expertise, but it also helps others.
69. Find inspiration
Find a few people in your company (and industry) that you admire.
Learn and get inspired by them, absorb their ideas, and apply them.
70. Apply modular code
Writing all your code in a scripted way (in a single long file) is not maintainable.
Module your code into logical divisions, making it easier to understand, test, and scale.
71. Be a friend
Be supportive, be a friend for technical and non-technical problems.
A work colleague does not necessarily need to be a friend, but empathy and compassion are values everyone should have.
72. Clarify requirements before starting a task
Understand the acceptance criteria before writing any code. It will save you time and effort.
73. Be proud of your work
Regardless of how much experience you have or what your job title is, your work has value. Give it the value it deserves.
74. Adopt code reviews
Having someone read and analyze your code can offer you invaluable feedback, which will make you a better programmer.
You should also work on your ability to conduct a good code review.
75. Provide honest feedback
Provide honest and focused feedback to your colleagues.
76. Review your own code
Before opening a pull request, review your own code.
A simple re-read of your pull request can find unwanted changes and will avoid your reviewers to lose time flagging these issues.
77. Find an expertise
Identify one area you want to master and be the expert/reference in your company.
With so many different domains, choose one area that motivates you, bringing value and opportunities.
78. Ensure you have enough sleep
This might seem too obvious, but sleep can have a huge effect on the quality of your work and code.
Coffee can somehow help, but never underestimate the power of a good night’s sleep.
79. Write documentation / playbooks / wiki
Writing good documentation helps yourself to grasp and reflect on your code.
It also helps others (and even your 2 year older self) understand it.
Learning how to write good, comprehensive, well structured and readable documentation is a skill worth investing.
80. Master search engines (like Google)
A big chunk of software development is to find answers online.
Almost always, someone has had the exact same issue you are facing and already found a solution.
Mastering how to search (Google, Stack Overflow, GitHub) can boost your productivity.
81. Get outside of your comfort zone
Take tasks that you know nothing about. Embrace tasks that scare you.
You may take a little longer, but the learning you get from it will make you a better developer.
82. Take performance into account
Performance is a huge deal in software development.
When choosing a new technology or making a change, always consider the impact on performance your change is creating.
If you have to benchmark, don’t hesitate to do so.
83. Speak up in meetings
Your ideas and opinions are as valuable as anyone else’s. Speak up in meetings and group discussions.
Prepare yourself beforehand and raise your concerns.
84. Learn how to read source code
It’s one of the best ways to learn. By seeing how other developers developed, you will become a better developer.
85. Be a solutions architect
Design and architect your applications and services before you start to code.
Even by sketching them in a piece of paper, it will help you identify early design flaws.
86. Learn how to pseudocode
Pseudo coding allows you to think through complex problems without wasting time writing lines of code.
Write an approach down on paper, run through different test cases, and see where the pitfalls are.
87. Don’t compare yourself to others
Comparison puts focus on the wrong person. And often, people underestimate their own skills and overestimate those of others.
Software development is team work. It’s ok to find guidance in others, but it’s not fair to compare; everyone is different.
88. Get yourself a mentor
Find someone you can learn from and discuss ideas. Do it with someone you consider smarter than you.
Absorb the knowledge and experience.
89. Learn how to write effective emails
A few hints, write a meaningful subject line, keep the message focused and concise. Be kind.
A well-written email can make you a more effective communicator.
90. Pay attention to detail
There’s no need to be a perfectionist, but paying attention to detail can avoid many problems in the long-term.
From spelling mistakes, to code nuances, exception handling, details can have a significant impact on a project.
91. Invest in a comprehensive README file
Explaining the motivation, scope, pre-requisites, how to compile and run, are important things for understanding a new repository and allowing new contributions to it.
92. Embrace constructive criticism
Not everyone needs to agree with you. And your perception is not necessarily the same as others.
Ask for constructive criticism. It will help you grow.
93. Work on personal projects
Sometimes it may be hard to find the time, but investing in personal projects helps you keep motivation, reinvigorates your love of programming, and allows you to try new technologies you might not have access to at work.
94. Take care of your eyes
We cannot escape looking at screens during a full day of work, hence the importance to take extra care of our eyes.
Tips like blinking, adjusting the brightness and surrounding light, healthy diet, 20/20/20 rule (each 20 min, look for 20 seconds, 20 meters far) can help you.
95. Develop good habits
Try to build consistent and healthy habits such as removing distractions, time-boxing tasks, and starting with the most important task first.
It might take a while getting used to, but it will be worth it in the long-run.
96. Learn how to give a great presentation
Learn how to captivate your audience and give effective presentations.
97. Learn about the market
Check what technologies companies are looking for and be aware of your market value.
Check the market and jobs you believe you don’t meet requirements and take chances in doing a technical test.
You have nothing to lose, and you will learn from these experiences.
98. Choose quality over quantity
One finished project is better than 2 unfinished projects.
Deep knowledge in 1 language is better than basic knowledge in several languages.
A good short API document is better than a long confusing one.
Between quality and quantity, always go for quality.
99. Write code for accessibility
Everyone should be able to use your products and services. It is not ethical to ship code that is not accessible by all.
100. Don’t deploy on Fridays
Fridays are just about the worst possible day to deploy, for a simple reason: if anything goes wrong, you only have half a work day to fix it. And no one wants to work on weekends because of unseen issues.
101. Don’t give up
It won’t always be easy. Sometimes you will be blocked and sometimes demotivated.
Don’t lose hope, remember why you became a software developer and think about the incredible impact you can have in society.
That’s all folks! Hope you enjoyed the read and that these tips can help you in the future.
Nelson Costa works as a Software Developer for tb.lx in Lisbon, Portugal.