Reimagining LifeFlix
Since March of 2023, I have been focussed on updating, enhancing and re-imagining the namesake software product for the company LifeFlix. The Macintosh application enables users to import digital and analog video, that can then be organized, edited, and exported-to-share between digitally-connected friend.
The project has been fun.
I got a chance to exercise my practical software development strengths, while simultaneously confronting some of the most basic challenges that come up when building modern software.
How It Started…
Here is a screenshot of what LifeFlix looked like when I first got involved.
LifeFlix v3.6.1 was shipping. Sales had been good, but the software’s reliability was a serious business concern. Mysterious and spurious crashes were leading customers to demand refunds.
Product development had been done using a mashup of C++ alongside HTML and Javascript built on a foundation of Mac OS X 10.9. This mixture was garnished with several third-party libraries, frameworks, and other bits of open source code.
Unfortunately, much of that code was long in the tooth and had not been touched since 2013 (a time period that had seen Mac OS X go through 10 versions). Simply put: the product was not taking full advantage of the functionality provided by the underlying platform.
LifeFlix also had a “non-native” visual appearance and several user interactions that were inconsistent with the style of a typical Macintosh application. If you were familiar with the Mac platform, you immediately notice that the selection color doesn’t match the system-defined (and dynamic) selection color. You also notice the non-standard controls in the movie playback window, as well as, the “interesting” implementation of drag’n’drop.
These things didn’t make the software inoperable, but they did result in a (unnecessary) learning curve for new users, who will often use any excuse to not use software that requires them to do something new or different.
The Path Forward
As I began work on version 4 , I marked out several goals for the project to accomplish.
First and foremost, the software had to become more stable. Crashes lead to unhappy customers. Unhappy customers lead to refunds. It was an imperative to not let that potentially lost revenue become a drag on profitability.
Second, the software needed to be modernized to take advantage of new technologies that had been introduced to the platform over the last 10 years.
Third, update the applications visual appearance and behavior to be more consistent with what users expect from a macOS application.
No More “Fall Down, Go Boom!”
To address the issue of reliability, the software was rewritten from the ground up.
My strategy was to “make things as simple as possible, and no simpler”. The platform provided a lot of functionality for free. My job was to design and implement a few well-defined primitives. Specialized functions would be added only when necessary.
Version 4 was rewritten entirely using Objective C. This gave the codebase a singular approach to the functionality in the underlying platform (e.g., memory management). At the API-level, AppKit, Foundation, and AVFoundation provided a stable interface for the underlying operating system. Additionally, all third-party code was removed.
As a result, the code for the project shrank from 13 megabytes to 1 megabyte. The number of compilable modules dropped from more than 150 to 49.
The data architecture was also reconsidered. Again, focussing on simplicity, I created an internal object hierarchy that was as flat as possible, using just a few objects to represent the items being manipulated by the user with the application.
Previous versions of LifeFlix created lots of intermediary files during the processing of media clips.
With this development effort, I took a different tact. Users would manipulate media references instead of the actual media files. This resulted in a much more storage-efficient application because the reference files were a fraction of the size of the original media files. AVMovie “became my friend” because it provided a great deal of functionality for editing and storing movie clips.
Instead of a monolithic data store, FileWrappers were used because they are more efficient when you have larger quantities of (stable) unchanging data.
All of these things worked together well. I was able to delivered a much more reliable and effective piece of software with a smaller, easier-to-maintin-and-upgrade codebase.
“Thoroughly Modern LifeFlix”
Reimagining LifeFlix from being an application based on Max OS X 10.9 to one that was layered on top of today’s macOS required careful consideration of the existing LifeFlix customer.
The product’s core functionality enabled users to capture video from older analog and digital devices like the Sony Handycam. (You know, that person that has a shoebox full of miniDV tapes in the back of their closet)
Though these devices were strongly supported in the 2000s with Apple’s FireWire technology, they were no longer front and center in the digital video world. Subsequently, many existing customers were not focused on upgrading to the latest version of macOS.
With this in mind, macOS Big Sur (version 11) became the foundation for building LifeFlix 4. At the time, Big Sur was only 2 versions behind the most current macOS, but it was still a 7 OS versions leap from the minimum requirements for LifeFlix v3.6.1.
Between Mac OS X 10.9 and macOS Big Sur, the operating system had undergone 7 major updates. New APIs and Frameworks had appeared (Hi AVMovie!)… and a lot of other stuff has disappeared (I’m looking at you QTKit). Luckily, XCode is very good at identifying these types of problems. Most were simple to locate and mitigate.
In the end, LifeFlix 4 delivers a cleanly compiled product that featured the most up-to-date functionality available from macOS’ APIs and Frameworks.
The Art of Walking and Talking Like a Duck
Macintosh users expect applications that have a user interface consistent with the platform. That is one of the strength of the Mac. LifeFlix v3.6.1 was not playing to that strength.
So, with version 4, LifeFlix got an entirely new user interface.
I have designed a lot of user interfaces and interactions. My objectives here was to build something simple, intuitive and learnable. To take the structure and relationships of the objects a user will manipulate (e.g., movies, albums, etc.) and reflect that structure in the application’s visual appearance.
My design brought most of the application’s functionality into a single-window. Popovers were used to present user-requested information or solicit focusses input. Custom controls were replaced with standard (familiar) controls for the video preview. Users were presented with a toolbar, making it easy to quickly perform common tasks. For each action that a user could take, the software provided multiple avenues to accomplish the task (e.g., menu options, toolbar icons, keyboard shortcuts, swiping left/right, etc.).
Additionally, a more consistent drag’n’drop functionality was implemented to allow better interactions with the file system (making it easier for users to organize the movies in their library).
I was pleased with how the design turned out. It’s clean, simple, effective, and user-centric.
And the beat goes on…
Since the delivery of LifeFlix v4.0.1, the product has continued to evolve. I have added functionality for importing from iPhones and other mobile devices; the ability to download video from internet sources like YouTube and Facebook; and a video effect panel for simple visual adjustments, along with a number of new minor features and bug fixes.
LifeFlix version 4 has become a stable platform to build more great functionality as it moves into the future.