Full-Stack Development at Fan.si
Episode II: Return of the Co-ops
The Story Continued
For those that didn't read my report from last summer or just need a refresher, Fan.si is a small startup located in Guelph, Ontario. The company was founded by Joel Augé, Jack Read and Matt Grieve in late 2014. Fan.si’s mission is to help musicians make a living, which in today’s music industry is an incredibly difficult task unless you are one of the few at the top.
Since I returned to school in the fall a lot has happened at Fan.si. For instance we received an investment of $1.5 million from a private investor and we hired some more developers so there’s an actual team now (it’s not just Jack and I anymore!). We also hired a pretty awesome designer, bringing the grand total of people working at Fan.si to 8. Most importantly we secured a deal to create a custom version of the platform for an incredibly popular artist. This project has literally consumed the company for the past 6 months, the main platform has been put into ‘maintenance mode’ while we give everything we have to working with this massively high-profile artist (seriously I’m not kidding this artist is huge). The exposure this project will bring to the company will be amazing and should help bring Fan.si closer to helping musicians everywhere.
Working on a Slightly Larger Team
As I mentioned the development team is no longer just Jack and myself, pumping out code as fast as possible. Instead there are now 5 developers (including another co-op, the lovely Erica Pisani) working on the different aspects of the project. This meant a new team dynamic to get used to. Before Jack and I held the entire system in our heads and while we used Git Flow and tracked bugs in Github we weren't super strict about it and the structure was fairly loose. Such as a lack of structure doesn't work for long though with more people on the team. At times the office and code base got kind of hectic as everyone adjusted to their new team members and our untested development strategies. However by the end of the term I felt that we were together as a team really well.
My Role…As a Manager
One of the most exciting changes during this term was that Jack asked me to take ownership of the front-end application. This meant that not only would I be responsible for most of the work going into the web app but I would code review other people’s pull-requests and pick new libraries if they were needed.
The web app runs as a completely separate application with no server side code except for the static content serving. As a result I was also responsible for figuring out the build and deploy processes. This role was a huge responsibility as the project Fan.si is working on is approaching release and the web app needs to be solid. I was honoured that Jack and Joel trusted me to oversee it.
Code and Lots of It
This whole term at Fan.si has been a whirlwind of features, issues and pull-requests. So much that I am hard pressed to really pull out specific things that I worked on that I’m especially proud of. This is not to say that I’m not proud of what I've worked on, in fact the exact opposite. There’s no one thing in the code base that I can say I’m most proud of because I’m proud of the whole damn thing. Looking back I can’t believe how much I've grown as a web developer since last winter (I pretty much went from 0 to 100). I gained a ton of experience using Backbone.js (the bread and butter of the front-end app), Underscore.js, Google AppEngine, and a bunch of other web technologies.
However if I had to pick one thing to talk about it would be the first feature I worked on when I returned to Fan.si in December, a streaming audio player that used SoundCloud as a CDN. The goal of this feature was to replace the existing code that simply used SoundCloud’s embedded player. The player essentially had two parts; the song list which loaded a playlist/song from SoundCloud that then let users pick a song, and the player widget itself that showed current track, time elapsed, skip, etc. All in all it was a great project to work on that gave me experience with HTML5 audio, and super interactive web UI (an audio player has way more moving parts than displaying pictures and comments). Also sorry I don’t have any pictures of the player, that would give away who we’re working with ;).
My Own Project, From the Ground Up
Now the Fan.si front-end wasn't the only project that I had ownership of during my semester. And this one was considerably more fun and daunting because it was to be a completely new project. Basically the app collects event data (like pageviews, logins, signup funnel steps, etc) using Keen.io but we had no way of visualizing this data. This was a really big problem because the project we are working has the potential to reach tens of thousands of users and we need to be able to interpret all that data to make useful changes. So my project was creating a front-end site to display the Keen.io data as graphs and also write some server code that would authenticate against our main API and act as a cache between the front-end and Keen. Oh and the front-end needed to update in real-ish time.
The server code was written with Google AppEngine as usual and was a blast to write because I got to play with their Channels API. Essentially when a user logs in (they have to have admin access to the artists’ statistics) we store their connection in a list of active clients. Every few minutes we ask Keen.io to do a bunch of data analysis on the data we have and send the results back. The server then sends this updated data to each active client. The clients then use Keen’s JS library to visualize the data. Overall the project wasn't that challenging since the analysis and visualization are done for us by Keen but the Channels were some of the most fun I've had coding in a long time. There was something magical about the server sending down updates to actively connected (they have the browser tab open) clients in real-time.
The Ups and Downs of Startup Life
Of course, as with any startup, my work term was not all fun and exciting challenges. The truth is startups are hard (such an original revelation, I know), they can be really frustrating sometimes, sometimes you wonder why you’re doing what you’re doing or if you’re qualified to be doing it. Fan.si is no exception. While this artist that we are working with has the potential to make us a success we've also thrown everything we have into the project. If it doesn't work out Fan.si probably won’t either and that is pretty scary.
One of the biggest challenges I faced this semester was adjusting to the new environment in the company compared to when I left. When I left we were writing code that was being pushed to real users almost daily. But now with this big project that has consumed all of our focus we aren't developing for anyone other than ourselves and the artist we’re working with. Sure people will eventually use it but it wasn't as immediately gratifying as when I was pushing to real, live people. I still don’t know how I feel about it to be honest, I've never launched a product before so I don’t know what that payoff feels like. I’m hoping its great.
Ok back to the happy, because really I am happy. Working at Fan.si has been one of the best experiences of my life. I've grown so much as a web developer, especially client-side development, which I had only some experience in before the winter started. I’m honoured that Joel, Jack and Matt have continually decided to put some of their limited funds towards keeping me around. I truly hope that this project that we've all been working on for five months is a success and that Fan.si is along with it so that we can go about changing the music industry one fan at a time.
Thanks to everyone on the Fan.si team
and good luck with the launch!