# Bookclubs, networks, etc
Its been a minute since my last post, i figured i'd go over some of my experiences and conclusions made while building this web app for readers. Since the last post, we have developed some testable hypothesis:
- Do people want to engage in an asynchronous online book club experience.
- Is the platform we are building sufficient for accomplishing that?
- If the answer to the following is a yes, are people willing to pay for the experience?
I'm hoping to have answers to at least one of the three of those soon, in the mean time heres some stuff i learned.
Knowing when to rely on a third party service:
We built all of the features for hardcover without relying on plug and play third party services for our front end. While that was great for bettering my personal understanding of how the internet works and how to engineer complex js apps - I probably didn't need to build our own custom websocket connection manager to handle concurrent user actions. We could have used pusher and saved some significant time (but incurred some cost).
Creating something easy to contribute to:
Contributing to a codebase shared between two developers is much different than working on an enterprise sized codebase shared by hundreds of developers with lots of legacy code. In any org, people have a tendency to re-engineer solutions that have been solved prior (DRY). I think two main causes for this phenomenon are a lack of investigation from new engineers of how things currently work (reading code is important when you join an org) and employee turnover being high. Knowledge gaps seem inevitable, even in an ideal situation where code legibility is good. People (myself included) can have the tendency to skip reading code and jump into contributing when pressed for time. Having tenured engineers who can review code is a luxury, I will always be indebted to the senior engineers who continue to help explain complex legacy features to me. With this project I am trying hard to minimize abstractions as much as possible. Having one service for urls, another for db requests and trying to write as much vanilla js (not relying on framework or library abstractions outside of the latest es standard) has helped me create something pretty simple. In leu of adding an additional transpilation step via introducing typescript, i have been pretty thorough with JS Doc documentation - which has helped me keep things more clear when creating functions. We still need more front end unit tests but i'll get to that soon.
Writing well is an essential skill for designers:
Making this app has taught me most about the iterative process of designing products and how having to write down specifications for what you plan to build is such an important step to invest time in before you start making wireframes.
Varying the point of view you write with is also important. For example, writing the technical outline of how something can work may be easier to do in the third person but describing the expected user journey in the first person has helped me gain empathy for users and find ways to simplify complex flows. While making bookclubs - the steps to sending an existing user an invite to join a bookclub initially involved:
- Navigating to the member settings page of our bookclubs section.
- Clicking a select menu option, revealing a button.
- Clicking the button reveals an overlay containing an input field.
- Users type into this input field to search for friends.
- After search results loaded, users click the name of the friend to invite which adds them to a temporary list that they can send individualized emails to or send in batches.
In writing this annoyingly lengthy list, it dawned on me that I should reduce our UX to rely on fewer steps.
On book clubs and cultivating communities online:
Recently, I had an interesting conversation with a friend about online communities and some of the challenges faced by readers that want to participate in online bookclubs. The person I spoke with read 150 books in the span of two years, and was very familiar with the current landscape of platforms for reading online. One of the main problems with any online community is visibility. For book clubs, having to filter through the endless slew of niche clubs for a likeminded group of people is hard. Add to that, that for many clubs in the current landscape - there isn't a clear way to gauge activity. How often are users posting, what is the general pace of the club, what's the "vibe" of this intangible amalgamation of digital stangers?
My hunch is that that question presents a solvable problem, with good UX and enough pointed data, you can nudge people into finding their niches. We aim to include detailed club feeds and (maybe sort searched clubs by descending post frequency).
One thing I am exploring in our book club feature is an opt-in peer pressure system, which allows users to "encourage" their fellow club members who may be falling behind the average club pace to pick up the current book and catch up. Notifications can only be sent to someone once per week by each member in a club to reduce the likelihood of overwhelming them.
Talking to multiple friends of varying reading levels, i've gotten a mixed response from this idea. Some have reveled in the prospective hilarity that poking your friends to read would bring, one even dubbed it as "gamified reading". Other friends have confided that this feature might discourage them from participating in a book club entirely, because of the fear that they might be holding people back. As of now, I am building this as an optional feature that can be enabled on the club and user level.
I thought of my time in undergrad as an english major where even interesting books would garner dry and pretentious discussions partially as a result of the overly formal academic setting. If there was a way to introduce some absurdity to a book club that might open up discussions to make people feel more comfortable contributing their sincere opinions. We came up with our own award system to try and keep things fun and light.
Good notification systems are important and make complexity feel simple:
ff A good notification system will give your users an overview of what is happening across your entire app. Friend requests, club notifications, invites to bookshelves, invites to bookclubs, likes on posts, comments on posts, etc. There is a TON of important information to relay to your users. Keeping track of all of it is a daunting design challenge and requires creating a hierarchy of which features you want to showcase first.. Book clubs are the big thing we are testing for our mvp, so notifications for those go first. However, friend stuff is also important. I've attached some screenshots of the peer pressure system in use below.
Above is a screen shot of our pace feature for a book club. Here is where users are able to see how far along they are while reading and (optionally) suggest to their friends to read more of the current book.
Above is a screenshot of a peer pressured notification appearing in your notification menu. users can filter this out using the buttons above. Its limited to only one notification per club, we just change the numbers on the integer for "others want to hear your thoughts". This was done to avoid overwhelming peoples feeds with a ton of notifications. Also theres a limit on how many can be sent at once.
An aside on our award system:
When coming up with our own way to grant awards on posts in a book club I was inspired by the design and feel of discords award system and shopify's polaris design system. Both of which do a really cool thing with buttons. They make their buttons appear to have depth by playing around with box shadow. When you click on a button, the border around it changes, making it look like a real button that is getting pressed down. This gives the user a psuedo tactile feel which I wanted to try and replicate for ours. To be totally blunt, i don't think i completely got it right on the first go around - (story of my life) - but we have a good start. I've attached our awards menu and an example post below for context.
Above are two screenshots, one of which is our award system that shows what a hovered \ pressed award looks like. It also has the users award count. While developing this, we initially had the number of allowed awards for each user of a club set super low - which to quote kyle "was kinda lame". Kyle was right, we upped the limit on the amount of awards you can grant in a club to 1000. As i write this im realizing i might just get rid of that limit altogether since its kind of arbitrary, or not show it in the UI. We don't want people creating unlimited awards and running up space in our database though. I digress.
Book club member management
For this feature we created our own management system which sends emails to users inviting them to join our app via a particular book club. I'm reading The cold start problem, which is all about network effects - this kinda leans into that. The book harks on this idea that many successful software platforms grew by creating these networks, getting people to join easily is a pretty important part of that. published
Above is our member management system where you can invite users to join a club. I need to finish the actual email but its something like, "So and so wants to read x with you on HardCover" [Join now]"
More to come:
Comments next, then our afterwords feature for clubs, then a new nav system, then we test.
I've been taking a deep learning course and reading "Dive into deep learning" from d2l.ai. Im excited about creating a club specific recommendation pipeline where we pass in text data to an llm in order to gauge what kind of books the club might want to read next (or the club members might want to read). This could also lean into our bookshelves feature via the introduction of a separate shelf called "recommended books". Some of which your friends recommend, some of which we recommend - not completely sure how it would work yet but I think theres something there. I also want to explore tags, to recommend certain readers to join clubs with each other.
Thanks for reading my nerd monologue.
🎉🎉🎉 Happy holidays and happy new years 🎉🎉🎉.