There is something romantic about working in a product team for a startup. You get a chance to change the world, and to own the change you create; maybe you’ll even get a piece of the pie.

That’s great and all (what’s not to love?), but that’s not what this story is going to be about. I want to talk instead about the less celebrated variant to our startup heroes: the freelancer, and agency programming types that have not ‘taken destiny into their own hands’ so to speak because they lack ownership of their work.

Sure, we may not own equity in products we create, but it doesn’t mean that we do not own our work. The code that I write represents me, my abilities, my disposition towards the work I’m doing at the time of its writing, regardless of its legal status as to its ownership.

You are not your code, but your code is you.

If I hear a programmer say that they would not work as hard on someone else’s project, I just think to myself what a cop-out that is. If programming is a craft, and we are the craftspeople, then we better start acting like it.

Once we see past the false distinction that is ownership, we start finding programmers that are in it for the love of their craft. Of these people, you would find some of the best talent emerging from agencies, and freelancers.

It’s no secret that working in agencies can be gruelling affair; deadlines are tight, hours are long, customers are demanding, recognition is scant if at all it exists, team sizes are small, etc. However, it’s precisely these conditions that can produce some of the most battle-hardened (or scarred) programmers. It’s no wonder that startups and product companies typically look to agencies to hire experienced talent.

Working in an agency, or as a freelancer, typically exposes a programmer to a wider array of experiences than in a product company. You may get more depth working in a product company for sure, but how often will you be able to work on new projects, or even get to experience the various stages of the product development lifecycle? Remember that Google front-developer that was working on button for half a year? I’m not sure how that paid off for Google, but that developer had better know everything there is to know about buttons.

Even if you are planning to dedicate your life to specialize in a specific area within our field, like say big data or you know, buttons, having working knowledge surrounding your specialty can only be a boon. For one, your team members will thank you for it.

Looking back at my own journey as both a freelancer (when I was younger) and then running my own development shop, I discovered that what pushed me forward the most was having deadlines and clients breathing down my neck. I’ve been forced to gobble down libraries, frameworks, APIs, etc, so much so that I can anticipate how they ought to work. Pro-tip: speed-read the docs from end to end before you start writing a line of code.

This breadth of work and hectic pace does of course come at a price; while I have managed to improve the quality of my code over the years, I do not consider myself a master in any one specialization. That being said, I see this as an advantage over the long term. Trendy frameworks and database technologies come go, but my skills as a software craftsman remain with me, as does my aptitude and appetite for learning new things.

Freelancing or working in an agency will see you doing about 2–3 big projects in a good year, and maybe a couple of smaller ones on the side; more than that you are pretty much a code monkey doing mundane work in a development sweatshop.

You get to experience starting a codebase from scratch, repeatedly, and pushing it to production. You will make many mistakes, and your clients will make certain you will learn from each of them. Being able to start over each time is refreshing; you’ll do things right this time you promise yourself. Some times we even take on legacy projects, which is what you would call character-building.

Programming is a tough gig in itself, and agency work is poses a different set of challenges to product work. It isn’t everyone’s cup of tea, but makes for a great proving ground for newcomers to field, even if only to prepare them to work in a product team eventually. I can’t recommend this life for everyone, even for a while, but really the challenge here is yourself.

This post first appeared on Medium and Tech in Asia.