An elevator system has moving parts with clear states and a real scheduling problem, which makes it a favourite for checking both design and algorithms. It teaches you to separate two decisions: which car answers a call, and in what order one car serves its stops. Practise it to get comfortable with the State pattern and with pluggable strategies. Do not keep all stops in one unsorted list, and do not let the car move while its doors are open.