I'm sure out there somewhere there have been software developers who started their own successful agencies with little to no industry experience, but for me it was definitely a matter of 'stacking the bricks'. Meaning I needed to accrue certain experiences over a number of years to ultimately be confident making the leap of faith into my own business. And I'm glad I did.
I'm not solely talking about programming or technical experience here, in fact for me it was the soft business skills I really needed exposure to. Programming was my passion and hobby, so it was easier for me to up skill as far as that was concerned, however skills such as sales, project management, and nurturing client relationships - these were harder for me to learn on my own.
My evolution from developer to agency owner went through 3 key periods:
- Gaining industry experience by working at an agency
- Gaining business experience by freelancing
- Starting my own agency
So far I have written a bunch about starting my agency, but in this piece I want to write about what I learnt from those phases. I'm a big believer that there are many paths to the same destination - so this is by no means a mandatory requirement... but for me these two periods of learning gave me the experience and confidence I needed to build my business, and I believe make my business a success.
"The only place success comes before work is in the dictionary" ― Vince Lombardi, American football coach
Experience gained by working in an agency 🏢
Working as a developer in an agency allowed me to watch the in's and out's of a client-service business, seeing first-hand how the sausage is made - all whilst acquiring valuable knowledge from the others around me... and importantly, all while getting paid a salary.
I would assume before someone starts a bakery that they have in fact had experience first hand working in a bakery - but this is often not the case with an agency. People can 'fall into' starting an agency, often when freelancing turns into outsourcing, that then turns into managing a team, which then means more and more projects and so on. I'm sure this can be an awesome way to get started, but just as the baker will learn a lot from their experience working in another bakery - gaining hands on experience working at an existing agency can be viewed as a risk minimising strategy, and a somewhat simpler path of least resistance before creating your own business.
I worked at two seperate agencies before starting my own, and being a dev at an agency is one of the biggest ways I learnt the real meaning of "full" in the full-stack. Frontend, backend, database, deployments, server setups, working in a team, having real responsibilities, a little bit of project management, and a little bit of estimation.
Not all the knowledge you will gain working at an agency will be of the type "hey this is the absolute best way to do it!", but sometimes more of the type "hmm I don't think I would do it this way if I was in control" - and that's great. You can learn what you do and don't want to do when you start your own business. And this sets a spark in entrepreneurs. We see a problem and know we can do better (whether we actually can or not is not important!), we can't help but think of the next evolution of things - we zig when others zag.
“If everything was perfect, you would never learn and you would never grow” ― Beyoncé
In my experience smaller agencies can sometimes offer a broader experience than larger agencies, as in a smaller team you will be exposed to all parts of the business as opposed to perhaps being locked in to "frontend developer".
Key learnings I gained being a developer at an agency
- Where clients come from, and how the agency handles incoming leads
- How the agency communicates with clients (and potential clients)
- How client projects are managed (including time, cost, and scope overruns)
- The non-technical tools used (e.g. time keeping project management, source control etc)
- How team dynamics and team hierarchy's work
- How communication works across the team (and between teams if large enough)
- How team roles and responsibilities are assigned (and actioned)
- How a software project gets delivered end-to-end (scoping, development, deployment)
- How the hosting and system infrastructure is managed
- How the business supports projects after delivery
- How the business balances / prioritises existing project support vs's new projects
- How the business handles down time / not having work
- The culture and how it is cultivated and nurtured
- The pay, and if the company pays below, at, or above the market rate for their staff
- The general happiness of the business and the staff
Experience gained by freelancing 🧑🏽💻
After my time working in an agency, I decided to go out on my own and give freelancing a shot, and I think this was vital to supercharge my business knowledge. Freelancing allows you to get a taste of running the smallest business there is: yourself.
While getting hands on experience at an agency will show you what the agency life is like, freelancing will ram client-service experience directly down your throat. But in a good way!
Client communication, sales and marketing, chairing meetings with numerous client stakeholders - If you can gain any of these in advance before starting your agency then that's a win. I know my freelancing experience took me from a confident developer, to a more well-rounded business dude. And I needed that, as I was getting a little over confident!
But freelancing humbled me. I went out into the world full of excitement to get great projects, execute them really well, and build a great client base. But my first taste of freelancing was overwhelming. When this didn't go according to plan who could I blame? When I did win projects could I really execute these all by myself? These were the gems of experience I needed under my belt.
“You can’t knock on opportunity’s door and not be ready” ― Bruno Mars
Freelancing will show you just how much is involved in running a business - even a tiny business. I definitely took for granted things like the amount of time needed to pitch for projects (and then not win them), the amount of client communication required, all the boring invoice and tax parts, and generally just always looking for work. Besides business running skills, it was my first real experience not going into an office at 9am, so dealing with self-motivation and will-power was a steep learning curve for me.
Key learnings I gained from freelancing
- Being the boss (how you find the responsibility and pressure)
- Handling the unknown and not being in full control
- Sales, marketing, branding, and positioning
- Handling leads, from initial introduction to closing the deal
- Losing leads, and getting back on the horse
- Scoping a project end-to-end
- Estimation (the mystical black art that is)
- Confidently pitching your proposed solution to the client
- Dealing with strict budgets and time sensitive deliveries
- Handling payments and milestones
- Handling changes in scope
- Handling invoices and payments
- The joys of paying tax
- Handling terrible clients
- Firing terrible clients
Cool story bro, but how do I do all that? 🤷♀️
I felt a bit conflicted writing this piece, as whilst I wanted to share some insights on what I took away from two defined stages of my work experience - I also knew this wasn't particularly actionable advice.
But in lieu of a mammoth article on how to land a job and how to become a freelancer, I have thrown out on Twitter the advice that I would give if I was just starting out either of these ventures today. Take a look at the tweet (threads) below if you're interested.
My thoughts on a how a junior developer can stand out from the crowd when going for jobs...
My thoughts on a how an experienced software dev can get into freelancing today...