The path of a self-taught developer can be scary and intimidating. For me, skipping university turned out to be the right choice anyways: When the responsibility for your growth, career and learning sits 100% on your own shoulders, you also completely own your wins. Here’s my story and what I learned.
Ever since I was a kid I was fascinated with technology. Growing up, I used to play with any old computer equipment I could get my hands on. One of my greatest joys was poking around in old hard drives.
Getting into development
Then, during a school holiday when I was ten, I grabbed the programming book “Sam’s Teach Yourself Visual Basic in 21 Days”. I wanted to build a game, so I mostly followed it as a strict guide. Unsurprisingly, I didn’t quite understand all of the concepts straight away, and I didn’t actually end up building a game. I did however end up building an interface with a button that changed the background color of the application window and some text on the screen - to 10-year-old me, this was nothing short of amazing.
During High School, my interest in development really took off but I also dreamed about launching my own business. I really enjoyed art and was determined to start a T-shirt company. That’s why I began to teach myself graphic design by watching youtube videos and doing tutorials found in photoshop magazines. An older friend of mine even organised me a meeting with Edgars at some point! Turns out, building your own T-shirt-company is quite expensive - not ideal for a 16-year-old. That’s why I shelved that plan.
I discovered that I needed to build up a resilience to setbacks. Pulling off pretty much anything takes a lot of work, funds and a network of the right people - although this last part hadn’t fully sunk in at this point.
My first real dev-jobs: Building websites
Despite this burst dream, my new design skills did end up helping me in another area: Through my family and a dance instructor, I got my first website projects. Teenage-me realised that I would be able to make more money if I didn’t only design but also built the sites, so I had to learn front-end development: The very first website I ever built was basically a bunch of tutorial code stuck together. It wasn’t reusable or scalable in any sort of way, but it got the job done and me paid!
This experience also helped me learn how to deal with clients and manage expectations. It also gave me the confidence that you can basically do anything if you really push and invest in learning.
Starting my first business: Geek news
Then, when I was 18, I had another business-idea: A geeky news site à la nag.co.za or vg247.com called DareToGeek. It later turned into a web design company that now also no longer exists but you can still check out the page! When starting out with the blog, I used Joomla! CMS. I soon got frustrated with this though and changed over to my own CMS. In addition, I talked some of my friends into writing articles with me and we started publishing regularly -success!
After school, I started doing tech support in a family business. At the time, my DareToGeek-co-writers went on to do other, potentially paid things and our little newssite died. All of a sudden, I lacked sufficient distraction and learning outside of my main job. That’s why I decided to teach myself back-end-development and began to do freelance work as a full-stack developer.
After having to close down the blog, I realised that it’s better if you pay people. Friends are great to start with, but there is an obvious lack of incentive when there's no money-payoff. I also learned that your dreams don’t automatically become the dreams of others. If you want people to go on a journey with you, you have the responsibility to communicate your vision and build excitement.
Leaving school - The life of a freelancer
Once I felt confident enough, I left the family business and turned DareToGeek into a one-man web design and development company. Most of my clients were referrals and only required basic websites but, at 21, I had enough freelance business to make me want to take the deep-dive and stand on my own feet.
A friend who helped me part-time with the company’s accounting also landed me my first custom-built application gig: Two of his contacts wanted to build an app in the financial auditing space. Even though I had very little knowledge of good practices and processes, I built a prototype. Once it was ready to be tested in the real world, we pitched it to someone at Sage.
They gave us some quite promising sounding feedback so you’d think we went and turned that around, right? Wrong. Both of the co-founders got unexpected job-opportunities overseas and the project drizzled out. That’s not to say that I didn’t learn a whole lot from the process:
Building custom software is hard. I had to adopt a whole lot more technical skills to get the prototype done and even then, it was important who you knew. I also started to realize that people’s plans and minds change - you just have to go with it. Work with them when you can, but expect them not to be there tomorrow.
The belief that I needed to be resilient became stronger than ever. It really sucked working this hard with so much excitement and then seeing everything just fall flat. However, for me, the thought of giving up was even worse.
To degree or not to degree
Like any teenager, I started thinking about my life post-high school from about the age of 16. I had quite strong feelings against studying, especially because I felt like I was making some sort of progress in life already. On the other hand, however, I also had the inkling that society generally supported, encouraged and even required a university degree to get anywhere in life. My biggest worry was that I wouldn’t be able to get a job without a piece of paper that declared my competency.
Despite this fear and many people telling me that I wouldn’t be able to survive, I ended up deciding not to study: To a large degree, it was probably because of this tiny, stubborn spark of “I’ll show you” deep within me. However, I also felt that I had already learned and experienced quite a lot on my own and many traditional courses in graphic design and programming seemed like they would cover what I already knew. I worried that I would be bored and then quit - so why even start in the first place? In addition, my web design business was doing pretty well and I was curious to see where I could go with that.
How I leveled up my programming
Every new project and endeavour showed me the gaps in my skill set. I decided to push really hard to fill them with various online courses on sites like teamtreehouse.com and lynda.com. I kept building small apps to practice:
- Todo List App (we’ve all built one)
- Timeable - which was similar to Toggl.com (practiced building a Single Page App)
- Monkey (does the monkey work, so you don’t have to) - A Project Management Tool Similar to Basecamp.
- DTG CRM - a CRM for DareToGeek - because we all need custom software #sarcasm
In retrospect, I now understand that I would have benefitted from the fundamental principles one learns at university. I have however found that, with a certain discipline and self-motivation, I was able to catch up on everything new I came across, either online or with the help of my colleagues.
Shifting to full-time employment
Truth be told - I put this off for longer than I should have. I hadn’t studied, almost every company wanted to see some form of formal education or equivalent work experience and to me that meant that I needed show that I had worked at a company. I didn’t think they’d value my work as a freelancer. I was quite intimidated and felt a great sense of dread because I kept worrying that I wasn’t yet good enough - I didn’t really have anyone to compare myself to.
I got my first job through a random encounter in a bar - a stranger with an advertisement company mentioned that he was desperately looking for a web developer. One thing led to another and I eventually went in for a chat to discuss the details. This conversation was not so much a job interview as it was a discussion about the details of my employment. Once I applied to a real development company, this looked very different.
Interviewing as a self-taught developer
Interviewing was the scariest thing. Now I had to defend my skills and competencies based on my attempt to be objective. How was I going to convince someone that I am good enough or a good investment?
I decided that the best thing I could do was to offer my passion for the work, for development and for learning. Over the years, I had learned so much so quickly - and it’s this self-motivation I tried to focus on. I knew that I could learn whatever I needed. The key was to make sure that I could relate every question they asked me to my main strength: the passion for learning and growing. This also involved being incredibly transparent in my answers:
Q: “Have you worked on an app that is in production currently?”
A: “No, unfortunately, nothing I have built thus far has really gone to production although we were really close with the auditing project. I had hoped to experience that next step because I understand there is a lot I need to learn.
Q: “Do you test your code?”
A: “Not as much as I know I should. This is an area where I need to grow.”
I basically bet on honesty and passion and hoped that my future employer would bet on the same things.
Truth be told, at this point I had no frame of reference to gauge my skills in comparison to others, so I didn’t know if I would qualify as a junior or mid-level developer. I was willing to take whatever I could get and understood that the objective was to work harder and learn faster than anyone else.
My first job only lasted for about three months but the opportunity helped me drop my mentality of having to build my own business. I realised that, if I could get into a company and gave it my all, I might achieve similar successes. I was fortunate enough that this path ended up working out for me.
Once I was hired as a Junior developer, I put in more hours into learning than I had ever done before - not only as a developer but also as an asset to the company.
Dealing with Imposter Syndrome on a job
This is probably one of the biggest things that I had to face, and it’s something I still deal with albeit far less frequently. All of a sudden surrounded by developers with degrees, I felt as though everything I knew was “fake” or less valuable in some way: I experienced extreme imposter syndrome symptoms. I felt that I couldn’t hold my own in technical conversations because I somehow wasn’t qualified to contribute and that anything I would say would be wrong.
Procrastinating on giving feedback
This feeling got progressively worse as I worked with more people in the company. I would be gripped with fear when submitting a pull request on a project. Even worse when someone requested my review on a pull request. It wasn’t so much about receiving harsh feedback - as a freelancer, I was quite used to that. The thought of having to give someone else technical feedback however made me cringe with fear and anxiety.
I would often procrastinate on a review until someone else took over because I was “too busy” to get to it. Feeling like I was letting the team down made me feel even more guilty.
Whenever we did any estimation on a project, I would do the initial estimations, then I’d go on a confirmation spree, where I would double check with someone and triple check with someone else, then check again, ponder about the estimations and check again.
Dreading positive feedback
The saddest thing was the fact that even though I was working hard and performing well, I couldn’t truly believe any positive feedback that told me I was doing well: I actually feared positive feedback more than criticism. I felt that criticism would simply confirm what I already felt about myself. I was eager to improve but I thought at least people would see through the “facade” that I thought was so prominent around me. Performance reviews, because continually positive, turned into a torture!
A turning point - Mindswitch
This weird spiral just continued until I heard about this thing called imposter syndrome that sounded all too familiar. I had learned about it in passing but I also remember one of my most experienced colleagues giving a short talk on imposter syndrome at our company. I finally realized that something had got to give somewhere and that flourishing with that kind of mentality would be really hard. That’s when I made a hard switch.
Feedback is an opportunity to learn
I decided to invite as much feedback as people were willing to give. I went around and participated in as many conversations as possible and I was willing to be wrong.
If it turned out that I was wrong, I could learn, grow and move forward. In fact, being wrong was required to learn.
When people gave me positive feedback, I learned to take it and even learn from it. I realize that I am not the best in the world, but I now also realize that I am not a complete fool. It’s this delicate balance of realizing how good you are, not being prideful, and not being falsely humble that is a “safe-zone” in a sense.
The only way I think to actually stay in this place is by inviting feedback, assessing it, accepting it, being realistic as possible, not being defensive, being vulnerable in order to learn and grow, sharing and collaborating, never stopping, never giving up, never thinking too highly of myself.
Do things that scare you
I also started doing everything that generally gave me anxiety. One of the biggest things was giving others feedback. This helped me grow and understand where my knowledge was accurate and where it wasn’t.
Celebrate your wins
Let me repeat this: Make sure you celebrate your wins! I think this applies to software engineers in general but particularly to self-taught developers: We always focus on learning, improving, always wanting to become better. That in itself, of course, is not the problem.
I became more self-critical than was healthy: I always over-analysed my mistakes and my successes to figure out what should have been better. I forgot to take a breather and celebrate my wins and was never happy with any of my progress. That’s how anxiety and frustration became my main drive - not a healthy situation.
The truth is, celebrating your wins just means that you take as much accountability for the good thing you did as for the mistake you’ve made.
Now that I understand that, I’ve become a whole lot more motivated and confident and started building momentum.
People are on your side
I also changed the way that I thought about the people around me. Instead of fearing they were “out to get me” or “ready to prove me wrong”, I started assuming and that they actually cared about my growth. I started feeling more and more comfortable and realised that people just wanted to share, learn and grow together.
A big influencer in this perception shift was one of my best friends and colleagues, Simon. He confronted any sign of stray thoughts that I spoke out loud and really pushed me to be more realistic, instead of purposefully oppressive. His feedback has been critical to my growth as a developer and many other areas of life.
One of the largest blows to this imposter syndrome was when a friend of mine said: “As much as I want us to succeed together, I am more than willing to fail with you.” That if I was wrong, he would be wrong with me. This was one of the most impactful things anyone has ever said to me.
Paid (Cheap enough but great)
- The Odin Project
- Poignant Guide
- Khan Academy
- Codewars (great technical challenges to implement what you learn)
Conferences are a really good way to learn about broader concepts and ways of approaching problems. Going to conferences is a good way to learn from other people in the community.
Check out the meetups in your area. People at meetups usually are very willing to help you learn and grow.
Arrie is a product developer at Platform45, passionate about building great products that matter. He believes that life is too short for bad products and that hard problems can be solved at the intersection of design and innovative technologies, particularly AI. Catch him on Github or Twitter.