How I Went From ‘Hello World’ to My First Freelance Client in 1 Month

Back in 2011, I was a university graduate with a very foggy look at the future. The field of study that I had chosen at age 18 now seemed like a foolish choice. Even though it was an engineering degree, in my country it resigned me to office work in one of maybe a dozen telecommunications companies.

This is not what I had envisioned when I left high school.

I was lucky enough, however, to have been introduced to programming by this time. I did some reading and decided to make use of the copious amounts of free time I suddenly had to try building a website.

A month passed from that moment until the moment I found my first freelance client. To many people, this time frame seems unreasonably short. Read on to find out how I did it, and why you shouldn’t try to become an expert before looking for freelance work.

What to learn

This is a hotly contested issue among tech influencers. Some insist on learning some specific framework. Some insist on reading a specific book. Most insist on you buying their product, whether that be an online course, tutorial, or ebook. The variety of advice can be daunting.

In simple terms, to consider yourself a (very junior) full-stack developer, all you need are the basics of:

  1. HTML
  2. CSS
  3. Javascript
  4. A back-end language
  5. A database

That’s it. In that order. Now, you can study each of these areas for years and still not feel like you’ve reached true expertise. If that’s the case, you might ask, how in the world are you supposed to get work within one month of starting to learn? By learning just the right amount of each one.

How much is enough?

I’m going to tell you exactly how much time I spent on each skill before finding work and what to focus on within each area. Please keep in mind two things:

  1. I had no job at the time and could dedicate at least 5–6 hours per day to this.
  2. The learning doesn’t stop after you find work. It intensifies.


I spent a single day dedicated to HTML. That’s it. The reason is twofold:

  1. HTML is simple.
  2. I realized that HTML will be involved in the latter stages of learning anyway.


I spent 3 days experimenting with CSS and how it applies to various HTML elements.

The crucial things to understand are various types of positioning and alignment. The purely aesthetic aspects such as color and font can be absorbed almost instantly. More complex options can be researched when and if you need them.


I spent about a week learning and practicing the basics of Javascript. The crucial things to understand are loops, conditions, functions, basic syntax, how to use the browser console, the division between client and server, and how you can send requests to the server (AJAX).

Once you get to that last part, it’s time to take a step back and learn the basics of a back-end programming language.

A back-end language

My first back-end language was PHP. For you, it can be anything you choose, but I suggest you pick up one of the mainstream ones where there is lots of work available and lots of documentation online. PHP, Python, and Ruby are some popular choices. Node.js is an excellent choice later on, but I do not recommend it as a starting back-end language. This is for two reasons:

  1. Node.js uses Javascript syntax so you don’t get the benefit of learning a second language.
  2. It is very async-oriented and may prove too much of a challenge for an absolute beginner.

Once you pick a language, start from the basics again: syntax, loops, best practices. Now is a good time to take a few days to read about general software development best practices and object-oriented programming. Try implementing the concepts you learn there in your back-end language of choice.

Then make the connection between front-end and back-end by building an application where Javascript sends some requests to the back-end, the back-end responds, and Javascript handles the response by manipulating the page, showing returned data, etc.

This portion of learning took me about two weeks.

A database

In order to store and retrieve data, you will need a database. I chose MySQL, as the most popular database at the time. You can again choose whatever you want, but I suggest you make it a relational database.

You need to learn the basics: data types that can be stored in a database, reading data, writing data, updating records, and deleting them. Then you need to understand how to use indexes and relationships between database tables. Make sure you understand the concept of joins, but you don’t need to go too far down that rabbit hole just yet. All of this can be found in any starting tutorial.

Once you have an understanding of database basics, put all the components together: build a small website with a database, where the user can sign up, communicate with the server, store some data in the database, and retrieve it later. What the app does isn’t important. What’s important is to put together all the knowledge you’ve accumulated so far.

I spent about a week on this last phase.

What you can do better than me

Before I proceed to explain how I found work, I want to take a moment to tell you what I would do differently if I was starting over. As a beginner, it’s difficult to know what’s important and what isn’t. Here are some things I didn’t think were important at the time, but they turned out to be.

A good code editor is your friend

My first lines of code were written in Notepad. I felt like using a fancy-looking editor didn’t hold much value beyond the aesthetic. I was very wrong.

A good editor provides proper indentation out-of-the-box, which helps greatly when learning loops, conditions, and syntax. It provides color-coding for your language of choice and warns you of syntax errors. Both of these features are crucial for beginners who inevitably make lots of simple mistakes. It helps you locate the mistakes, as well as understand different data types, variable scope, etc.

A good editor provides many other perks as well, but this should suffice to convince you to get one as a beginner. There are plenty of free ones. Sublime is a good starting choice.

Get yourself a domain

Setting up a basic development environment is simple on most machines. But, you should also invest immediately in a public domain, where you can upload your work.

This is important for three reasons:

  1. You will learn some basic stuff about how hosting companies and domain registration work.
  2. You will learn how to use FTP and SSH to communicate with a remote server.
  3. When you have your first client, you will need a way to show your work to them. If you have a publicly accessible domain, you can create a test environment for your project there and link your client to it.

Understand git

I completely skipped this part during my initial learning period. Then it caught me off-guard on a project and I had to spend a few evenings struggling with it.

Take some basic steps to avoid this mistake: create a git repo for your test project, learn how branches work, understand pull requests, merging, and fetching. That should be enough to get you started.

Don’t ignore mobile

Back when I was starting out, mobile browsers weren’t as prevalent as they are today. But the trend was already there, and I would have been wise to pay more attention to responsiveness in CSS.

Today this is doubly important. Mobile traffic makes up more than half of all web traffic, and everything you build must be built with different screen sizes in mind.

Finding work

To find my first jobs, I signed up for a few freelance platforms. I experimented with different approaches in this period. About a year later, I moved to Upwork and stayed there for a long time.

I applied to small jobs that were a few hours of work, mainly making small changes to existing websites and fixing small issues. I fully understood that there would be a steep learning curve and I told the clients as much — in every single job application, I wrote that I would need a few days to do the work.

After a couple of days and about a dozen messages to clients, I landed my first paid project. It took me three days to complete it and I learned a lot in the process. But, the greatest lesson came after it was done: everything was working, yet the client gave up on the project and marked it as incomplete on my profile. Why? Because I had no way to show my work. So, I reiterate: set up a public domain beforehand.

Moving on

That initial loss having failed to discourage me, I kept pushing on and I soon had a few small projects under my belt. About 20 days into my career, I landed my first bigger gig: I was to build a website with a searchable database of real estate agents per area, as I recall. Everything else, as they say, is history.

In the following nine years, I built a lot of things and I optimized in every iteration. I built up my knowledge of programming languages and started incorporating many frameworks and libraries into my work. I never once regretted starting the way I did — with foundational knowledge in all areas of full-stack development.

I will write more about learning on the job, and the right kind of projects/clients for this approach in future articles. The main takeaway for now is: too many web developers want to learn to swim before as much as dipping their toes in the water. Don’t be one of them. Gather your courage, take the plunge, and you can surprise everyone — yourself included.

Don't miss the next blog post!

I publish a new blog post every Wednesday. Join the newsletter to get:

  • One valuable email a week.
  • Zero spam.
  • Exclusive content not found in the blog.
  • Reply directly to me with questions or feedback.

Use the form at the bottom of this pageon the right to join the newsletter.

Read more: