No Longer Accepting Applications
Software Engineering is responsible for the development, maintenance, performance and monitoring of secure, highly available platform applications and services. Software Engineers design, implement and maintain technology used by Product and Platform Engineering teams to develop reliable, resilient and performant software through the use of shared Platform applications. Reporting to the VP Software Engineering, the role requires deep expertise in the design, implementation, and continuous improvement of software applications.
Who You Are
- You have deep expertise with back-end development and distributed systems.
- You have sufficient experience to teach others about 12-factor applications and modern development practices.
- You don’t like repeating yourself in software and can’t stop yourself from automating things.
- You have the expertise to do so using a language like Ruby, Python, Java or Go.
- You can make system design trade-offs based on real-world experience with the CAP Theorem.
- You can explain the difference between having a DevOps team and a DevOps culture in practice.
- You are comfortable with complexity and learning in wicked environments.
- You deeply understand logging, monitoring, automated provisioning, and continuous deployment.
- You are familiar with Incident Command System for managing outages and security incidents.
- You know how to use configuration management and infrastructure as code tools like Terraform, Ansible, or Puppet.
- You have experience with container orchestration using tools like Docker Swarm or Kubernetes.
- You are familiar with relational databases (e.g. Postgres) and non-relational data stores (e.g. Redis, ElasticSearch).
- You have learned painful lessons from building successive generations of software to manage and deploy highly available, reliable, and performant cloud infrastructure, platform, and product at scale.
- You have 7+ years’ experience in full-stack or backend Software Engineering.
- Employ test-driven development, the testing pyramid; using automation for tests, builds and deployment; implementing monitoring and logging proactively.
- Design and build applications and services reading from and writing to Kafka or Kinesis event streams.
- Build systems used to automate performance monitoring, troubleshooting and capacity planning.
- Collaborate with the Product and Platform team to craft technical solutions that meet internal and external customer needs.
- Work with Infrastructure Engineering teams to adapt standard infrastructure platform components to release code with increasing volume and velocity in a self-service fashion.
- Forecast application utilization and identify potential bottlenecks or optimization opportunities.
- Support critical applications in a fast-paced environment.
- Research and intervene to quickly and efficiently pinpoint and resolve problematic system issues.
- Review and improve teammate output, providing detailed and thoughtful feedback.
- Define and extend code management processes to improve development team efficiency.
- Provide 24x7 on-call support on a rotating basis.