A consumer facing mobile application delivering instant genetic insights on mobile hardware.

The Engineering Deep Dive

SNP Shot was the challenge of taking an idea that required large database and a lot of processing into a small application designed for a phone. The primary hurdle was the database size: searching through 1.6 million genetic markers is computationally expensive and carries a large data footprint. While working with Genotypica I was able to have a better understanding of how to optimize searching and data structuring. To solve this data processing power, I designed a database that was compressed and processed from a collection of over 100 23andMe tests. This new compressed database, allowing the entire database to fit onto most phones RAM. I then utilized features in Dart to move the search logic onto a separate CPU thread. This kept the UI running smooth while the background thread performed performed searches and matching. This architecture was the result of six full rewrites, each one pushing the performance boundary further. Because I did this independently I also had to create all of the methods and procedures for handling any sorts of errors or exceptions. The entire application runs with no need for internet and entirely locally guaranteeing user data privacy.

The Technical Post Mortem

SNP Shot was an exercise in extreme performance engineering. I iterated through six full architectural rewrites to find a solution that could handle all of the markers on a smartphone without large lag or long waits. I had to create an entirely new database that reduced the application's memory footprint by 80%. By leveraging Dart's asynchronous features, I kept the user interface fluid while the background threads performed heavy cross referencing against "global databases". This project taught me the importance of being willing to scrap a codebase to reach the performance threshold a user expects, along with the discipline and drive to make something you believe in.

Engineering Constraints

Solving for the 'Impossible' means navigating rigid physical and computational limits:

  • Searching records on-device without freezing the main UI thread.
  • Providing a low latency, intuitive interface for non technical users.
  • Building a cross platform codebase that remained high performance.