Skip to content

Affinity (CRM) sucks, part 1

Disclaimer: I have never made software and I don't know what it's like to be on engineering and product teams. I don't know the pressures they have to go through to ship code by some sales deadline, etc. So everything I am writing about is all about my personal experience using Affinity as a customer.

For work, we have to use a CRM called Affinity. It is meant to be a solution for dealmakers (e.g., investors) who need assistance in leveraging and managing their network. Affinity works a lot like other full-fledged CRMs: It scrapes your email and calendar accounts to keep track of who (and at which organizations) your team has been emailing and when.

Affinity differentiates itself from the market as a relationship-focused CRM rather than a sales one (CRM stands for customer relationship management), which means they focus on giving you "relationship intelligence" (e.g., who introduced who, who in your firm has the strongest relationship with another person or firm, and enriched data like automatically adding what industry they're in). This is meant to remove a lot of the manual labor and guesswork that goes into the figuring out what the connections mean.

I will concede, Affinity seems to do these things decently well. The ability to see which introductions were made has been enormously useful, because I can have a running list of which investors my team has made intros to for any particular startup we're working with (this means less asking each other, and having the data for posterity).

But there are a lot of other things that don't work well in practice as they do in theory. Enriched data is extremely unreliable, and almost not even worth using. I can't trust what "industries" people work in or what location a particular person is in. If I was desperate to know, I might use it. On a day to day basis, these columns just get hidden away from my view because I'd rather reduce page loading times.

This is Part 1 of my rant, where I go through just the most basic functionalities that are just not executing well enough to be paying $$$ for. Part 2 will go into more detailed accounts and examples of why we don't use Affinity as much as we thought we would.

The core functionality is lacking


First, a CRM needs to just work. There are some classes of software that should focus on the core functionality of the product offering before they (over)extend themselves into other features. A calendar app, for example, should never mislead you into thinking that your local rendition is synced to the server when it actually isn't (cough cough Fantastical). Similarly, email apps, should never let you think that you've sent an email when you actually haven't. The consequences could be disastrous if any of these functions go wrong. If you're having important business meetings with high value clients, these could be jeopardized by faulty protocols.

Ninety-nine percent of emails don't need to be this secure, but if you are paying enterprise-level money to have this product, you should have enterprise-level trust in it.

The core functionality of a CRM is that they need to be reliable. I have heard from my teammates that Affinity has LOST many of their meeting notes and can no longer find them no matter where they look. Consequently, I know that members on my team will write their notes in Apple Notes first, and then transfer them to Affinity when it's convenient (if they remember).

I think there should be some kind of standardized metric for reliability as it relates to behavior. In pharmacology, a standard metric is the IC50, which is a measure of how well some substance can inhibit some biological component, but since the inhibition ranges depending on the concentration of the substance, the metric they use is "how much concentration does it take to inhibit by half?" (hence the "50"). In software and reliability, it should be something analogous: "What percentage does a software function need to fail to inhibit its usage by half?" For my team, it feels like the answer is a 2% fail rate could translate to half its max theoretical usage.


You could probably do the same exercise when it comes to speed: "how many milliseconds does it have to lag in order to drop usage by 50%?"

In Affinity, it takes a very long time to load some Lists. I've been on Zoom calls with the Affinity customer success manager to show them via screen share how long it takes to load. They have seen (and now internally own the recordings of said Zoom calls!) that it can take 20-30 seconds to load a List sometimes. And when you want to drill into a person or organization, you have to open up a new tab that will also take some time to load.

Speed matters because sometimes you need to figure out something really fast while you're on a call with someone. You don't want to interrupt the flow with "hold on let me look it up." Compare this with Superhuman (the email client) and the other startups who are leaning into the philosophy that every millisecond counts. Not  seconds. Milliseconds. This philosophy is premised on the fact that there are power users who need the interface to fly as fast as they do, but also on that small amounts of friction can determine whether or not something becomes a habit. If it takes me 2,000 milliseconds more to load an email on my phone, I'm just not going to check emails on my phone as often, consciously or unconsciously. If it takes me 10,000 extra milliseconds to find the information I need, I'm just going to use a different solution (like Apple Notes or, personally, Obsidian).

Back in the day of 56k modems, Google knew how much speed matters, and prioritized how fast your search results loaded. And now it feels like speed is just a table stakes. It's table stakes that you should have ways to compress your images and put them on a CDN to make sure that you don't compromise those 100 ms of load times. Every millisecond matters for user satisfaction, everybody knows that. Studies will point to how load times affect conversion rates and sales. The real costs of load times have been quantified, from Amazon, Google, Walmart, etc.


If Amazon loads 1 second slower they'll lose $1.6 billion on sales (and this is probably a really old estimate, the number in 2023 is probably closer to $6B). But if Affinity loads 10 seconds slower, it probably doesn't lose sales, and that's because most of their users are not the purchasing decision maker. Most of their users are the disgruntled employees who are too busy or don't care enough to voice to their management that their CRM could be better. And so CRM sales don't give a shit about whether you like the product or not--their goal is to renew the contracts with the decision maker, and there are easier ways to achieve that than to actually fix the technical debt that makes software suck in the first place (e.g., telling you that it'll be fixed in the next update).

