S24-E03 – BuiltOnAir Live Podcast Full Show
To get all the latest videos and demonstrations from the BuiltOnAir Podcast, subscribe and get notified on our Youtube channel here and our newsletter/community here.
FULL EPISODE VIDEO
Watch the full video of the show.
FULL EPISODE AUDIO
Listen to the full Audio podcast for this episode here. Or add to your favorite podcast player
Listen On: Apple | Overcast | Spotify
The BuiltOnAir Podcast is Sponsored by On2Air – Integrations and App extensions to run your business operations in Airtable.
Start a FREE 14 Day Trial of On2Air Now
In This Episode
Welcome to the BuiltOnAir Podcast, the live show. The BuiltOnAir Podcast is a live weekly show highlighting everything happening in the Airtable world.
Check us out at BuiltOnAir.com. Join our community, join our Slack Channel, and meet your fellow Airtable fans.
Episode Summary
In this episode of BuiltOnAir, Kamille provides a comprehensive deep dive into Airtable’s Sandbox feature, a vital tool for users on Business and Enterprise plans. Designed to act as a ‘draft mode’ or a version control branch, sandboxes allow developers to test significant changes to schemas, automations, and interfaces without impacting the live production environment.
However, using sandboxes effectively requires understanding several technical nuances. We explore the critical ‘gotchas,’ including how record IDs behave differently between environments and why relying on specific record-based logic can accidentally cripple your base once changes are published to production.
⏱ Timeline:
- 10:50 - What Airtable Sandboxes are and how they work
- 12:36 - Understanding the Production vs. Sandbox toggle
- 15:44 - Difference between schema duplication and data syncing
- 25:58 - The critical danger of relying on specific Record IDs
- 28:44 - Better ways to build logic using ancillary fields
Full Transcription
The full transcription for the show can be found here:
[00:00:02] all right welcome back into the built on[00:00:04] air podcast good to be back with everybody
[00:00:06] ali Kamille and myself Dan back with you
[00:00:10] talk about all things Airtable and keep
[00:00:12] you up to date on all the latest
[00:00:14] increased functionality and features today
[00:00:17] we’re doing another deep dive into
[00:00:21] specific functionality around sandboxes
[00:00:25] and how those work so Kamille’s going to
[00:00:27] walk us through that
[00:00:29] Before we jump into that,
[00:00:31] I was gonna show,
[00:00:31] let me share my screen.
[00:00:40] And.
[00:00:49] So yeah, on the what’s new,
[00:00:51] there was a couple of things added in
[00:00:53] April.
[00:00:53] I don’t know how new these are,
[00:00:56] but they’re at least announcing custom
[00:00:58] elements.
[00:01:00] Did anything change with this?
[00:01:02] Or is this just finally announcing this
[00:01:04] functionality?
[00:01:06] I think it’s a formal release.
[00:01:08] Gotcha.
[00:01:09] Yeah.
[00:01:10] And now when you go, at least in,
[00:01:12] yeah,
[00:01:12] this is what I was about to bring
[00:01:13] up,
[00:01:14] is now when you go to create a
[00:01:15] new interface page,
[00:01:16] that’s like right at the top.
[00:01:20] What I still find frustrating is this will
[00:01:23] create an element on a dashboard only.
[00:01:27] You can’t drive where that will land.
[00:01:30] And it seems to kind of just pick
[00:01:32] the first dashboard or create a new one
[00:01:34] if you don’t already have one.
[00:01:37] But then you can take that code and
[00:01:39] get it into a different,
[00:01:40] you can copy it and paste it into
[00:01:42] a different screen.
[00:01:44] To get to an actual full page custom
[00:01:47] interface,
[00:01:48] the only way I’ve figured out how to
[00:01:49] do that is to start from the data
[00:01:51] layer and open Omni and ask it to
[00:01:53] create a custom interface.
[00:01:54] I can’t do it in another way unless
[00:01:59] anyone has suggestions.
[00:02:01] So when you do this,
[00:02:04] it doesn’t create a full custom?
[00:02:05] No, it creates a dashboard.
[00:02:09] It creates a dashboard element.
[00:02:12] So you can like like a number.
[00:02:14] You know how like there’s numbers, charts,
[00:02:15] lists on a dashboard layout.
[00:02:19] It that’s that’s where this will land.
[00:02:22] At least a few times I’ve tried it.
[00:02:23] Interesting.
[00:02:26] If you don’t use Omni,
[00:02:28] you can create a full page custom
[00:02:30] extension by clicking the custom option,
[00:02:32] but that requires that you code it
[00:02:34] yourself.
[00:02:36] Right, because every time I do that,
[00:02:37] it’s like you don’t have any custom
[00:02:39] extensions and then that’s
[00:02:41] I have not even figured out how to
[00:02:43] get beyond that screen.
[00:02:45] Is that when you have to connect the
[00:02:47] SDK somehow on a different end?
[00:02:51] Yeah,
[00:02:52] you have to have it installed on whatever
[00:02:58] machine you’re on.
[00:03:00] You should be able to create new from
[00:03:02] there.
[00:03:03] And if not,
[00:03:03] that’s interesting user experience.
[00:03:08] There’s a lot about custom extensions for
[00:03:11] interfaces that don’t feel connected.
[00:03:14] Like Ali just said,
[00:03:15] if Omni creates it for you,
[00:03:17] it’s not necessarily counted as your
[00:03:21] custom extension.
[00:03:22] So the next time you try to add
[00:03:24] it,
[00:03:24] it’s not going to recognize that it
[00:03:26] exists.
[00:03:27] You have to copy and paste the code
[00:03:28] from one place to another.
[00:03:30] So you have two different methods of
[00:03:33] reusing a custom extension for interfaces
[00:03:36] and they’re not at all connected.
[00:03:38] And then the first option that they’re
[00:03:41] talking about here,
[00:03:42] creating a dashboard element and not a
[00:03:44] full page custom extension is also an
[00:03:47] interesting choice.
[00:03:48] Yeah.
[00:03:51] Yeah.
[00:03:51] Okay.
[00:03:52] That’s interesting.
[00:03:54] Okay.
[00:03:54] So that’s,
[00:03:57] So I was going to say,
[00:03:58] I have found reasons for liking the
[00:04:00] dashboard element because then I can have
[00:04:02] it next to, you know,
[00:04:04] other native pieces so that like,
[00:04:07] not only just for checking the data,
[00:04:09] like making sure that the code it wrote
[00:04:11] is pulling the right stuff, but I dunno,
[00:04:14] I often then move it to a full
[00:04:15] page after I’ve done all that,
[00:04:18] but we’ll see.
[00:04:19] Yeah.
[00:04:24] All right, there’s another one.
[00:04:25] They’ve been talking a lot about their MCP
[00:04:29] connector.
[00:04:30] So they released a new MCP a little
[00:04:33] while ago and now they have it integrated
[00:04:35] directly into cloud.
[00:04:36] So you can add it directly into your
[00:04:39] cloud client and use.
[00:04:42] So that’s kind of cool.
[00:04:45] I don’t really use this approach.
[00:04:49] I kind of,
[00:04:51] I have done a lot of like Claude
[00:04:53] scripting with Airtable,
[00:04:56] but if you give it,
[00:05:00] like Claude already knows the API for
[00:05:02] Airtable,
[00:05:03] and so I just have it write scripts
[00:05:06] that just use the API directly.
[00:05:09] I haven’t really found a need to…
[00:05:11] go through the MCP approach.
[00:05:13] It kind of adds an extra layer of
[00:05:16] abstraction and complexity that I don’t
[00:05:18] think is fully necessary.
[00:05:21] So I don’t know.
[00:05:24] But that’s also writing scripts and codes
[00:05:27] and stuff.
[00:05:27] So my world is not as needed.
[00:05:32] I’ve personally I have not used it yet.
[00:05:36] The more I get into writing code with
[00:05:38] Claude,
[00:05:39] the more I’m thinking about where I would
[00:05:42] use this is just so that it can
[00:05:44] easily reference my schema as I’m talking
[00:05:47] about the things I want to change.
[00:05:49] Because often like I’ll say, oh,
[00:05:51] I want to add this and it has
[00:05:52] to come back and ask me for the
[00:05:54] field IDs so that I can write the
[00:05:55] code correctly.
[00:05:57] But if it just knew them,
[00:05:58] that would be good.
[00:06:01] But I’ve had clients and colleagues talk
[00:06:04] about great success using this to get an
[00:06:08] overview on their entire workspace and ask
[00:06:11] it to find where they have holes in
[00:06:13] their data structure and what they can
[00:06:15] improve and optimize.
[00:06:16] And they said they were blown away.
[00:06:18] So that could be cool.
[00:06:20] Yeah, that’s cool.
[00:06:23] Yeah, I could see that.
[00:06:24] Where it’d be interesting…
[00:06:27] I’m really curious to see how Airtable
[00:06:29] approaches the whole AI movement,
[00:06:32] because the MCP is still limited by what
[00:06:36] the AI can do.
[00:06:38] And so I’m hopeful that this whole push
[00:06:42] for AI and MCPs pushes Airtable to enhance
[00:06:47] their API to allow for more interaction,
[00:06:50] more access.
[00:06:51] Absolutely.
[00:06:52] Yeah.
[00:06:57] All right,
[00:06:57] last one looks like a little bit of
[00:06:59] love given to the admin panel users,
[00:07:02] some just kind of UI improvements.
[00:07:07] Yeah, if you’re in a large enterprise,
[00:07:11] loading the users page was painful.
[00:07:14] It’s less painful now, which is good.
[00:07:16] If you go back to the previous screenshot,
[00:07:20] they basically paginated the response,
[00:07:23] which is different from how they’re
[00:07:25] paginating bases.
[00:07:27] I feel like this is the more standard
[00:07:29] approach of just give you literal pages
[00:07:32] and you can define,
[00:07:33] show me fifty at a time or a
[00:07:35] hundred or two fifty or whatever.
[00:07:37] Whereas if you were looking at a
[00:07:39] particularly large view and a base,
[00:07:41] it’s like, well,
[00:07:41] here’s a thousand of those records.
[00:07:45] Hopefully it’s the ones that you’re
[00:07:47] looking for unless you want to view all
[00:07:49] of them.
[00:07:49] There’s no happy medium.
[00:07:52] So I’m wondering if this is kind of
[00:07:54] like them testing the waters of here’s
[00:07:57] some pagination for a large data set of
[00:08:00] some kind.
[00:08:02] Other than what is kind of shown here,
[00:08:06] there’s like minor tweaks,
[00:08:09] like they’ve organized the sidebar for
[00:08:11] navigation in the admin panel with nothing
[00:08:13] in the way of like new features
[00:08:15] necessarily.
[00:08:15] Yeah, yeah.
[00:08:20] That’s good.
[00:08:20] They are thinking about the admin panel.
[00:08:25] All right, with that, close that.
[00:08:30] Okay, Kamille, put your screen on,
[00:08:34] there you go.
[00:08:35] Yeah,
[00:08:36] so we’re going to talk about sandboxes,
[00:08:39] which is a somewhat newer feature for
[00:08:42] Airtable.
[00:08:42] It has been released for a little bit,
[00:08:44] and it was in an extended beta for
[00:08:47] a while before that.
[00:08:48] But it’s not as, I don’t know,
[00:08:52] I don’t really hear too many people
[00:08:54] talking about sandbox all that much,
[00:08:57] even though it’s a useful feature.
[00:09:01] But it does have, I would say,
[00:09:03] quite a lot of gotchas.
[00:09:06] Sandbox is available for business and
[00:09:09] enterprise scale plans.
[00:09:11] So you can’t have it on any lower
[00:09:12] of a plan.
[00:09:14] But the general idea of a sandbox is
[00:09:18] I want to make some changes to the
[00:09:20] schema, the automations, the interfaces,
[00:09:23] the forms of this base,
[00:09:26] but other people are in it.
[00:09:28] So if I start deleting columns and adding
[00:09:31] new tables and really adjusting some
[00:09:35] foundational things about this base,
[00:09:37] I’m going to ruin a lot of people’s
[00:09:38] days.
[00:09:39] So the idea of turning on a sandbox
[00:09:43] is I can enable this other layer,
[00:09:46] thinking of it as a draft mode,
[00:09:48] or if you’re familiar with traditional
[00:09:50] development,
[00:09:51] it’s a lower form of Git where you
[00:09:54] open a branch and you start drafting all
[00:09:58] of the changes that you want to make.
[00:09:59] And when you’re ready,
[00:10:00] there’s a publish button to publish all of
[00:10:02] your changes to the normal base,
[00:10:05] which they call production.
[00:10:07] So how do you create a sandbox?
[00:10:09] Really simple.
[00:10:10] You click on the name of the base.
[00:10:12] If you’re on business or enterprise,
[00:10:17] you should see the sandbox section.
[00:10:19] It’s going to explain to you what the
[00:10:22] sandbox is.
[00:10:23] I’m going to go ahead and create a
[00:10:25] sandbox.
[00:10:26] Depending on how large the base is,
[00:10:30] this might take a minute,
[00:10:32] a couple minutes.
[00:10:34] You see I got briefly that message that
[00:10:37] said this is taking longer than expected,
[00:10:39] so I’m going to get an unnecessary email
[00:10:41] saying that it’s ready.
[00:10:43] I see that it’s ready.
[00:10:45] Visually, not too much has changed.
[00:10:48] It’s going to tell me that, hey,
[00:10:49] there is a sandbox for this space.
[00:10:52] There was that pop up in the top
[00:10:53] right.
[00:10:54] But there’s now this switch between
[00:10:56] production and sandbox.
[00:10:59] There are certain features that are
[00:11:01] immediately disabled from me making any
[00:11:06] adjustments to in the production view,
[00:11:09] which is where I am right now.
[00:11:10] So if I double click description,
[00:11:12] for example,
[00:11:13] I can’t change anything about this field.
[00:11:17] I can’t rename it,
[00:11:18] can’t add a description,
[00:11:19] can’t change its field type,
[00:11:21] can’t do that.
[00:11:22] i can modify views so i can hide
[00:11:26] and show columns i can filter i can
[00:11:28] create new views so i’m just going to
[00:11:31] quickly create a new personal view you’ll
[00:11:33] notice that locked view is missing that’s
[00:11:38] basically because that is considered a
[00:11:42] schema change so airtable is saying you
[00:11:45] can create a locked view but only if
[00:11:48] you’re in the sandbox
[00:11:49] So I’m going to say, KP,
[00:11:53] this is a personal view.
[00:11:55] And you’ll see why I’m making example
[00:11:57] views in a second.
[00:11:59] And I’m going to create a locked view
[00:12:03] preemptively.
[00:12:05] Regular collaborator view,
[00:12:06] and I’m going to lock it once I
[00:12:07] get to the sandbox.
[00:12:09] If I go to automations,
[00:12:12] similar to making schema changes,
[00:12:15] this tooltip says I don’t have permission
[00:12:17] to switch it on.
[00:12:19] What it really means is that Sandbox is
[00:12:22] active,
[00:12:23] which means if I want to turn this
[00:12:24] on, I have to go to Sandbox,
[00:12:26] turn it on, and publish that change.
[00:12:28] I can test automations.
[00:12:30] So if you need to manually run something,
[00:12:34] you can still do as you’ve done before
[00:12:37] and pick test records,
[00:12:38] or you could test the whole thing at
[00:12:39] once as long as there’s not a loop
[00:12:41] in it.
[00:12:42] That still works as expected.
[00:12:46] If I go to interfaces,
[00:12:47] I don’t believe I published any.
[00:12:50] Oh wait, no, I did.
[00:12:50] The UI is just weird.
[00:12:52] I always forget that, um,
[00:12:54] interfaces will behave the way that you
[00:12:58] expect them to.
[00:12:59] Um, but you can’t edit them directly.
[00:13:02] Of course you must edit them in the
[00:13:04] sandbox.
[00:13:04] Same thing with forms.
[00:13:06] So I’m going to go back to the
[00:13:08] data layer and I’m going to switch to
[00:13:10] sandbox now.
[00:13:14] What happens when you’re in a sandbox?
[00:13:17] First of all,
[00:13:19] all I did was switch the toggle.
[00:13:21] If you have a larger base,
[00:13:24] this might take a little bit longer to
[00:13:26] switch back and forth.
[00:13:27] I haven’t noticed it being that bad,
[00:13:29] to be honest,
[00:13:30] for even large bases that have a sandbox
[00:13:32] active.
[00:13:33] I have this sidebar that comes up that
[00:13:35] says sandbox changes.
[00:13:38] As I start making adjustments here,
[00:13:40] it’s going to keep track of what those
[00:13:43] adjustments are so that when I’m ready to
[00:13:47] publish these changes,
[00:13:48] I can submit them all or just submit
[00:13:50] the ones that I’m ready to publish at
[00:13:52] a given time.
[00:13:53] similar to publishing changes to an
[00:13:55] interface,
[00:13:56] but you’ll see it’s a little bit more
[00:13:57] detailed.
[00:13:59] I’m going to get rid of this because
[00:14:00] I know I’ve already used this before.
[00:14:03] Something that I want to make very clear,
[00:14:05] when you first create a sandbox,
[00:14:08] it’s basically duplicating the base.
[00:14:12] All of the IDs that are related to
[00:14:15] this base are the exact same,
[00:14:18] which is great for scripting,
[00:14:20] except for the base ID.
[00:14:22] The sandbox has a different base ID than
[00:14:24] the production base ID, but the table IDs,
[00:14:28] view IDs, field IDs,
[00:14:30] even record IDs are exactly the same at
[00:14:34] the point that you make a duplication.
[00:14:37] That’s true of basically any method of
[00:14:39] duplicating a base.
[00:14:41] The difference is if I go in and
[00:14:45] I add a brand new field, new field,
[00:14:52] And I publish this change.
[00:14:53] Production is going to have the same field
[00:14:55] ID for this.
[00:14:56] That is not true if I just duplicated
[00:14:58] a base.
[00:14:59] The new field in base A and base
[00:15:02] B would have different field IDs.
[00:15:04] They have the same field ID in sandbox.
[00:15:06] So solid choice there.
[00:15:08] It keeps things consistent from a schema
[00:15:10] perspective.
[00:15:13] But when it’s duplicating the base at,
[00:15:16] you know, when you enable sandbox,
[00:15:20] it does not keep your records in sync.
[00:15:23] And in fact,
[00:15:24] sandbox does not consider changing records
[00:15:27] to be a change that can be published.
[00:15:30] So if I go in and I delete
[00:15:32] two of these records in this table,
[00:15:37] and I review my changes,
[00:15:38] Airtable is going to think real hard about
[00:15:40] what I’ve done and it’s going to say,
[00:15:42] well,
[00:15:42] you added a new field and there’s no
[00:15:44] reference to the data.
[00:15:47] This is a completely separate set of data.
[00:15:53] It’s the schema,
[00:15:54] the automations and the interfaces that
[00:15:57] are being carried over.
[00:15:59] Nothing about the data.
[00:16:01] that is a specific weakness that we’ll
[00:16:05] talk about later.
[00:16:07] Right now,
[00:16:07] I’m just giving a high-level overview of
[00:16:09] what even is Sandbox.
[00:16:11] But there are very specific gotchas that
[00:16:15] are unique to Sandbox that you wouldn’t
[00:16:17] find in some other standard methods of
[00:16:21] drafting development.
[00:16:25] So I can do other things,
[00:16:26] like I can turn this automation on.
[00:16:29] I can say…
[00:16:32] rename an existing automation.
[00:16:34] I could go into my interfaces and this
[00:16:36] is where stacking changes starts to get a
[00:16:39] little confusing because interfaces still
[00:16:42] have a published section,
[00:16:44] which is a layer of,
[00:16:47] before you publish the changes out of
[00:16:50] Sandbox.
[00:16:51] So if I wanted to go to this
[00:16:54] page, for example, and I said,
[00:16:57] I don’t need this whole section of this
[00:17:03] interface anymore, I have to delete that.
[00:17:06] And then I have to publish the change
[00:17:08] to the interface like normal.
[00:17:10] But then I have to go back to
[00:17:12] the data and then review the changes and
[00:17:15] then publish that change to production.
[00:17:20] So you’re publishing twice for interfaces.
[00:17:24] And it’s the same thing for forms.
[00:17:26] So this pop-up is letting me know that
[00:17:29] now that I have a couple more changes
[00:17:31] in my review changes panel,
[00:17:34] I don’t have to publish all of these
[00:17:36] changes at once.
[00:17:37] I can pick and choose which changes I
[00:17:39] want to submit.
[00:17:41] and all of these changes were done today
[00:17:42] but if this were a longer development
[00:17:45] period it would be grouped by the day
[00:17:48] that the changes were made so if you
[00:17:50] happen to know i was working on stuff
[00:17:53] earlier in the week monday all of that
[00:17:55] stuff is ready but the changes i made
[00:17:57] today not quite ready you can select
[00:18:00] everything that was in monday you can also
[00:18:03] filter i’m just going to click through
[00:18:05] this so i can click
[00:18:07] You can also filter by who made the
[00:18:09] change.
[00:18:10] So if there were multiple people in this
[00:18:12] base making adjustments, I can say, well,
[00:18:14] I know my stuff is ready.
[00:18:16] Just show me my changes and I’ll publish
[00:18:18] those and I’ll leave everyone else’s
[00:18:21] changes here until they’re ready to
[00:18:23] publish.
[00:18:26] Something to note,
[00:18:28] a lot of pieces of Airtable can have
[00:18:31] overlapping changes.
[00:18:33] Like if I delete a section on that
[00:18:37] interface page and Ally goes in and adds
[00:18:40] a section of that interface page,
[00:18:43] it’s only one publish.
[00:18:45] So I can’t publish my things without also
[00:18:49] publishing Ally’s change to that
[00:18:51] interface.
[00:18:52] that is different from some other
[00:18:54] adjustments.
[00:18:55] Like if I go to automations earlier,
[00:18:58] I’m just going to close that.
[00:19:00] I renamed this automation to just cool,
[00:19:04] but I can also add a new step
[00:19:08] to the automation.
[00:19:09] And if I go back here,
[00:19:12] what it should do, yeah,
[00:19:14] it
[00:19:17] counts those as separate changes.
[00:19:19] So sometimes you can be very selective
[00:19:22] about what piece of this change is being
[00:19:26] published at any given time,
[00:19:28] but other times, mostly with interfaces,
[00:19:31] you have to publish all of the changes
[00:19:33] at once.
[00:19:34] So I could say the only thing I
[00:19:37] want to do is rename that automation to
[00:19:39] cool.
[00:19:40] So I just click that checkbox.
[00:19:43] I’m applying one change.
[00:19:44] The number of changes that you make is
[00:19:47] going to affect how long this process
[00:19:50] takes.
[00:19:52] um it is now done so if i
[00:19:54] do view apply changes it’s just a summary
[00:19:57] of whatever you did that just got pushed
[00:20:00] i’m going to go back to production and
[00:20:03] those records that i deleted are still
[00:20:06] here in production again record
[00:20:08] information does not change from sandbox
[00:20:10] to production if i go to my automations
[00:20:14] that create record step is not there but
[00:20:16] the automation is renamed to cool
[00:20:19] So pausing there,
[00:20:21] any questions or comments?
[00:20:24] Awesome so far.
[00:20:26] One question I just thought of is if
[00:20:29] you had created two steps in that
[00:20:32] automation, two new steps,
[00:20:34] edited one and created a new one,
[00:20:36] would that still appear as just one
[00:20:37] change, edited actions in this automation?
[00:20:40] It would.
[00:20:40] Okay.
[00:20:41] So from memory,
[00:20:43] the changes to an automation that are
[00:20:45] separate are renaming slash updating the
[00:20:49] description.
[00:20:51] So I’m just going to keep editing the
[00:20:52] same one to see all of the changes
[00:20:54] together.
[00:20:55] Edit description.
[00:21:00] Um, the trigger is a separate thing.
[00:21:03] So if I just add a couple more
[00:21:05] days and then this was already there of
[00:21:08] create a new record,
[00:21:09] but I’m going to delete this action here.
[00:21:16] So now if I look at my review
[00:21:18] changes,
[00:21:20] edit actions and edit trigger are
[00:21:24] different.
[00:21:26] It doesn’t seem to recognize that I’ve
[00:21:29] updated the description,
[00:21:30] although that might be hidden in either of
[00:21:34] those.
[00:21:34] So we’ve come across our first gotcha.
[00:21:38] How do I not publish?
[00:21:41] it being redescribed as test.
[00:21:43] I don’t know.
[00:21:45] And there’s also no real undo.
[00:21:48] You can’t like click on this change and
[00:21:52] be like, actually get rid of that,
[00:21:54] revert it back to production.
[00:21:56] The only real way to revert this back
[00:21:58] to production is to delete the sandbox and
[00:22:00] start over.
[00:22:02] So since I just mentioned that,
[00:22:05] how do you do it?
[00:22:06] um you can go to this drop down
[00:22:10] if you’re in sandbox you could go and
[00:22:11] delete sandbox and what that will do is
[00:22:16] it will kick you out and say that
[00:22:18] sandbox is no longer available um the
[00:22:21] changes that i didn’t publish are lost to
[00:22:23] the sands of time sometimes it’s a good
[00:22:25] thing if you’re if you’ve made a critical
[00:22:28] error in the sandbox and you’re like i
[00:22:30] don’t want that to carry over at all
[00:22:33] So it’s still named cool because it’s the
[00:22:35] one thing that I did publish,
[00:22:36] but the other changes to this automation
[00:22:38] were not done.
[00:22:40] And the interface is going to be the
[00:22:41] same before I touched it.
[00:22:43] If I ever want a sandbox again,
[00:22:45] I would go in and I would create
[00:22:46] a sandbox.
[00:22:47] It’s going to do so.
[00:22:49] That sandbox is going to have a different
[00:22:51] base ID than the original sandbox.
[00:22:54] It’s always going to be a different base
[00:22:56] ID.
[00:22:57] So if you have environment variables for
[00:23:01] your make configurations or for your
[00:23:03] coding projects,
[00:23:05] you’re going to have to keep updating the
[00:23:07] sandbox ID.
[00:23:10] So I’m back in Sandbox.
[00:23:13] Now it’s a kind of fresh install.
[00:23:15] You’ll notice it recopied all of the
[00:23:18] records.
[00:23:18] So I’m back to five at this table.
[00:23:20] I think originally I deleted three and
[00:23:22] four.
[00:23:25] Something to note about like,
[00:23:29] what are the differences between how I
[00:23:32] would
[00:23:33] make changes in Airtable.
[00:23:35] If there’s a sandbox active versus there’s
[00:23:36] not,
[00:23:37] there’s certain things that I would not
[00:23:40] recommend you make part of your, uh,
[00:23:44] configuration.
[00:23:45] So I’m going to go, I don’t know,
[00:23:48] maybe tasks as an example,
[00:23:51] here’s what I wouldn’t say.
[00:23:54] I would say, well,
[00:23:56] actually I want to go somewhere else.
[00:23:57] Everything is linked to the same event.
[00:24:02] but maybe that’s a good thing.
[00:24:04] Here’s what I don’t necessarily want to
[00:24:07] do.
[00:24:09] I don’t want to have like anything in
[00:24:15] Airtable that is specifically looking at
[00:24:17] an exact record.
[00:24:20] and I’ll explain why in a second.
[00:24:22] So if I say you could link to
[00:24:25] an event, attendees can link to events,
[00:24:30] but only if that event, let’s see,
[00:24:35] if that task has any of one of
[00:24:37] these, I would not recommend you do that.
[00:24:40] What this is doing is saying only let
[00:24:43] them link if that thing is associated with
[00:24:46] this exact record, because remember,
[00:24:50] The data in Sandbox is copied at the
[00:24:53] time that you turn on the Sandbox.
[00:24:56] And from that point forward,
[00:24:58] the record IDs are not guaranteed to match
[00:25:00] between production and Sandbox.
[00:25:02] So if I went in,
[00:25:04] I’m gonna cancel out of that.
[00:25:06] If I went and said, brand new task,
[00:25:10] That task does not exist in production and
[00:25:13] it never will.
[00:25:14] So if I go back and try and
[00:25:16] do what I did before,
[00:25:18] only link where task has any of
[00:25:24] brand new task.
[00:25:26] I’m going to save.
[00:25:27] It’s exactly what I want.
[00:25:28] I’m going to review my changes.
[00:25:31] I’m going to apply these changes.
[00:25:33] Airtable is not going to warn me that
[00:25:35] the condition I’ve just set is impossible.
[00:25:38] So I should never be able to link
[00:25:40] to another event again.
[00:25:42] So I’m going to click done.
[00:25:44] I’m going to close out of here and
[00:25:46] I’m going to go to production.
[00:25:47] What is helpful
[00:25:49] while I’m about to be negative,
[00:25:50] what is helpful is that it knows to
[00:25:52] send you back to the same view and
[00:25:54] table back and forth between production
[00:25:56] and sandbox.
[00:25:56] So that’s nice.
[00:25:58] But if I create a brand new attendee,
[00:26:02] there’s,
[00:26:02] it’s impossible for me to link to a
[00:26:04] record, uh, the warning in the field.
[00:26:08] No, it has no way of knowing that,
[00:26:11] uh,
[00:26:13] It’s hidden condition.
[00:26:15] So if you look,
[00:26:16] it’s going to act as though it’s a
[00:26:19] task that was deleted.
[00:26:21] So that’s not necessarily an error from
[00:26:25] Airtable’s perspective,
[00:26:27] but you’ve now crippled your base.
[00:26:31] And there’s also, there’s no indication,
[00:26:33] if I go back to Sandbox,
[00:26:35] there’s no indication,
[00:26:36] I think I was in the task table,
[00:26:38] that these records exist in production,
[00:26:42] but this one doesn’t.
[00:26:43] You would just have to know that.
[00:26:45] And that’s not something that’s,
[00:26:49] you’re not going to keep track of that
[00:26:50] for every table, for every record.
[00:26:53] You’re simply not going to do that.
[00:26:57] That’s wild.
[00:26:59] Yeah, it’s a good idea,
[00:27:01] but there’s specific things that you just,
[00:27:04] you simply cannot do that.
[00:27:06] So what I would recommend instead is I
[00:27:09] would say events have tasks,
[00:27:14] I would say
[00:27:17] I don’t know,
[00:27:19] maybe it’s all determined by task type.
[00:27:21] I would say if you want to do
[00:27:23] what I was doing before,
[00:27:24] limit that selection down,
[00:27:26] not by the specific task,
[00:27:28] but that task type is something that is
[00:27:33] concrete,
[00:27:34] like a single select option because those
[00:27:36] are the same and those carry over.
[00:27:38] If I do this,
[00:27:40] now it’s no longer strictly impossible.
[00:27:45] A lot of times when I’m using that
[00:27:47] feature of only allow selection if the
[00:27:51] selection is a specific record,
[00:27:54] it comes up more often actually in
[00:27:56] automations where I’m
[00:27:59] I have like a conditional step based on
[00:28:01] a specific linked record value.
[00:28:04] Um, I,
[00:28:06] I just find that I’m often able to
[00:28:09] associate the records with like a single
[00:28:14] select option,
[00:28:15] or sometimes it’s like a utility checkbox
[00:28:18] field that only I can edit that says,
[00:28:20] yeah,
[00:28:20] this is the one special record that gets
[00:28:23] special treatment or whatever.
[00:28:25] Um,
[00:28:27] all of that to say it’s one of
[00:28:30] those those very specific gotchas that um
[00:28:34] oftentimes trips me up but what is still
[00:28:37] available if i go back and i do
[00:28:39] tasks if i change this to dynamic and
[00:28:42] say i don’t have any options here but
[00:28:44] say tasks that are relevant to this
[00:28:47] attendee that is still fine to do relative
[00:28:51] choices dynamic choices are still fine
[00:28:54] it’s specific it’s
[00:28:56] specifying a specific record that doesn’t
[00:29:01] necessarily exist in production and
[00:29:03] sandbox.
[00:29:05] I mean,
[00:29:05] that’s probably good practice to avoid in
[00:29:07] general too.
[00:29:08] Just like, I mean,
[00:29:10] I do it all the time,
[00:29:11] but I think about it now as I’m
[00:29:14] doing it, I’m like, ooh,
[00:29:15] if somebody ever accidentally deletes this
[00:29:17] record or like whatever,
[00:29:20] then things are just gonna be broken.
[00:29:21] So I think it’s smarter to do it
[00:29:23] the way that Kamille was just describing
[00:29:25] by using an ancillary field in some other
[00:29:27] way,
[00:29:28] rather than relying on specific record and
[00:29:31] record ID.
[00:29:34] Yeah.
[00:29:34] You’re going to run into some headaches
[00:29:37] anyway, doing it the first way around.
[00:29:39] But this, you know,
[00:29:41] saves you a little bit of headache that
[00:29:43] is sandbox specific.
[00:29:45] So it’s really like the first and to
[00:29:48] me,
[00:29:49] one of the most major things that’s not,
[00:29:52] it’s not as obvious,
[00:29:54] but something that is
[00:29:58] very unfortunate, at least to me, um,
[00:30:02] is how syncing behavior works with a
[00:30:04] sandbox.
[00:30:04] So right now I don’t have any synced
[00:30:06] tables in, um,
[00:30:10] In this space right now.
[00:30:13] And again,
[00:30:13] the idea of having a sandbox where the
[00:30:16] data isn’t necessarily one-to-one to
[00:30:18] production is that I can make test
[00:30:20] records.
[00:30:21] So this is an event planning base.
[00:30:25] I can test out the like signup form
[00:30:28] and send it out to all of my
[00:30:29] friends and have it fill in this fake
[00:30:32] place and not pollute my real list of
[00:30:35] attendees.
[00:30:36] That’s a good thing,
[00:30:37] but when you have a synced view.
[00:30:41] In sandbox,
[00:30:42] even if the synced view is coming from
[00:30:44] a base that also has a sandbox,
[00:30:46] you’re going to be looking at production
[00:30:48] data no matter what.
[00:30:50] That’s a little harder to conceptualize.
[00:30:52] So I’m going to attempt to quickly spin
[00:30:56] up a synced view to sort of make
[00:30:58] this make sense.
[00:31:01] So let’s see how quickly Airtable is going
[00:31:03] to let me create actually.
[00:31:09] In the meantime,
[00:31:13] Any other questions or questions?
[00:31:16] Yeah, go ahead.
[00:31:18] So in a normal base,
[00:31:21] if you’re like in an automation and you’re
[00:31:23] updating a single select field with a
[00:31:26] value that’s not in the dropdown,
[00:31:28] it automatically creates it for you.
[00:31:31] But now in the sandbox,
[00:31:33] you can’t modify that list in the
[00:31:36] production.
[00:31:37] Would it still automatically create a new
[00:31:42] value?
[00:31:43] Nope.
[00:31:43] So I’m going to throw together an example
[00:31:48] just so people can see.
[00:31:52] When matches conditions,
[00:31:59] which has a single select attendees.
[00:32:03] When attendees, when your name contains X,
[00:32:08] we’re going to update that same record.
[00:32:12] attendees and we’re going to say the
[00:32:17] attendee category is test an option that
[00:32:22] is not there.
[00:32:23] And I’m going to turn this on and
[00:32:26] I’m going to, uh, publish.
[00:32:30] Oh,
[00:32:31] this is also something that I didn’t
[00:32:33] necessarily, uh,
[00:32:35] show before I created a new automation and
[00:32:38] I turned it on.
[00:32:40] If I say we’ll turn on the automation,
[00:32:43] it has to also create the automation.
[00:32:45] So Airtable sandbox changes sidebar is
[00:32:50] pretty good at recognizing all of the
[00:32:52] dependent changes that also must be
[00:32:55] published in order to publish what you
[00:32:57] want.
[00:32:58] So it’s got this little icon in the
[00:33:01] bottom right corner that says,
[00:33:02] this is a dependent change.
[00:33:03] You have to have the automation exist for
[00:33:06] me to turn it on.
[00:33:08] So I’m going to apply those two changes.
[00:33:17] It’s a lot of saving changes and going
[00:33:21] back.
[00:33:21] But this is a very light base.
[00:33:23] It doesn’t take too, too long.
[00:33:26] And then I believe, oh, okay.
[00:33:33] Oh.
[00:33:36] It worked.
[00:33:36] Oh, wait, no.
[00:33:37] I’m in sandbox.
[00:33:40] No, okay.
[00:33:40] So I have to, hold on.
[00:33:43] Test two.
[00:33:46] I was about to say, I was like,
[00:33:48] oh, they fixed it.
[00:33:48] Amazing production.
[00:33:50] That test won’t be there.
[00:33:51] Well, now it will be, well,
[00:33:55] you know what?
[00:33:56] No,
[00:33:56] because the configuration hasn’t been
[00:33:58] published yet.
[00:33:59] So that’s a good point.
[00:34:00] If I go back and if I look,
[00:34:04] oh man, it doesn’t let you scroll.
[00:34:06] It’s I’m expecting this to fail.
[00:34:07] Okay.
[00:34:11] Oh my god, it worked.
[00:34:13] Did they fix it?
[00:34:14] Because this is something that was like
[00:34:16] legitimately a problem for me.
[00:34:20] So let me Yeah,
[00:34:23] I’ve now just test two,
[00:34:25] which is still not an option yet.
[00:34:29] So I’m going to publish and I’m going
[00:34:30] to remember to go back to production and
[00:34:32] try this again.
[00:34:34] In production.
[00:34:38] Okay, cool.
[00:34:40] Production.
[00:34:43] And we’re going to make a new one.
[00:34:44] I was going to say.
[00:34:52] Yeah, before you create the X,
[00:34:54] see if it’s in the dropdown if you
[00:34:56] click select.
[00:34:59] It shouldn’t be.
[00:35:00] So what I’m going to do is I’m
[00:35:01] going to create a brand new select field.
[00:35:04] Or you know what?
[00:35:04] No.
[00:35:05] I’m going to delete all of these options
[00:35:07] just so we can see.
[00:35:09] First of all, this is what it is.
[00:35:14] Uh-oh.
[00:35:14] You lost her.
[00:35:23] Kamille, you’re on mute.
[00:35:28] I don’t know if you… Now you’re back.
[00:35:29] You’re on mute.
[00:35:31] There you are.
[00:35:33] Can you hear me?
[00:35:34] Yeah.
[00:35:35] Can you hear me?
[00:35:36] If you create the option in production and
[00:35:40] not sandbox,
[00:35:42] sandbox doesn’t recognize it as a option.
[00:35:47] So
[00:35:49] If I go in and call this test
[00:35:51] two,
[00:35:52] that is not the same test two that’s
[00:35:55] in production.
[00:35:56] So if I hit save and I hit
[00:36:00] confirm, and then I’m going to refresh,
[00:36:04] so it recognizes.
[00:36:19] OK,
[00:36:19] and then we’re going to go to production,
[00:36:20] and then we’re going to look at this
[00:36:22] field.
[00:36:23] There are two tests and two test twos.
[00:36:27] And the reason is, test and test two,
[00:36:30] one set of those came from Sandbox that
[00:36:33] were published down.
[00:36:35] And then another set were created in
[00:36:38] production by force,
[00:36:40] basically from the automation.
[00:36:43] Because the change happened in production,
[00:36:46] Sandbox has no knowledge of them.
[00:36:48] So production has a different list of
[00:36:51] single select options than Sandbox does.
[00:36:56] And since Sandbox is the way you edit
[00:36:59] this, I can’t get rid of these.
[00:37:02] The only way to do that is to
[00:37:05] delete the Sandbox.
[00:37:06] So this is loose and free.
[00:37:09] Delete the ones I don’t need anymore and
[00:37:10] then turn Sandbox on.
[00:37:14] How does this affect like adding via the
[00:37:17] scripting extension, adding new options?
[00:37:20] Does that just fail?
[00:37:21] It doesn’t fail.
[00:37:22] It would do the same thing.
[00:37:25] Okay.
[00:37:25] I would do that.
[00:37:25] Okay.
[00:37:27] Well,
[00:37:28] I actually don’t know because automations
[00:37:31] is acting as like a,
[00:37:33] as the system adding a new option versus
[00:37:36] the scripting, uh,
[00:37:39] extension is acting as you.
[00:37:41] So it might recognize that you do not
[00:37:43] have permissions to create new options.
[00:37:46] So yeah,
[00:37:49] that this one’s a doozy because which test
[00:37:52] two is correct.
[00:37:54] I don’t know.
[00:37:56] Right.
[00:37:58] They have different IDs under the hood.
[00:38:03] Do they start the same?
[00:38:06] What do you mean?
[00:38:09] In the sandbox,
[00:38:09] they still have the same prefix.
[00:38:11] They do.
[00:38:14] Interesting.
[00:38:17] Yeah, that’s my other complaint.
[00:38:22] The one I’ll go back to now, though,
[00:38:24] is synced tables or synced tables in
[00:38:28] general.
[00:38:28] This is more relevant, I think,
[00:38:31] if you’re syncing Airtable to Airtable.
[00:38:34] But this is also true if you’re syncing
[00:38:37] Salesforce to Airtable, for example.
[00:38:39] I’m going to sync from here.
[00:38:46] And then, um,
[00:38:48] something that is a little bit different.
[00:38:50] Um, if I didn’t have the sandbox on,
[00:38:53] I could say sync all of the fields,
[00:38:54] uh,
[00:38:55] no matter what that are in this view.
[00:38:57] But if I.
[00:39:01] go and add a new field in the
[00:39:03] original view,
[00:39:04] it would automatically add the same field
[00:39:07] synced down into this table.
[00:39:09] When you have sandbox on,
[00:39:12] you have to manually say,
[00:39:14] add these fields to this table.
[00:39:16] It’s not going to automatically update as
[00:39:19] it would without the sandbox.
[00:39:20] So I’m going to do that.
[00:39:23] I’m syncing the base that I’m syncing
[00:39:29] from.
[00:39:30] Let me just move that to this window.
[00:39:33] Can you guys see this ABC?
[00:39:35] Yeah.
[00:39:37] Okay.
[00:39:39] I’m syncing from there to there.
[00:39:42] If I were to turn a sandbox on
[00:39:48] in here,
[00:39:58] I cannot
[00:40:03] sync sandbox data anywhere.
[00:40:06] So instead of this being one ABC,
[00:40:10] maybe I want this to be one, two,
[00:40:13] three.
[00:40:14] And ideally in like traditional
[00:40:17] development,
[00:40:17] you would have a lower environment,
[00:40:19] a dev or a UAT or something where
[00:40:23] if I’m looking at the sandbox of event
[00:40:26] planning,
[00:40:27] I wanna look at the sandbox data from
[00:40:30] sync source.
[00:40:32] I cannot do that.
[00:40:33] I’m always looking at the production data,
[00:40:37] whether I’m in sandbox or production from
[00:40:39] the sync source.
[00:40:41] So if you’re trying to line things up,
[00:40:43] this is actually not possible.
[00:40:46] So another reason why you can’t say pick
[00:40:51] specific records to be the basis of like
[00:40:54] your link conditions or your automations,
[00:40:56] because
[00:40:58] These records will exist in both sandbox
[00:41:01] and production,
[00:41:02] but if you’re testing the flow from base
[00:41:04] to base, they’re not going to exist here,
[00:41:07] or they’re not necessarily going to exist
[00:41:09] here.
[00:41:10] These are different records.
[00:41:12] So it’s very…
[00:41:16] This one, I think,
[00:41:17] causes me the most headache just because
[00:41:20] the enterprise that I’m in,
[00:41:22] we have so many bases that are so
[00:41:24] tightly connected together.
[00:41:27] And if you want to test that connection,
[00:41:29] you just got to hope.
[00:41:31] You hope and pray that you set it
[00:41:32] up right because you can’t test really the
[00:41:35] flow from this base to this base from
[00:41:38] a sandbox perspective.
[00:41:42] Right.
[00:41:44] You change, let’s see.
[00:41:48] Can you change the source view?
[00:41:53] Can you switch it to a different?
[00:41:59] OK, yeah, change source.
[00:42:00] OK, let’s see.
[00:42:01] It’s going to force you to be from
[00:42:03] the same table.
[00:42:06] Also,
[00:42:06] you’ll notice I can’t add another source.
[00:42:09] Multi-source syncing is disabled.
[00:42:13] If I didn’t have a sandbox and made
[00:42:16] a synced table and added two, three,
[00:42:19] four more syncs to this same table,
[00:42:22] and then turn on the sandbox,
[00:42:23] it would remain,
[00:42:25] but I wouldn’t be able to add more
[00:42:27] syncs on top of it.
[00:42:31] Interesting.
[00:42:32] What about in production,
[00:42:33] you don’t even have the option to change?
[00:42:36] Because I was thinking,
[00:42:36] could you have one view go to the
[00:42:38] sandbox and then a different sync view and
[00:42:41] the same table go to production?
[00:42:43] Wouldn’t that be nice?
[00:42:45] And no, you can’t do that.
[00:42:46] There is a workaround that I’ve been
[00:42:51] testing with using managed apps where you
[00:42:56] can have two different managed apps and
[00:42:59] deploy an instance of both of them and
[00:43:03] have those sync to each other and then
[00:43:06] deploy a different set.
[00:43:07] So you have like one set is your
[00:43:09] lower environment and one set is your
[00:43:11] production environment.
[00:43:13] You’re able to pair those up and have
[00:43:15] their syncs flow between each other.
[00:43:17] You can’t do that with Sandbox.
[00:43:19] That’s harder to explain,
[00:43:23] but I don’t have managed apps is only
[00:43:30] for enterprise.
[00:43:31] And so I wouldn’t be able to necessarily
[00:43:33] demo that on the show.
[00:43:35] But what we’re looking at now is I’m
[00:43:36] now in production and this is that synced
[00:43:39] table.
[00:43:40] What’s annoying to me, I can’t,
[00:43:43] see the sync source.
[00:43:46] Oftentimes,
[00:43:47] I don’t want to make any changes.
[00:43:48] I just want to click on the shortcut
[00:43:51] that would take me to the sync source.
[00:43:54] Can’t do that.
[00:43:55] You have to go into Sandbox and then
[00:43:59] click it so you can see where it’s
[00:44:01] coming from.
[00:44:01] You can force the manual sync, though.
[00:44:04] That is still there.
[00:44:07] Yeah,
[00:44:07] how do sandboxes play with managed
[00:44:10] components or managed apps?
[00:44:11] Can you have an instance of a managed
[00:44:13] app and then take a sandbox of that?
[00:44:15] Yes, you can.
[00:44:17] Interesting.
[00:44:20] So if you’re familiar with managed apps or
[00:44:23] managed components,
[00:44:24] you make changes in what’s called a
[00:44:25] development base.
[00:44:27] The development base cannot have a sandbox
[00:44:29] because it is the sandbox more or less.
[00:44:32] But once you deploy it somewhere,
[00:44:35] wherever you’ve deployed it,
[00:44:36] that thing can have a sandbox.
[00:44:42] I have a question that’s very specific,
[00:44:46] but I think has broad impact.
[00:44:51] Something that I’ve worried about with
[00:44:53] like doing something like how we were
[00:44:56] talking last week about how easy it is
[00:44:58] to like accidentally trigger a million
[00:45:00] emails.
[00:45:02] Theoretically,
[00:45:03] Sandbox would help you avoid that,
[00:45:05] but I’m guessing there’s still easy
[00:45:07] mistakes you could make.
[00:45:09] Like for example, if I, so for now,
[00:45:14] if I make a change to an automation
[00:45:16] that says, you know,
[00:45:17] trigger when this box is checked and that
[00:45:20] automation is on,
[00:45:22] I already have records that have that box
[00:45:23] checked because the automation is already
[00:45:26] on and the boxes were already checked.
[00:45:28] It’s not going to trigger on those when
[00:45:31] I make this change because they were
[00:45:33] already checked.
[00:45:34] But if you’re publishing that change now,
[00:45:38] like,
[00:45:40] Is there,
[00:45:41] are there any gotchas around that?
[00:45:42] I lost track of what I’m trying to
[00:45:44] articulate.
[00:45:44] Yes.
[00:45:45] And I’m glad you brought it up because
[00:45:47] what I’ve just done,
[00:45:48] I was trying to follow along as you
[00:45:49] sort of said, there’s, I have a checkbox,
[00:45:54] right?
[00:45:56] That checkbox does not yet exist in
[00:45:58] production.
[00:46:00] I’m going to say when record matches
[00:46:01] conditions,
[00:46:03] grid view and the condition is done equals
[00:46:05] yes and what it should do is send
[00:46:08] an email.
[00:46:08] You’ll notice an immediate change into
[00:46:11] what the automation panel looks like and
[00:46:15] I’ll explain that in a moment.
[00:46:17] But what I’m about to do is make
[00:46:20] an email automation that runs when the
[00:46:22] checkbox is checked.
[00:46:24] You have to be very careful about how
[00:46:27] you publish these changes.
[00:46:30] Now,
[00:46:31] if this field already existed in
[00:46:33] production,
[00:46:34] that’s when you have to be careful.
[00:46:36] Right now,
[00:46:37] I don’t have to be careful necessarily
[00:46:39] because I’m saying when it’s checked and
[00:46:41] when I publish this change of create this
[00:46:44] field in production,
[00:46:46] none of them are going to be checked.
[00:46:48] But if it was already checked and you
[00:46:52] publish the automation,
[00:46:54] I forget exactly what combination I did.
[00:46:59] but the publishing of the automation and
[00:47:02] whatever,
[00:47:02] like the trigger I was looking for at
[00:47:04] the same time, sent all of the,
[00:47:07] all of the emails.
[00:47:09] I wish,
[00:47:11] I wish I could remember the exact steps
[00:47:15] that I followed that caused that to
[00:47:17] happen.
[00:47:18] But it’s like, if I,
[00:47:21] if I did it the other way around,
[00:47:23] and maybe this is more obvious when done
[00:47:26] is not checked,
[00:47:29] If I publish these at the same time,
[00:47:33] all of the records in production are going
[00:47:35] to be not checked.
[00:47:36] That is them meeting the condition.
[00:47:39] So what you would want to do is
[00:47:41] publish the field first and then publish
[00:47:46] the automation.
[00:47:47] Or what you could do is you could
[00:47:49] publish this automation off
[00:47:52] and then turn it on and then publish
[00:47:54] it, then it won’t trigger.
[00:47:56] But it’s a good point that you’ve brought
[00:47:59] up that there’s a order of operations and
[00:48:01] I wish I could give you a little
[00:48:03] bit more specifics as to what that order
[00:48:06] should be.
[00:48:09] Well,
[00:48:09] I think it’s like if you’re publishing the
[00:48:12] automation
[00:48:14] on, it’s like, there’s,
[00:48:16] there’s a difference between having a
[00:48:18] field that exists in a stale state and
[00:48:20] like adding new and having the automation
[00:48:23] on at the same time.
[00:48:25] Um, yes, that was all articulated at all.
[00:48:28] It’s so hard to explain this, but yes,
[00:48:32] you’re understanding what I’m trying to
[00:48:33] get at the order matters.
[00:48:34] And if you did it both at the
[00:48:36] same time,
[00:48:37] it’s going to think those are newly
[00:48:40] records that have newly met the condition.
[00:48:41] Yeah.
[00:48:41] Okay.
[00:48:45] We’re back in the automation panel.
[00:48:47] And what I wanted to show is depending
[00:48:51] on what actions you have in your
[00:48:54] automation,
[00:48:55] it’s going to automatically behave a
[00:48:57] little bit differently.
[00:48:59] As soon as I added a send an
[00:49:01] email step and I’ll get rid of it
[00:49:03] and it’ll immediately go away.
[00:49:06] I can add a create record.
[00:49:08] Things are normal.
[00:49:09] Update record.
[00:49:10] Things are normal.
[00:49:12] It’s sending emails automatically.
[00:49:14] and scripts that will give you this
[00:49:18] language up at the top that never goes
[00:49:20] away.
[00:49:21] And the toggle at the kind of top
[00:49:24] of the automation that says skip actions
[00:49:26] in Sandbox.
[00:49:27] The reason why they put that here is
[00:49:29] because
[00:49:31] if I had like a daily digest email
[00:49:34] that’s supposed to go out to my
[00:49:36] stakeholders,
[00:49:37] I don’t want to annoy them about sandbox
[00:49:39] data.
[00:49:40] It’s not real.
[00:49:41] And it often times the data is wrong
[00:49:44] on purpose to test for things.
[00:49:46] So in Airtable’s mind,
[00:49:49] they want you to be able to say
[00:49:51] this automation should be on when I
[00:49:53] publish it,
[00:49:55] but I don’t want to actually send the
[00:49:57] emails in sandbox because
[00:50:01] For scripts, it’s a little bit different.
[00:50:05] I think the reason why they have that
[00:50:07] same behavior when you add a script to
[00:50:10] an automation is because what if you’re
[00:50:11] calling an API of some kind?
[00:50:14] Well,
[00:50:14] you don’t necessarily wanna be calling a
[00:50:16] production API from sandbox.
[00:50:19] Like imagine it’s like,
[00:50:20] bill my customers in Stripe.
[00:50:22] I don’t want to bill them twice,
[00:50:24] once in production and one in sandbox.
[00:50:26] So from their perspective, it’s like,
[00:50:29] well, you might want to turn this off.
[00:50:31] What is a little bit un, you know,
[00:50:35] I don’t like necessarily about this
[00:50:37] implementation is that I can’t really say,
[00:50:40] send this email, but not that email.
[00:50:43] All emails get skipped or all scripts get
[00:50:46] skipped.
[00:50:48] So I’m going to
[00:50:52] Uh, go really quickly.
[00:50:57] Um, and just do that.
[00:50:59] I’m going to get rid of this cause
[00:51:02] I don’t need it.
[00:51:03] And I’m going to speed through this.com
[00:51:14] test.
[00:51:16] Test.
[00:51:17] So this is a valid email that let’s
[00:51:20] just say should go out, um, in production.
[00:51:23] I can’t turn off the skip behavior.
[00:51:25] So it behaves exactly how you expect in,
[00:51:29] um, production and turn this on.
[00:51:36] And if I click this checkbox,
[00:51:38] I should see a task record get created.
[00:51:44] Oh, wait, no.
[00:51:45] Because I flipped the condition.
[00:51:49] Whoops.
[00:51:50] So blah, blah, blah, blah, blah.
[00:51:55] Now I flipped it.
[00:51:57] A new test record was created.
[00:51:59] I’m listening for my email notification.
[00:52:03] I got it.
[00:52:05] Now I want to go in and skip
[00:52:09] actions in sandbox.
[00:52:11] There’s no…
[00:52:13] update automation after doing that.
[00:52:16] Like it didn’t say, oh,
[00:52:17] update or publish or anything.
[00:52:19] You just directly toggle.
[00:52:21] If I go back and I do this
[00:52:24] again, it doesn’t create that test record.
[00:52:31] So even though the change that I’m trying
[00:52:35] to necessarily avoid in Sandbox is sending
[00:52:39] the email, all of the actions get skipped.
[00:52:43] which is not necessarily what I would
[00:52:46] want.
[00:52:47] Personally,
[00:52:48] I would prefer if each individual action I
[00:52:52] was able to say, skip this in Sandbox.
[00:52:55] But instead it’s like, well,
[00:52:56] the automation’s on and it’s not gonna do
[00:52:59] anything.
[00:53:01] Interesting.
[00:53:01] That is quite interesting.
[00:53:06] Does that error message go away when you
[00:53:07] toggle it off?
[00:53:09] No, of course not, Dan.
[00:53:11] Why would it go away?
[00:53:14] actions will be skipped even if you have
[00:53:17] the thing turned off i’ve reported this
[00:53:19] before and it’s still here because i for
[00:53:25] me reading that i thought it just referred
[00:53:28] to the email so that it would do
[00:53:30] everything else except the email or you
[00:53:32] could say don’t do anything by toggling it
[00:53:36] Yeah, that would be logical.
[00:53:39] It’s not what happens.
[00:53:40] So, um,
[00:53:42] everything I’ve just sort of shown for
[00:53:43] email is the same for, uh,
[00:53:45] if you had a script instead of a
[00:53:46] send email,
[00:53:47] I will say that like the alternative to
[00:53:51] skipping actions is sandbox is
[00:53:56] depending on what you’re doing and how
[00:53:58] you’re pulling in the emails,
[00:54:00] maybe you could have it pull from sandbox
[00:54:04] data.
[00:54:05] So like maybe in, maybe in production,
[00:54:08] all of these people are real people and
[00:54:11] these are real email addresses,
[00:54:12] but in sandbox,
[00:54:13] I clear out it and it’s just my
[00:54:16] name over and over in my email.
[00:54:18] And if I’m pulling from this table,
[00:54:21] then I can be safe in sandbox.
[00:54:24] having the send email action turned on and
[00:54:27] not skipped in Sandbox because I know it’s
[00:54:29] not going to email real people.
[00:54:30] It’s only going to be emailing basically
[00:54:33] me.
[00:54:33] But that’s a cleanup step that you just
[00:54:35] need to remember to do.
[00:54:37] When you create the Sandbox,
[00:54:38] it’s going to copy your real attendees.
[00:54:41] So you want to go in and you
[00:54:42] want to delete them and replace them with
[00:54:44] yourself, basically.
[00:54:45] Gotcha.
[00:54:50] If you had a production base that is
[00:54:54] pretty complex and whatnot,
[00:54:56] is there any risk of turning a sandbox
[00:54:59] on that production base?
[00:55:03] Not necessarily.
[00:55:06] I mean,
[00:55:06] if you have a lot of people,
[00:55:08] like I work as part of like an
[00:55:11] Airtable development team.
[00:55:12] So sometimes more than one person is
[00:55:14] modifying a base at a given time.
[00:55:16] That can get really confusing and you can
[00:55:19] kind of lock yourself into saying, well,
[00:55:21] if we both have to edit the same
[00:55:23] automation,
[00:55:23] I have to wait for Jan to be
[00:55:25] done.
[00:55:26] before I can start making my changes
[00:55:28] because they’re going to start
[00:55:29] conflicting, things like that.
[00:55:31] That tends to come with the territory of
[00:55:33] having a complex base.
[00:55:35] But if you had a bunch of tables,
[00:55:38] a lot of records,
[00:55:39] if you had multi-source synced,
[00:55:41] as long as you’re not trying to add
[00:55:43] another source, you’re relatively fine.
[00:55:46] And something that’s not necessarily
[00:55:48] communicated…
[00:55:51] um i am yeah it’s it’s set up
[00:55:53] at the top every time you push changes
[00:55:56] from sandbox to production it does take a
[00:55:58] snapshot beforehand so just in case
[00:56:01] something goes terribly wrong there is a
[00:56:03] snapshot taken um and like i said before
[00:56:08] if you start making changes and you’re
[00:56:09] like whatever i just did broke something
[00:56:14] I don’t know how to fix it.
[00:56:15] I don’t know how to go back.
[00:56:17] You could just delete the sandbox and
[00:56:19] start over.
[00:56:20] So you have a layer of protection.
[00:56:24] It’s not necessarily going to hinder you,
[00:56:28] but there are specific
[00:56:29] things about how sandbox works that makes
[00:56:32] it like,
[00:56:33] maybe you’re not gaining much by having it
[00:56:37] turned on in the first place.
[00:56:39] This is something I would recommend for
[00:56:41] like, I need to test form submissions.
[00:56:44] I need to test.
[00:56:47] a sweeping major change to the underlying
[00:56:50] schema.
[00:56:50] I have to delete a whole table.
[00:56:52] Those are the things that I would
[00:56:53] recommend turning a sandbox on for so
[00:56:55] you’re not immediately bricking the base.
[00:56:58] But if you’re going in and you’re renaming
[00:57:01] stuff,
[00:57:02] if you’re just trying to update a filter,
[00:57:05] sandbox is going to deeply irritate you.
[00:57:09] Yeah.
[00:57:10] I mean,
[00:57:10] one approach is even if you just take
[00:57:14] a sandbox of your production base and then
[00:57:18] implement something to see if it works and
[00:57:22] then don’t publish it back,
[00:57:24] just turn off the sandbox and then
[00:57:26] recreate those changes like that might be
[00:57:29] a middle ground.
[00:57:32] Yeah, you could do that.
[00:57:33] That’s a good way of testing.
[00:57:36] And another thing,
[00:57:37] which again is not super obvious,
[00:57:39] the people who are invited to the base
[00:57:43] or specific interfaces do not necessarily
[00:57:46] match the people invited to the sandbox or
[00:57:50] the sandbox versions of those interfaces.
[00:57:53] Similarly, if I publish a form,
[00:57:56] the sandbox and the published version of
[00:57:58] the form are going to have two different
[00:57:59] share settings.
[00:58:01] unless you set them to be the same.
[00:58:03] That is important when it comes to like,
[00:58:07] if your sandbox is strictly for testing,
[00:58:09] I don’t want my regular stakeholders in
[00:58:11] there because then they’re going to get
[00:58:12] confused.
[00:58:12] They’re going to be like,
[00:58:13] what happened to all my attendees?
[00:58:16] In the early days of sandbox,
[00:58:18] sandbox would turn gray,
[00:58:20] but nowadays it’s the same color as the
[00:58:23] regular base.
[00:58:23] So there’s not…
[00:58:25] Anything that will immediately tell you
[00:58:26] that you’re not looking at the real base
[00:58:28] unless you look at the top right.
[00:58:31] Also, if you’re not a creator,
[00:58:33] I don’t think you even see this.
[00:58:36] So it’s not clear.
[00:58:38] So the idea of separating things out
[00:58:42] strictly for testing,
[00:58:43] it’s a good use case for Sandbox,
[00:58:45] but you just need to remember to re-invite
[00:58:48] folks back to wherever they need access
[00:58:52] to.
[00:58:53] And two more things before I forget.
[00:58:56] If you have a sandbox enabled,
[00:58:58] you cannot move the base into a different
[00:59:00] workspace.
[00:59:01] I don’t understand why.
[00:59:03] And the second is,
[00:59:05] you know how you can go in and
[00:59:07] say edit table permissions and you could
[00:59:10] set it to specific users?
[00:59:13] Again,
[00:59:13] the specific users may or may not have
[00:59:17] access to both production and sandbox,
[00:59:19] but you’re editing sandbox,
[00:59:21] which means it’s only going to let you
[00:59:22] select people who have access to sandbox.
[00:59:26] So if you need to edit these settings,
[00:59:28] you have to invite the stakeholders to the
[00:59:31] sandbox so that you can say they can
[00:59:34] edit it in prod.
[00:59:35] All right.
[00:59:42] Very cool.
[00:59:42] Awesome.
[00:59:42] Deep in the sandboxes.
[00:59:44] I’ve got more questions,
[00:59:45] but we’re up on our hour.
[00:59:47] And that’s awesome.
[00:59:48] Thank you, Kamille.
[00:59:49] that’s really great yeah i’m debating if i
[00:59:53] want to start using sandboxes or not a
[00:59:56] little scary i use them i find them
[00:59:59] helpful but it’s every single time i’m
[01:00:02] like why there’s a specific thing that i
[01:00:06] run into every single time and i’m like
[01:00:08] this i wouldn’t have done it this way
[01:00:10] yeah yeah awesome cool thank you for that
[01:00:15] and we will be back next week
[01:00:18] Everybody have a great week.
[01:00:19] Take care.
[01:00:19] Thank you.