Project Lifetime Visualization
Timelines is probably one of the largest, most comprehensive solo projects I’ve ever taken on… and subsequently abandoned.
I started it in mid-February 2018 after running into a tool called Hercules, which is a highly customizable Git repository analysis engine written in Go. It generates a DAG of analysis tasks to run on a repository and outputs a ton of data observing trends over the history of a project.
I thought this was a pretty neat take on project histories, especially since for myself and teams at my club UBC Launch Pad, it can be easy to lose sight of how far we’ve come in a project. So I decided to try and turn this concept into a service that tied all sorts of metadata about your project - Git history analysis, milestones, releases, issues, pull requests, and more together into a single visualization of the life of your project.
Over a period of about 4 months, I created:
- the core service as an integration with GitHub Apps
- a job engine to run sync tasks from GitHub and analysis jobs on arbitrary repositories
- PostgreSQL tables and adapters to transform analytics output into a suitable format for storage
- a comprehensive GraphQL API for querying analytics data
- development tooling to help set up mock data on my Redis and PostgreSQL instances
- observability hooks such as runtime profiling and automatic error reporting integrated with my loggers
I also had my service deployed on Heroku and Netlify during this time so that I could make sure things worked in the environments I wanted to deploy in.
During this time, I also started or improved a few other relevant side projects:
- features for my dependencies (primarily Hercules) that I needed or wanted
logging extensions for the
- a continuous benchmarking tool for observing performance trends
- generator for static, canonical Go package import paths
Unfortunately I’ve decided to abandon the project for the time being. However, my work on this has helped inform my other projects a lot, and expanded the toolset I have available to me.
Check out the repository to see how far I made it!