9 important lessons I learned as a developer for 7 years
I'm working as a software developer for 7 years. You can read my background and how I got into the industry here. There are a few things I wish I learned earlier. Knowing these in advance would have made my job a lot easier. Some of this might sound pretty obvious, but not for me. If you're in the early stages of your career, doing a few of this will make you stand out.
1. We need to find the right place to work for
The company and the people you work for makes a huge impact on whether you love or hate your job. Not all companies are created and working equally. What worked for someone else might become your nightmare. How to find the right place for you? Experiment.
Switch between different places and switch early. Don't wait until the ship sinks and you might end up in worse conditions.
In most places, the only way to get a raise or a promotion you deserve is to switch to a different company. Hiring managers are saying that too many switches make your resume look bad. In my not so humble opinion, this is a bullshit metric. Entry-level employees are often treated poorly. It is hard to stay in one place for a long time. Stability matters if you're hiring for senior or leadership roles. But please stop looking for stability in entry-level applicants. Start treating them better and they won't have to switch a lot.
In my first 4 years, I switched 3 companies. The current place I work for is my 4th one and I am here for 3 years. Start experimenting early in your career. Ask around about the place you're considering to join. Take interviews with different companies and select the right one for you. Ageism plays a big role in our industry. As you get older the places you can even get an interview will reduce. Take your chances when you're in the early stage.
2. Tech skills are only part of the equation
I thought being technically competent and doing the hard work will make me shine. I was wrong. Tech skills are only part of the equation. It doesn't matter how great an engineer you're. If you're one of the types that do the work heads-down, You'll have a hard time getting the things you deserve.
You need some showmanship to get better results from tech skills. You can practice and improve showmanship by doing these,
- Talk to people in different teams/projects and help them.
- Be curious to learn how the business works and how all the teams work together to produce something.
- Write blog posts and share them with peers in your organization.
- Become the goto person for help on a particular technology
- Contribute to open source and share it among your peers
- Attend/Speak at conferences.
Doing the above will increase your visibility in an organization. Being visible matters a lot.
3. Titles matter
Titles are a complex topic. I was upset a few times when my peers were promoted and I wasn't. Once I got promoted, it felt the same as before. A title won't make much difference in what you want to do. For my job satisfaction and motivation, titles don't matter much anymore. But title plays an important role in a few areas,
- Your title decides which room you can get in and which you can't. When deciding important things, people inside the room can influence it. They also have the advantage of insider information.
- Titles give you credibility within and outside of your organization. People will take you seriously if you have a better title.
- In some places, they have a salary cap for a title. It is problematic when negotiating for your next raise without a promotion.
This is another important thing that goes hand in hand with technical skills. The modern workplace is a complex environment dealing with complex problems. We need better communication skills than ever before. Speaking fluent English is not the equivalent of communicating well. Non-native speakers I know have this fallacy. It is possible to speak English well and to be a poor communicator. Communication is more about
- Asking the right questions
- Collecting your thoughts and expressing them well
- Writing well
People who excel at both tech skills and communication skills will thrive.
This is one of my weakest areas. Having good connections will open a lot of doors for you. If you're looking for a job or a new member for your team, being part of a developer network in your area makes it easier.
You can find people easier than traditional hiring methods. Online communities such as Twitter, Discord servers, Whatsapp groups are great too. I found a few great teammates through a Whatsapp group. It can do wonders for you when you connect with the right people.
6. Negotiating skills are important
For developers, this can be a great skill to practice and improve. Negotiation skills are useful in situations other than salary negotiations. There are a lot of negotiations in everyday life that we may not realize.
- Negotiating for more resources with the project manager.
- Negotiating for more time for a feature with the client.
- Negotiating with your colleague about the current implementation of a feature.
Psst: I wrote about salary negotiation tips for developers before.
7. Code is not the only solution
In the beginning, I was so proud of the code I wrote. I got upset if the business wanted any drastic changes or removed something I already wrote. I thought code is an asset and placed high value on it. How naive? Your code doesn't have any value on its own. It must give some tangible benefit to someone in order to be valuable.
As I get into senior roles and understood the whole software business, code is likely a liability. The more code we have the more effort, time, and money is required to maintain it. There can be better solutions to a problem than code. Think of solving the problem in a different way before reaching out for code. As Abraham Maslow said,
I suppose it is tempting, if the only tool you have is a hammer, to treat everything as if it were a nail.
Being a developer can lead us to think of problems only within the context of programming. But we should always try to think outside of our strengths.
8. Aligning to the business needs
Your code is useless the minute it stops solving a business need. I used to argue for not doing a feature due to some technical limitations. But as developers, we must find a way to make it work. The code is there to support the business. We must align with business needs than our technical constraints.
There are some important technical decisions that can make or break the business and you must take a stance there. But In most cases, business requirements should take precedence over everything else.
Technical debt is trickier to reason in this way. The business people can't understand how technical debt is accumulating and about paying it off. Developers are in a better place to decide about paying off tech-debt. Understand the needs and targets of the business, advocate what's best for the business. There can be times where you must stop adding new features and address the tech-debt. You need to recommend and fight for it to happen.
9. Watch your users
You can go through numerous user experience theories or you can learn by watching your users working. If you're lucky enough to see users in-person, great. Otherwise, there are sophisticated monitoring tools such as Fullstory that gives you similar insights.
Once you learned about your users, use that knowledge to improve your application. You can influence design decisions, Improve performance and usability. In most cases, the users will always try to use your software differently than you imagined. Having this knowledge will definitely make you stand out from the rest.
Despite many of the hardships in this job, I'm really thankful for the tech industry. There were not a lot of industries I can get in without any formal education and skills. I don't know what I would be doing if I didn't get the first unpaid internship. It is one hell of a year for me as I'm exploring different areas such as writing, building apps seriously than before. Looking forward to the upcoming years and new challenges.