While putting together a free bonus app for my Build a SAAS App with Flask course I had to implement a feature where I wanted to show the 5 latest fake facts posted by community members in a sidebar.

Seeing What the Feature Does in a Demo Video

If you’re curious, here’s a few minute demo of what the application does. We’re going to go over building this API driven app in the course but the feature I’m talking about in this article is at about 2:06 in the video below:

This isn’t a terribly difficult feature to implement, especially with jQuery, but I want to go over my thought process on how I came to the code I ended up using because as I was implementing it, I smirked to myself while thinking “yep, this is a text book example of breaking down problems” and here we are.

Identifying and Breaking down the Problem

In order to break down the problem, we first need to identify it clearly.

Typically, problems are just features in disguise. My thought process was:

I’d like to list out the 5 latest community fake facts. They should get updated as new fake facts are pushed through a websocket channel, so the list needs to get updated on the client side as new facts get broadcast.

Just by thinking that through, 3 things naturally emerged:

We’re going to have to use Javascript

We’re going to have to add new elements to the DOM

It should be something that happens when a websocket event is triggered

The above 3 things can be further broken down:

1. We’re going to have to use Javascript

Since I’m already using jQuery in this project, it makes sense to use jQuery to help solve this problem because it has really good tools for working with DOM elements.

2. We’re going to have to add new elements to the DOM

jQuery, has an .append() method that lets you append elements to whatever element you have set as a selector. Even more specifically, it has a prepend() method which does the same thing, but it puts the new element as the first element instead of the last element.

That’s perfect. All we have to do is prepend the incoming fact to some container selector.

3. It should be something that happens when a websocket event is triggered

This part isn’t too important for the sake of this article. In your case, maybe the trigger is submitting a form instead of a websocket event. I just wanted to include that step for completeness, because figuring out what causes the item to be added is important.

Creating an algorithm for prepending the item to the list:

For anything that’s not stupidly simple I tend to write out pseudo code, or list out the steps using a combination of plain English and general programming terms. It wouldn’t be “real” code, but it greatly helps you think through a problem and saves time in the long run.

Here’s what that could look like in this example:

Define a max length parameter (5)

Get the max length of the latest facts container

Prepend the new fact to the facts container

If #2’s length > #1’s length, remove the last element in the facts container

Converting the algorithm into real code:

Now that we have everything in place, writing the code is really straight forward. I’m going to simplify things by not using a template engine or dealing with websocket events, but here’s what the important bits of the code looks like:

var$factsContainer=$('#facts-container');varmaxFactsContainerLength=5;varfactsContainerLength=$factsContainer.children().length;$factsContainer.prepend('<p>This would be the fake fact message.</p>');if(factsContainerLength>maxFactsContainerLength){$factsContainer.children().last().remove();}

Look how close the real code is to the algorithm / pseudo code. Pretty neat.

What are some problems you’ve broken down recently? Let me know below.

Never Miss a Tip, Trick or Tutorial

Email Address

Like you, I'm super protective of my inbox, so don't worry about getting spammed. You can expect a few emails per month (at most), and you can 1-click unsubscribe at any time. See what else you'll get too.