Specific is a platform for building backend APIs and services entirely through natural-language specifications and tests, without writing code. We then automatically turn your specs into a working system and deploy it for you, along with any infrastructure needed.
We know a lot of developers who have already adopted spec-driven development to focus on high-level design and let coding agents take care of implementation. We are attempting to take this even further by making the specs themselves the source of truth. Of course, we can’t blindly trust coding agents to follow the spec, so we also support adding tests that will run to ensure the system behaves as expected and to avoid regressions.
There is so much ground to cover, so we are focusing on a smaller set of initial features that in our experience should cover a large portion of backends:
- An HTTP server for each project. Authentication can be added by simply stating in the spec how you want to protect your endpoint.
- A database automatically spun up and schema configured if the spec indicates persistence is needed.
- External APIs can be called. You can even link out to API docs in your specs.
You currently can’t see the generated code, but we are working on enabling it. Of course, we don’t claim any ownership of the generated code and will gladly let you export it and continue building elsewhere.
Specific is free to try and we are really eager to hear your feedback on it!
Try it here: https://app.specific.dev
Curious 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.
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!