cflynn07/myblog

View on GitHub
posts/2020-07-20-clubbingowl.md

Summary

Maintainability
Test Coverage
<br><br>
<img src="/static/images/clubbingowl/clubbingowl_logo.png">
<br><br>

10+ years ago, when I left college after studying Computer Science and Business
at Northeastern University in Boston, MA, I tried building my first startup. I
named it ClubbingOwl (initially named VibeCompass) and it was a massively
overengineered, technically fairly impressive but overall terrible business
passion project. Instead of taking a normal software engineering job, I spent
2+ years working on this. I became obsessed and routinely worked 100-hour
weeks, frequently working in 24-hour nonstop stints. I don't think I ever had
more than $100 in my bank account.

<br><br>

<p style="text-align:center;">
    <iframe align="middle" width="560" height="315" src="https://www.youtube.com/embed/f9g0pJtCXmM" frameborder="0" allow="accelerometer; autoplay; encrypted-media; gyroscope; picture-in-picture" allowfullscreen></iframe>
</p>
##### Recorded live demo of ClubbingOwl from 2012

<br><br>

My obsession was so great that I would work on my laptop until I couldn't stay
awake, then I'd fall asleep in my bed with my laptop, and then the moment I
regained consciousness I would reopen my laptop and resume working. I was
always excited to implement all my ideas and that excitement gave me all the
energy I ever needed to keep going.

<img src="/static/images/clubbingowl/clubbingowl_showcaseborder.png">

As a business, ClubbingOwl was almost a comical failure. My 20-22 year old self
completely ignored the time honored advice of ship a minimum viable product and
get something into the hands of users to get feedback and iterate as quickly as
possible. I spent two years implementing every feature and premature
optimization I could dream up. The whole time I was thinking "if I make this as
awesome as possible everyone will use it because it's awesome." Well it turns
out there was a big problem with that naive approach.

<img src="/static/images/clubbingowl/screenshot1.png">

I also didn't adequately research my target market. All the nightclubs in the
world that were potential clients don't actually constitute a very big market.
When I approached all the nightclubs in North America with my product after 2
years of work, they all thought it was great but each of them wanted it to work
*slightly* differently so much so that it was almost impossible to offer
ClubbingOwl as a multi-tenant SAAS application.

It definitely wasn't the healthiest time period in my life. I neglected diet,
sleep, physical fitness and probably to a large degree my mental health. I
lived in my parents' basement and didn't have much of a social life.
Ultimately the business never really got off the ground. I was young
and naive and I made some very rookie mistakes. The biggest mistake being
"geeking-out" to an extreme degree and fixating on all the
features/improvements/optimizations I could build because they were "awesome"
and I was tunnel-vision obsessed with the code.

<img src="/static/images/clubbingowl/screenshot15.png">

The project did however catapult my software engineering career forward.  It
gave me the experience of working on all technical components of a SAAS
product. It gave me invaluable experience in developing my self directed
learning ability. Ultimately it gave me a lot of confidence in my ability to
build.

### What exactly was it?

ClubbingOwl was a SAAS product with web and iOS (iphone/ipad)/Android clients.
It was a platform for nightclub patrons, promoters and staff. It was largely
built using the Facebook API. Users would authenticate with their Facebook
accounts and add their friends to guest lists. 

It had two sides, a patron/client-facing side where nightclub patrons could
find a promoter to get them on a nightclub's "guest list" and also see which
promoters their Facebook friends were using as well as a back-end side for
nightclub promoters, managers and staff to coordinate, chat, organize guest
lists, table arrangements, email marketing, etc.

<a data-no-spa-link href="/static/images/clubbingowl/clubbingowl-db-schema.png">
    <img src="/static/images/clubbingowl/clubbingowl-db-schema.png" style="width:100%;">
</a>
###### ClubbingOwl Database Schema

As a web application, it was quite complex. It was my first large-scale project
implemented from scratch. I was the only engineer so I had to build every
aspect of it myself. I gained experience designing database schemas,
queue systems and distributed background job processing, distributed caching,
infrastructure, servers, IAAS/PAAS, CI, deployments, etc. While the project
turned out to be a total failure as a business, it gave me an opportunity to
rapidly enhance my skills.

10 years later, when I look at the code I wrote I can't help but laugh. My
coding practices were a mess. I over-commented my code quite a bit. My commit
messages were terrible. I've definitely come a long, long way. I assume, that
if all goes well, everything I work on today will look terrible in another 10
years when I look back again.

### Screenshots
<img src="/static/images/clubbingowl/screenshot2.png">
<img src="/static/images/clubbingowl/screenshot3.png">
<img src="/static/images/clubbingowl/screenshot4.png">
<img src="/static/images/clubbingowl/screenshot5.png">
<img src="/static/images/clubbingowl/screenshot6.png">
<img src="/static/images/clubbingowl/screenshot7.png">
<img src="/static/images/clubbingowl/screenshot8.png">
<img src="/static/images/clubbingowl/screenshot9.png">
<img src="/static/images/clubbingowl/screenshot10.png">
<img src="/static/images/clubbingowl/screenshot11.png">
<img src="/static/images/clubbingowl/screenshot12.png">
<img src="/static/images/clubbingowl/screenshot13.png">
<img src="/static/images/clubbingowl/screenshot14.png">