Solid understanding of algorithms and data structures, knowledge of object-oriented design, Design Patterns, and multi-threaded programming. Strong OOP skills, with the ability to analyze requirements and transform them into scalable software designs.