Я бы использовал такие критерии:
Junior - знает ли язык программирования на отлично.
Middle - может ли работать самостоятельно над сложными задачами, искать варианты решения, имеет опыт завершенных проектов.
Senior - профессионал в программировании с большим опытом. Может реализовать любую задачу на разных технологиях, языках.