Functional Software Engineer

New
O
Obsidian SystemsFinancial infrastructure
USA - East Coast; Secondary Locations: Miami, Canada - East CoastFull-TimeSenior
Salary not disclosed
Apply NowOpens the employer's application page

Job Details

Experience
5+ years of professional experience developing and delivering production software.
Required Skills
AlgorithmsData StructuresSoftware EngineeringDistributed Systems

Requirements

  • Have 5+ years of professional experience developing and delivering production software.
  • Understand software engineering fundamentals, including data structures, algorithms, testing, and software design.
  • Have professional or substantial project experience with functional programming.
  • Reason about complex problems and translate requirements into well-structured software.
  • Demonstrate strong debugging and problem-solving skills.
  • Commit to code quality, correctness, and maintainability.
  • Communicate effectively and collaborate with other engineers.
  • Be willing to learn new technologies and work across different technical environments.
  • Preferred: Experience with Haskell, Scala, OCaml, F#, Clojure, or another functional programming language.
  • Preferred: Familiarity with type systems, algebraic data types, pattern matching, immutable data structures, and functional design patterns.
  • Preferred: Exposure to distributed systems, concurrent programming, backend infrastructure, or property-based testing.
  • Preferred: Experience with Nix or reproducible development environments, or an engineering consultancy and direct client collaboration.

Responsibilities

  • Design, implement, test, and maintain reliable software using functional programming principles.
  • Develop composable and maintainable solutions to complex engineering problems.
  • Apply strong typing, domain modelling, and abstraction to improve software correctness and reliability.
  • Collaborate with engineers, technical leads, and client stakeholders to understand requirements and deliver solutions.
  • Contribute to system design and architecture, balancing correctness, simplicity, performance, and maintainability.
  • Write automated tests and use appropriate techniques to validate system behaviour.
  • Review code, share technical knowledge, and contribute to engineering standards.
  • Investigate and resolve complex technical issues across existing systems.
  • Communicate technical decisions and trade-offs to technical and non-technical stakeholders.
  • Contribute to continuous improvement across engineering practices, tools, and delivery processes.
View Full Description & ApplyYou'll be redirected to the employer's site
View details
Apply Now