00:00:05.819
I'm sitting in my garden surrounded by New Growth basking in the sun when I see
00:00:12.900
a white butterfly fluttering through the air and land in front of me
00:00:18.060
we lock eyes and I'm seething
00:00:23.580
there lands my foe come here about our long-standing Feud
00:00:29.640
and also some things butterflies taught me about writing code I'm swata sanghavi I'm a developer at
00:00:37.140
backer kit I'm also a proud tender of Earth in Sunny Berkeley on a lonely land
00:00:43.680
today we're going to talk about how careful observation and patience can be pivotal in both gardening and writing
00:00:50.820
software and talk about a few times that I didn't have either I'm going to first walk you through some
00:00:57.420
examples of the garden and then the reflections they LED in code we'll end with some tools that has
00:01:04.019
helped me Implement these lessons on my day-to-day cup to this past spring my friend asked
00:01:11.100
if I wanted her extra veggie seedlings at this point I had no space of my own
00:01:16.320
for them and I hadn't grown anything edible since I left a basil plant on a
00:01:21.900
radiator all winter but I dreamed of stepping out into my Lush
00:01:27.240
garden and picking out whatever was in season for dinner after some light persuasion of my
00:01:34.619
boyfriend we were back with 12 Solo cups of seedlings I quickly repotted them and we were off
00:01:42.720
y'all I was committed to making my babies thrive I read and worried about things like
00:01:49.619
hours of direct sun how often to water the NPK ratio of different fertilizers
00:01:56.700
and as an avid stack Overflow reader I found gardening forums to post all my
00:02:02.220
beginner questions how do my plants look could I expect a bountiful summer Harvest
00:02:09.360
well the comments I got spanned from that's a lot of information that's a lot at once too information about how my
00:02:16.980
veggies were growing you may notice one common theme
00:02:23.940
my friends from garden stew agreed my pots were too small to grow the flavorful veggies I was looking for
00:02:31.319
Hank says I agree with Mark plant your veggies directly into the ground if you
00:02:36.660
can it's time to give the roots more space the thing is as I alluded to before this
00:02:43.920
wasn't my backyard and I didn't have space for even larger pots nor could I
00:02:49.739
transplant my plants into the soil I thought if I got everything else right
00:02:55.260
I could make this work these are all direct quotes to show you how kind informative and downright funny
00:03:03.120
gardeners are
00:03:08.340
meanwhile I diligently watered and I waited one day I was checking in on the growth
00:03:13.920
of my squash blossoms and went on to water my kale well as you can see Michael Lee have
00:03:19.620
said oh he's been full of character a little crinkled a little misshapen but this time I did a double take
00:03:27.120
it's like that character morphed in front of my eyes into holes
00:03:33.060
and they were everywhere I go into a slight Panic what was
00:03:38.159
causing these did the roots not have enough space to grow and was this impacting the leaves
00:03:44.340
well I took my problem to the people my friend Brad said it looked like I had
00:03:50.459
caterpillars that were feasting on my tail I'm gonna be honest I didn't think that's what it was I had looked at my
00:03:57.299
kale every day when I watered it I would have noticed caterpillars and I was still thinking about my crowdsourced
00:04:04.019
advice about the small pot size but a humored Brad and want to take a
00:04:09.540
closer look and at first glance as I thought I didn't see anything
00:04:15.060
but then I saw something moving and then I saw multiple things moving
00:04:21.199
Wrigley froze foe's just munching away on my kale I didn't realize we were on a true
00:04:27.840
debugging Mission here I was pretty bewildered as committed as
00:04:33.000
I was to Growing healthy kale I didn't notice multiple caterpillars on them
00:04:38.220
well I move the caterpillars onto a different plant and we keep moving towards our Dream Garden
00:04:45.320
except it gets worse and I look again and there are more
00:04:51.120
caterpillars how is this possible I thought back to a quote I had read by
00:04:57.960
Pam Pierce in Golden Gate gardening make a conscious effort to look at your
00:05:03.419
garden look to spot problems in time to solve them look to develop a feel for
00:05:09.120
the plants how they grow and how they react to stress turn leaves over notice what's flying or
00:05:15.780
crawling about sit down and study a plant or a square foot of ground until you've learned
00:05:22.259
something new well I sat down in the dirt and took Pam's advice
00:05:28.860
I took a look at the soil I turned over a leaf I held it in my hand and looked
00:05:34.800
closer under the leaves to find some white specks
00:05:41.039
specs I certainly would not have noticed while watering my kale
00:05:46.199
sotha you don't just have caterpillars you have eggs and then a memory flashed into my head
00:05:54.180
I'm drinking coffee in my garden I'm watching the hummingbirds and butterflies fly around and I'm like I'm
00:06:01.320
really doing it out here these beautiful butterflies were the
00:06:06.720
culprits they were laying the eggs that were hatching caterpillars that were eating the kale
00:06:13.139
I'd like to kill for me to eat not these adorable caterpillars and it wasn't just
00:06:19.259
enough to move the caterpillars I had to remove the eggs from my kale
00:06:25.319
this experience is fertile ground for some lessons in and out of the garden
00:06:31.740
it's a reminder of how the unknown or weakest part of the system is not necessarily the root of the undesired
00:06:37.919
Behavior I was so fixated on solving the problem of the holes and then of the
00:06:43.199
caterpillars never to dig into the root of the problem the butterflies that were
00:06:48.360
laying the eggs similarly because I knew my plants
00:06:54.419
didn't have enough space it was really easy for me to fixate on that and that was me carrying forward an
00:07:00.419
assumption that any problems in my plants are going to come from the size of the pots
00:07:05.819
that Focus made it harder to look for the other signals for my system and to
00:07:10.979
look at my plants holistically while I was looking at my kale every day
00:07:16.020
I was always looking for something very specific new kale leaves as I water them from above
00:07:22.800
it can be so easy to look at something regularly and yet miss some key details about it
00:07:29.160
I wasn't looking at my kale holistically looking under the leaves or the soil nor
00:07:34.620
was I looking at my kale as an element of a larger system examining the critters that were around
00:07:40.560
it perhaps I could have noticed these holes earlier and identified them as bite
00:07:46.500
marks if I'd slowed down to look closer at my kale and perhaps if I'd examined the whole
00:07:53.160
system of the garden I could have asked myself the question why are there more butterflies in the backyard recently
00:08:00.180
a quieter sign but in our case the root of our chewed up kale
00:08:06.840
this experience taught me the value of a different way of looking from scanning for signs of progress to being curious
00:08:14.460
about every change that happens in the why behind it and examining my garden
00:08:20.099
and kale holistically I thought expert gardeners knew exactly
00:08:25.560
what to do in the right concoction of inputs the Sun the fertilizer what I didn't realize is that my crops
00:08:32.580
had something to say back to me and expert gardeners are just expert observers hearing these signals
00:08:39.839
and it's not that these girders never get past except they observe them early so they can act quickly
00:08:47.580
I'd love to tell you that I learned my lesson but alas
00:08:52.740
you see recently I wanted to use my leaf grower to remind myself what the sun requirements of kale was
00:08:59.459
and so I called Fetch and from our new new leaf grower saved into a variable
00:09:07.320
and I keyed into some requirements only to see this error and I thought wait was
00:09:13.380
it actually a symbol wait was there no underscore in the key or just some
00:09:18.660
requirements not exist on this object I'm feeling myself wanting to go into
00:09:24.300
debug Overdrive but wait let's apply our previous lesson what
00:09:31.620
would it be look like to examine our system and to look under the kill leaf
00:09:37.380
let's look closely at the error at first glance I didn't even really understand this error and so I reactively changed
00:09:44.760
the key well okay our error is a type error with no implicit conversion of string into
00:09:50.940
integer and then we see those square brackets underneath
00:09:56.399
all right square bracket is just syntactic sugar for a method that is throwing this error
00:10:02.640
and the keyword passing is the parameter for this method didn't really even think about that when
00:10:09.779
I encounter this all right let's think further of the no implicit conversion of string into
00:10:15.959
integer well I guess in this case the string is the key Sun requirements
00:10:22.560
why are we trying to convert that into an integer well as I slow down I consider that also
00:10:30.899
my first instinct was to change the key but actually if I were to key into a
00:10:36.899
plant object or kill object with a key that doesn't exist we would
00:10:42.060
actually return nil not an ER that was me following an assumption that the q's wrong
00:10:48.180
so it's not necessarily what the issue is I think further and the integer is still
00:10:54.060
mysterious to me why is Ruby trying to take our string Sun requirements and
00:11:00.360
convert it into an integer to pass back to the square bracket method
00:11:06.720
oh man I think of the other implementation of square brackets and integers make me think of indices and a
00:11:13.980
kind of all comes together for me to realize I thought my method was returning a
00:11:20.760
plant object but instead it's an array of plant objects this is one of those funny cases where
00:11:26.940
Ruby is trying to help us out by assuming we meant to call an index because that's what the square bracket
00:11:33.899
for arrays expects but that conversion bubbles up to an error that we might not
00:11:38.940
expect I thought back to my lesson from growing
00:11:44.100
kale it can be so easy to assume that it's the size of my pots or in this case the
00:11:50.940
formatting of the key or the key that I'm using that was the actual issue and that assumption that I was carrying
00:11:58.620
forward led me kept me from investigating the caterpillars to find the eggs or in this case from fully
00:12:05.399
understanding the error both signals that my system was serving to me
00:12:11.399
this is a pretty simple example but it's not an unfamiliar one and I use
00:12:16.860
this as a stand-in for the many times we react to unknown or unexpected Behavior
00:12:22.980
there are countless times that I had misread a stack trace or misdiagnosed a bug or misunderstood what a line of code
00:12:29.640
was doing just because I totally thought I knew and carry that assumption forward
00:12:37.440
I think of certain errors that I see frequently that it can be easy to kind
00:12:43.320
of be numb to the specific error and reflexively change what I'm most unsure
00:12:48.540
about sometimes it's a mock I don't feel confident I wrote correctly or it's a
00:12:54.120
new API that I'm working with so I'm sure I've misunderstood what the keys are
00:13:00.260
often the complexity of the task at hand obscures the simple stepwise process of
00:13:07.260
reading the error fully so what can we learn about these tricky
00:13:12.779
places we find ourselves regularly sometimes these resolve these resolve
00:13:19.079
themselves just on a Second Glance or a simple put somewhere but
00:13:24.959
how often do we carry these assumptions further shifting into autopilot mode I think of being confused by something's
00:13:32.940
erroring and going to check if it's related to a bug that I saw last week
00:13:38.120
instead of fully even just reading this to actually so notice where this instance of the error is coming from
00:13:46.079
I've noticed that when I commit to a practice of observation of reading the
00:13:51.360
signals and signs of our application I can save time and frustration
00:13:57.660
so we ask what can we learn from our chewed up kale moments and develop an eye for those earlier quieter hints of
00:14:05.639
things in this well going back to our gardening Adventures
00:14:11.639
spring turns into summer and summer cools into fall and Lucky For Us East
00:14:16.860
Bay Growers we've got a long season of cool weather gardening ahead of us
00:14:21.959
this time we're going to grow carrots and beets from seed and another exciting development since we last gardened
00:14:28.380
together we've got a backyard so we're going to be growing into the ground no
00:14:33.420
more crimped pots for us hold your excitement well to do this we need to make some
00:14:39.480
space in the yard for our new vegetables and so I dig up the weeds growing in a patch of ground amend the soil with some
00:14:46.320
compost and then so carrot and beet seeds and then we wait
00:14:53.160
several weeks pass and some seedlings start popping up I realize though that some of these are
00:14:59.519
the weeds from before and since now that we're growing outside
00:15:04.680
of pots we're more subject to deeper rooted plants and volunteer plants plants from seeds that are removed
00:15:11.040
organically think wind or squirrels the thing about root vegetables is that
00:15:17.040
they need lots of room to grow those thick roots and when they're crowded their growth can be stunted
00:15:23.279
I wanted to protect my carrots and beets from other root systems growing too close to them and to do that I knew I
00:15:30.180
had to diligently weed but I didn't know how to teleport the plants I wanted versus the weeds that I
00:15:35.940
didn't well to answer this question to a new gardening group we go
00:15:44.279
Harris says I'd wait until those Sprouts are big enough to actually ID before starting to pull weeds
00:15:51.899
I thought that the gardeners that I queried would point out what to keep and what goes
00:15:57.720
but I sense we're getting a bigger lesson than just a task at hand
00:16:02.940
seedlings look alike when first sprouted and time needs to pass before we know if the seeds be planted belong where they
00:16:09.540
where they're growing Hera also asks us a question with what is a weed
00:16:15.660
at the end of the day weeds are just plants and I realize I was labeling
00:16:20.880
anything that wasn't a sprout from the seeds I'd planted a weed labeling anything I didn't expect
00:16:29.399
as a weed what was the cost of demand growth I hadn't predetermined to grow in my
00:16:35.760
garden patch as something that didn't belong there when we dictate what grows and where
00:16:42.420
based on expectations we're letting those expectations guide the growth of our garden instead of the seedlings
00:16:48.120
themselves and we lose the possibility of organic growth that can benefit our garden in ways we couldn't have
00:16:54.300
predicted by weeding my garden before I even knew what I had or how this new growth would
00:17:00.420
interplay with my beets and carrots I lost the possibility of volunteers and
00:17:05.699
other great addition to my garden SO waiting to see what I was sprouting allows me to instead be dictated by the
00:17:13.199
health of the seedlings or the utility they serve instead of just what I was expecting to see
00:17:19.679
naturally I thought about the seedlings we plant in our code when we build our applications on
00:17:26.220
predictions we similarly lose this benefit of organic growth
00:17:31.799
do you know that butterflies that lay eggs on my kale
00:17:37.080
they those same butterflies hate the smell of thyme and planting Time by your
00:17:43.320
kale can help deter those Butterflies from laying eggs
00:17:48.360
here's the other gift Hera gifted us let your seedlings grow to find out what
00:17:53.760
needs to be weeded great software is not built it is grown
00:17:59.760
let's dive into an example well we have a new requirement we need
00:18:05.820
to import new data from the plant API and uh that are leaves and we need to
00:18:12.840
store those leaves locally and we also need to associate them with existing stems in the database
00:18:21.000
so we've got a fetch Leaf objects and Associate them with stems
00:18:26.640
the first question is what's the entry point where are we going to plant our new code
00:18:32.700
one option is the root grower an existing service where we fetch roots from the same API and attach them to
00:18:39.900
stems there's already a lot of coup that we're going to need like code to instantiate
00:18:46.980
the connection with the API to grab existing stems from a database and
00:18:52.140
iterate through them to set those associations I could imagine adding some code simply
00:18:58.919
into that existing service um
00:19:03.960
we can add some new code to this existing service so that we first are attaching The Roots
00:19:10.260
and then attaching the leaves are new requirement so let's think of the trade-offs from
00:19:15.960
this approach it's probably just a few lines of Code A
00:19:21.059
change in an existing file we'll probably get our feature to the you the hands of the users really
00:19:27.179
quickly well what are the downsides now the attaching of the leaf and the
00:19:34.799
attaching of the root are coupled actions so we're gonna have to follow the existing order of operations and be
00:19:41.400
coupled to the timing and architecture of that existing root grower
00:19:46.860
we'll also be adding some complexity to our root grower where the exist to the
00:19:52.020
root grower so now our root grower is also going to have to know how to grab leaves and how to associate them with
00:19:58.380
stems well another option is to plant a whole new object into our app
00:20:05.940
this process can feel less attractive because it's adding a lot more code uh
00:20:11.760
new files new tests Etc including a fair amount of code we already have in our
00:20:16.799
root grower and now if in the future if we wanted to
00:20:24.419
make an update in let's say the coup that connects to the specific API we're gonna have to make it in multiple places
00:20:31.740
so this can feel like some downsides but what is the flexibility this is going to give us
00:20:38.039
well now sprouting this new class will allow us to decouple our new feature the
00:20:44.760
growing of leaves from our grow our growing of roots
00:20:50.580
this will allow us to let this new feature where planting develop independently from that previous feature
00:20:58.740
and we can let the organic forces of our application bug fixes feature editions
00:21:04.200
adjacent refactors grow our seedlings letting this object grow can reveal the
00:21:11.940
abstraction that connects these two surfaces instead of coupling them by just adding
00:21:18.059
to the same place taking this concept further we could
00:21:23.400
even plant two new objects one to fetch the leaves and the other to associate
00:21:28.919
the stems
00:21:37.740
we could even add two different triggers that are not automated like the previous service and worker was let's say two
00:21:45.360
different buttons that our users will push previously we had to attach the leaves
00:21:51.480
right exactly where we were attaching the roots to take advantage of some of that code that was already there for
00:21:58.020
example to be at the iterating of the stems well instead if we had two different
00:22:04.500
buttons each connected with each of these triggers we we could have two different places
00:22:12.059
where our users could control this feature and it can seem like a downside because
00:22:17.460
now the user has to click two buttons instead of getting stems with leaves already attached and it introduces a new
00:22:25.380
place for bugs but it could be really powerful to wait to
00:22:31.080
automate our users are part of our system and they re reveal information about the way
00:22:37.500
in which they choose to use our new features that information would be lost if we dictated when this data would be
00:22:43.980
fetched this method of planting new objects into
00:22:49.500
our code base also allows us to leave some seams in our application a seam is a place where you can alter
00:22:56.460
behavior in your program without editing that place so creating two different objects with
00:23:02.460
different call sites allows us to create seams for each of these behaviors
00:23:07.919
a seam can serve as an entry point and delineation of a separate feature and
00:23:13.020
could also be a seam towards code that's more likely to change so one that lets us go in and out
00:23:20.460
leaving seams where we plant seedlings allows us to have an edge around a flexible decoupled object that can
00:23:27.539
adapt to our changing requirements through this process we kind of we let
00:23:33.960
the abstraction grow out on its own maybe we'll find that the abstraction that's most useful is the piece that's
00:23:40.620
actually attaching to the stems we really see this approach shine when the next verb requirement comes in
00:23:46.700
instead of squishing into the same object as our root grower we can have
00:23:51.900
different scenes to consider and choose from this can be a really good framework for
00:23:58.200
approaching Legacy code when we add to code that already exists
00:24:03.539
we can ask whatever factors are necessary to leave the scene leave seams where they did not exist previously
00:24:14.159
this technique really drives home the point that Sandy mats has made previously of duplication is far cheaper
00:24:21.840
than the wrong abstraction and when we build modular objects into our app it can grow and evolve in the
00:24:29.280
wild of our application and as objects grow towards each other we can make abstractions that make sense and that
00:24:36.480
were made in the react in reaction to our growing needs instead of because where we happens a couple or code
00:24:42.179
together or because code looks similar this process can really avoid premature
00:24:49.620
or factors or coupling features based on implementation and let our seedlings grow to tell us which refactors our
00:24:57.120
application needs
00:25:02.820
I wanted to show you what happened in my case which is three weeks later
00:25:07.919
I was sure this seedling was definitely a beat only to find out
00:25:14.100
I was wrong and I show this for y'all because one of
00:25:20.039
the harder parts of waiting to weed or transplant your seedlings is you have to
00:25:25.140
keep around seedlings you're not sure about in one word patience the difficulty of this philosophy shared
00:25:32.580
between code and gardening gardening is that it can require discipline to let a
00:25:37.799
plant grow larger and become harder to move when we're unsure it belongs where
00:25:43.260
it is and when we revisit code that we know is still growing it can take discipline to
00:25:50.279
leave it there and wait for new Sprouts to inform your abstraction
00:25:55.860
action can feel easier than letting time pass and let our garden grow
00:26:01.500
but it does bring up an important question of when to refactor when we have different objects each with
00:26:08.520
their own call site it can result in code that could look duplicative or redundant
00:26:14.039
a simple rule of Threes where you wait until you have three different places doing the same thing can serve you well
00:26:21.840
for me the more powerful idea has been that the bigger mistake is to refactor too early
00:26:28.020
wait to see what your seedlings are before you eat
00:26:34.200
talk about some tools that could be helpful for me the biggest skill that has served
00:26:39.960
me is an awareness of a very specific feeling close your eyes picture that it's 4 30
00:26:47.360
you are been solving a bug all day and your inches from a solution and you know
00:26:53.100
you're missing something obvious perhaps imagine the last time you were there and think are you listening to
00:27:00.299
your application reading errors fully being thoughtful about what changes you
00:27:06.120
make to your code you can open your eyes to me this is all about identifying that
00:27:12.120
feeling and throwing tools at it that's the place we don't want to be and
00:27:17.640
we want tools to reset from that place well the first tool I'll offer is to
00:27:24.299
talk to your plants in general incorporate the practice of stating assumptions
00:27:30.299
and by its nature this is the power to naturally slow you down
00:27:36.240
when we're working that can mean things like saying out loud how we expect our tests to fail stating what hypothesis
00:27:43.320
we're testing while debugging for example I wonder if the variable is not being set correctly in the controller
00:27:49.620
let's go check out that file it can mean reading each error out loud
00:27:55.140
the method that that through the error and working up the stack Trace in a
00:28:00.779
stepwise manner or even asking the question what and what question are we answering right now
00:28:08.279
these practices and the slowing down that follows can be a really good antidote to that Panic feeling
00:28:15.600
this could be useful in both pairing and soloing with your rubber duck I've had pairing sessions where my pair
00:28:22.500
and I grew increasingly confused by a bug each wanting to quickly try hunches grabbing keyboards
00:28:29.159
and while I can feel like we're getting to the bottom of something honestly more often than not This Is Us
00:28:36.900
spinning our wheels and it's usually the kind of dynamic that leads to testing far out theories that would have been
00:28:43.500
quickly that would have been quickly invalidated if we had looked a little closer
00:28:50.880
I've also had times where I was confused by some code and I brought in a pair and
00:28:56.100
then I was frustrated because my pair made me start at the top I've stepped through each piece of the code path
00:29:01.679
however those seemingly not useful practices because I totally know where the issue is often bear the most fruit
00:29:09.600
these practices unearth assumptions assumptions at the root of most bugs
00:29:15.960
so shifting coding Dynamics to being more open to being slowed down and holding ourselves to strive for the
00:29:22.260
force that goes back to the simplest thing can be really useful
00:29:27.480
practicing the stepwise approach on the regular will make it be one that you're
00:29:32.640
more likely to turn to when it's more more of the frustrating spots
00:29:39.299
the second tool I'll offer is walk in your garden as Pam told us to do
00:29:44.820
one way to do that is to adopt the practice of daily diff into your deaf process
00:29:51.240
at backer kit we spend the 15 to 20 minutes after stand up reviewing the commits of the last day to familiarize
00:29:58.440
the team with all the changes that that are happening in the code base this serves to surface the areas of the
00:30:05.100
code base that are changing which informs ongoing Feature work or also
00:30:10.500
when we notice any unexpected behavior that either we notice or users report or really helpful in triaging some
00:30:18.899
exceptions that our app is throwing it's really not uncommon for me to say I
00:30:24.659
think we saw something about that in Daily diffs it also serves as a great way to zoom
00:30:31.919
out on all the Sprouts that are growing in our code base and watching them change it gives us an idea of the
00:30:37.799
patterns through our app now for a larger teams this may not be a
00:30:43.559
15-20 minute exercise if you want to review all the commits from the day before but there may be some Cuts you can make
00:30:50.100
whether it's commits for a product or an epic or from certain teams perhaps labeling commits to review the next day
00:30:57.480
could be useful another tool that can work is just a time box of reviewing however many
00:31:03.539
commits you get through in 15 to 20 minutes just a general awareness and surfacing
00:31:10.320
of the changes can be really useful and the last tool I'll offer is weeding
00:31:16.440
and I know I asked y'all to be thoughtful about what you label as weeds but some of some parts of our garden are
00:31:24.360
more we'd like than others what I'm talking about is noise in the form of deprecation warnings console
00:31:30.720
errors and logging and these can Sprout up in your terminal or the console that's running your tests
00:31:38.279
or CI and can be tempting to ignore it could be really easy to build a
00:31:44.940
tolerance to that noise and then not notice when you've committed a new one into the code base
00:31:50.700
or not notice when there's an error while you're working on a feature
00:31:56.399
where sometimes these are warnings of upcoming changes to gems and other dependencies and it can really hurt to
00:32:02.760
get the rug pulled out from under you when it's no longer a warning and it's an error
00:32:09.059
there's a question of when to tend to these I'd say as soon as you see them building
00:32:14.399
that practice of taking that detour to solve them there or at least put a
00:32:19.440
ticket if some investigation reveals it'll take longer can lead to keeping your garden as close to Weed Free as
00:32:25.440
possible if you're in a place where there's a lot
00:32:30.840
of noise already one effective tool is to just make a ticket for each one and committing to
00:32:37.020
let's say 20 of each Sprint to paying down that debt
00:32:42.299
well I want to thank you for coming to uh um growing software from seed this is
00:32:48.600
a beet seedling that the butterflies have yet gotten to um let me know if you end up trying
00:32:54.000
something different on your team or in your garden there's my Discord nickname and my Twitter handle and my email and
00:33:00.659
I'll be checking this channel through railsconf I wanted to give a shout out to backer
00:33:06.419
kit where I get to explore these ideas and more with my team backer kit at backer kit we make some
00:33:12.299
rad things for creators and crowdfunding we strive to grow both our code and our
00:33:17.460
people and we're currently hiring for both the dev and a designer position I'd love to tell you more
00:33:25.019
all right y'all thanks again have a great time