The unspoken curve
Tags: webdev, beginners
Published: 2022-09-14 13:43:36

It's ok to learn, it's OK to ask for help, and most importantly, it's ok to fail. These things are the foundation of any progress.

Here are the 4 elements that will eventually turn anyone into a great developer.

## Research
This is the first step that any developer will have to face. Our job is ever-changing, new frameworks/libraries are released every day, and you have to be able to dig into the documentation/patch notes/whatever just to get a better understanding of what you're doing.

Some common mistakes are to immediately ask for help. Instead, ask yourself these simple questions: "What am I trying to do here? Do I know something that works similarly? What does this term mean?"

Even after a decade of working on web projects, we still stumble upon new concepts, and it always comes down to the very first rule of software development: RTFM.

### Tips and tricks
First of all, a lot has changed since I started using [daily.dev](https://daily.dev/) as my browser default page. Every day, you discover new concepts or updates on great products.

You can also use [Github Trending](https://github.com/trending) to discover the latest trends.

StackOverflow will be of great help IF YOU KNOW HOW TO USE IT. Let's just say, if you are a beginner/medium-level developer, there's a 99.9% chance someone already asked your question, and someone already answered. In the end, StackOverflow is not about finding answers, it's about finding the question. 

Another GREAT way of learning is to find a mentor. It might be a colleague, a friend, a Discord server full of cool developers (you can find a LOT of these, I love to create a private room every now and then to discuss about patterns)

Last but not least, side projects. I started [bloks](https://bloks-sashkan.vercel.app/) a couple weeks ago, and it helped me tremendously in planning a clean React context, and managing my time.

## Question

Another huge chunk of your job is to question everything, including and especially yourself. Here are the top 3 questions to ask before starting anything new:

- Do I really need it?
- Do I REALLY need it?
- Do I have everything to achieve this task? (Including knowledge, tools, a clear state of mind, and enough sleep)

Again, you do not know everything about software development, and that's alright, we are all just a bunch of ever-learning apes. 

Again, if you're part of a team, it is your responsibility to question product-led decisions every now and then. If you think that a feature is not really needed, or not a priority at the moment, or way too heavy for ROI, you have to say so.

Once you're sure about your product/feature, you'll see that every now and then, you have to question yourself, your decisions, and your skillset, but more on that later.

## Planning
This is my favorite part because the only thing I love more than coding, is **nice coding**.

But **what is nice coding**, you may ask? Nice coding is the art of producing code that will be lean, efficient, and can be produced without too many iterations. And it takes a lot of time to be proficient in nice coding.

### My workflow
It might sound a bit egotistic, but here's my current workflow, and it works pretty well:

1. Get enough sleep. I cannot stress that enough. A good night of sleep will be the difference between a couple hours of nice coding, and a ruined day. In fact, **sleep is so important to me that my "sleep-budget" exceeds my tech budget 8-to-1**. And I run on a full Apple setup.

2. Read the specs. You have to know exactly what you are trying to build. Doubt is the enemy of nice coding, take all the time you need to have pixel-perfect specs before laying a single line of code.

3. **Paper + Pencil** are your best friends, and most of the time, they'll solve your problems/questions. For any given problem, you can create a draft on paper. If you need an external point of view, do not hesitate to share. I use [miro](https://miro.com/login/) to create flowcharts, and it saved me a LOT of time because anyone can comment/discuss your draft.

4. Testing. If I had to pick ONE key skill for any senior developer, it would be the ability to test your code. Everything can (and should) be tested, and if you feel like testing a new feature is a pain, it probably means that your architecture is suboptimal. You have so many tools today to test your application, from jest to [real-time mock generation](https://mswjs.io/). Quite frankly, whenever interviewing a candidate, or reviewing a MR, if I don't see a test, I start feeling nervous.

5. Timebox your work. As a senior dev, you're expected to produce clean code, quickly. As a junior developer, you're expected to produce clean code, slowly. This will simply allow you to learn clean patterns, that you will eventually master, and reuse. And everyone will thank you for that, even if it means taking an extra week to deliver your feature. But, as you progress, you will have to work faster and get out of your comfort zone. Eventually, you'll be able to estimate how long it would take you to deliver any given task.

6. Create a nice coding environment. I have ADHD, I tend to let my mind roam every 15 minutes or so => I started using Pomodoro timers and relaxing sounds. I usually eat at my desk when I work from home, so every now and then, I have coffee cups/a plate on my desk. Which I obviously not need for work. So make sure that your work environment is as neat as can be. Again, this requires some questioning:
- Do I need another coffee at 7PM?
- Is this chair right for me?
- DID I GET ENOUGH SLEEP?

Overall, I live by a simple rule: wake up, make your bed, brush your teeth, drink water, cold shower, and then consider all chores at hand. If it takes less than 5 minutes, I do it immediately.

## Teamwork
This is the pinnacle of abilities. I deeply believe in the notion of [team trust.](https://www.youtube.com/watch?v=kJdXjtSnZTI). 

You want to work with people that you can rely on, to make everyone's life easier. How performant is your code? How smooth is your reviewing process? How clean are your commit messages? How reliable are you when a teammate needs help?

This is the one ability that most companies will look for, and this is the n1 parameter that will help you maintain a great level of trust, respect, and quality in your codebase and in your team.

And the only way to achieve this level of quality is simple:
- Do your research
- Question yourself and the task at hand
- Plan accordingly

There you go, my 2 cents on how to effectively progress as a software developer.

## TL;DR
No, for real, read it.