Software Engineer, Data Services at Spire
San Francisco, CA, US
At Spire, you'll have the chance to work with unique datasets that only a few companies in the world can provide. Our growing satellite and ground­-station network powers a range of impactful applications including weather forecasting and real-­time global ship monitoring. Spire gives you the opportunity to work on exciting technical challenges as part of a team of collaborative engineers who are changing the world with data from nanosatellites. We promise you this: you'll never be bored at Spire.

You will join a team responsible for the design and maintenance of our ground-side data processing pipeline, from ingesting satellite data all the way through designing and scaling the APIs that our customers depend on for global data insights. We care a lot about the quality and expressiveness of our code. We think TDD is great, and we're working toward Continuous Delivery of code that passes our CI builds. We recognize that professional growth comes from operating at the boundaries of our comfort zones, and we encourage and support each other through code reviews, pair programming, and lots of communication. If this sounds like your cup of tea, we'd love to hear from you!

Responsibilities of your role:

Working as part of a small team to design and deploy web applications, services, and data streaming/processing systems Designing and implementing robust and scalable APIs
Developing and deploying distributed applications on AWS
Working closely with Product Management to define and enhance customer-facing products and applications
Helping to lead the design, implementation, and deployment of new applications and features
*At a minimum, you must have at least 2 years of real-world software development (not academic) experience.

Qualifications / Experience:

Have 2+ years of experience programming REST APIs and backend systems in Python
Are comfortable with full-stack web development tasks, from designing and implementing UIs all the way down through domain modeling, data processing, and database tuning
Know how to develop in and deploy to POSIX environments
Enjoy working as part of a team, but can also take on and complete tasks on your own
Strong candidates will also possess skills in one or more of the following areas:
Writing automated unit and integration tests, ideally in a TDD fashion
In­-depth knowledge of API design principles and best practices, caching strategies, and designing for resiliency and scalability
Building faul­t tolerant distributed systems in environments with intermittent and high­-latency connectivity
Working with relational and non­ relational database theory and practice e.g. PostgresQL, Redis, ORMs, consistent hashing
Familiarity with tools and techniques in distributed systems and handling large volumes of streaming data: queues, RPCs, serialization, versioning, eventual consistency, exactly/at-­most/at­-least-once message semantics