How knowing your strengths and weaknesses can guide you

Knowing your own strengths and weaknesses is an important part to success, Ollie Read has proven that despite his own personal battles that he's been able to use them in a way that has been important in his programming journey. Having first discovered coding at 15, Ollie has gone from strength to strength to become a recognised developer in the PHP/Laravel community.

...
Ollie Read
Worcestershire, UK

Who are you? Where are you from and what is your backstory?

I am Ollie Read, and I’m from Worcestershire in the UK. I live in Birmingham with my partner and our 7 month old baby, Evie. I’ve been writing PHP for 15 years, with 12 of those being as a professional developer. 

 

I lived in London for a few years where I got to work with some interesting companies on some even more interesting projects, such as Miniclip, CancerResearch UK, The Open University, and my personal favourite, Goodluck Johnathan who at the time, was the president of Nigeria. Outside of that my backstory is a simple one. I like to code, so I code, and I code everything that I can.

 

What made you get into programming?

In my early teens, I had a fair few issues, most of which were of my own making, but they mostly stemmed from boredom. I found the work at school easy, and I didn’t really have anything to focus on. At the time I didn’t really know myself so was unaware that my behaviour was a result of not having a conduit for my thoughts. By the time I was 15, I discovered programming as a concept, specifically PHP, and it all just sort of clicked. 

 

I have something called low latent inhibition, which has two side effects. Firstly I struggle to block out external stimuli, and secondly, I tend to see things as a sum of their parts, rather than a whole. While these two traits had caused me a number of issues, they worked perfectly with programming, allowing me to easily absorb information and break things down into their individual parts. It was around this time that I had to leave my home with my mom and stepdad, which was off the back of my behaviour. This, although of my own making, caused me to lock myself away in the spare room at my nans, with nothing but an old computer I had built and a 56k dialup line. Recognising that I was struggling, I decided to dive into the world of development and spent as much time as I could reading, learning and playing, and things just sort of went from there.

 

What made you start building products?

I’ve created a number of products, though mostly for clients. I think the two things I’m probably better known for would be the multiauth Laravel package that introduced the concept of multiple authentication guards, back before it was in the core and my article on multitenancy with Laravel. The first I created because I needed it, and I saw that others were hacking around with what was available, with the end result being less than desirable. The second I wrote because there seemed to be a lot of misinformation and over-engineering to approach a topic that sounds far more complex than it actually is.

 

I’m in the process of creating a few more products. I have Contraption which is a pet project where I’m trying to create a modern simple and powerful framework whose components can work independently of the framework itself (much the way Laravel was originally intended), but with very very limited requirements, such as no Symfony. I’d say the next best one to mention would be the Kitchen Sink Academy, a video subscription service for learning to build everything with Laravel. I decided to start this project because I felt that most of the content out there was somewhat lacking, and focused far more on theory than practicality.

 

What does your process for learning to code look like?

This is a particularly difficult question to ask, as I tend to absorb things subconsciously. My head is full of facts and answers to questions, though I have no knowledge of how or when I acquired this knowledge. I’d say that for me personally, I like to break everything down to be as small as possible, map out how it would look in my head, and then I just start to fill in the blanks. This is hard to explain as it mostly happens as an internal visualisation and I’ve no idea how I’d even begin to explain it.

 

That being said, I’d recommend following the same process. Take what you do know, or what you can initially learn and lay it out. Figure out how each of these parts relates to the other parts. It’s also very important not to be scared of failing, everyone does it, and we need to first fall before we can climb back up.

 

What does your process for building apps look like?

My process for building is almost identical to my process for learning. I typically start with a requirements document, which will serve as the basis for the specification/statement of work. As I read through the requirements and build up the specification, the overall layout of the system will build up in my head, taking shape. I’ve found that this gives me a good insight into problems that may occur, and lets me find solutions, or make note of them before I write a single line of code.

 

Once I have this document I’ll go through and start writing the actual code. The order in which I develop parts of an app could be seen as haphazard or lacking order, as I sort of flow through it. I’ll typically pick a process through the system and then build that. It does mean that some sets of functionality will have bits missing as it has been built to match a particular process, but that will be handled later on when a process comes to need more than is available. The initial processes are simple ones, growing more and more complex as I go through the system. Unfortunately, I have little control over which processes I pick as they just sort of come to me, and I’ve learned to follow them otherwise I’ll end up distracted.

 

The overall idea of the app continues to build and iterate in my head, as the code builds and iterates. This allows me to go back to clients or the specification, and update with alternative solutions or even add/suggest new features.

 

Do you face any particular challenges when building over a period of time?

My above answers to my building and learning process make me sound like one of those infuriating people that just sort of gets it, but it very much is a double-edged sword. Because things tend to build up in my head on an almost subconscious level, I have little to no control over it. The biggest challenge I face is an idea supplanting my current project, and becoming all I can think about.

 

I have a hefty amount of notebooks full of ideas and thoughts in an attempt to manage this. Sometimes an idea will continue to grow in my mind, and if I don’t do something about it, it becomes all I can think about. I’ve found that in most cases, simply writing it all down in a notebook serves as a good way to stop it beating on the inside of my skull, though 50% of the time it’ll come back at some point in the future.

 

This, unfortunately, affects my productivity because it’s hard to concentrate on a clients project while an idea beats on my brain, slowly becoming all I can think about.

 

Are you currently learning anything new?

There’s a lot that I would like to learn, and although I’m not actively learning anything new right now, I’m constantly trying to improve my methods and coding, constantly trying to find better solutions.

 

Advice for those learning to code?

Look and play with the code. When I first wanted to get to know Laravel I installed 4.2 and ripped it apart. I went through everything, scanning and following as many method calls as I can. If there’s ever something I need to figure out, I look for similar code and read through that. Once I have an understanding of that works, I can create my own solution. While reading books, articles and watching videos will help a lot, reading through and playing with the code is invaluable.

 

Speaking to the community can also be very beneficial. I don’t mean just asking how to do something, I mean asking for opinions or alternatives on ways to do things. Don’t just drop into a Slack or Discord and ask how to do a particular task, instead first have a go, see what you can come up with, and then put it to some people willing to take a look and provide some criticism. You’d be amazed at the number of times I implemented a particular design pattern without knowing that it was an established design pattern.

 

What’s your tech stack?

I’m primarily a web developer working with PHP, specifically Laravel. On top of this, there’s the standard HTML, CSS with some SaSS preprocessing, Javascript because you can’t live without it these days and MySQL though I typically favour MariaDB. This will mostly be deployed on a DigitalOcean Ubuntu based droplet, running Nginx, MariaDB and PHP-FPM.

 

What have been influential books, resources and links that have helped you?

Code. It has been so long since I actually learned PHP (Almost 16 years) that the sites that I used no longer exist, and I’d be surprised if many of you reading this had even heard of them. The biggest resource I’ve found has been GitHub or any place that publicly has code for you to read. I said it before, but the code itself is an invaluable resource in learning.

 

Where can people learn more about you and your work?

I write articles at https://ollieread.com, though that is on a bit of a hiatus at the moment as I rebuild the site. Having a baby limits the amount of time you have for writing articles, unfortunately. I often talk about dev stuff on my twitter https://twitter.com/ollieread. I’m on GitHub https://github.com/ollieread, https://github.com/sprocketbox and https://github.com/contraption. I’m currently preparing to launch a video tutorial service for Laravel at https://kitchensink.academy and...I think that’s about it.