Staff Engineer
Inductive Automation · United States · 1 mo ago
RemoteRemoteEngineeringFull-time
Responsibilities
- Demonstrating success leading large, strategic, or complex areas that have clear impact to the success of Inductive Automation
- Helping evolve architectural direction for one or more verticals and contributing to cross-cutting platform concerns, moving the system toward it incrementally
- Leading the design lifecycle: requirements discovery → RFC/PRD → design → implementation plan → delivery → deployment → operation
- Maintaining decision records
- Developing and evolving domain and data models; defining context boundaries and mappings
- Delivering projects with broad organizational impact; decomposing them into well-scoped, maintainable pieces for the team
- Quickly analyzing and resolving tactical issues across a wide variety of areas
- Maintaining deep technical domain knowledge of the platform's apps, services, contexts, and frameworks
- Designing systems, frameworks, and platform interfaces/APIs intended to succeed long-term across module and service boundaries
- Improving developer workflow, tooling, and deployment in ways that measurably aid delivery velocity (this isn't a CD-focused role, but velocity is a first-class concern)
- Using negotiation and patience to collaborate with other senior leaders, ensuring progress and setting the example for others
- Collaborating across teams and disciplines to resolve technical debates and reach durable decisions; using influence and patience with other senior contributors
- Mentoring engineers on distributed-systems design, event-sourced/CQRS patterns, JVM/runtime reasoning, data modeling, and engineering judgment
- Influencing senior leaders on engineering strategy
- Defining technical strategy and executing to improve products, infrastructure, processes, or organizations
- Completing thoughtful and constructive code reviews in a timely manner
- Participating in the hiring process, as needed (by submitting referrals, meeting candidates, attending recruiting events, or presenting externally)
- Participating in conducting engineering interviews, as needed
Requirements
- Excellent written and verbal communication, able to document issues, designs, and trade-offs clearly and concisely (RFC/PRD-quality writing)
- 12 years of general software engineering industry experience
- Excellent analytical and troubleshooting skills
- Strong programming skills on the JVM, Java required; Kotlin strongly preferred
- Deep understanding of JVM compile-time and run-time semantics, with the ability to reason about concurrency and performance
- Experience in distributed-system design and trade-off analysis, beyond RESTful CRUD / entity-oriented microservices
- Experience with asynchronous, event-oriented architecture
- A demonstrated, articulate understanding of the system-design implications of distributed CQRS and/or event-sourced systems, able to speak to the trade-offs
- Strong data and domain modeling skills, including bounded-context definition and context mapping
- Proficiency with SQL and the relational-modeling judgment behind it
- Demonstrated track record of full-lifecycle product delivery, a meaningful or leading role in evaluation, modeling, architectural design, implementation planning, implementation, deployment, and operational management
- Able to rapidly assimilate a large, unfamiliar codebase and a non-trivial architectural paradigm, and become productive quickly
- Ability to design platform-wide interfaces/APIs and reason about codebase modularity and boundary enforcement
- Able to translate business goals into effective designs and implementation plans
- Familiarity with agile methodologies such as SCRUM
- Familiarity with source control management systems such as Github
- Able to accurately and effectively document ideas and specifications