Abdul Rehman
Abdul Rehman Portfolio Loader Image Abdul Rehman Portfolio Loader Image Abdul Rehman Portfolio Loader Image Abdul Rehman Portfolio Loader Image Abdul Rehman Portfolio Loader Image Abdul Rehman Portfolio Loader Image Abdul Rehman Portfolio Loader Image
0 %
Loading

What I have learned after 3 years of building real projects

June 27, 2026 Career Development Freelance

Three years ago I was a student who thought writing code that worked meant I was a good developer. I had my BS in Software Engineering, my ADSE from Aptech, and a head full of confidence that I had not yet earned. Since then I have shipped around 12 projects for real clients with real deadlines and real money on the line. Here is what that taught me.

The gap between "working" and "finished" is enormous

My first freelance project was a website for a small business in Karachi. I got the core pages built in about a week. Then the client asked me to make it work on their old Android phone. Then they wanted the contact form to actually send emails. Then they wanted the loading time to be faster because their customers had slow connections. Each of those requests took almost as long as the initial build.

That project taught me something I still carry: getting code to work on your own laptop is maybe 40% of the job. The remaining 60% is cross-browser testing, performance, edge cases, error handling, and all the boring stuff that separates a demo from a product. I stopped celebrating when features "worked" and started celebrating when they were actually done.

Clients do not care about your code

This one stung. I spent three days refactoring a project's codebase to use a cleaner architecture. The client did not notice. They did notice when I moved a button 20 pixels to the left. They noticed when the page loaded half a second faster. They noticed when I fixed a typo in their footer.

I am not saying code quality is irrelevant. Bad code catches up with you on every project that lasts more than a few weeks. But I had to learn that clean code is for me and for the next developer. The client cares about what they can see, touch, and show to their own customers. Knowing who you are writing code for at any given moment matters.

Saying no is a skill you have to practice

Early on, I said yes to everything. A client wanted me to build a full e-commerce platform with payment integration, inventory management, and a mobile app, all for a budget that barely covered the frontend. I took the project because I was afraid of losing work. I ended up spending two months on it, barely sleeping, and delivering something I was not proud of.

Saying no feels risky when you are starting out. You think every opportunity might be the last one. But taking on projects that are scoped wrong or budgeted wrong does not just hurt you. It hurts the client too, because they get a rushed product. Now I ask detailed questions before agreeing to anything. How many pages? What features specifically? What is the timeline? If the answers do not add up, I say so. Some clients respect that honesty. The ones who do not were going to be difficult anyway.

Communication problems cause more project failures than technical problems

I lost a client once because I went quiet for five days while working on a complex feature. From my side, I was heads down, making good progress. From their side, they had no idea if I was still working on their project or if I had disappeared. They started looking for another developer before I even sent my update.

After that, I started sending short updates even when there was not much to report. Something like "Still working on the dashboard section, hit a small issue with the chart library, should have it sorted by tomorrow." That takes 30 seconds to write and it completely changes the client relationship. Most freelance developer tips focus on technical skills, but consistent communication has won me more repeat work than any framework I have learned.

I stopped chasing new frameworks

In my first year, I spent a lot of time jumping between tools. I would start learning one framework, see a blog post about a newer one, and switch. I had surface-level knowledge of many things and deep knowledge of nothing.

What changed was a project where I had to build a complex dashboard and I kept running into problems because I did not understand my tools well enough. I decided to stop and go deep on the stack I was already using. I read documentation properly instead of skimming it. I built small test projects to understand edge cases. That depth made me noticeably faster and more confident. My web developer experience improved more in the three months I spent going deep than in the year I spent going wide.

Deadlines need padding, always

I used to estimate how long a task would take and then quote exactly that number. The problem is that estimates assume everything goes smoothly. They assume I will not get sick, the API will not have a bug, the client will not change their mind about the design halfway through, and my laptop will not decide to install updates at the worst possible moment.

Now I add 30 to 40 percent to my estimates. If I think something will take a week, I quote ten days. Sometimes I finish early and the client is happy. I have never once regretted giving myself that buffer. The developer lessons learned here are simple: an early delivery makes you look good, a late delivery makes you look unreliable, and the actual code quality is roughly the same either way.

Design sense matters for developers

Having a background in UI/UX design has been one of my biggest advantages. Not because I can make things look pretty (though that helps) but because I can have informed conversations with designers and I can spot usability problems before they reach users. When I build a feature, I think about how someone will actually use it, not just whether it functions correctly.

Developers who dismiss design as "not their job" are limiting themselves. You do not need to become a full-time designer. But understanding spacing, typography, color contrast, and basic interaction patterns will make your frontend work noticeably better. Spend a few weeks studying the basics. It pays off on every project.

Version control saved me more than once

I once deleted a working feature because I was cleaning up files and got careless. No version control. I had to rebuild it from memory. That was the last time I worked without Git on any project, no matter how small.

Version control is not just about backing up code. It is about being able to experiment freely. When I know I can revert to a working state in seconds, I try more things. I take more risks with refactoring. I am willing to throw away an approach that is not working because the previous version is one command away. That freedom changes how you build things.

The soft skills compound

Writing clear emails, showing up to calls on time, being honest about what I do not know, asking questions instead of guessing. None of these are technical skills. All of them have helped my software engineering career more than learning any specific language or framework.

A client once told me they chose me over a more experienced developer because I asked better questions during the initial call. I understood their problem before I started proposing solutions. That conversation probably took 20 minutes and it won me a project that lasted four months.

What I would tell myself three years ago

Stop trying to learn everything at once. Pick your stack and get genuinely good at it. Send that update email even when you think it is unnecessary. Quote higher than your first instinct. Read the documentation instead of searching for a quick fix. Sleep enough, because tired developers write code they have to rewrite.

Most of what I know now, I learned by getting it wrong first. That is probably unavoidable. But writing it down helps me remember, and maybe it helps someone who is a year or two behind me on the same road.

OneCinfinity - marketing agency
OneCinfinity - marketing agency
Baby Bloom Shop Mobile App
Dehari - home based services
Dehari - home based services
Fun Spot Park
Laundry Management System
Laundry Management System
Rhythm Rang - web app
Rhythm Rang - web app
Dehari - home based services
Baby Bloom Shop - mobile app
Fun Spot Park
Laundry Management System
Rhythm Rang - web app