We are seeking a highly skilled Senior Software Engineer to join our Tehran Technology Team. In this role, you will be responsible for designing, developing, and implementing software solutions. Your focus will be on delivering high-quality, scalable, and maintainable systems using modern software engineering practices.
Responsibilities
- Own and be accountable for the design and development of complex, high-priority, or critical product sub-systems.
- Produce clean, efficient, and thoroughly tested code for challenging features.
- Develop clear, well-documented, and complete designs for product features or sub-systems.
- Act as the go-to expert for a product or major sub-system, providing technical leadership and guidance.
- Lead design and code reviews, ensuring adherence to best practices and high-quality standards.
- Drive architecture discussions and propose solutions for system and product improvements.
- Collaborate with other technical teams to align on cross-functional requirements and solutions.
- Mentor and guide other engineers, fostering a culture of continuous learning and improvement.
Requirements
- Strong ability to quickly learn and apply new technologies effectively.
- Proven experience in contributing to both architecture and implementation in complex projects.
- Excellent problem-solving skills and the ability to collaborate with fellow engineers to find optimal technical solutions.
- Deep understanding of software engineering principles, including OOP, SOLID, and design patterns.
- Passion for writing clean, maintainable, and efficient code.
- Experience with Agile methodologies and a focus on iterative, high-quality delivery.
- Proficiency in C# and the ability to write pragmatic, performant, and testable code.
- Strong knowledge of .NET and ASP.NET, including its ecosystem (Threading, Async, Linq, etc.).
- Expertise in relational database design, querying, and optimization (SQL Server).
- Experience with Entity Framework or other ORM tools.
- Familiarity with writing Unit Tests and Integration Tests using frameworks like XUnit or NUnit.
- Experience with Microservices architecture and distributed systems.
- Advanced SQL programming skills.
Nice to Have
- Experience with Kafka, GraphQL, HTML, CSS, and JavaScript.
- Familiarity with Domain-Driven Design (DDD) and gRPC.
- Knowledge of containerization and orchestration tools like Docker and Kubernetes.