Good features don’t always deserve to be in your product - an opinionated summary.


What you create should be governed by what you’re trying to achieve. If you don’t have clarity of vision and a belief in its viability then it’s unlikely that whatever you build will succeed.

When you don’t know where you’re going, any road looks good.

You need that “greater purpose” defined for feature planning. Most features seem like a good idea in isolation but how do they relate to the vision? Do they really help or enhance the experience for the user on their journey? …

I personally find it difficult to be proud of my work as a whole.

I might occasionally be happy with my implementation, or with how a feature turned out but I’m never happy with the products in general.

This is an issue for me as it really hits my motivation, why continue working on a product that ultimately doesn’t meet my standards? I find it’s sometimes buoyed by a discussion on a new feature / design / improvement but then returns back to it’s slow decline.

Now, motivation hitting bottom doesn’t mean I stop working, but it does mean I’m…

Maybe we’re spoilt by UITableView or maybe we’re graced with it, either way UICollectionViews are not as well rounded.

I needed to make the supplementary views in my UICollectionView behave like UITableViewCells do when you touch down on them, i.e. support a background colour and a method call when it happens.

Like this

UICollectionViews don’t really support this behaviour at all, I had previously added a single UIGestureRecognizer to each supplementary view so I knew when they were tapped but it didn’t allow me to do the correct highlighting behaviour.

Here’s what I did:

1. Subclass UICollectionView


Anyone who has worked with Core Data will know that NSManagedObjects (or perhaps more accurately NSManagedObjectContexts) cannot cross threads.

This leads to you having to do some additional work; if you have some heavy processing to do on a load of NSManagedObjects (searching maybe) then you’ll be wanting to do that in a background thread.

However, should you try to then populate your UI based on those background fetched NSManagedObjects you’ll get all sorts of issues and probably your fair share of statement still active errors.

It’s not all bad news though.

Core Data is very fast…

Greg Gunner

Product Person

Get the Medium app

A button that says 'Download on the App Store', and if clicked it will lead you to the iOS App store
A button that says 'Get it on, Google Play', and if clicked it will lead you to the Google Play store