Contracting, starting a company, and reflections
At the end of 2019, I quit my full time permanent job. I had spent just over a year or so working at a startup. It was a pretty great place to work, and it actually felt like a startup. There were about 30 or so of us working out of an open plan office, I joined as the 6th engineer. We had coffee and tea on tap. We had monthly lunches with the whole company. The CEO was a product guy who knew his stuff, was pretty involved and primarily drove the direction of the products that we built.
We worked in cross functional teams so I got to work closely with fellow engineers, design, and product. We were also building a product that necessitated good SEO so I spent time with the Head of Marketing and learned a lot about improving SEO rankings (aka pleasing Google smh).
I had done a lot of this in previous roles, but I had significantly more responsibility in this role, and it was now in the context of a fast moving startup, with rapidly changing priorities.
I got to work with ReactJS and CSS/SCSS on the frontend. We didn't use a CSS framework so I got to hone my custom styling skills, building everything from scratch with CSS Grid and Flexbox. We used Python and Django in a micro-services architecture on the backend. We used Redux to fetch and manage data (though I did miss lovely GraphQL from a previous role).
I learned a tremendous amount while working there, and had the good fortune to work with some amazing people. Not to mention owning stock options was new!
So making the decision to leave wasn't an easy one. I'd even decided to give them 3 months advanced notice instead of the contractual 1 month notice that I needed to. Because they were so dope it was worth not blindsiding them.
So why did I leave?
Working on personal projects has always been quite important to me. These could be small side projects that were purely for learning, or commercial/client projects that generated income. I had also spent a fair amount of time in the past organising events such as workshops and hackathons and wanted to get back in to that at some point.
It often felt like there was only so much you can do in your evenings and weekends when you're working full time, and even less so at a startup.
I spent some time thinking about what my time setup would look like, and what my options were.
I picked a hell of a time to quick my lovely stable job didn't I. But I honestly don't regret it.
I did something that I had been meaning to do for a very long time. It was a risk I was likely going to take at some point or another, and I'm glad it happened when it did. I’ve also been very fortunate to continue finding work since alhamdulilah. But most odd of all, the very company I quit didn’t make it through 2020. (Look at God? Istikhara all the things). They were an events platform, and with all the lockdowns and dwindling revenue, it got quite tough. A rather unfortunate outcome but alas such is life.
I started contracting in March 2020, something I hoped would give me more flexibility and control over my time, so I could continue working on random side projects. The main appeal of contracting for me was the contract itself. I’d contractually be allowed to do what I wanted outside of work, whether that was work on my own commercial projects or taking on an entire second client if I wished. It was a contract of services between two companies, so as long as I delivered on the work I was contracted to do, they didn’t care what I got up to in my spare time. Which is typically quite different to an employment contract, where you might have to ask your manager’s permission to work on anything substantial outside of work. Not to mention vague intellectual property clauses. Most places aren’t so bad, but it’s worth checking your contract if you intend on building anything valuable outside of work. It also meant I didn’t have annual leave, and was just paid for the days that I worked, which meant I didn’t have to think about when I should take what days off.
Over the last year or so, I’ve been fortunate enough to do some work for a startup with a tight deadline, a B Corp where I helped lunch a large product that garnered quite a bit of publicity and some public sector work for Government Digital Service. It hasn’t been too bad alhamdulilah.
What have I learned since?
When you conduct work for various organisations in a short space of time, you tend to pick up similarities in the ways teams work as well as stark differences.
When you work for one or two companies for a relatively long period of time, it's very easy to have a specific view of how projects are created and maintained.
I've worked with organisations that had strict Git flow practices, and others that committed straight to master while relying on pre-commit hooks, feature flags, TDD and pair programming to catch issues. It would surprise you how differently companies work and how different engineering practices can be. This is also very dependent on the type and size of organisation you're working with.
If you were to go and create a side project of your own today, how you go about it and your standard of what you expect from yourself will be heavily influenced by your experience at work. That can be a great thing since you've likely learned some great best practices.
But if you're trying to translate that experience as an engineer into your own startup idea, should you really be setting up a CI/CD pipeline before you've done any feature work? Should you be doing any feature work before you've spoken to a single potential user and validated your idea is even worth spending time on? Probably not. (Totally guilty of this myself). Which can be something you might not pick up if you haven’t worked at a startup that’s very young and has no processes in place but somehow has tons of users already.
In early 2020, I spent some time working on what I'd hoped would become my first product under Artxcode, the company I started to house personal projects and client work. I had worked with Elixir/Phoenix in role a couple of years prior, and I really liked the ecosystem. So I used this mobile app idea as an opportunity to delve back into learning about creating Phoenix + GraphQL APIs, as well as React Native development.
The idea itself was designed to be a silly fun thing to practice with. It wasn't a serious revenue-generating idea at all but a fun nonetheless. Eventually I'd got a few months into working on it and asked myself if the time I was spending was really worth it. I wasn't as interested as I had initially been and it wasn't meant to be a serious project anyway, so I decided to shelve it. I learnt a lot about Elixir's concurrency model. It's ecosystem is amazing but still pretty young and I wish more companies worked with it. A genuinely a beautiful language and I will definitely be using it again in the future inshaAllah. I also learnt another valuable lesson, when to stop working on something. As someone who forces himself to finish a book he no longer finds interesting “because I can’t leave it unfinished”, this was difficult. But it enabled me to move onto other projects that I was more passionate about.
I still maintain that working in a permanent role is the best place to learn as an engineer, and I’m not ruling out going back into perm in the future myself. So if you're new to the industry, take your time. Contractors are typically expected to be quite good at the particular thing they’re being contracted to do, clients really want you to hit the ground running and don’t typically spend much - if anything - investing in you, otherwise they’d have hired a perm employee who’ll be worth their investment long term.
All in all, the last couple of years or so have been quite different for everyone, and I didn’t tick off everything I wanted to do. But I did learn a tremendous amount and I’m pretty happy with the few things that I did alhamdulilah.
Subscribe to my Substack to be notified of future posts.