Open role · Engineering
Full Stack Developer
Build the voice practice, AI coaching, and readiness analytics field sales teams use on iOS, Android, and the web, in TypeScript end to end.
About Practis
Practis gets field sales teams ready before they meet a paying customer. The people who sell for pest control, lawn care, HVAC, home improvement, and insurance companies are often canvassers, technicians, and comfort specialists, not people with “sales” in their title. Most get a few days of shadowing and a script, then start working leads the company paid for.
Practis changes that order. New hires practice real conversations in private with an AI coach. They certify against the PRACTIS™ Method, our published standard for field sales conversations, and only then take live leads. Operators get evidence on the metrics they already track. We deliver it as a managed service: the customer provides access and context, and we build the content, run the launch, and report the outcome.
The role
Practis runs on two TypeScript codebases: a NestJS API and a single Expo app that ships to iOS, Android, and the web. New hires use it to hold spoken roleplay conversations with an AI customer, get coached, and certify. Managers use it to see who is ready, and operators use it to see what that readiness paid.
You will ship features across the whole stack, from database schema to the screen a technician opens in a truck between appointments. The work spans real-time voice, AI coaching, multi-tenant data, and mobile releases, and you will work alongside AI coding agents as a normal part of the job.
What you will do
- Build product features end to end: API endpoints, database schema and migrations, and the mobile and web screens that use them.
- Work on real-time voice practice built on LiveKit, and on the AI coaching and scoring behind it.
- Keep each customer’s data isolated, using PostgreSQL row-level security and careful API design.
- Ship to the App Store, Google Play, and the web, including over-the-air updates.
- Write tests, review pull requests, and keep CI green.
- Instrument features with PostHog and OpenTelemetry, so we know what customers use and where it breaks.
- Use AI coding agents well: write clear specs, review their output critically, and keep the quality bar high.
- Help shape Linear tickets and their acceptance criteria before they are built, not just after.
Required experience
- 4 or more years of professional software engineering, shipping production web or mobile applications.
- Strong TypeScript on both the front end and the back end.
- Production experience with React or React Native. Expo experience is a plus.
- Experience building APIs in Node.js, ideally with NestJS, and designing relational schemas in PostgreSQL.
- Comfort with Git-based workflows, pull request review, and CI/CD.
- Clear written communication: you can explain a trade-off in a pull request description or a ticket.
Bonus points
- Real-time audio, WebRTC, or LiveKit.
- LLM-backed features, prompt design, or model evaluation.
- Temporal, BullMQ, or other job and workflow systems.
- AWS infrastructure as code with CDK.
- An app you shipped through App Store review.
The stack
TypeScript end to end. You do not need all of it on day one.
- API
- NestJS 11, TypeScript, Drizzle ORM, PostgreSQL with row-level security
- App
- Expo SDK 54, React Native 0.81, expo-router, TanStack Query, Zustand, Zod, NativeWind
- Voice and real time
- LiveKit, Twilio, Socket.IO
- Jobs and workflows
- BullMQ on Redis, Temporal
- Auth
- WorkOS
- AI
- Anthropic models through the Vercel AI SDK
- Infrastructure
- AWS (CDK, ECS, S3, Amplify), GitHub Actions
- Observability
- PostHog, OpenTelemetry, Firebase Crashlytics, New Relic
Your first 90 days
What good looks like by the end of your first quarter:
- Features you built running in production on both the API and the app.
- One feature owned from ticket to release, including tests and analytics.
- The full stack running on your machine, and one improvement to how we do that.
Where you will work
We prefer candidates in the Kansas City metro, where most of the team works together. Remote is available for the right candidate elsewhere in the United States.
How we hire
- Apply. About five minutes: your details, your resume, and a short narrative on why you fit the role. No need to retype your resume; we read it.
- Intro call. 30 minutes on your background, what you want next, and whether Practis fits it.
- Role conversation. A deeper conversation with the hiring manager about the work itself.
- Working session. A short, practical exercise that mirrors the job: a discovery call, a pipeline plan, a marketing brief, or a small build. We tell you what we are looking for up front.
- Meet the founder. A conversation with our CEO, then references and an offer.
Practis is an equal opportunity employer. We consider all qualified applicants without regard to race, color, religion, sex, sexual orientation, gender identity, national origin, age, disability, veteran status, or any other characteristic protected by law.
Apply
Apply for Full Stack Developer
Upload your resume and skip the retyping: we read your work history from it. Tell us instead what makes you uniquely qualified for this role. The form opens in a new tab with the role already selected, and a person on our team reads every application.
What you will need
- About five minutes
- Your resume, as a file or a link
- Your LinkedIn profile
- A few paragraphs on why you fit the role
- A Google account to sign in