Position: Lead C++ Software Engineer
Company: EPAM
Experience required: 5y
English level: upper

Requirements 

7+ years of experience in software development 
Team leading experience
C++- 5+ years of experience 
5+ years of industry experience with large distributed environments 
Multi-threading 
Networking (TCP, UDP, Multicast) 
UNIX inter-process communications (message queues, shared memory, semaphores) 
Linux/Unix 
Ability to provide occasional production support (off hours) - compensated separately

Nice to have: 

Understanding of Unix kernel, deep OS knowledge for high performance optimizations,  
Understanding of data structures and algorithms 
Java experience 
Financial Markets Data domain knowledge​ 
Strong written, verbal, and presentation skills​ 
High attention to detail concerning data, testing and analysis 

Activities 

Implement product enhancements, new functionality: 
Technical Day 1’s changes - mandatory functional changes driven by exchanges, commercials 
Integration of new content types, analytics enhancements 
Implement technical, non-functional requirements and improvements to comply with high-demanding KPIs: 
Use of OS-kernel objects like message queues, memory-mapped files, shared memory due to near low latency requirements, KPIs for components  
Constant performance improvements - bandwidth management, CPU, memory capacity analysis and optimization 
Analyze changes in data patterns, data growth (up to 50% data growth per year) to design and implement changes in data-driven compression  
Constant resiliency and recovery improvements in highly distributed environment (2 data centers with 2 live-live silos each; ~2500 physical servers) 
Enhance monitoring, troubleshooting toolset to comply with guaranteed delivery requirements 
 
Responsibilities 

Take full technical ownership for one of core solution components 
Participate and start driving analysis of software and infrastructure capacity (network bandwidth, CPU & memory capacity, changes in data patterns, application and system level bottlenecks), improvements definition and implementation  
Work collaboratively providing support and sharing knowledge to other colleagues across all locations 
Communicate to client stakeholder on daily basis in order to elaborate on requirements, architecture and technical decisions