Show HN: Specific (YC F25) – Build backends with specifications instead of code
specific.devCurious to hear more about the entity relationship definition. The schema for the entities and relationships is naturally an important part of it but how do you define the logic needed around them? For example integrations with external APIs
My two cents: in my experience with integrations there are many issues that you can't control yourself because third-party APIs are buggy, incomplete, etc. For top APIs there are, in general, good wrappers with tests to use.
Good point! We should do that :)
> My two cents: in my experience with integrations there are many issues that you can't control yourself because third-party APIs are buggy, incomplete, etc
Yes, I have actually spent a large portion of my career building such integrations and Specific has grown out of that. In my experience, working with specifications makes it much easier to focus on the behaviour of the API you are integrating with, instead of the code architecture or boilerplate behind your integration.
If Specific regenerates code from the spec each time (which I'm not sure it does), there's the potential for different code each time even for parts of the spec that haven't changed. This seems like a nightmare for maintainability and debugability.
> If Specific regenerates code from the spec each time (which I'm not sure it does), there's the potential for different code each time even for parts of the spec that haven't changed
It doesn't. When the spec changes, the coding agent takes the diff and turns it into the equivalent change to the codebase. The tests also run each time so that the coding agent does cause a regression as part of this. Although as you say, test suites are often incomplete. We are aiming to make it easier to build complete test suites in Specific than in regular code though because they are a part of the spec and the agent can you help write them as well.
We haven't done much yet in this area but I'm quite excited about how to evolve the codebase over time. I think we have an advantage in that a system evolving also means the specs are evolving and growing. We can maintain a loose mapping behind the scenes between specs and code for the coding agent, to give it the right context and keep code changes localised even as a system grows large. We can also refactor incrementally as we go as given that it becomes the job of the coding agent, instead of a human that might put it off.
As for who it's for, we are targeting technical people who might know how to build backends in code, but we believe it can be done more productively through specs. The specs remove the need for boilerplate code and more closely match the business requirements of the system. One common example of this amongst our users is building third-party integrations. That can require a lot of boilerplate code and libraries to achieve. In Specific, it can be as easy as linking out to API docs.
What will the pricing be after the beta? And what are you exactly offering? Only a database or also authentication or storage?
Can you maybe compare it to something established like Supabase?
Pricing is still to be determined. I imagine we will charge for infra usage (processing, storage, etc) in line with other providers like Supabase. We will also charge per-seat for developing inside Specific, which will likely be a fixed price with some token usage limit.
As for what's part of the beta, we currently offer hosting for the API and processing of requests, as well as a database to back it. We are planning on expanding that to support more use cases like background jobs, cron jobs, and object storage.
We don't offer built-in authentication and aren't planning to at this point. That's because we think there are much better providers (like Auth0, Clerk, WorkOS) that you can easily integrate in your Specific app by just specifying it!
That's the main difference to something like Supabase. We provide the infra automatically for your app to do what you need it to, but aren't opinionated around user-facing aspects like authentication. We also have the opportunity to be quite a bit more flexible. Building integrations with external APIs on Supabase for example often requires writing edge functions. In Specific, you can simply make it part of your specification.
There are definitely cases where the spec is much easier to understand than the code that implements it.
Think systems with complex lifecycles or lots of required boilerplate.
Have you thought of embedding the specs into existing code?
E.g.
# @spec: if any method takes longer than 1s to execute, a warning must be logged
class X: ...We have gone the all-specs route for now because it gives us an opportunity to try build that DX that you mention (which will be critical), without having to adapt to existing codebases that are no covered by specs.
Passing tests is a measure for the fitness of the system; how it achieves this goal doesn't matter. The code itself might be awful, or only work due to side effects or emergent properties, but it works!