Position: C++ developer
Company: EPAM
Experience required: 5y
English level: intermediate

We are looking for mature engineer to be a part of an experienced team of professionals taking technical ownership on complex real-time near low latency data delivery platform developed on C++ and Java 


Required: 
10+ years of experience in software development 
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 

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: 
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