@cvan wonders if we can make this DRY since this contains almost the same helper methods as the `AppFeatures` model