User management has stumped me over and over in my projects as an indie developer. Questions have crossed my mind, such as: "how will people use this?", "is anyone using this feature?", and "why aren't people downloading this?". I've been left with applications that haven't come close to their full potential. Software is nothing without users. Each application requires careful consideration of users and I've struggled thus far, but I think I'm starting to figure it out with my latest project, FriendGroup.
The first application I published was an Android game called Falling Rocks. I released it on the Google Play Store a few months after the viral indie game Flappy Bird had been removed. Flappy Bird's success had me thinking that my game could become super popular, and all I had to do was updload it to the Play Store and wait for it to start racking up the installs. However, I saw very few installs after first uploading - almost 100% were my family and friends. I remember Falling Rocks hovered around a dozen installs for a long time and four years later it has only 50. Apps don't market themselves. Even though Falling Rocks wasn't a viral hit, I still learned a lot from my users because they were close contacts. The first thing my users taught me was that I should spend more time testing my app before publishing; I made changes including a typo fix and had to tweak the interface to work with large dispalys. One of the best things I took away from Falling Rocks was from a conversation with a friend. This user/friend told me that he had been playing Falling Rocks a lot, was really enjoying it, and had exciting news for me.
The game was super simple with a character moving left or right across the screen to avoid falling rocks. As the character dodged each rock, a score on the side of the screen would increment, and at certain scores, the number of rocks falling simultaneously would increase. I had gotten pretty good at my game and was able to score over 30 consistently with a high score of about 50. Many of Falling Rocks' users couldn't score above 5 - it was really difficult. Now, back to my friend's exciting news that I mentioned to keep you engaged: he had scored 120 points! I was shocked that someone had figured out how to use my software in a way that I never realized; he had developed a skill I had not. I was ecstatic and wanted to make more things for people to use.
After Falling Rocks, I had a few failed starts - some because of my lacking development experience and some because I lost interest. Many of the projects I had tried after Falling Rocks were Android apps, but I hadn't learned SQLite or even figured out how a server-client architecture worked, so the ones I could develop were all very basic. I would quickly bump into a feature that would require back-end functionality or data persistence that would derail my project. None of the ideas were important enough for me to step out of my UI-only Android comfort zone. Luckily, I had an internship where I was introduced to databases and server-client architecture through web development. Of possibly greater significance, I had conceived an idea that I was determined to bring to life.
360-degree video and photos were starting to pop up in my media feeds over the summer of my internship. It was really cool to be able to view the full visual context of a video or photo, but the interaction of clicking and dragging on a computer was not good, and the screen on my phone was too small to really appreciate the higher-quality 360-degree content. I realized this while watching my favorite YouTuber failing to keep my attention in a 360-degree video; I wanted to explore the scene, but I was distracted from his story-telling by a clunky interface. Some of my time in undergrad had been spent in a lab working with eye-tracking, and I started to think that eye-tracking could be the solution to this sub-par experience.
I started getting involved with the community surrounding the 360-degree content display library I had been using. I joined their messaging channels, contributed to their open source project, and interacted with the creators and maintainers on social media. When my project was ready to be published as a component for their library, I was very active on their messaging channels - answering questions and such. The project was published and I shared it all over the place. I made a YouTube video to demo it, wrote some examples, and documented the code for easy usage. 360-degree web viewer was trending in the relevant subreddits and got attention from the library's creators (as well as users) in the messaging channels. This time, my project gained a lot (relatively) of users, quickly gaining 50 downloads through NPM and just passing 350 after a year since release.
While there were a lot more users this time, I didn't get a lot of feedback. There were a couple of simple issues filed on GitHub, but that was about it. My marketing was good, but maybe the software wasn't ready to be released. I don't know what the user experience is like because I only have access to the download numbers, but I imagine many of the users are unable to create the things they envision with my software. I didn't know how to engage with my users, so I didn't know what to do to inquire about user pain points. Falling Rocks' and 360-degree web viewer's user management were fresh in my mind as I started work on FriendGroup.
I knew that FriendGroup's success would be completely dependent on its users - just like any other social network. It would need to work well for users and there would need to be enough of them to make it valuable. With a focus on user acquisition, retention, and engagement from the start, I made sure that adding users would be a core feature. Users are added through email invites from an existing user. Because this requires knowing the invitee's email address, I assume that the inviter actually knows the invitee and that they have discussed FriendGroup prior to the invite or as a result of the invite. From the invite email, the invitee clicks a link to open a signup page that asks for a token included in the email, a first name, last name, and password - the only personal information I ask for (email is implicit with invite). Once they have signed up, the user is navigated to the feed page of the group which they were invited. They can now post, comment, and like within this group.
The first user of FriendGroup was me, obviously. Someone needed to work out the basic kinks and contribute content, so I took that on myself. After adding a few posts and comments, I made a big effort to get a group onto the platform. My friends were advertised it over one of our group Google Hangouts, and I followed this up with an email including context and instructions. They helped me work through some of my initial bugs and I was able to get feedback from them frequently - the first group on FriendGroup. There were also a lot of things I was able to infer from their usage of the app. Since there were interaction mechanisms, I could see if my users were posting, liking and commenting. An example of an early learning is when someone tried to create a post with a "%" that caused all of the feed to disappear because I hadn't encoded the posts - I'm still a noob.
After this group had gotten comfortable using FriendGroup, I decided it was time to add new users. I created three new groups and invited friends and family to them. I had different relationships with each of the invitees and they had varying familiarity with social media. One group never took off - I could see that the invitees never acted on their invites. Another group saw some interest initally, but right now it lacks the user count to pick up steam; one of the invitees didn't act on their invite. The third group has taken off and sees a lot of activity. Each of these groups, and the original group, have taught me a lot about the overall user experience. The invitees of the group that never took off are acquaintences of mine and friends of a member of the original group, this original group member is one of the less active users. A new group's success depends on the level of engagement of the inviter. An invitee's first perception of FriendGroup is based off the inviter's experience and description. When this group didn't make it past the invite stage, I wondered if they had forgotten about the invites. I decided to add an expiration to invites and an email reminder that would be sent a day before expiration. This was effective with one user who I noticed acted on his invite one day before expiration. Email notifications have helped in other ways, too. In order to remind users that FriendGroup exists and they can use it, I have a service send out weekly summary emails. I saw usage pick up and sustain after implementing this.
The new group that took off was catalyzed by one of its users. This user was commenting and posting just as much as I was. It seemed like this gave the others confidence to interact more because they started posting and commenting ocassionally. I recognized this trend in the original group, too. I think most of the users are regularly visiting FriendGroup, but they only interact when they feel comfortable interacting; most don't want to be the only one posting. In channels outside FriendGroup, my users will talk to me about something that was posted; work needs to be done to encourage some of this conversation on the application. After a redesign that made the interface look more modern, usage has also improved. I think with a couple users added to the partial group, and a catalyst user interacting regularly, that group could pick up - that's where my next efforts will be focused.
Slowly adding users and monitoring engagement has allowed me to grow my user base to a dozen. There is regular activity in two of the four groups, and I think a third will soon turn. Without marketing FriendGroup to a large audience, I have been gaining insights about user management to ready the app for a larger user base. When I take the chance to put the skills I learned from 360-degree web viewer to practice in social media marketing, it sure will be exciting to see how FriendGroup grows and how users interact with it and eachother. I imagine I'll see some things I never expected.