A Junior Dev Can Forget How Terrific He is. Here’s How to Regain Confidence
• 11 min readThis article is quite old (it was published 4 years ago). Its content might be outdated and not representing the current state of the industry or my view on it.
Being a software developer is not easy, especially during the first work experience. The gap between what has been seen during university and the real world can be overwhelming. The junior may have doubts about his competences, which is terrible. This is something I went through. It happened the day I realized how much I didn’t know.
Programming is “easy”, but doing it cleanly and understandably isn’t. Producing a clean code is insufficient. You should do it swiftly. Besides, a developer should write code consistently. A story point always equals a story point.
Also, the code should be tested. The enormous codebase must be maintained to ensure quality. This is stressful for someone new.
Programming is Terrible
Being a developer is not an easy task requiring no concentration. Nothing works on the first try, and it requires time and energy to output great code. It’s a meticulous work where the devil lies in the details. Understanding how the program work and finding the suitable solution takes time.
Being a developer is not as simple as picking a story in a product backlog, implementing it, pushing the code, and deploying the changes on production. A developer must understand the need of the customer. He must grasp why the feature is critical. This requires discussion to find the best and most suitable solution.
Being a developer doesn’t mean you can quickly fix something. Sometimes a bug fix can produce a ton of side effects that were not anticipated. A quick repair could break a whole part of a project. In the best-case scenario, the code is tested, and the problem is detected early. But let’s be honest, the code you quickly change is the one that isn’t tested. This results in bugs deployed in production and (rightfully) unhappy customers.
Programming is Awesome
Programming is a rewarding experience. It’s fantastic the see the work you dedicated time and energy presented to customers. It’s nice to see that what you did is daily used by your users.
Programming where the pipeline is working like a charm is motivating. It’s nice to see the product backlog getting smaller and smaller as the sprint progress. It’s exciting to receive a mail that informs you that your merge request has been accepted.
Programming is hugely satisfying. It’s a mental game between you and the codebase. You must find the most elegant way to do something. You must make sure that the person reviewing your code will be happy to read your work. When programming, you experience moments where it just clicks. Something that seems impossible the day before is done in three lines the next day.
Programming is an amazing experience. You meet many people coming from different industries. You have the opportunity to sharpen your technical expertise and understand how your customers work. You help your clients to define their problems, and you build the adapted solution.
Programming is Scary
There are good and bad in programming. Sadly, at times the bad can outweigh the good and makes the developer doubt. That’s what happened to me during my first job. The size of the codebase and the quantity of new stuff to learn made me feel helpless.
On top of that, I read an article of a developer explaining that the good old days of a simple LAMP stack are long gone. He explained how his workflow evolved from four to more than 10 layers. Sadly, I cannot find this article anymore, but I remember how I felt after reading it.
The imbrication of sophisticated tools frightens me. The complexity of the projects seemed so high that I felt unable to understand how to implement basic elements.
To make the matter worse, many questions came to my mind. How can a company ensure that the guy responsible for the obscure ORM used will still be there when needed? How is it possible to know which framework is best suited for the project? How can we ensure that the choices made are rational and not based on developer preference? What is mature and production-ready technology?
The Valley of Despair is Real
You get the point, I was scared and felt powerless. Many people have been to this place, I call this the “valley of despair”. It’s those times where the amount of effort required to do something is discouraging. Like students at the beginning of a thesis or developers debugging an unknown project. It’s time where a feature seems too big even when it has been divided into bite-size chunks.
In simple terms, it’s when you realize the amount of work required to finish something. This can be compared to the Dunning-Kruger effect.
This principle explains why people with little knowledge overestimate their ability. This also explains why competent people might struggle in the “valley of despair”.
Let’s put it this way. At the beginning of the curve, you ignore what you don’t know. That’s where you tend to overestimate your capabilities. Once you start getting better, you realize how wrong you are. You begin to see how much work is still required to become a master. Finally, as you progress, you know what’s unknown, but it’s not scary anymore, you’ll eventually get there.
When the fall Began
I remember being in school learning web development and thinking that the projects we did were great. That I knew how to develop.
How wrong I was. The projects we did were a simple NodeJS app that contained less than 20 routes and connected to one web service (maybe) and one simple database. Don’t get me wrong it’s normal to start small. Programming cannot be learned overnight. At the time, I didn’t know what React, Vue, or Server-Side Rendering was.
In a nutshell: I didn’t know what I didn’t know.
The disillusionment fall apart when I began to look for a job. Every job offer required some knowledge of a framework such as React, Angular, or Vue. None of which I had a clue about.
My first reaction was to deny what I saw. I was still convinced that the projects I built were terrific. It took me a while to realize that maybe I was wrong. Soon after, the anger came, I was angry at my school that didn’t push us to try new technologies. I was also mad at myself because I chose the easy path, I didn’t try new technology. Once the anger faded away, I faced despair, I was sure that I was unemployable and that no recruiter would want to hire me.
The goal is not to detail every emotion I went through. The process might be similar, on a lighter note, to what relatives experience when a death occurs. In my case, I lost my confidence.
Fortunately, everything ended well for me, I found a job where I had the opportunity to learn React, VueJS, Django, and many other technologies. Working on different projects made me realize how much care is required to build great programs. The size of the projects done in school was too small to understand that. Since, I have been grateful to the developers providing the tools I use daily.
The nail in the coffin
This understanding came with a catch tho. On the one hand, I was happy to see the effort put into apps. But on the other, it made me realize how much knowledge I still had to accumulate. The title of “senior developer” seemed unreachable at the time. That’s when I hit the valley of despair. I asked myself, “Am I ready to make all those efforts, or should I give up?“. I answered “no” several times.
That’s where my work “saved” me. Since I was hired as a software developer, my boss expected me to output some code. So that’s what I did. Without knowing, it just started getting more comfortable. I began to find things in seconds, where it would have taken me minutes the week before. I felt comfortable in the projects. Without making any effort, I started to (slowly) climb my way up of the valley of despair.
I know this might be because I had to take some time to understand the technology and to find where things are. You’re right, this played a role in the process.
But that’s not the only reason.
What helped me most were my coworkers. I had the best support I could ask for since day one. They “understood” my freshness and never pushed me too hard. They helped me when debugging, with comments on my merge request, took time to explain how things work… Most important: they made sure things were clear on my side.
This support was a tremendous confidence and motivation boost. It was vital for me to have help. It allowed me to begin my ascension.
I know the road is still quite long, but it doesn’t bother me anymore. I may be stuck again, but I know how to overcome the problem.
What to do if Support is Lacking?
I had many chances, obviously. Sadly, not everybody might have this kind of support. So how to address this situation?
There are different solutions you could try. Some might appeal to you; others won’t. This is normal. Go for the one that feels right for you.
My first recommendation would be to reach for a friend. He doesn’t have to have a development background, but it can be helpful. That’s why reaching for an old classmate is better. Both of you share roughly the same path. They can understand you.
I remember once, a freelancer developer told me that it feels great to speak to someone other than a client. Connecting with someone that speaks the same language as me is such a relief.
Let’s say all your classmates are unreachable. There are still other solutions! Since I’m a massive fan of Reddit, my second recommendation would be to go there. You’ll undoubtedly find what you are looking for. If it’s a laugh head to /r_programminghumour. If you’re looking for advice or support, /r_programming is probably the best. Lastly, for help on a specific technology (and if you don’t have a StackOverFlow account), you can go on the subreddit of the technology you are using.
If Reddit is not your jam, there are slacks and discords dedicated to programming. Sometimes they are tied to an online course, and only the person who took part can access it. Hopefully, they are not the only servers that exist. A quick google search leads me to awesome community https://dev.to/htnguy/top-10-discord-servers-for-developers-559o. You’ll definitely find support there! Keep in mind that some of those servers are technology-oriented. It would be odd to speak about your fear of redux on a discord full of JavaEE developers!
One last option is mentors. That’s not something I use, it’s hard for me to recommend it. Nevertheless, it’s a great resource if you are stuck. It’s a paid service, but speaking with someone who is experienced might motivate you. I’m not sure if they offer “motivational” sessions, but don’t be afraid to ask! A one-to-one session with someone could be all you need to overcome your issues.
Here are four methods that can help you go back on tracks. I will add one last point, which is less personal but might help: articles. There are many resources online for developers sharing their experiences. These pieces can be the spark that motivates you.
Finally, all the methods presented are useless if you don’t want to improve. You are the one responsible. You are the one that can climb the valley of despair. This doesn’t mean you’re alone. It means that as long as you don’t want to move, you won’t.
You’re like a car at the bottom of a slope, you have to create the required momentum to climb the hill. Your friends are here at the beginning to push you, but you have to start your engine to reach the top.
Reflection and Gratefulness
This article made me reflect on myself. I realized that I’m far from a seasoned developer. I still have a lot to learn. However, I’ve become aware of the progress I made. In fact, I’m at the top of my game right now, so are you.
It’s easy to forget the progress made. You must stop and take the time to do some introspection. That’s not something I’m used to doing. Yet, this was a pleasant experience, and I’m grateful to everybody that helped me become a better developer.
That’s why I would recommend you take the time to reflect on yourself. Think about all the processes made since your first program. Review the code you wrote in university and see what can be improved. Take the time to appreciate what you have done and what remains to be done. Being grateful is important.
It doesn’t matter if you built a simple NodeJS server or a piece of code embedded into a rocket. Be grateful for everything you’ve done so far.
What if development is not for you?
One last point, you might realize that you’re not doing something you enjoy. Maybe development is not for you, perhaps your company is not supporting you as much as you’d like. This is OK.
You should not pressure yourself to do something you dislike. Life is too short for those troubles. The decision that will follow will be a hard one. If you feel the urge to change elements of your life, go for it! Listen to yourself and what your inner self tells you to do.
Follow your path, you’ll become happier.