duolingo system design