Menu

Building a music mini-site with data from Last.fm, Discogs, and YouTube

It’s been a little quiet on the blog recently, and the reason for that is either perfectly valid or profoundly unnecessary, depending on your viewpoint. Even I am not entirely sure which one it is.

Over the past couple of weekends (and too many late weeknights) I have used all my spare time to build a mini-site for my obsession with music. It started as a small idea to just show the current track I’m listening to, and a list of recent physical albums I added to my collection. But then it snowballed into something much more. You can view the site at music.elezea.com, or by clicking on the link in the top navigation. If you want to know a bit more about how it works, read on!

It all started when I came across Andy Bell’s mini-site for his music collection. He uses a Notion database and Last.fm to show all the music he has in his collection, and what he’s listening to. Since I also still use Last.fm (yes, it’s still around!), and all my physical music is documented on Discogs, I wanted to build a small site that uses the Last.fm and Discogs APIs to show some of that information.

But once I got started and got stuck into all the information available via those APIs, I just couldn’t stop. I still have so much more I want to do, but I know it’s time to take a break. All in all this has been such a fun and rewarding thing to spend my time on. I know the site has pretty much zero value to the world at large. But I love checking it to get more information about something I’m listening to—and it helped me take quite a few steps forward in my technical skills. So I’m choosing to call it a win.

Below are some notes about what the site does, how it works, and also what the experience was like for me (as a non-developer trying to learn).

Now playing

  • Get the most recently played track from the Last.fm API, and check if the song is currently playing or not.
  • If it’s currently playing, show the current time and a message that what you’re seeing is what I’m listening to in real-time.
  • If it’s not currently playing, mention that and show the time it was played.
  • Pull in the cover art and other data about the song from Last.fm.
  • Do a lookup for the artist and if Last.fm has data about them, show the first two tags (genres), first 3 related artists, and their bio.
  • Do another lookup to a different API endpoint for the artist’s top albums, and display data about their two most popular albums.
  • Use the YouTube API to do a lookup for the song, and embed the most relevant result in the page so that you can listen to it right there.

Top albums and artists

  • Show the top albums I listened to in the last 7 days, including play counts.
  • Show the top artists I listened to in the last 7 days, including play counts.
  • Make a separate API call for each artist to get their genres and similar artists, if that data exists on Last.fm.
  • Make another API call to get each artist’s most popular albums.

Recent purchases

  • Pull the last 6 releases I added to my Discogs collection.
  • Also pull in data about the genre, label, and release date.
  • ⏳ The Discogs API is really great, so I want to add a bunch more stuff here, but that’s also for the mythical v2 of this thing.

Random thoughts, complaints, and what’s next

  • The site is deployed with Netlify via a Github repo, and it just works. Netlify is so great.
  • I don’t care what you “real developers” say, the two biggest problems in programming are environmental variables and formatting dates. I am thankful for ChatGPT for helping me with the date formatting piece, and my colleague and friend Derek for helping to get the environmental variables to work.
  • Last.fm’s API clearly hasn’t been touched in years and the documentation isn’t great, so it’s been a bit of a mission to figure all that out. Postman has been a life-saver here to test the API calls and see what data comes back.
  • YouTube’s API has a limit of 100 search lookups per day, which feels ridiculously low. I hit that within an hour while I was building and testing it. Oops! On the upside: I am now much better at error handling. If the site hits that limit it will now show a message to that effect, and link to a direct search on YouTube for the song.
  • ⏳ I’m using YouTube only because the Spotify API makes it incredibly difficult to get an auth token. Auth tokens expire after 1 hour, and refreshing that token every hour is currently beyond my limited skills. I might come back to this as well because the Spotify API has sooo much interesting data.
  • ⏳ Another huge data source is the MusicBrainz API. I plan to spend some time wading through those docs as well to see what else I could add.
  • If you can think of any other cool things I might want to add to this, please reach out on Mastodon!

4 effective product team structures

Ravi Mehta’s 4 Effective Product Team Structures is a helpful framework for leaders to figure out how to organize product teams:

Because of the nature of product work, there are two vectors that product teams need to be organized around: area of focus and level of accountability.

  1. For area of focus, product teams can align their work with either business outcomes or feature development.
  2. When considering the level of accountability part of the structure, product managers either act as fully responsible owners of the work or as facilitators of the work, where they share metrics responsibilities with cross-functional partners.

In the article he goes through the pros and cons of each of the 4 structures.

