TypeScript Engineer (Effect)

You're excited by complex problems and you make decisions with a long-term outlook that your code will be maintainable almost entirely by an internal AI coding agent.

You're excited by complex problems and you make decisions with a long-term outlook that your code will be maintainable almost entirely by an internal AI coding agent.

You're excited by complex problems and you make decisions with a long-term outlook that your code will be maintainable almost entirely by an internal AI coding agent.

Requirements

Experience with Effect
  • You can lead and teach engineers how to write backends with Effect code.

  • You have designed TypeScript libraries which extend type safety to JavaScript users

AI Optimism

You have optimism towards async AI fixing bugs and making tweaks to the codebase and you plan for that by checking your interfaces and design with an LLM to see where your approach is weak.

We have high optimism for async AI handling the majority of the coding in the long-tail of our software process. But, we don't find AI effective at every stage of development.

Generally, we think about AI usage following a trend like the following;


Bonus points

Experience with diverging states (CRDTs/OT/LWW)

You can write full-stack implementations for versioning, branching, and rebasing flows leveraging a CRDT or OT library, or using your own LWW approach.

You've gained some pretty strong opinions about the right time and place for CRDTs, OTs, or LWW. Perhaps you've even watched videos from GDC about multiplayer netcode and rollback out of curiosity. You probably had to use yjs at some point and decided it's design is kinda shit but the community, resources, and ecosystem around yjs still make it the best option for most teams (our versioning environment allows for us to use multiple state management strategies together, so we can choose the best tool for the job (usually depending on ecosystem) in most cases). Otherwise, we default to Loro.

Experience with diverging states (CRDTs/OT/LWW)

You can write full-stack implementations for versioning, branching, and rebasing flows leveraging a CRDT or OT library, or using your own LWW approach.

You've gained some pretty strong opinions about the right time and place for CRDTs, OTs, or LWW. Perhaps you've even watched videos from GDC about multiplayer netcode and rollback out of curiosity. You probably had to use yjs at some point and decided it's design is kinda shit but the community, resources, and ecosystem around yjs still make it the best option for most teams (our versioning environment allows for us to use multiple state management strategies together, so we can choose the best tool for the job (usually depending on ecosystem) in most cases). Otherwise, we default to Loro.

Experience with diverging states (CRDTs/OT/LWW)

You can write full-stack implementations for versioning, branching, and rebasing flows leveraging a CRDT or OT library, or using your own LWW approach.

You've gained some pretty strong opinions about the right time and place for CRDTs, OTs, or LWW. Perhaps you've even watched videos from GDC about multiplayer netcode and rollback out of curiosity. You probably had to use yjs at some point and decided it's design is kinda shit but the community, resources, and ecosystem around yjs still make it the best option for most teams (our versioning environment allows for us to use multiple state management strategies together, so we can choose the best tool for the job (usually depending on ecosystem) in most cases). Otherwise, we default to Loro.

© 2025 Phosphor Co. All Rights Reserved

© 2025 Phosphor Co. All Rights Reserved

© 2025 Phosphor Co. All Rights Reserved