Introduction
Hello everyone, After several years of working, through my self-learning journey to grow, collaborating with other colleagues, managing external projects and company projects, and mentoring juniors, I've noticed many mistakes that I and newcomers make during work or when learning something new. Let's dive into some of those in this piece. Hopefully, it offers some insights! 😄
I'll detail some common challenges I've noticed that both I and many others often face. This list might not follow a specific order, so just go with the flow and enjoy the read! 😄
Time-Wasting Pitfalls
Seeking the Perfect Code Structure
Whenever I kick off a new project, a common concern is, "How should I architect this so it's robust, scalable, and won't need significant changes even after five years?" 🚀🚀
That was my approach when I first started coding. Now, I realize it's an incredibly time-consuming endeavor without tangible benefits. I'd find myself overhauling projects that were functioning just fine because I'd stumble upon a different structure in an article and feel compelled to switch.
Here are some reasons I believe we fall into this trap:
- When using a framework (like Laravel, Angular, NestJS, etc.), the architecture it provides is usually pretty decent and commonly accepted. Just inherit it and tweak as necessary in the development process.
- Code structure can be like food preferences. What's delicious to one person might not appeal to another. The way someone structures their code in another company or project, based on their understanding and preferences, might not be right for yours. It's why we often feel like the grass is greener elsewhere and keep redoing things. 😄
- Overcomplicating the architecture for small projects by mimicking large app structures is a common mistake. 😃
While good architecture can make a project cleaner, more understandable, and maintainable, it's essential to remember that projects evolve. Depending on the current state of the project, adapt accordingly. Otherwise, in a week or two, that "robust" architecture will crumble, and the next developer might just wonder, "WTF, who structured this project?" 🤣🤣
Whenever someone asks me about this topic, I often share this React JS quote:
Don’t spend more than five minutes on choosing a file structure
Inefficient Web Searching
As developers, nearly 90% of our knowledge comes from the internet (Google, YouTube, StackOverflow, Medium...). Therefore, searching the web effectively is crucial for tasks like fixing bugs or learning about new tech.
I often get pretty basic questions from juniors, like, "How do map and foreach differ in JS? How to exclude certain fields in a MongoDB query? How to install Node.js version 14?". My immediate reaction is, "Have you tried Googling it?". I'd then provide them with keywords, and 15 minutes later, they'd claim they found nothing. Yet, when I search, there are tons of results. 😃
Knowing how to search Google effectively helps you find answers faster and reduces reliance on others. Here's a hint: prepend your query with the language or framework you're using, like:
javascript difference between array map and foreach
typescript optional chaining
React how to call API on component mounted
docker how to expose a service to localhost
...
Practicing this daily will make you more autonomous, save time, and reduce dependency on others.
The advent of chatbots like ChatGPT has made research easier. However, be wary of AI responses as they're not always accurate. I'll delve into this topic in another article.
Less Code, More Distractions
Before, I often found myself with limited code and looming deadlines. Yet, I would spend hours figuring out how to implement eslint, prettier, and various standards for JS/TS/SCSS. I pondered whether I should install stylelint for CSS linting, set up Github Action for optimal auto deployment, and design the perfect PR template, and so on...
But sometimes, these tasks can be time-consuming and make me lose sight of my primary responsibilities. Moreover, these are just "nice-to-have" enhancements, not absolute necessities.
If you have spare time, feel free to explore these. But don’t dive too deep into them, especially with a tight deadline approaching. 😊
Getting Lost in Code
In the past, I'd get engrossed when working on a feature. Sometimes, I’d stumble upon a module and complicate it just for the sake of making it look sophisticated. I'd pour countless hours into tweaking it, even if it wasn't necessary, while several other modules awaited attention. As a result, I always felt chased by deadlines.
Not being conscious of work progress leads to distractions. Often, I'd only realize how off-track I was when a colleague inquired about my progress. But by then, I'd be too invested to backtrack. So, I'd usually commit to burning the midnight oil, hoping to finish it. 😃
Over time, I improved. Now, as a mentor, when I notice my juniors straying, I guide them back on track. I'm a pragmatist; regardless of how beautifully you craft a function, if the entire program doesn't run, it's as if the result is zero.
Even now, I sometimes lose focus. But the moment I realize I'm wandering too much, I quickly realign and concentrate on my main tasks.
Fixating on a Bug with a Whole Project to Handle
During app development, I occasionally encounter bugs that initially baffle me, especially on the frontend. Questions like, "Why isn't the state re-rendering even after a change? I’ve used useState. Why is Redux reporting a direct state modification somewhere I can't pinpoint?" arise.
Sometimes, I'd spend an entire day debugging, using console.log, and lamenting why the code wasn't running, forgetting the mountain of tasks pending. 😢😢
Of course, I acknowledge we can't always jump from one task to another. But on retrospection, if the current bug seems tricky and other tasks can be tackled, I'd prefer to switch rather than get bogged down, which often delays progress.
Interestingly, moving to a different task sometimes clears my mind. Returning later, I might find a simple solution, thinking, "What was I doing all day yesterday?" A tangled mind only gets messier with further entanglement. 🤣🤣
Carelessness
At times, intensive coding or repeated bugs fog my mind, leading to negligence. This results in countless unnecessary errors and time wasted on trivialities.
For instance, I'd wonder why a React useEffect isn't executing, only to realize I missed a dependency. Or I’d misdefine a type in GraphQL and be puzzled by the error, or miss an exclamation mark in an "if" check for the opposite condition. Or not awaiting a Promise and then wondering where the value went.
Such careless mistakes have consumed so much of my time. I'd sometimes consult others, and while waiting for their review, they'd instantly spot the error, leaving me thinking, "What was I even thinking?" 😁😁
Reviewing PRs from others, I often encounter this. Sometimes it's a bit disheartening, but it also reminds me of my early days. 🥰🥰
Things I Don't Like
Below are some things I've noticed and felt about many developers.
Feeling Left Behind
Ever joined a new project and been handed the source code with instructions to follow the README? Then you dive into the setup only to find a super long file. You attempt to set it up, but there's no docker. Next, you grapple with mysql, then redis, then elastic, and so on. Two days later, it's still not working. On the third day, when you finally get it running, you're informed you need to set up OAuth for account verification. It leaves you feeling helpless and lost.
This is likely the sentiment of many who join a new company or project. Sometimes, our mentors are too busy to guide us consistently, or maybe there are days we're just too shy to ask questions. This feeling often leads to confusion and isolation, especially for newcomers. It can lead to discouragement and even quitting the job or internship because of lost hope.
Now, when mentoring newcomers, I spend as much time as possible closely guiding them, thoroughly explaining new tasks or addressing their common questions. Many have expressed their appreciation for my detailed guidance, saying it makes them more comfortable asking questions.
I hope mentors and team leaders always provide guidance and support to their team members. Yes, newcomers should be proactive in seeking answers, but they're often unsure and hesitate to approach everyone in the company with questions.
Reading Code from "Superhero" Predecessors
One thing that annoys me is reading code from "superhero" predecessors – code so perplexing it makes me want to log out of this world.
I understand everyone wants to express themselves, and developers are no different. Sometimes it feels like the previous coder wanted to show off through convoluted, complex code that confuses the entire team.
For instance, instead of a clear if/else structure like:
function example(…) {
if (condition1) { return value1; }
else if (condition2) { return value2; }
else if (condition3) { return value3; }
else { return value4; }
}
They write:
function example(…) {
return condition1 ? value1 : condition2 ? value2 : condition3 ? value3 : value4;
}
When each condition is already complex! Some argue the first style looks shorter 🙃
I've also been frustrated reading some recursive functions with barely any comments, or segments that process URLs/strings using overwhelmingly complex Regex. Or maybe there's a "scalable" module, and you have to navigate through dozens of files just to trace the origin of a console.log... 😂
To me, good code is something that the next person can easily understand, rather than making them think, "Should I try to understand this, or just start over?" I prefer longer, clearer code over saving a few lines with incomprehensible logic. When reviewing such pull requests, I admit I'm a bit stricter than usual 😁😁
Don't assume others will always understand your code. If you feel it might be confusing to others, it probably is.
Hesitation to Speak Up
Newcomers to a company often hesitate to ask colleagues for help, preferring to struggle alone. Only when everything's falling apart do they seek assistance, which can negatively impact the work and others' perceptions of them.
I've been there. When I was new, I felt lost amidst strangers. Wanting to ask a mentor or leader but seeing they're busy, or fearing repetitive questions might make me appear less competent.
There were times when I noticed issues with a product but thought it wasn't a big deal, expecting the leader to address it. But when issues arose and I said, "I noticed that earlier," only to be asked, "Why didn't you tell everyone?" I could only smile in response 😃
Now, as a mentor, I often see the same hesitations in others. I believe mentors and leaders are always ready to help. It's their responsibility to guide you, and they're usually eager to do so. Sure, at first glance, they might not seem the friendliest, but just start the conversation. Everyone appreciates a thirst for knowledge 😉.
Focusing Only on Frameworks/Libraries and Forgetting the Basics
Nowadays, most of us in the workplace primarily work with popular libraries and frameworks because they come with ready-to-use functionalities, making product development faster. Just like me, many dive into Vue, React, Angular, NestJS, Laravel, and so on.
But a concerning trend I've noticed is that many newcomers (including students) jump into using frameworks without a strong foundation in the basics. When they actually start working on real-world projects, they get disheartened due to difficulties, especially when troubleshooting bugs.
I've seen individuals who barely grasp HTML diving straight into React, leading to very basic questions. Or some developers, who claim 1-2 years of web experience on their resumes, struggle with basic CSS, such as class or ID selectors.
So, my message to everyone is this: regardless of the framework or library, remember that they are built upon basic concepts. Having a strong grasp of these fundamentals is crucial for truly understanding what you're working on. 🤗🤗
Hesitation in Trying New Technologies
After spending some time coding in a specific technology, naturally, we become more confident and proficient with it. Often, for new projects, we tend to stick to familiar tools to speed up development. Hence, when suggested to explore or switch to a new technology, some hesitate, feeling apprehensive, and sometimes even declining the shift with reasons like, "I'm so used to the old one, why change now?" 😄
I've spoken with some developers who, when asked to switch from React to Angular, said, "I just want to focus on React, I want to master it to the fullest". It's a valid sentiment, but what if in a few years Angular outshines React? Aren't you missing out, especially when Vue, React, and Angular all cater to frontend development? 😉
Don't let yourself be tied down by one technology; instead, aim to master them. 😁
Whatever technology you choose, seize every opportunity to experience and learn. Always stay flexible, ready for innovation. Particularly in IT, where new technologies emerge rapidly. Be brave and embrace the new. 😉
Lacking Initiative and Over-asking
Sometimes, especially when you're new or inexperienced, there's a fear of making mistakes. So, you might double-check everything by asking questions. But you shouldn’t ask about everything.
There have been instances when after providing a new project, I'd tell them to refer to the Readme and come to me if there are queries. Yet, every step leads to a flurry of questions like:
- "Is this display correct? How do I fix this? Is this the successful output?"
- "Why is the TypeScript syntax like this?" (Was I the one who invented it?)
- "Where do I download Docker or VSCode? Can you send me a link?" (🙃)
If a few individuals bombard me with such questions every day, it gets overwhelming. And it's not just me; many of my colleagues experience this too.
You might wonder, "Didn't you just encourage asking questions earlier?" 🧐🧐🧐
My point is, if something can be easily found on Google, look it up first. Sometimes, searching online is faster than waiting for a reply. I even end up searching Google to answer some of the questions I receive. 😢😢 Many juniors mistakenly think I'm an all-knowing entity. In reality, when I don't know something, I often research it online. Being proactive in seeking answers can boost your independence and confidence. After all, in this age, if you have Google or ChatGPT, you're pretty much set. 😄 😄
So, before asking about something, think, "Can I find this online?" 😉
In Conclusion
I've been blogging and writing for quite a while now, mainly aiming to help beginners and junior developers enhance their skills and knowledge. Through my articles, I hope you can overcome challenges I faced and continue to face.
Back when I started coding, I didn't have many mentors, which meant a lot of trial and error. Now, with tools like Google and ChatGPT at your disposal, take initiative!
Thank you for reading, and I look forward to connecting with you in future articles

0 Comments