Leadership tip: be a thermostat, not a thermometer

In Be a thermostat, not a thermometer Lara Hogan provides a helpful analogy for leaders on what to do when meetings go off the rails…

Once you’re able to start noticing when someone’s amygdala-hijacked, or simply that the vibes are off, you can reframe and use “be the thermostat, not the thermometer” for good. Since humans tend to mirror each other, you can intentionally change the energy in the room, setting the thermostat to a more comfortable temperature.

12 metrics to track for B2B SaaS companies

Elena Verna has a great summary of leading metrics for B2B SaaS companies, including some really useful benchmarks. Also a good reminder that revenue is a lagging metric:

Many leaders obsess over revenue. And rightfully so, because revenue is the outcome of any business. But revenue is a lousy metric to goal the team against because it assesses past performance instead of predicting the future.

If you want to dig a little deeper on the best metrics to choose for SaaS companies, here are a few more resources:

Link roundup for April 2, 2023

No image posts today, but it’s a blockbuster edition of the link roundup this week! I hope you find something interesting in here…

1 → LinkedIn power users are turning to ghostwriters (Vox)

LinkedIn remains a complete mystery to me.

“It’s cliché, but it’s true that people want to work with people, people buy from people, people want to see the human side of who you are before they decide to work with you,” says Tara Horstmeyer, an Atlanta-based ghostwriter who offers packages for 12 LinkedIn posts for anywhere between $2,000 and $3,000.

2 → How the Great Recession paved the way for the influencer industry (Vox)

It’s worth reading this fascinating interview with a curious mind. Especially if you, like me, are “of a certain age” and feel like you just don’t get it…

Influencers are neither ‘a flash in the pan’ nor ‘a bubble about to burst,’ but indicators of a paradigm shift in the way we think about each other and ourselves.

3 → On Place (Alica Kennedy)

This is a lovely, rich essay on the difference between “destination” and “place” when we travel, how digital nomadism displaces locals, the pursuit of a “decent meal” abroad, and more.

Continued economic dependence upon tourism leads inevitably to brain drain, when a labor force no longer wishes to work only service jobs. What does ‘local’ as an experience mean when it’s not in service to those who are literally local?

4 → The Life I Refused to Surrender (The Free Press)

This short essay from Amanda Knox packs a huge punch and really got to me. All we have is now…

No matter how small, cruel, sad, and unfair this life was, it was my life. Mine to make meaning out of, mine to live to the best of my ability. There was no more waiting. There was only now.

5 → The Streaming Market Is Fundamentally Broken. It’s Time To Fix It. (Public Knowledge)

There is just so much wrong with the music streaming industry.

Artists aren’t allowed to see the deals that set their streaming payment rates; indie labels aren’t allowed to see the deals distributors cut with labels on their behalf . And in many cases, artists aren’t even allowed to compare notes and talk about their own contracts.

6 → People Started Buying Crocs During the Pandemic. They Can’t Stop. (NYT Gift Article)

I have no pithy comment for this one.

“I roll into the gym with my Crocs on and everything, and people ask, ‘Aren’t you going to change shoes?’” Mr. Ndugga said. “No, this is how I’m going to live life for now.”

7 → Free Bird (Substack)

A top-to-bottom excellent post about Twitter from Ed Zitron. Read the whole thing!

Twitter can create an incredible sense of both intellectual invincibility and vulnerability that can drive someone quite mad.

8 → The Counterintuitive Thing About Trust That Explains Why So Many Teams Have Issues With It (LinkedIn)

This is an insightful post on the leader qualities that really build trust. In short, it’s about showing that you really, truly care.

Studies indicate that conveying benevolence is much more likely to earn you trust than conveying how competent you are. […] That’s why all things being equal, a person who is charismatic and kind will gain more trust than a person who is seen has having good ability.

9 → The Dangers Of Highly Centralized AI (Medium)

I agree with this take from Clive. It’s like we’ve learned nothing from social media.

The field of large language models is becoming dangerously centralized. A huge amount of power resides in the hands of a tiny number of firms.

This is a wonderful essay about the things that ensure happy and enduring families.

The bottom line: if you want a happier family, create, refine and retell the story of your family’s positive moments and your ability to bounce back from the difficult ones. That act alone may increase the odds that your family will thrive for many generations to come.

There’s more to life than OKRs: using EOS and W Planning for effective goal-setting in empowered teams

