The story of three months of failure, what failure taught me, and what it led me to.
Jump to Lessons learned section to skip the long story.
When I was a kid, I loved to make my own board games. We lived modestly in a very isolated city named Yakutsk, in a sparsely populated area in northeastern Russia.
We had a shortage of toys and games in our family, and I loved to make my own games by drawing on large sheets of paper. My younger brother and I made a game similar to Monopoly, a fantasy-league wrestling game, and hockey games. I’d play for hours with him and my friends.
I also had an old Russian clone of a ZX Spectrum 8-bit computer, with the Sinclair BASIC programming language, and three books about micro-computer programming. Those books were my favorite. When a ZX Spectrum game had a bug and source code would pop up, I would curiously read through it in an attempt to understand a bit of the code. Programming books and games inspired me to write my first computer game. I was a BASIC programmer at the age of 10.
When I was 14, my biggest wish was to have a personal computer. After all the board games I had created with my friends, and now with my desire to write computer programs, I felt like I wanted to create computer games for the rest of my life.
When I was in high school, my family bought a PC—an Intel 386. I spent almost all my free time playing computer games, sharing the PC with two of my brothers. I even played at nights to quench my thirst for playing computer games.
But in playing those incredibly exciting games, I forgot my dream to eventually become a computer game creator.
When the time came to choose a university and specialty, I didn’t know what I wanted to do. I had an opportunity to go to a local university and study law, and I chose this path. But that was definitely a mistake, and I quit after half a year.
Then I went to a computer science institute and graduated, though I didn’t learn much there.
I found a graphic designer job, quit that job after a year, found a system administrator job and became a network engineer, then quit that job after five years. Finally, I became a programmer after following the advice of a very good friend of mine.
Another good friend helped me land my first programming job, giving me the opportunity to become a professional programmer. I had no experience at all, so getting this job was real luck. It happened in March of 2013. I wrote an information portal with Ruby on Rails. Because I knew so little those days, I wrote the code by copying solutions from a Rails screencast by Ryan Bates.
Late in 2013, I moved from Yakuts to Vladivostok, and in December I started working as a web developer in a small department of a company called Farpost.
I used to come early to the company office and enjoy a few minutes alone in my chair. I liked working with my managers, I liked talking with my boss, and I liked coding and making things happen. It was my dream job in those days.
At first, it was really challenging, but I learned a lot from working at Farpost. No one else at the company worked with Rails, so I had to learn mostly by myself through various courses and articles.
In 2017, I felt like I was ready for the next step, and again I was lucky. I joined Link., a Hong Kong startup. Again, like in 2013, I got there with the help of a good friend of mine—the one who originally advised me to become a professional programmer.
Thanks to this job, I got a real taste of remote work and Node.JS. It was a part-time job and ended in 2018.
Beginning in 2018, I returned to my full-time job at Farpost. But I still had a strong feeling that I needed to take the next step.
From that point on, I knew what I wanted. I wanted to work remotely, side by side with amazing developers, in a company with a strong culture and a great vision for the future.
So, I started sending out job applications to companies that I wanted to work for, while continuing to work at Farpost.
I received rejections from all of them.
For some companies, I didn’t have enough experience. For others, I didn’t pass their coding challenges. And in many cases, companies just didn’t offer remote positions.
What I found out was that most remote positions are for senior-level programmers. And that totally makes sense. Why would you want to build a remote company and look for junior and middle-level developers abroad instead of just in your local area? Companies with a remote culture are specifically looking for the best senior developers who are available all around the world.
Obviously, it’s much harder to get a senior position than a middle-level one. I continued to receive rejections for months.
It was now December of 2018. I still worked at Farpost, and it was my 5-year anniversary of working there. I made a decision—if I wanted to pursue my goal of having a dream job again, I had to quit now.
So I quit.
Side note: In order to leave your job, you need to save up money first. I suggest having savings for at least for 3 months, according to your usual monthly spending. Having savings for 6 months is even better.
I spent my first month of unemployment chasing a position at Evil Martians, the best place I could imagine working.
To impress Martians, I wrote a Ruby library, yabeda-datadog. It took one month to do, and it was fun because I worked with two Martians developers.
I think this is a great way to get a job at a targeted company.
Unfortunately, Martians had no open positions at that time, so I continued my journey.
After spending so much time trying to get a job at Evil Martians, I decided to aggressively send applications to numerous small and big startups.
All my applications were without success: no response from the company, news that I lacked specific experience, and unsuccessful interviews.
This was the way I spent my second month.
After two months without a job, I started wondering, “What do employers need?” I started scanning through company descriptions and job posts that reminded me of what I wanted, and I tried to identify what type of person they were looking for.
The result of my research was a list of hard and soft skills that these companies wanted to see in applicants:
- Be proactive, have a strong sense of ownership, take responsibility for the success of the engineering teams, and care deeply about building great products that affect people’s lives.
- Have a commitment to quality, and take pride in everything you deliver as a reflection of yourself.
- Have strong analytical skills and creative problem-solving skills.
- Be fluent in English and be able to communicate clearly and consistently both verbally and in writing.
- Be a nice person—friendly, patient, welcoming, considerate, and respectful.
- Be positive and solution-oriented.
- Have a collaborative spirit.
- Be excited about exploring and learning constantly, and be able to learn new things quickly.
- Have experience with, or the ability to learn, the technologies the company uses.
- Don’t be afraid of legacy code, and be able to understand other programmers code.
- Be self-motivated, with strong organizational skills and the ability to work in a distributed remote team. You should know how to effectively allocate your time when solving hard problems.
- Be passionate about open source.
- Have experience with Agile methodology.
Now that I knew what companies wanted, it became the foundation for my next actions.
I realized that I needed to change how I was applying for jobs.
From failed interviews, I realized that I needed to learn how to solve problems and be good at algorithms, data structures, and time and memory complexity.
I also understood that I should have an attractive CV (i.e., résumé) and write cover letters that would hit 10 out of 10 in the minds of employers.
My third month was dedicated to improvement and learning.
I changed my CV based on the requirements of employers. I never lied—I just adjusted what I wrote according to what the companies wanted.
Also, I had changed the way I thought about cover letters.
I can’t stress how important cover letters are. The aim of every single one of my cover letters was to convince that specific employer that I was the right person for the job. Because that’s what I truly believed
These changes worked amazingly.
Almost every application had a response and an offer for an initial interview.
One of these job applications was for the Senior Software Developer position at getjerry.com.
I responded to their questions in an initial email, got through the first screen call, completed a code challenge, and had two technical interviews and one interview with the company’s co-founder. And finally, I became a senior software developer at jerry.ai.
That happened on March 12, 2019—six years after beginning my professional programming journey.
Realize that failure is a necessary part of succeeding
Although the feeling of failure is unpleasant and can be demotivating, you have to learn from it. The most valuable thing about making mistakes is that you have a chance to learn from them. Learning transforms failures into a path to success.
Make your CV experience-focused
Throw away your long list of skills. Instead, focus on what you actually did in your previous jobs.
Write out every detail of your previous work experience. Emphasize what you have built and achieved.
Keep other parts as short as possible, like education, volunteer work, publications, open-source contribution, irrelevant work experience, and contacts. Terse one-sentence references are more than enough.
On your CV, it is best to emphasize the most important things (what you actually did) and avoid anything that would distract from that.
Write cover letters that are specific and personalized to the job description
Before I learned how to write good cover letters, every job application I sent was politely refused or simply left without an answer. All that changed when I started to really personalize these letters to each company.
For each cover letter I wrote, I aimed to cover as many bullet points as possible from the “Skills and Requirements” section of the job description.
Here is a real example of my cover letter. First, a short introduction about who I am:
Hi, I’m Di, a positive full-stack web developer.
I am from Vladivostok, Russia—about a 2 hour flight from Tokyo.
Then I try to point out useful things that are happening with me right now that are related to the employer:
I believe I can add value to the [insert company name] team because:
- I’m familiar with Elixir/Erlang programming languages
- I have experience with Azure and Docker
- I’m passionate about writing maintainable, reusable, and testable code
- I love to refactor code by the principle “for each desired change, make the change easy, then make the easy change”
- I have 2 years of experience working in a distributed international team within a small startup
- I have DevOps and System Administration experience
- I have experience with React and Redux
- I am currently learning GraphQL and TypeScript at the moment
Like I mentioned before, I try to hit as many bullet points from a job description as possible.
The cover letter is a continuation of your resume. Write every meaningful point for any job position that you apply to.
Overcome your nervousness in interviews
A few points can help you to overcome nervousness in interviews.
First, remember that you are an interviewer too. There is a possibility that the company you’re interviewing with does not actually suit you. This mental trick will help you to feel psychologically equal with the interviewer.
Second, 15 minutes before the interview, take out a sheet of paper and write 2–3 affirmative statements 10 times each, such as the following:
“I successfully passed an interview at <name of a company>.”
“I successfully passed an interview with <name of a person>.”
“I’m a great engineer because I’m always <something great about you>.”
Our brain is programmable, so it’s wise to put positive thoughts in it. Otherwise, it will be full of anxiety and fear.
Always have questions to ask
You definitely want to know as much as possible about your next place of employment. Prepare about five questions to ask—not too many and not too few.
By asking good questions, you will leave a great impression, and you will show your interest in the company and not just in paychecks.
Here are some questions I usually ask:
- What does a typical [company name] programmer’s day look like?
- What is the most challenging part about being a developer at [company name] or developing [company name]’s product?
- What is most exciting about working at [company name] or developing [company name]’s product?
- Tell me about the key engineers in the development team. (Here I want to know if I will work alongside great engineers.)
- In which direction does [company name] expect me to develop in the next 2–3 years? (Here I want to know if my interest is aligned with the opportunities to grow and learn within the company.)
Ask, “Why not me?”
In case of rejection, ask an interviewer in a respectful way why you are not the person for the job.
Make it clear that you are not going to complain and dispute the reasons behind the refusal—you just want to know so you can learn from it.
You won’t always get an answer, but this question is totally worth asking because it is very valuable in applying my next piece of advice.
Use an iterative approach
After each interview, whether successful or not, hold a personal retrospective.
What went well and what didn’t? What questions were you not prepared to answer, what didn’t you know, and what should you do to be prepared for the next interview?
Consider eliminating gaps in your skills and knowledge. Think about how not to repeat mistakes in the next interview.
Improve your CV and cover letter based on the knowledge that you get from your last interview or job application.
Get feedback and analyze every failure. Failure is the best source of information and inspiration to get better. Turn failures into a learning experience.
Program your brain for a successful outcome.
Ask questions. You are the interviewer of your next employer.
Learn constantly. Make learning your second nature. It’s fun and it’s rewarding.
Lastly, enjoy the process. Applying for jobs and attending interviews can be a lot of fun!
Ready to Upgrade Your Productivity to the Next Level?
I’ve created a productivity framework for eliminating unproductive activities, reducing decision fatigue, and planning weeks for effortless execution.