One complaint: Referring to your Basic plan as being "Free forever" is a bit disingenuous. In my opinion, the FTC ought to prohibit use of this term by tech companies located in the 650 and 415 area codes.
Not really; there were several post 1-2-3 mass-market database programs that had considerable success (dBase, Paradox, Access, FileMaker), though of those only Access is still successful.
> In my opinion, the FTC ought to prohibit use of this term by tech companies located in the 650 and 415 area codes.
Is this part of an East Bay / San Jose economic development plan?
There, I fixed it for you. (disclosure: I worked on a similar tool, had a friend, one of the best programmers I know, who built a similar tool, worked on an ERP system that addressed many of the same use cases, and I started Skysheet, YC W09, with gruseom).
I've personally been dabbling with similar idea for years. Guess I should have invested my time and money in getting it to market.
How so? I haven't had a company ever tell me this then start charging. Oftentimes they go out of business, but that is a different problem. :)
There's Google Apps for your Domain, which killed off its free service in favor of the $5/user per month service.
Ning shut down their free service and switched to a paid only model.
DynDNS also shut down their free service, only offering paid.
How many more examples do you need?
Asana works that way, and they have their own framework named Luna that does some functional reactive magic. Meteor, which I've been working with a lot lately and have really enjoyed using, was also created by some ex-Asana people, and enables the same type of real-time synced updates.
I was just wondering if you could share anything about your technology stack or how you accomplish the real-time updates. Are you using Meteor?
We've closely followed the developer blogs of both those projects (and in Meteor's case, their source code). With those learnings, we built our own realtime database engine that supports relational data (which Meteor doesn't yet support) and also some other major features like the ability to undo any user action out of order (like git revert), which is necessary to support undo in a multi-user context (because the last thing that you did may not be the last change globally if other people are concurrently making changes). Undo is a particularly challenging feature to implement in a structured relational database context, because it can't be reduced to a set of simplistic character insertion operations as is the case for a google word doc, or a spreadsheet (which is a simple 2d array of values without type constraints, foreign key relations, etc).
How do you handle conflicts? E.g. If two users change the same scalar value (of an integer cell, let's say) at the same time. Do you accept one and throw a warning back to the unlucky users?
How much to you cache locally? I had begun a framework such as this at some point, with the ultimate goal of being usable offline via the localStorage cached version (and sync upon connect), so I have a good idea of how much pain you must have gone through sorting this out :)
You wrote your own real-time database engine. You're nuts! (in a very good way). Have you written anything about this? It would be interesting to hear both about the database and the experience of "rolling your own" at such a low level.
You guys need a dev blog.
Re: conflicts, in the case of a scalar value, last in wins, and the system (if you consider the server and each client as nodes in a distributed system) is eventually consistent (i.e. everyone will eventually see the exact same state). In that particular case, we show the other user's profile picture and highlight the cell to flag that change so you realize somebody else is editing at the same time as you.
I personally hit this roadblock while trying to build a revision management system for a spreadsheet like Google Drive has. I had a pretty fragile implementation that works within a tangled mess of has-many relations. It was a tough time generalizing the whole mess. I'm looking forward to your insights on this particular problem on your future developer blog! Congratulations.
- There's a source of truth (server) and a single client at a time, ever.
To:
- There can be up to hundreds of clients at the same time, all having write access to the same data.
Meaning:
- Your old fashioned models don't quite cut it - you need something to handle changes happening locally [having to be propagated to the server/network ("committed") and potentially be rejected or changed], and at the same time receive remote updates, apply them to the local objects.
- You're going to have conflicting writes. You don't want to have global locking in such a system, no matter how fine-grained (cell, in this case, I suppose); enter: Merge conflict resolution code (you'll have fun with that). Does it happen on the server? Client? How are conflicting writes resolved? Can the client handle just about any write having to be cancelled, and instead accept another change to the object?
- Saving history states for all (ok, most) of your data, so that things can be rolled back. Kind of necessary when you can have a spreadsheet shared by 100 people, and any of them could delete the entire thing.
Do these features ring a bell? Yes, we're talking about a distributed version control system here, but "you just saying" that all it is, is bidirectional communication? That's why you're being downvoted.
I had to save the file as CSV and import it -- or at least that's what I thought, but filepicker seems to support picking from google drive. I don't know if it would have accepted a spreadsheet.
Your app seems sluggish to scroll compared to Google Docs at that size, and the record density seems low (I see 29 records per page vs 50 on Google Docs). This is using Chrome 38 on Linux.
The "link to another table" seems interesting, but my data came denormalized so I have a column with e.g. 10 different repeated values on 500 rows. Maybe it would be nice to automatically clean that up somehow. For example, I could Copy the column and have a some Paste (unique values only) option. Maybe the dialogue that comes up (suggesting to expand the spreadsheet) could even tell you about that. Or maybe there could be an option to convert a text field to a separated linked table.
I had some conditional formatting set up via Google Docs, which could be nice to have here; e.g. red wines have a red background in that wine type table.
I don't have a simple primary key -- it's really a composite of {wine producer, wine name, vintage}. The app didn't mind importing non-unique values into that first column. I don't know what the alternative might have been -- an auto-generated primary key?
Having said all of the above, I really like Google Docs and it will take some amazing features to make me switch to anything else. Multi-user planning and documentation via docs is great -- I have a shopping list everyone can update and I can see it change real time on the phone in the shop while someone is changing it from their desktop, and it's always up to date.
We're planning on improving scrolling performance soon, it's definitely a priority for us to improve our performance for large datasets.
As for the linking, we definitely want to do more to help you normalize your data. We can also infer column types to help with the import process. Doing this type of thing on paste is an interesting idea.
We have some ideas for how to make it so that you don't need a primary column. One thing that you can do now is make the primary column a formula, and then reference other columns to generate a key.
Edit: reach me at shri (at) freshvc (dot) com
If I could make a request for the API: it's almost impossible to get a simple JSON serialization of a table in Google Spreadsheets. There are so many times where I just want to make a really simple MVP with a backend data source, but don't want a full-fledged Firebase database. If I could just stick my data in an Airtable sheet and point my Javascript to load it and create the page dynamically, that would be ideal.
If you are looking to update the Sheet too I've not explored that far; otherwise let me know which of the above you're having trouble with!
We do want to support some form of scripting that would be hosted on OUR servers, but that's further out on the roadmap. We also have plans to support external integrations and triggers via Zapier/IFTTT.
Detected via a Firefox extension [1] (there are several on AMO). Given the nature and severity of the vulnerability, and how widespread it still is (I get an alert every few days), I'm surprised everyone doesn't use one.
[1] https://addons.mozilla.org/en-US/firefox/addon/foxbleed/
Most spreadsheet calculations are better suited to decimal floating point, and decimal floating point numbers are more intuitive for most users. A surprising number of the "Excel bugs" you find online are people misunderstanding binary floating point numbers, or some of the display hacks Excel uses to hide binary artifacts.
It's pretty hard to use a custom floating point representation that isn't supported as a primitive type. To make the matters worse even the standard binary floating point number doesn't map to JSON. E.g. +/- Inf and NaN don't have JSON representation.
We strive hard to provide intuitive user experience and abstract away the complexity of modern computing for non-technical users. At some point we might use a decimal floating point or better yet a fixed point decimal as the default representation for numbers.
It seems the main claimed advantage of dec64 over IEEE 754-2008 decimal64 is in the fast-path zero-exponent case. Note that V8, SpiderMonkey, and many other dynamic language implementations use a separate compact fast-path representation of integers that renders this point moot. Also, no benchmarks are provided to show the supposed speed advantages of dec64 libraries over decimal64 libraries.
Also, I doubt the dec64.org's claim that the primary reason for slow uptake of decimal64 is the speed of software implementations.
In short, dec64 is mildly interesting, but its claimed advantages aren't enough to justify abandoning the decimal64 format that already has hardware support and language support in a very popular language. Intel also had a large role in standardizing the decimal64 format, so I suspect they'd be much more likely to implement decimal64 in hardware instead of dec64 in hardware.
Edit: on a side note, it's unfortunate that neither dec64 nor decimal64 forces normalization, complicating comparison and sorting.
> 22. A web-based Excel/database hybrid. People often use Excel as a lightweight database. I suspect there's an opportunity to create the program such users wish existed, and that there are new things you could do if it were web-based. Like make it easier to get data into it, through forms or scraping.
> Don't make it feel like a database. That frightens people. The question to ask is: how much can I let people do without defining structure? You want the database equivalent of a language that makes its easy to keep data in linked lists. (Which means you probably want to write it in one.)
Very difficult to get non technical peeps just suddenly ditch spreadsheets.
I think a focus on a specific use case i.e job would be better approach. Seems to be to broad in terms of the jobs that it is addressing.
And also are building out a few dedicated pages for the most common use cases like the job applicant tracking one you described: https://airtable.com/applicantTracking/a3sz9t7b
At the moment, offline support works fine unless the app closes or crashes, at which point it loses all of its data until next connect.
I'd love to use this app frequently and for data I need constant access to, but have a nightmare scenario of it losing its cache just as I walk into a room without internet (London Tube, many offices, ...).
Totally happy for better offline support to go in a paid plan. :)
Any interest in having Airtable featured on the list of example apps on the Backbone homepage? If yes, drop me a line...
Quick question about the technology used here. How do you sync the data entered from mobile app to the web app? What did you use to create such a beautiful UI?
Re: data sync, see this comment thread: https://news.ycombinator.com/item?id=8374364
Re: UI, see here: https://news.ycombinator.com/item?id=8374446
Also, minor note. On the fifth step of the tour, the word "seperate" is misspelled.
Spreadsheets have never quite "clicked" with me, but this did. It exposes a lot of functionality that your average person would want out of a spreadsheet in a much friendlier way.
I am really curious on the "database" side though, can this handle a couple of tables with 10k rows linking to one another? Maybe an API that allows me to return JSON with some query language? If so, would be a great tool for CRM like tools and any small/medium data set where a nice UI for editing would come in handy
After defining 3 tables with related records, some thoughts:
- Trying to enter some records, I pressed space in the checkbox column, "zoom view" appeared instead of changing the value (enter changes the value), I understand that this is a convention in your system, but what's the point of the zoome checkbox? :)
- Detail view shows checkbox columns, as checkbox - name and another value-changing checkbox below, waste of space - record with 4 column takes almost all modal window.
- Changing value of checkbox with enter, disallows submitting detail view, so there is no submit, but then I cannot simply discard changes made in the detail view, when I press ESC - data still changes. To revert changes, I had to press ctrl-z several times.
- I noticed that of the entered characters changed to ?, I'm not shure how cannot replicate it, but entering some strange character, and clicking around does the trick.
- I think you should consider adding standard spreadsheet/browser keyboard shortcuts: F2, alt+down.
- Make page up / page down work.
- Adding related record, could automatically open new detail window - creating unnamed row seem pointless.
Good luck!
With todoist if you complete a task it crosses it out, which really looks great visually if you are checking off a list. maybe if you check one of the rows, finished column, it crosses out everything in that row.
Re: the auto cross out, one thing you can do is add a filter that filters by "Completed?" = unchecked, which will make each row automatically fade out when you check (you can create a different view to show the Completed books)
The tour seems a little broken in that the callouts sometimes appear in locations for "menu items" before the menu appears but is still very informative.
See image before menu: http://bit.ly/1xq1XYI And image after menu: http://bit.ly/1rprJrk
Have you thought much about automation? For example, it would be awesome if every email I send/receive could create or update a row anchored on the recipient/source email.
Seems niche, but building that means I could completely automate what RelateIQ does best. That's just one example, and the point of this kind of automation is that it enables any workflow I need.
Second, when modifying the properties of a multiple options column you can't see text past a certain point, even though the row is clearly big enough: http://i.imgur.com/6ju4vCe.png
1) Airtable is seamlessly realtime and instantly shareable with collaborators (which we believe is highly important for most use cases).
All those other products required desktop software installation, and sharing a DB with multiple users required involved setting up a networked shared drive with a file that was concurrently accessed by multiple users.
2) Airtable supports a full fledged mobile, simple-to-use interface. Mobile access is increasingly important, and none of those products provided a mobile interface (with the exception of Bento). Our mobile app instantly syncs all your changes with the web interface, or other shared collaborators.
3) Airtable supports the speed of data entry of a grid based interface on the web, while maintaining database structure (typed columns, 1 row = 1 record) which means we can alternately display records as cards (on mobile) or in the future, points on a map, events on a calendar, etc. Many of the other products forced you to use a form-based interface for record creation/editing, rather than allowing grid-based editing.
4) More modern paradigm. We support features like @mentions, row comments, direct file uploads from dropbox/box/google drive, etc, that add a useful collaboration layer on top of just the raw data.
can you tell us more about the stack used?
See more in my other comment: https://news.ycombinator.com/item?id=8374468
For me the UI seems a bit heavy. Not sure what it is about the UI, but it feels very constrained for me. It could just be the color, the size of the fields or something. But I think with a small amount of UI tweak it'll feel more welcoming and happy.
I know I'll use it for sure, but now I just don't see a reason to reach out for it over Google Apps. Which is a challenge you'll face.
For example, your demo apps are all great, but for anyone who is hiring or sales leads are a pain, there is already a fully integrated product out there. For the rest, Google Apps might just work fine.
Basically, I think it comes down to fining your product-market fit and going after that segment.
Right now, I can do this in Google Spreadsheets but it is a lot of work, and I can do this in Excel but it requires manually pulling down the data and then painstaking updating formulas and making sure nothing breaks. I could also do this in R but it's too complex for me.
Thanks for sharing and good luck!
If this were a JavaScript library that let me use MySQL/PostgreSQL on the back-end, I would be the first to buy a license, even if pricey. I could even live with a reduced feature set, such as no revisions.
Alas, companies can only focus on so many business plans at once. :)