At Postmark we’ve long been fans of the “Entrepreneurial Operating System” (EOS) as presented in the book Traction: Get a Grip on Your Business by Gino Wickman. We also love the “W Framework” as outlined in the article The Secret to a Great Planning Process—Lessons from Airbnb and Eventbrite by Lenny Rachitsky and Nels Gilbreth. Both resources are excellent and highly recommended for the thesis and theory behind each of these frameworks.

In this post I’d like to describe how we combined these methods to set goals and run our business and product delivery process. I’ll start with a short summary of each method, and then go into specifics on how we used them together to ensure our teams are aligned on the same goals and have all the context they need to work autonomously on projects.

I promise I’m not here to start an argument about what is the best way to set goals. Instead, I hope this could be useful to folks who have tried a bunch of different frameworks—including OKRs—and found that nothing quite worked for them. Maybe this is a good alternative to try…

Goal-setting using EOS

We tried a several different goal-setting frameworks before landing on the Entrepreneurial Operating System (“EOS” from here on out). There’s no way to cover all it entails here, so please read the book, it’s very good. What I want to focus on specifically here is one of the primary outputs/artifacts of the system. EOS calls it the Vision/Traction Organizer (V/TO), but we adapted it into what we ended up calling the Vision and Focus Plan. This is sort of the equivalent of an OKR document, but we found the additional context extremely useful, especially when we layered W Planning (which I’ll talk about next) on top of it.

In its simplest form the document has two sections, one section for Vision, and one for Focus. The basic structure of the Vision section, using an example from our 2020 planning session for the Wildbit brand as a whole, is as follows:

Every year our leadership team got together for a few days to work on any edits we needed to make to the Vision section. Principles, Values, and Purpose should not change a lot. These are the long-term guiding principles for the company and though they should be revisited at least once a year, frequent changes would indicate that we don’t really know where we want to go with the business, so that should be a red flag.

The 10-year picture is a level down from the purpose—a way to look into the future of what the business would look like in reality if we achieved all our goals. The 3-year picture is way more concrete, and where we spend a good amount of time modeling and debating based on what we know about our business and the industry at large. These are the revenue goals that we want to achieve in the shorter term.

The Focus part of the document changes the most, and this part is the most directly comparable to OKRs. We generally made one of these for each product line (and sometimes even for individual teams). Here’s an abridged example from Postmark that we worked on during 2021 planning:

The sections can be summarized as follows:

  • 1-year plan. Think of this as the “Objectives” in the OKR framework. In tandem with the Vision this is where we want to be at the end of the year from a business perspective.
  • Quarterly plan. Similar to the 1-year plan, but a more immediate timeframe to reflect our planning cadence (this could also be 6 months, 6 weeks, whatever cadence you use for planning).
  • Goals for the Year. This is similar to the “Key Results” part of OKRs. They are measurable metrics and indicators that will tell us whether or not we’re on track to meet our 1-year plan. It helps for this section to cover a longer time horizon so that you can prioritize projects and bets effectively, and avoid sudden changes in priorities (which are really disruptive to teams).
  • Tasks for the Quarter. This is the nitty-gritty prioritization of problems we want to solve in a given planning timeframe to achieve our goals for the year. The visual planning and delivery/execution of these tasks happen in Productboard and JIRA, but this single view keeps us honest about what we’re working on. (See the next section for how we populate this column)
  • Issues List. This is a core component of the EOS system, and is an ongoing list of concerns, things we’re worried about, obstacles or impediments that we have to address, etc.

An essential component of making this approach a success is that we review the Vision & Focus Plan every week in our leadership meetings. We review business metrics, we talk about our progress, where we might be off track, what needs to change, what issues we need to add, how we are doing in addressing the issues, etc. That way we have a weekly check-in where we can adjust our plans and solve problems together1.

One really important part that I skimmed over in this section is describing how things make it onto the “Tasks for the Quarter” list. That’s where W planning comes in…

Planning using the W Framework

As I mentioned earlier, the original article does an excellent job of explaining the W Framework, and it should definitely be on your reading list. But in the interest of time I wanted to provide a short summary of how it works here. The gist is that planning is most effective when it is a collaborative effort between Leadership (senior/executive leaders of a business unit) and Teams (people executing the actual work). This makes it a particularly appropriate framework for empowered and autonomous teams. The framework looks like this:

The four stages are described as follows in the article:

Context: Leadership shares a high-level strategy with Teams.

Plans: Teams respond with proposed plans.

Integration: Leadership integrates into a single plan, and shares with Teams.

