Building Portfolio List

Jakub Svehla—Oct 28, 2019

Since the new EU regulations (PRIIPs) came into effect on January 1, 2018, I have been struggling with choosing a new investment portfolio that would replace my current three-fund portfolio from Vanguard that I can no longer invest in. Most of the literature (and recommended sample portfolios) are focused on US investors and while there is a simple go-to portfolio for lazy US investors (aforementioned three-fund portfolio), I did not find any such portfolio for lazy EU investors, such as me. On the contrary, there is a bazillion of ETFs and sample portfolios to choose from that are scattered around the web and it's not anyhow structured so it's difficult to filter them based on your criteria and compare them. So in the end I got so paralyzed by the options that I stopped investing altogether for some time. So I thought it would be a good idea to have a place that lists all the portfolios available (for both US and non-US investors) and allow to sort, filter and compare them. Let's say, for example, that you are an EU investor who wants to invest in bonds and stocks and accumulate the income. Now you would be able to easily find suitable portfolios for you and compare them in terms of expected return, volatility, costs, etc.

There are already similar tools that help you to choose your "theoretical" portfolio, i.e. your asset allocation, such as Portfolio Charts. However, they don't tell you how to "implement" it using ETFs that are available in your country, listed on an exchange that your broker supports and are the cheapest and most tax-efficient for you. So my goal is to collect the data and do exactly that.

Idea

I came up with the idea last Sunday (2019-10-20) while working on my tool for managing & evaluating my investment portfolios (which I am planning to make available as a product for others as well). I immediately thought that it could be useful for others as well and save them some time when choosing an investment portfolio. At the same time it is quite easy to do so I decided to give it a try. Besides making something useful, there are some other reasons I want to give it a go:

Also, I decided to build it in the open and document all the steps, decisions and ideas, keep track of the time spent on it, track all expenses and so on. Following are some of the reasons (in no particular order) why I decided to build it in the open and write about it:

Building

On Monday (2019-10-21), I came up with the name Portfolio List and bought the portfoliolist.io domain name for €59.

The first thing I had to do was to put together an initial list of portfolios to kick it off. I still have a full-time job so I woke a bit earlier on Tuesday (2019-20-22) and Wednesday (2019-20-23) and did some research and started gathering and writing down the portfolios, their asset allocations and what ETFs they consist of. At first, I thought that I would make a Google Sheet and put it there so that anyone can easily contribute. Also, I wouldn't have to make any front end since it's already hosted on the web and anyone can view it. But I soon found out that the data won't fit nicely into one flat spreadsheet. There are many different entities (portfolios, securities, listings, benchmark indices, asset classes, etc.) and some of them hierarchical so the next idea was using a relational database. However, I would have to set it up somewhere and pay for it (except for the SQLite database). Moreover, it is not easily editable without special software (database client), the data files are not human-readable and it is not easily versionable. So in the end, I ended up with plain YAML files that are structured, human-readable, easily editable with any text editor, can be versioned using Git and anyone can contribute to it just by doing a merge request. It cannot enforce referential integrity, which would be nice, but it will do for now. I think I will need a proper relational database later anyway.

On Friday (2019-10-25) night, I finally got some time after work and I already did my homework and put together few sample portfolios so it was time to create a web site that would serve them. The first idea was to just write a plain static HTML page and load the content via JavaScript directly from that YAML file. With this approach, I wouldn't need any back end and could host it easily on GitHub Pages for free. However, the dynamically rendered content in the browser wouldn't be visible for many search engines, inaccessible for users without JavaScript and not easily cacheable. So I opted out for using a simple Flask app (Python) and generating the content on a server. This way it's easily consumable by search engines and can be cached as well. Also, it gives me more flexibility and allows me to do some back end logic later if needed. And for now, I can host it for free on Heroku and later switch to the paid plan for $7/month.

I set out a goal to build the minimal working version and deploy it as soon as possible. So I sat down, put together a simple and ugly app listing all the portfolios from the data files, deployed it to Heroku and set up portfoliolist.io domain to point to it using Cloudflare. Not even two hours passed between opening the code editor and having a live web app available at portfoliolist.io. I was frankly quite amazed by how simple is it to write a web app and deploy it so fast.

Screen Shot 2019-10-26 at 02.12.08The first version of Portfolio List

Since the beginning, I wanted to make the work open. So I decided to release the source code under the MIT license and license the data set under a Creative Commons Attribution-ShareAlike 4.0 International License and published both on GitHub on Saturday (2019-10-26). Below is a couple of reasons why I decided to make the work open:

Next, I wanted to make it as easy as possible to make any changes and deploy them without breaking it. So, on Sunday (2019-10-27), I wrote a simple test, set up a YAML linting tool and set up a continuous deployment pipeline so that a new version can be deployed with a single push to the master. When the data format gets more stable, I would also like to write a utility for validating the schema and maybe checking the referential integrity.

On Sunday (2019-10-27), I added a new portfolio, added more details about the portfolios and made the web site (hopefully) a bit less ugly. You can see the result below.

Screen Shot 2019-10-28 at 13.44.51Portfolio List after the "redesign"

On Sunday night and Monday (2019-10-28) (it's a holiday in the Czech Republic), I put together all my notes, wrote this article about building Portfolio List, set up my new blog (also open sourced) using GitHub Pages and published it. Again, it's quite ugly but I will make it nicer later.

And finally some stats after the week of work:

Hours spent Money spent Number of portfolios Number of commits Number of deploys
16 hours €59 5 23 10

So that's it for now. In the next posts, I would like to write about how I am planning to market it and how to monetize it.

If you have any comments, feedback or questions, let me know on Twitter or via email.


Thanks for reading

If you liked the post, subscribe to my newsletter to get new posts in your mailbox! 📬

Also, feel free to buy me a coffee. ☕️