Steps to developing a usable algorithm Model the problem Find an applicable and useful algorithm Performance checks: speed size (runtime fits in memory) If performance checks fail, why? Address problem Iterate until satisfied –> Source ↗