Buy-in: Teams make final tweaks, confirm buy-in, and get rolling.

So when we go into our quarterly planning we use our Vision & Focus Plan along with W planning to come up with our tasks for the quarter.

Phase 1: Context

As a leadership team we review our annual and quarterly goals as laid out in the Vision & Focus Plan, and make sure we are still focused on the right things. We ensure that the entire team has the strategic context they need to successfully enter the planning phase.

Phase 2: Plans

Teams take the goals and strategic context, and create project plans as bets on how they would like to achieve those goals. Note that at this point the “Tasks for the Quarter” column in the Focus plan isn’t filled out yet—that comes from the teams based on how they believe we can achieve our stated goals. In the words of Father Cagan:

Instead of being given a roadmap of features, an empowered team is given a problem to solve and they get to figure out the best way to solve that problem.

We use our Project Plan template for this part, which you can see on Github. The plan does not have to have every detail figured out. We view it as “a road sign into the fog.” We make sure the direction and first few steps are known, then add and edit as the fog starts clearing down the road.

We then share the plan with everyone in the DACI section of the plan by posting a link in Basecamp and requesting feedback form the team. We discuss comments asynchronously in Google Docs, or synchronously on a Zoom call if a decision can’t be made quickly in the comments.

Phase 3: Integration

Once the team planning phase is done the leads team gets together again to discuss the plans, how it all fits together, and any trade-offs that need to be made. This is where we fill out the “Task for the Quarter” section and make sure we are not taking on too much work for the quarter.

Phase 4: Buy-in

As a team we then get together to finalize the project plans, discuss any final questions/feedback on our priorities, and move individual tasks to Basecamp/Asana (for non-dev projects) or the appropriate JIRA Epics (for dev projects).

Once we finish this process our teams are ready to execute on their projects with clarity on how each project aims to influence our goals. This includes essential engineering scaling and reliability work—for instance, if our goal is to significantly increase the number of messages sent, we’re going to have to make sure that the platform can scale with that!


So there you have it—a way to combine two different frameworks to create a seamless goal-setting and prioritization process for empowered teams. Admittedly, I left out quite a few details in this post—there are lots more to discuss in this process, such as how we track progress, how we adjust based on new information, how we aim for “healthy pressure” within teams using high-integrity commitments, and so much more. But I am hoping that this brief overview sparks some ideas for teams who might have been struggling to make other frameworks work in the context of their own teams and culture.

Like all things related to software, planning and goal-setting require discovery and experimentation to get right. Even this article should be viewed as a snapshot—capturing a moment in time that describes our planning process. But we are also still constantly evolving the process as we get feedback from our teams and learn what works and what doesn’t. So try this one out, and let me know how it goes if you do!


  1. I plan to write more about the structure of our weekly meetings in a future post. 

AI won’t free up our time to do more valuable and fun things at work and home

I enjoyed Bill Gates’s post The Age of AI has begun, right until he got to this bit:

When productivity goes up, society benefits because people are freed up to do other things, at work and at home.

The idea that increased productivity gives people more time to do other things that are more useful and fulfilling is a thoroughly-debunked theory. First, there’s the question of what we even mean by “productivity”, especially in the context of the Productivity Paradox:

The productivity paradox (also the Solow computer paradox) is the peculiar observation made in business process analysis that, as more investment is made in information technology, worker productivity may go down instead of up.

But even if we can get to a point where we agree on how to define the word, we have known for a long time that the only thing that increased productivity does is create more work:

The usual first response to encountering the Productivity Paradox is disbelief: “If I have to write a few emails so that I don’t have to use a carrier pigeon, sign me up!”

But in a bureaucracy, the story of those few emails usually doesn’t end there. So, you send your few emails, and then you soon get email replies and comments. Now, you have to write more emails in reply to those emails, which are then sent up the hierarchy and to a chain of full-time reviewers, who each make a comment to show that they are useful.

So when we get more productive the time we “save” on one type of task just gets filled with a different, not necessarily more valuable task. But what about “at home”, you ask? Nope. We have also known for a very long time that instead of giving us more time for hobbies and hanging out, technology is killing leisure time:

The very tools that were supposed to liberate us have bound us to our work (and schools) in ways that were inconceivable just a few years ago. Almost all of us have less leisure time than ever. We work harder, take fewer vacations for shorter periods of time, report more stress than almost any other demographic group and find the boundaries between work and play increasingly blurred. Computing and communications technologies are destroying the idea of privacy and leisure.

