Solid technical skills
A sound understanding of the fundamentals of computer science
Hands-on experience building distributed systems
3+ years of non-internship professional software development experience
2+ years of non-internship design or architecture (design patterns, reliability and scaling) of new and existing systems experience
Bachelor's degree or foreign equivalent in Computer Science, Engineering, Mathematics, or a related field
Experience programming with at least one software programming language