James Cowling

James Cowling

@jamescowling.dev

@convex.dev co-founder/CTO. Dropbox storage designer. Distributed systems researcher at MIT. Bad motorcycle mechanic. Database shill.

302 followers44 following41 posts

Convex Chef supports Gemini 2.5 Pro! It's sometimes too verbose and occasionally forgets to call tools but produces way better UIs and seems able to build more fully-featured apps than Claude. Try it out!

Remember when a beta label actually meant something then Gmail was beta for half a decade and ruined it for everyone? We just took a bunch of @convex.dev features out of beta. What's the point of long-term beta if customers depend on it already?

Convex storage, search, pagination and optimistic updates are now officially "non-beta". They're reliable to use and have been for a long time. We'll continue to make improvements as always, especially to pagination and optimistic updates.

Your coding agent talking directly to your production database sounds sketchy as hell... unless it's via an MCP server on a db that supports sandboxed code execution, in which case it sounds cool af.

Sujay Jayakar@sujayakar.bsky.social

@convex.dev now has an MCP server! the cursor AI agent can now list project's schema and API, read data from tables, and call functions. it's insane how good it is at gluing tool calls together. here's an example of it building a histogram of a message lengths in a chat app.

We launched Fullstack-Bench yesterday to test autonomous agent performance on fullstack coding tasks. Starting with Convex, FastAPI, Supabase but more backends to come. stack.convex.dev/introducing-... Three design patterns stood out at producing high quality code with minimal interventions: 🧵

stack.convex.devIntroducing Fullstack-BenchCoding agents can do more autonomously when they write code that has tight, automatic feedback loops; use systems that express everything in standard,...
View full thread

2. Express as much as possible in standard, procedural code. Agents are great reasoning about code but less good dealing with declarative languages or configs outside the codebase. Keep as much as possible in the code itself and as little as possible in SQL or external configs.

3. Design strong abstractions. Agents aren't perfect so focus them on building your app, not trying to solve hard systems problems like managing distributed state. Use libraries or frameworks with good high level abstractions that prevent an agent from wandering off the path.

We launched Fullstack-Bench yesterday to test autonomous agent performance on fullstack coding tasks. Starting with Convex, FastAPI, Supabase but more backends to come. stack.convex.dev/introducing-... Three design patterns stood out at producing high quality code with minimal interventions: 🧵

stack.convex.devIntroducing Fullstack-BenchCoding agents can do more autonomously when they write code that has tight, automatic feedback loops; use systems that express everything in standard,...

1. Provide tight, automatic feedback loops. Coding agents are able to iterate, try things, correct mistakes. They are only able to do this when able to efficiently determine if a step is correct. Type safety is hugely effective at providing guardrails for agents.

Do you like TypeScript? Do you like databases? Do you like neither but just want to build apps using regular old functions? My @db.cs.cmu.edu talk on TypeScript Stored Procedures for app developers is online now. www.youtube.com/watch?v=zpgV...

Andy Pavlo@andypavlo.bsky.social

Do you hate SQL and wish it would just die? Or do you love SQL and wish it ran faster? If you answered 'yes' to either question then join our Spring 2025 @db.cs.cmu.edu Seminar Series: SQL or Death? Mondays @ 4:30pm via Zoom. Videos posted to YouTube: db.cs.cmu.edu/seminar2025/

We just launched self-hosted @convex.dev! We open sourced last year but realized the code was open but not so useful on its own. This time we've included the Convex dashboard, bindings for Postgres, SQLite (and MySQL v. soon), packaged up in a docker container ready for real use

View full thread

Cloud-hosted Convex is still the best place to start for most folks getting started, plus includes a very usable free tier, but we're really glad to have the self-hosted option available for people whose needs fall outside our hosted plans.

We just launched self-hosted @convex.dev! We open sourced last year but realized the code was open but not so useful on its own. This time we've included the Convex dashboard, bindings for Postgres, SQLite (and MySQL v. soon), packaged up in a docker container ready for real use

CMU Databases talk streaming live 4:30EST Monday. Come learn how every good idea you have was already invented by someone in the 80s and why we should be running typescript functions in our databases. db.cs.cmu.edu/events/sql-d...

Andy Pavlo@andypavlo.bsky.social

Do you hate SQL and wish it would just die? Or do you love SQL and wish it ran faster? If you answered 'yes' to either question then join our Spring 2025 @db.cs.cmu.edu Seminar Series: SQL or Death? Mondays @ 4:30pm via Zoom. Videos posted to YouTube: db.cs.cmu.edu/seminar2025/

James Cowling reposted

I used AI to write a script to help me write AI evals to help AI write Convex code. Very meta 💡Each step uses RAG from previous evals Flow: 1. 🧑‍💻oneliner -> 🤖 task description -> 🧑‍💻 audit 2. 🤖 answer ->🧑‍💻 audit 3. 🤖 tests for answer ->🧑‍💻 audit 🔗 to evals 👀 & my script in 🧵

github.comGitHub - get-convex/convex-evalsContribute to get-convex/convex-evals development by creating an account on GitHub.

A good design principle is APIs that look cheap should be cheap and APIs that are expensive should look expensive. One mistake we made in an old version of Dropbox was that directory moves looked cheap (drag a folder) but were expensive on the server (update metadata for every file in the tree).

A design mistake we made with @convex.dev is that the .filter() operator looks convenient, even though it does a table scan, while the .withIndex() syntax for efficiently reading from an index looks a little cumbersome and expensive. We'll fix this in v2.

SQL also decouples how a query is written from whether it's feasible to execute in prod. If you write a SELECT without an index you're in trouble. The initial Convex syntax required typing .fullTableScan().filter() to filter a table scan but we removed it. Probably a mistake.

We covered OSS db licensing challenges with Redis and Elastic; the Databricks vs Snowflake turf war; the rise of @duckdb.org; why we love SQLite; Deterministic Simulation Testing, Rust, and @tur.so's rewrite; Postgres, MySQL and Aurora DSQL; new acquisitions like Rockset into OpenAI; and much more.

If you want to get good building systems and databases you should go work for a bigger company or a startup with serious infra demands. It's hard to develop excellence thinking about scale, correctness and architecture in an environment where these aren't critical to the business

It can be hard to break into a new domain but most folks I've mentored in systems engineering started as devs in adjacent teams who stood out by taking the time to learn how the systems worked above and below them in the stack and being proactive fixing things when they break.

It's certainly possible to be self-taught but the difference between good and great systems only shows up when systems are used and put under stress. Focusing on simplicity at all times and building sophistication only because that sophistication is demanded by real usage is key.

It's easy to roll your eyes at Company Values but hopefully you actually value *something*. A good set of values can have a huge enduring impact on decision-making at a company. I wrote a guide on the process I follow for picking values at a company stack.convex.dev/company-values

stack.convex.devCompany Values that MatterA good set of values can be critically important in establishing a team that stands for something. This post outlines why company values are important...

Values need to involve a tradeoff. If they don't come with a cost you're willing to accept then they're not actionable. e.g., "Move fast and break stuff" = 🔥 "Move fast with stable infra" = 😐

You are up to date.