Software Engineer - Developer Infrastructure

Facebook ,
London, Greater London

Overview

Job Description

**Intro:** Facebook's mission is to give people the power to build community and bring the world closer together. Through our family of apps and services, we're building a different kind of company that connects billions of people around the world, gives them ways to share what matters most to them, and helps bring people closer together. Whether we're creating new products or helping a small business expand its reach, people at Facebook are builders at heart. Our global teams are constantly iterating, solving problems, and working together to empower people around the world to build community and connect in meaningful ways. Together, we can help people build stronger communities - we're just getting started. **Summary:** Our team is designing and implementing systems for catching software bugs automatically before they reach 2 billion (and growing) WhatsApp's users.Many of our systems are already in production catching real software bugs daily.The WhatsApp Dev Infra team provides infrastructure and platform for testing, static analysis, and continuous integration. We also provide testing frameworks, especially in the area of end-to-end UI testing.Scalability is the key challenge. Our mission is to provide tools with capacity requirements growing sublinearly in terms of the number of tests and code changes (see test selection and code change batching below). Our infrastructure is used daily by hundreds of colleagues at whatsApp, with hundreds of code changes tested and integrated per day. **Required Skills:** 1. Designing and implementing Test Infra systems end to end 2. Providing guidance on system, API, library and database schema design to team members 3. Engaging with external stakeholders and cross-functional team partners 4. We are looking for a polyglot engineer. We provide infrastructure for testing systems in multiple languages (including Objective C, Swift, Java, and Erlang), running on multiple platforms (including Android, iOS, Windows, KaiOS, and WWW) and operating systems (Linux, Mac OS and Windows). 5. For Test Infra systems, depending on the project, Test Infra engineers themselves choose the most appropriate programming language and platform to use, with cross-language usage and adoption provided by Thrift (for back-end services) and GraphQL (for web services). For example, an engineer working on the test code coverage system can choose the most appropriate programming language and database technology for the task. Making the code coverage system work and scale for multiple languages requires knowledge of the compilers and run-time systems for the languages for which we are computing and storing code coverage. **Minimum Qualifications:** 6. Fluency in at least two of the following programming languages: C, C++, Objective C, Haskell, OCaml, Rust, Swift, Python, Java, Hack, Flow, TypeScript, and Erlang 7. Work experience in at least one of the following platforms: Cross-language services, WWW, Android, and iOS 8. Work experience in at least one of the following operating systems: Linux, Mac OS and Windows **Preferred Qualifications:** 9. Testing (unit, integration, end-to-end, services, UI, randomised, property-based) 10. Programming language and their verification (static and dynamic analysis) 11. Databases and query languages 12. Source control 13. Build systems 14. Continuous integration 15. Global optimisation, scheduling, heuristics and machine learning 16. Quantitative and probabilistic analysis 17. Experience in open sourcing, publishing and disseminating (at industry and academic venues) advancements in the aforementioned areas is also relevant **Industry:** Internet