Have you ever seen a cage fight? Where two MMA fighters go head-to-head until one of them concedes?

I think of it as the more gruesome older sibling of boxing. Every so often there is a fight where one of the fighters gets completely destroyed. Just imagine, you are an MMA fighter jumping into the cage. You’re feeling hyped and ready to prove that this is your time. The fight starts off well. You get in a few punches, start getting confident, maybe even a little cocky. Then the other fighter shows you who is really stronger. You get a…


“A Tech Lead is a software engineer responsible for leading a team and alignment of the technical direction” — Pat Kua [1].

While this is a useful high-level definition of the Tech Lead role, it’s not very specific to an actual business. You’ll find that technical leadership roles vary greatly between companies and even departments within the same companies. …


The Intersection Observer API allows you to observe and react to changes when an element enters the viewport or a parent element. It’s very commonly used for lazy loading but can also be used for things like animations or changing the active state of links in a navigation bar as you scroll to different sections of a page. Lazy loading images stops the user from having to download resources on initial page load, instead, deferring it until a more appropriate time.

I’ve been playing around with different effects for lazy-loading images and I like this one where instead of swapping…


A little while ago I was given a cool design for an Instagram story styled bubble component where each bubble would smoothly slide into its new position when we got its new order from the API.

While it can be straightforward to do a whole load of animations and transitions with CSS, it took me a while to find an example of animating the reordering of list items, especially with React. Since I’ve also started to get used to the concepts of React Hooks I wanted to use them to implement this animation too.

I found this difficult to do…


Evaluating your role and comparing it with others

I once got great advice while overhearing someone else’s conversation. My old tech lead was chatting with another engineer in my team and he said something along the lines of:

“In any job I regularly think about whether I’m Learning, Earning and Advancing. I don’t stay anywhere if I’m not getting at least two out of three of them.”

I have followed this advice for years and it has really helped me to evaluate positions I was in and compare potential job opportunities. …


Over the years, my understanding of what it takes to grow as an engineer and climb my career ladder has changed dramatically. When I started out, I was confident all I needed to do was to become an amazing coder. I thought I just needed to know how to build complicated features.

Though, when I looked at the careers of more senior people in technology, this didn’t really add up. Most CTOs and Technical Directors aren’t spending their time in the codebase and worrying about code quality in their day to day roles. Even technical architects and leads don’t always…


I gave a talk called Junior.next() at a few different events. This is a written version of a section in that talk. Over the upcoming weeks I also plan to write about all the other parts too :)

So, I don’t mean this to sound cringey, because it sounds cringey in my head, but I think stretching yourself and setting stretch goals in your tech career is so important. When I first started out as a software engineer my aim was to say yes to everything.

  • “Tara you’ll need to learn Angular” — cool
  • “Tara can you fix this bug?”…


In my attempt to write more in 2020, I want to start by looking back and reflecting over 2019. In 2018 I enjoyed a busy year of travel, speaking and breaking out of my comfort zone in my day to day work. After the whirlwind of that year, 2019 was about dialling back and enjoying life outside of work, I really needed to recuperate 😅

FutureLearn

At FutureLearn I moved teams, twice. I’d spent about a year and a half working in a consumer focused team. We worked on features aimed at helping our learners to find the right course for…


I’ll be honest, I was a teeny bit disappointed when async and await became a real thing in JavaScript. Not because they aren’t great, but because I literally just got my head around promises, and was excited to write them more 😂

Never mind. It is by no means wasted learning.

Async / Await are actually like the next level to promises. So, it helps to understand how promises work before using them.

Brief overview of promises

As JavaScript is a synchronous language (it can only handle doing one thing a time), promises allow us to delegate some tasks to somewhere else. …


GraphQL has been a buzzword for ages, and one that I’ve not had the time to really look into. Though, I’ve been at Codemotion Berlin this week 🎉, so when I saw Michelle Garrett’s talk ‘Build the API you want to see in the world (with GraphQL)’, it sounded like an opportunity to finally understand the hype.

Firstly, the thing that I’ve heard the most; is how GraphQL will eventually replace REST. Michelle started by talking about the differences between the two.

REST generally involves calls to different endpoints, like /movies /reviews or /actors then you have to figure out…

Tara Ojo

Software engineer. She speaks and writes about career progression and front-end development. @tara_ojo

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store