Lead Software Engineer - Processing
At Relativity, we make software to help users organize data, discover the truth, and act on it. Our e-discovery platform is used by more than 13,000 organizations around the world to manage large volumes of data and quickly identify key issues during litigation, internal investigations, and compliance projects.
Here you can own your career in a community of values-driven people who help our customers around the world solve complex data challenges. If this sounds like the place for you, check out the details of this position below.
The Lead Software Engineer practices software development and leads a team to apply software engineering best practices to deliver high quality, maintainable, reusable, reliable, performant, and scalable software. The Lead Software Engineer serves as a technical liaison between their team and other internal and external development teams to identify and resolve dependencies, to identify, improve, and apply software engineering best practices and processes, and to identify and mitigate risks to the on-time delivery of software.
The Processing Team:
Relativity's "Processing" product is the fastest way to feed terabytes of complex and abstract data into the Relativity's Review platform. As part of the processing team, you will be dealing with the unique challenge of processing an incredibly diverse set of documents, a tremendous amount of data and do very complicated data extraction at blazing speeds. If an opportunity to deal with big-data, to solve complex scalability challenges, and to learn a distinct set of technologies on a secure SaaS platform gives you goosebumps, then this is the right team for you. Quality obsession and customer satisfaction are in our DNA, and we strive to exceed customer's and coworker's expectations. We are looking to add new members to our teams.
Our tech stack includes a processing engine written in C#.NET, leveraging numerous document processing applications, and MSSQL as its database.
- Work with management to set and communicate team goals and vision aligned to business requirements; ensure the team stays focused and delivers against the goals, adapting to changing business requirements
- Specify non-functional software requirements and analyze all requirements to determine design feasibility within time and cost constraints
- 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 Staff, Advisory and Principle Engineers 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
- Follow and improve agile software development processes and practices (SCRUM) to improve engineering efficiency to maximize resources and reduce expense
- 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 reduce technical debt
- 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
- Experience in .NET software development using C# and Microsoft SQL Server
- Knowledge and experience in working with Agile development methodology
- BA/BS in Computer Science or related disciplines, or at least five years providing Software Quality Assurance for commercial-grade systems and applications
- At least five years designing and coding software for commercial-grade systems
- At least five years writing software that tests software in an automated fashion