We're building the most flexible platform for feature flags, A/B testing, analytics and app configuration. See https://docs.hypertune.com for more details.
At the core of Hypertune is a visual, functional, statically-typed programming language with first-class citizens for analytics, A/B testing and AI “loops”.
Our UI lets users define their configuration logic in this language and our SDKs act as interpreters, evaluating the logic locally, synchronously, in memory.
As a senior product engineer, you'll work mainly in TypeScript and React.
If you're interested, please email miraan at hypertune dot com with your LinkedIn, CV or a link to a project you've built!
We're building the most flexible and developer-friendly platform for feature flags, A/B testing, analytics and app configuration. See https://docs.hypertune.com for more details.
At the core of Hypertune is a visual, functional, statically-typed programming language with first-class citizens for analytics, A/B testing and machine learning loops.
Our UI lets users define their configuration logic in this language and our SDKs act as interpreters, evaluating the logic locally with zero network latency.
As a senior product engineer, you'll work mainly in TypeScript and React.
If you're interested, please email miraan at hypertune dot com with your LinkedIn, CV or a link to a project you've built!
Agreed that you lose the benefit of "instant updates" if it's always controlled by a PR.
But Git-style version control with history, diffs, branches and pull requests are pretty useful for feature flags and other "app configuration".
Version history and diffs are great for knowing what flag logic changed when + debugging what broke prod.
Branches let you test and preview flag logic changes in your own isolated branch (which you can point the SDK at) — this is a cleaner approach to having a few separate "environments" like development, staging, production which can drift from each other.
Branches are also great for refactoring the schema / structure of all your flags, e.g. deleting a bunch of flags in one go.
Pull requests and approvals are great for when you're making changes to sensitive flags. E.g. you can lock down specific flags.
Pull requests are also great for onboarding nontechnical team members like PMs or sales reps so they can safely make flag changes themselves but require approval from an engineer (at least while they learn to use the system). Empowering nontechnical people is also why a UI is important.
Branching and pull requests are also a great way to prevent conflicts / overwriting other team members flag changes.
So Git-style features are pretty useful, but you also want the UI and you only want to enforce pull requests for specific flags or team members — this is what we built at Hypertune.
This is one of the reasons we built type-safe feature flags at Hypertune. When a developer deprecates a flag, they get type errors everywhere it's still used. This fails the build so they're forced to remove all the flag references, and they get a nice IDE / compiler driven workflow to do that. Otherwise it's easy to leave flag usages around.
We're building the most flexible and developer-friendly platform for feature flags, A/B testing, analytics and app configuration. See https://docs.hypertune.com for more details.
At the core of Hypertune is a visual, functional, statically-typed programming language with first-class citizens for analytics, A/B testing and machine learning “loops”.
Our UI lets users define their configuration logic in this language and our SDKs act as interpreters, evaluating the logic locally with zero network latency.
As a senior full stack engineer, you'll work mainly in TypeScript and React.
If you're interested, please email miraan at hypertune dot com with your LinkedIn, CV or a link to a project you've built!
We're building the most flexible and developer-friendly platform for feature flags, A/B testing and "application configuration". See https://docs.hypertune.com for more details.
At the core of Hypertune is a visual, functional, statically-typed programming language with first-class citizens for analytics, A/B testing and machine learning.
Our UI lets users define their configuration logic in this language and our SDKs act as interpreters, evaluating the logic locally on clients with zero network latency.
As a senior product engineer, you'll work mainly in React and TypeScript to craft a beautiful product that delights our users.
If you're interested, please email miraan at hypertune dot com with your LinkedIn, CV or a link to a project you've built.
Who gets offended by someone giving them a calendly link? I get offended when someone wants to do some ridiculous back and forth with me. Just send me a link and I'll pick a time that works for both of us. When you send me a link you are saying that you value my time more than your own. Which is ridiculously courteous.
Hi. Me, I do.
A sales person said 'hey let's get coffee'. I agreed. Then they send me a calendy link of 'okay, choose a time and date that I've predefined.' It comes across like I'm working to fit their schedule. Obviously this isn't the way they want to communicate it, but that's how it comes across.
I've been dealing with this a lot recently and seems to be a generational difference. Surprisingly close age wise with completely different responses.
Anecdotally, people ~40+ do take it personally as parent comment mentioned. It's a "your time is more important than mine" feeling by putting the onus on them. Around ~40% of the time, more senior people have ignored a booking link, and responded with times that work for them, requiring additional messages to confirm everything.
People under ~40 almost always use the link without issue, and usually send a confirmation email or message. People <30 don't respond to the message, just book and I assume we're good to go.
Now I use a "Let me know if there's a good time for you. Otherwise, here are 3 slots and my booking link" message.
Even had to make a Google Sheets app script to list my open 1.5+hr slots for the next 3 weeks to help with pre-populating that.
Within the app I currently have, I handled this by adding validation tied to specific events. So basically you request a slot and get validated or canceled. Maybe there are other ways to make this happen
We've run into this exact issue. We have state in Redux, Apollo and the URL and are looking to consolidate it all somewhere. It's surprising there's no standard solution for this yet. Yours looks very interesting — did you look for any libraries which do this for you? Or do you plan to open source yours?
This is the overlooked advantage of a schema (e.g. in GraphQL): it forces you to think about the data types and contract, and serves as a good way to align people working on different parts of the code. It also scales to other languages besides TypeScript which helps if you ever want to migrate your backend to something else or have clients in other languages (e.g. native mobile apps in Swift, Kotlin, etc).
TypeScript is actually a great schema language and fixes a number of problems in GraphQL's SDL, especially the lack of generics.
I think if you're defining a JSON API, that TypeScript is a natural fit since its types line up with with JSON - ie, number is the same in both and if you want something special like an integer with more precision, then you have to model it the same way in your JSON as your TypeScript interfaces (ie, a string or array). This makes TS good even for backends and frontends in other languages. You can also convert TS interfaces to JSON Schema for more interoperability.
It’s not a perfect mapping with JSON. Everyone knows that stuff like functions and dates can’t go over JSON, but there are also subtler things, like the fact that undefined can’t exist as a value in JSON. I’ve seen codebases get pretty mixed up about the semantics of things like properties being optional versus T | undefined.
> Everyone knows that stuff like functions and dates can’t go over JSON, but there are also subtler things, like the fact that undefined can’t exist as a value in JSON
I use `null` for that purpose, and it's been pretty reliable. What are the situations where that falls down?
I also like null | T for required properties, but for whatever reason I have seen that undefined | T is a much more common convention in the TypeScript world. Maybe the reason for that is the semantic about how object access returns undefined, but that’s precisely the source of ambiguity between “object has property X with value undefined” and “object does not have property X”.
TS is a pain with JSON Schema or OpenAPI because it doesn't directly support things like integer or precision. TS does not easily support things like `"exclusiveMinimum": 5`, `"type": "integer"` or patterned (regex) fields.
So if you want to convert your TS interfaces to JSON Schema, you may need to provide additional constraints via JSDoc and use a generator that understands those annotations. But your TS interfaces cannot express those constraints directly.
There are a number other related complications surrounding these more expressive schema definitions - like building types from them and interacting with them at runtime.
Sure, if you have TS in your backend. There are OpenAPI to zod generators that can help get you started, even if they don’t give you perfect zod schemas out the gate.
Jesus, if you're making a JSON API just use JSONSchema, which while not perfect, is quite nice for language interop (and more powerful than typescript)
I'll "just" use the type system built into my programming language until the pain of supporting multiple languages is more expensive than installing JSONSchema tooling and messing with code generation.
Hypertune (https://hypertune.com) | Open source platform | UK, Europe, US, Canada | Full-time | Remote/Hybrid | Founding Full Stack Software Engineer | $125k+ | 1% to 2.5% equity
Hypertune is a type-safe code configuration platform. It can be used for feature flags, A/B testing and AI-powered optimization. It can also be used for configuring and optimizing in-app copy, pricing plans, business rules, etc.
At the core of Hypertune is a visual, functional, statically-typed, cross-platform, open-source programming language with first-class citizens for analytics, A/B testing and ML. It's designed for code configuration but has broader possible applications.
Our UI lets users define their configuration logic in this language and our SDKs act as interpreters, evaluating the logic locally on clients for zero latency.
As a founding engineer, you'll play a crucial role in shaping the product, company and culture.
We're building the most flexible platform for feature flags, A/B testing, analytics and app configuration. See https://docs.hypertune.com for more details.
At the core of Hypertune is a visual, functional, statically-typed programming language with first-class citizens for analytics, A/B testing and AI “loops”.
Our UI lets users define their configuration logic in this language and our SDKs act as interpreters, evaluating the logic locally, synchronously, in memory.
As a senior product engineer, you'll work mainly in TypeScript and React.
If you're interested, please email miraan at hypertune dot com with your LinkedIn, CV or a link to a project you've built!