User interface is made for people who type with 3 fingers

I've always said that the software industry is partially buoyed by companies that are basically make fancy spreadsheets (in some ways, that's what CRMs are). But when you reinvent the spreadsheet, you're basically reinventing the wheel (albeit a more specialized wheel). So, some part of software strategy involves discussion as to what does the user what, and what parts of the wheel do we need to reinvent first?

Affinity's first-class citizen is the "List" - basically list of either organizations or people that you interact with (let's call them entities). These are like Spotify playlists that you can add entities to (instead of songs). But managing those Lists doesn't feel like it has first-class functionality, with features that power users want.

1) There is no way to use the arrow key to navigate within the List, so if you wanted to select multiple entities, you have to manually do it by scrolling down the list your mouse and clicking the checkboxes. In some distorted way, this makes sense why this isn't a UX feature... because

2) Affinity doesn't even let you bulk edit!  This is such an important feature to recreate, especially for power users (a tirade on software not made with power users in mind is a whole other blog post).

Imagine that you have a List and you want to edit the property values of 20 entities, you have to manually click the cell of each entity, and manually edit each one. In other CRMs, you would just select the cells and then copy and paste. Or you would select the entities, and edit multiple property values. I can do this in Wordpress, I can do this in Airtable, I can do this in Google Sheets, I can even do this in my budgeting app (YNAB)! But for some reason, Affinity has raised over $100M and not implemented this basic feature.

You might try to solve this problem another way, which is to first filter for the people or organizations that you want to modify, THEN select all, THEN bulk edit those rows... but there is no Select All button! There. Is. No. Select. All. Button.

Why do you need this? So you can wrangle the data and clean it up in a way that makes sense and is more legible. If I want to relabel people into a different label, there's not an easy way to do that.

3) Another feature that is sorely missing is the ability to set exclusion filters. Affinity lets you filter for whether entities are INCLUDED in other lists, but not set a filter that EXCLUDES entities if they exist in a List. This is a basic logical function that seems like it's pretty easy to write; it's almost like a negation of the normal filtering function. There are workarounds to replicating an exclusion filter in Affinity, like selecting inclusion filters for everything EXCEPT the one you want, but it's just a hacky workaround that stop becoming legible after a certain level of complexity. This is the way that Google Sheets does it, but at least there additional options to set conditional filters like "does not contain ..."

4) Deduplication is terrible. Just kidding. There is no deduplication. There isn't even a warning of a duplicate in a List. The only way to do it is to export the List as a csv and just work OUTSIDE of the CRM (because even Google Sheets has a deduplication function). It also wasn't until recently that they started warning you when you are about to add a duplicate to a List (btw Spotify playlists has the best UX in terms of dealing with potential duplicates).

(I will say kudos to they way they the user choose how to handle potential conflicts when adding potential duplicates using a big csv import)

Without any of these 4 basic features above, we can't clean up our data or wrangle it in a way to make the CRM work for us. Good CRMs should be amendable and revisable, otherwise we're slouching towards obsolescence.

They focused on unnecessary bells and whistles

There is a feature where they tell you what your unanswered email are. I'm a grown man, I know where my unanswered emails are. But instead there is a page on Affinity that tries to manage this for me, either by telling me 1) "You are waiting for a response from XXX" and it is an email that I sent off with a clear end to the conversation, or 2) "XXX is waiting for a response from you" and it's basically spam that I didn't reply to for a reason.

But even if there IS an email that I end up replying to using this feature, it doesn't Archive the email for me to get it out of my Inbox... how else will I know that I'm done with this email and want to get it out of the way? If you're going to allocate resources on bells and whistles, make sure the whistle actually whistles!

End part 1

I want Affinity to make better software for their customers. No. Scratch that. I just want Affinity to use their own damn software, not just test it. I know they use HubSpot internally, which makes me even more angry. If Affinity could just live in their own filth for a while, maybe they'll have reason to clean it up.

Part 2 will be about actual voices from other firms who use Affinity, and how I think Affinity can make their CRM better, but a question I'm asking myself is whether I want to be providing them free labor...