Staff Software Engineer - Cloud Development at Relativity
- Collaborate with product architects to design, document, and execute on a containerization strategy.
- Evaluate container and orchestration technologies and make a recommendation of technologies and designs based on the product requirements.
- Develop best practices for implementing and usage of container technologies so that they are consistently implemented across the product by all teams.
- Partners with management and the architecture team to set and communicate team goals and vision aligned to business requirements;
- Takes on independent critical projects which may impact the company's short- and long-term goals and strategies.
- Offers coaching to ensure the teams stays focused and delivers against the goals and design, adapting to changing business requirements.
- Specify non-functional software requirements and analyze all requirements to determine design feasibility within time and cost constraints and mentors others to do the same.
- Estimate software development timelines and be accountable to the timelines by actively managing risks and changing requirements.
- Provide input into system software architecture development by working with Advisory, Principle Engineers and Architecture team as required.
- Design and lead the design of software using abstraction, low coupling and high cohesion, modularization, encapsulation and information hiding, interfaces, and separation of concerns.
- Implement and lead the implementation of software using the practical application of algorithms, defensive programming and exception handling, fault tolerance, design patterns, and best practices of Object-Oriented Design (OOD) and Object-Oriented Programming (OOP) such as SOLID (Single Responsibility, Open-Closed, Liskov Substitution, Interface Segregation, and Dependency Inversion).
- Test and lead the test of software with traceability back to requirements emphasizing the practice of Test Driven Design and the use of autonomous frameworks and Continuous Integration
- Offer solutions to improve agile software development processes and practices (SCRUM) to advance engineering efficiency to maximize resources and reduce expense.
- Provides project and professional guidance and mentoring to team members.
- Provides solutions to varied and ambiguous issues, utilizing judgment to select methods and techniques for obtaining solutions.
- Ensure the adoption and application of software development tools (IDEs, test frameworks, static analyzers, etc.) to improve engineering efficiency to maximize resources and reduce expense.
- Identify and offer solutions to reduce technical debt
- Experience with cloud technologies including containers, orchestration tools, monitoring, delivery pipeline and other technologies used in a container based environment.
- Experience specifically with Docker, Kubernetes and Azure are ideal.
- Ability to understand and design a macro scale architecture of a software technology or product line.
- Ability to works on critical issues and the most complex projects as needed by the organization.
- Ability to decompose larger problems into software development work as self-contained, minimally inter-dependent tasks for team members to implement.
- Ability to segregate software using abstraction and interfaces.
- Ability to efficiently multi-task and manage multiple concurrent tasks by identifying differing priorities relative to changing business need.
- Ability to consistently identify and deliver technical improvement feedback to team members in a supportive and constructive manner to achieve demonstrable results over time.
- Excellent problem solving.
- Excellent interpersonal and teamwork to facilitate collaborative problem solving amongst team members.
- Excellent verbal and written communication to clearly, succinctly, and completely communicate intent (both technical and non-technical) in interactions with team members and management.
- Excellent time management to ensure time (both his or hers and that of his or her team) is optimally allocated to meet prioritized business need.
- Bachelor's degree in Computer Science, Math or other related subject.
- Knowledge and experience in working with Agile development methodology.
- BA/BS or equivalent in Computer Science or related disciplines
- At least 12+ years designing and coding software for commercial-grade systems
- At least 12+ years writing software that tests software in an automated fashion