SENIOR SOFTWARE ENGINEER, DISTRIBUTED SYSTEMS

Censys
Full-time
Remote (US)
$138,000 USD - $180,000 USD + bonus eligibility and equity
Posted on 5 months ago

Job Description

We’re looking to hire a Distributed Systems Engineer to build highly-available and scalable, data-driven services that provide value directly to customers and across our organization. Censys operates distributed infrastructure for Internet-wide scanning, bulk DNS resolution, and X.509 certificate ingestion: your job will be to go below the surface of our data, and help us build the highest quality datasets and APIs.

Responsibilities

  • Design and build services that power existing and future products at Censys by continuing to improve and expand our Internet Map
  • Build and extend large scale, real-time streaming services and applications which leverage our massive datasets to power internal product APIs and external applications
  • Leverage a multitude of software architectures and techniques, including messaging queues, eventual consistency semantics, distributed locking, clustering, CQRS, and others
  • Interface with a polyglot codebase, including working with existing Scala and Go applications

Requirements

  • 5+ years of software engineering experience writing distributed and streaming applications
  • Familiarity with functional programming and reactive programming techniques
  • Familiarity with object-oriented programming techniques and languages such as Go, Rust, or Python. Go is highly preferred
  • Experience with message queue technologies such as Kafka, Google Pub/Sub, AWS Kinesis and delivery semantics such as Exactly-once and At-least once
  • Proficiency with distributed databases, such as BigTable, Cloud Spanner, HBase, Cassandra, with an understanding of trade-offs on consistency, durability, and replication of using such technologies
  • Ability to build horizontally scalable systems, with a high degree of availability and fault-tolerance leveraging techniques such as distributed locking, load-shedding, etc.
  • Design automated solutions for building, testing, monitoring, and deploying data streaming pipelines in a continuous integration environment
  • Interested in solving problems, not completing tasks
  • Ability to write understandable, testable code with an eye towards maintainability
  • Strong communication skills and ability to explain complex technical concepts to other engineers, designers, and product managers
  • Familiarity and comfort working in a Linux based environment
  • Familiarity with a service-oriented architecture with both synchronous services using gRPC or REST to coordinate and communicate between services and systems, and asynchronous services using message queues to coordinate and process large amounts of data
  • Familiarity with data serialization technologies such as Protobuf, MessagePack, etc.
  • Experience building, deploying, and maintaining containerized services in a Kubernetes based environment
  • Experience working with cloud-native technologies and environments, such as AWS, GCP, or Azure
  • Collaborate and communicate well with other engineers working on related systems
  • Enjoy technical architecture discussions and want to drive technical decisions within your team and across the entire engineering organization
  • Continually improve skills, technical approaches, and familiarity with new technologies to help contribute to the success of the company

Benefits

  • No benefits