So anyway, Bill Gates wrote a pretty insightful take on AI, in my opinion. But the idea that generative AI will free up our time to do more valuable and fun things is not backed up by history at all. Or to put it slightly differently:

How to onboard executives into a new role

This is such a great post by Will Larson about onboarding executives into a new role. His recommendations for topics to cover in the first two weeks are especially good. Like this:

Where can the new executive find real data to inform themselves, rather than relying on existing narratives? The best executives will listen to you, but won’t fully believe anything until they’re able to find data to substantiate your perspective. That’s not because they don’t trust you, but because any seasoned executive has been burned by trusting someone who fervently believed something that ultimately wasn’t true.”

And this:

Who do they need to spend time with to understand the current state and the company’s implicit power structure? Especially the longest tenured employees who uniquely hold parts of the business in their heads, and individuals who have significant influence over the executive team that wouldn’t be obvious from the reporting hierarchy.

Turns out there’s a Donella Meadows quote for everything:

Before you charge in to make things better, pay attention to the value of what’s already there.

Design with users, not just for them

In What we’ve learned from our users about designing for accessibility Andrew Gosine describes how their team lived out one of Slack’s primary design principles, which is to design with users, not just for them:

In another proposed update, we tried to get clever about where we placed a user’s focus when they opened a thread. If there was an unread message, we’d drop them into that first message in the thread. If there were no unread messages, we’d move focus to the message input. We believed this would increase efficiency for screen-reader users. Our feedback group reacted strongly to this. We’d unintentionally deteriorated the reliability of knowing exactly where you would be when you open a thread, and, as a result, we broke the way-finding our users relied on in Slack. Thanks to our group, we reverted that change.

This is a great read with lots of examples from the project.

Link roundup for March 25, 2023

The Beauty of Earth From Orbit.

Google and Microsoft’s chatbots are already citing one another in a misinformation shitshow. This is fine. “If you ask Microsoft’s Bing chatbot if Google’s Bard chatbot has been shut down, it says yes, citing a news article that discusses a tweet in which a user asked Bard when it would be shut down and Bard said it already had, itself citing a comment from Hacker News in which someone joked about this happening, and someone else used ChatGPT to write fake news coverage about the event.”

One hundred drones now used across IKEA retail for stock inventory. “One hundred busy drones are now at work during non-operational hours to improve stock accuracy and secure availability of products for online or physical retailing. This solution supports a more ergonomic workplace for IKEA co-workers as they no longer need to manually confirm each pallet.”

Is Blockbuster video about to make a comeback? I didn’t realize how many chances Blockbuster had to not die. “In 1997, Warner Bros approached Blockbuster with an exclusive DVD rental deal that would have split revenue 60-40 in favour of the studio. Blockbuster rejected it, and the studio retaliated by dropping its DVD retail prices to undermine the rental industry. And then in 2000, Blockbuster made two even more fatal decisions. First, Blockbuster turned down the opportunity to purchase the then-fledgling Netflix. Second, it chose instead to partner with Enron. Within a year, Enron filed for bankruptcy. Within five years, Netflix was shipping out a million DVDs every day. Suddenly, Blockbuster was yesterday’s news.”

Is there a drop in software engineer job openings, globally? “The US, Canada and UK are currently seeing some of the lowest numbers of developer job listings since Feb 2020.”

Swimming outside the lanes. Tracy Durnell talks about leaving her day job and going out on her own. “People complain that no one wants to work anymore. And it’s true to an extent: no one wants to work in a job where they are underpaid, unfairly treated, unappreciated, and constrained. I like my work, but so far dislike jobs.”

Shiny Happy People, Being Chased By Monsters. Are we in the midst of a vibe shift back to the days of whimsy? “FreakyLinks may have been on my mind lately because I think we’re in another moment of cultural shift from seriousness to whimsy; if you don’t believe me, ask yourself why Everything Everywhere All At Once so thoroughly kicked the ass of that movie about the mean conductor lady at the Oscars. We’re at a similar moment to where we were in the early 2000s — where people are shrieking ‘I want to be happy!’ and ‘I’m tired of thinking! Give me some baggy orange leather pants instead!’”

Songs are what we carry, even when we have nothing else. On the B-Sides I talk about the latest U2 album a little bit. “It’s the sound of a band that has been together for close to 50 years starting to wind things down the only way they know how: they sing the songs they carry, even when they don’t have a whole lot left.”