Feature Complete 1.0

November 29, 2020 by Kade

I hate burying the lead in these posts so I won't.

All major features that were on the board for version 1.0 are now live.

This is a point of real pride for me since I remain the only person working on the code base. While most Americans had a short work week due to the Thanksgiving holiday, I used that time to code.

(For some context, I moved to Austin a couple months back and am about 1,500 miles from my family. Given the state of things, I didn't feel comfortable traveling to see them for this holiday.)

Here's an abbreviated list of new features:

  • !echolong cool down duration reduced to 2.5 minutes if longer than 3 minutes
  • Echo Duration User editable settings of what happens with these clips (include directly in recap videos, hold for review, or upload to YT)
  • Echo Duration standalone videos (includes first and last clip addition)
  • Complete rewrite of the primary video process
  • Rendering individual clips out
  • Saving all rendered videos and clips to zip files
  • Zip files are capable of being sent to user destination S3 buckets
  • YouTube uploads now use the stream title as the video upload title if the user has not specified another default title

Took more than a few energy drinks with some electronic music blasting in my ears but worth it in the end.

While many of these items will not affect the core user base of the product who are using the tool to create quick stream recap videos, the flexibility for those who want to do more is now available.

The biggest piece in this entire process is the rewriting of the primary video process. Up to this latest update on it, it hadn't been modified since the initial launch of the service. It's not an understatement to say that those 150 lines of code were the heart of this service. In the end, through some changes in core architecture, I was able to get this down to 97 lines with three new supporting functions. This reduction in total complexity actually means that things should be easier for me to maintain while also being more stable in day to day use.

This rewrite made it possible for the often requested feature to have the individual clips available for download. Some creators just wanted to have the ability to drop the clips into their video editing program of choice. I don't like going back on initial assumptions and choices that I made. That said, in my continuing effort to extract my own limiting choices from the app, I knew this one had to be added to the pre-1.0 release list. When you hear a user suggestion for the umpteenth time, it's time to listen and resolve it.

Additionally, I took some time to make sure that the clips that are being generated include value metadata in their naming convention. For example, if the clip starts at 01:45:12 in the stream VOD, the resulting video clip is titled as "8623__01h_45m_12s.mp4". The leading number is an internal clip ID and is useful for ordering of clips. If an editor needs to go back and grab an 3 seconds before the clip begins to grab a segment leading into the clip, they know from this file name exactly where to go in the VOD.

With the system now using individually rendered clips instead of subclips, funneling all of these into specific folders was a breeze. Zipping those files including the rendered videos was also fairly simple. Delivering those zip files to the Digital Ocean Space that I’m using for that portion of things did take some effort since I’m so used to having local on a single server. Since Spaces are just a specially wrapped S3 space, one win quickly became many more.

With all these pieces in place, I decided that it was the best move to go ahead and re-download and re-render all the clips and produced videos for every stream created over the past week. This way I could know with 100% confidence that the storage space had a consistent naming convention and could be trusted for all potential download links. All in all, it took nearly 24 hours to do this but in the end it did work as expected.

Finally, instead of just saving those clips and videos for streams where a YouTube video is uploaded, it’s done for any stream and any clip requested. This means that if a streamer doesn’t hit their required number of clips to produce a YT video, these clips are still available for download or delivery to their own S3 bucket for use in a future super-compilation.

Going Forward

Even though all the initial 1.0 features are live and currently working as expected, this isn’t a 1.0 launch quite yet. I have a ton of little UI/UX, user onboarding, website changes and go-to-market actions that need to get finished. As it currently stands, I feel confident that I’ll be ready to go shortly after the new year kicks off.

I’ve got a list of 30 features to consider developing and I intend to go back through those in the coming weeks and sorting out which are worthy of pursuing and which order. More than half dozen of these are less than 2 hours to develop and deploy and therefore I might consider sneaking some of these in-between the other work to relieve the stress that working on things that aren’t code creates for me.

Hope you’ve had a great week and if you celebrated the holiday that you did so safely.

[email protected][email protected]