0:00:00Welcome to Under the Radar, a show about independent iOS app development. I'm Marc Warment.
0:00:04>> And I'm David Smith. Under the Radar is never longer than 30 minutes, so let's get
0:00:08started.
0:00:09>> So today we wanted to talk about having to remove features of the apps. And this is,
0:00:16you know, I've done this a lot over time. So a lot of times it's kind of questionable
0:00:20whether like you really have to remove something. It's kind of a blurry line of like, are you
0:00:24removing something because some condition is changing or somebody is forcing you to
0:00:30remove it or are you removing it because you don't like the feature anymore or it's too
0:00:35hard to support or something like that. And I've done a lot of both, honestly, more the
0:00:43latter than the former, honestly. But I think what I'm facing this summer is I'm having
0:00:52to remove the send to watch feature from Overcast. This is a feature that would use the iPhone
0:00:59app to transcode the podcast file to a smaller size and then set in bacon smart speed and
0:01:06then send it over Bluetooth to the watch and then the watch would have its own little copy
0:01:11of the file and then it could play the file directly from the watch to a pair of Bluetooth
0:01:16headphones if you were, you know, out running with the watch and didn't have your phone
0:01:21with you. This is a feature that people had requested for ever since the first watch came
0:01:27out. It was the number one feature request from watch owners was the ability to have
0:01:33stand alone playback, you know, playback without your phone. And basically, and this feature
0:01:38I, it took me a very, very long time to get this working. I worked a lot on it this past
0:01:42winter. I've probably invested something like three or four months of development time into
0:01:46just this feature. And the main problem I kept facing was the background audio playback
0:01:56APIs on watch OS are very, very rudimentary because watch OS has to run on this very,
0:02:01very low power device. And one thing that basically doesn't exist in watch OS is background
0:02:08execution of apps. Like a few can do it, mainly like workout processing apps can do it. But
0:02:14almost nothing else on watch OS is allowed to persistently run in the background the
0:02:19way audio apps on iOS are. You know, on iOS you have audio playback, VoIP, you have location
0:02:26tracking like turn by turn directions. All these kinds of apps can stay in the background
0:02:31indefinitely as long as the user is using them, they can keep staying in the background.
0:02:35On watch OS, that list is much shorter. It's, and notably does not usually include audio
0:02:40apps. And so there is, there are a few APIs you can use. The biggest one is the WK Audio
0:02:46File Player API. But it's very, very rudimentary and honestly I've had a lot of problems and
0:02:53shortcomings trying to use it, a lot of bugs, a lot of just missing features. Because the
0:02:58way it works is it actually is out of process. You basically hand it a file URL and it plays
0:03:06and then your app gets terminated in the background. And then, you know, at various times your
0:03:11app could be woken back up again to be notified of stuff going on in the audio player. Maybe
0:03:15if you're lucky or if the user interacts with you, you'll obviously wake up for that. But
0:03:20otherwise you're kind of just, you're not running. And that makes it very, very hard
0:03:24to make a good audio playback experience, especially for things like podcasts that have
0:03:28to be resumable, that have to save your position, stuff like that. And in, so for forever, for
0:03:35months I was fighting these APIs. I was, I could not get a good experience out of watch
0:03:43background audio playback. The problem was not sending the files over all of that. That
0:03:46has its own problems of things like it's very, very slow, there's no way to detect the progress
0:03:51of a transfer, which is very, very bad for the user experience. But even if you can get
0:03:57past the transferring of the files or even if you could have the watch download the files
0:04:01directly over Wi-Fi or over maybe a future cellular connection watch, you still would
0:04:06have the problem of background audio playback on watchOS. And so what happened was, this
0:04:12past spring an app called WatchPlayer by Peter Knapp came out and it uncovered for me a new
0:04:18method of basically if you said you were a workout processing app, you could use AV audio
0:04:26player and use it directly and your app would stay running all the time without interfering
0:04:32with other workout processing apps. It would just do the right thing. It would do what
0:04:35you want. It would stay in the background as audio was playing and allow you to do things
0:04:41like save your position reliably and not have to deal with all the out of process bugs of
0:04:45WK Audio File Player and stuff like that. It was, and it didn't have any kind of weird
0:04:51interaction with remote controls or the now playing screen, which is part of the problems
0:04:55I have with the WK Audio File Player API. It has a lot of weird interactions there. Anyway,
0:05:01so this was finally a way to fairly reliably play audio in the background on watchOS. So
0:05:07I switched over to this method and I released this feature. And it turns out that this was
0:05:13not intended to work this way by Apple. And so this feature no longer works this way in
0:05:21watchOS 4. WatchOS 4, you can only, if you want background audio playback, you can only
0:05:26use WK Audio File Player. All the, the method of saying you're a workout app to really play
0:05:31audio, that no longer works on watchOS 4. So now I'm faced with this massive dilemma
0:05:38of well, I can go back and rewrite the whole thing again for WK Audio File Player, the
0:05:44out of process API. But that had a lot of problems and a lot of bugs and a lot of shortcomings.
0:05:51And just weird behavior, like for instance it tries to hook into the remote control button
0:05:58so if you were to hit skip forward or seek forward on a Bluetooth headphone or if you
0:06:05were to go to the now playing screen and hit the fast forward button. What that does for
0:06:10WK Audio File Player is what you'd expect from music. It goes to the next track. Podcast
0:06:15apps all interpret this as seek forward by 30 seconds or whatever you've set it to. So
0:06:21for podcast what you want is very, very different than that. And when you are controlling the
0:06:25audio player and you have a proper remote control API like you do on iOS, you can interpret
0:06:30that as whatever you want and you can do that. On watchOS, because this is all happening
0:06:36out of process, out of your control with WK Audio File Player, watchOS tries to do the
0:06:42right thing. So it just invalidates that file and seeks to the next one. If you are a podcast
0:06:49app, you don't have a next one or you might have used WK Audio Q File Player or Audio
0:06:54File Q Player, whatever it's called. But you have no way to interpret that click as something
0:07:00else or that fast forward command as something else. So it just ends the track you're listening
0:07:05to and goes to maybe the next podcast or whatever else. And I tried so many crazy hacks with
0:07:10this. So for instance, splitting up podcasts into like 10 second chunks and just giving
0:07:15it a queue of like 400 files for a show.
0:07:18Perfect. What could go wrong?
0:07:20Yeah. Unsurprisingly, watchOS did not appreciate that approach for various resource limitations
0:07:27I think. It probably didn't expect me to have a playlist with 400 entries of 10 second files.
0:07:32So yeah, that wasn't great. And so again, I tried all these hacks to try to get this
0:07:38WK Audio File Player to give an experience good enough for podcast listening. And basically
0:07:44it just didn't happen. It didn't happen for the four months I was working on it last winter.
0:07:50And I've tried over the last few weeks to do it again with watchOS 4 and it's not any
0:07:55better than watchOS 4. It still has all of the same shortcomings and all these same bugs.
0:08:00And yes, I have filed many radars and I have forwarded them to evangelists and things like
0:08:06that. But the fact is, background audio playback I don't think is a very high priority on Apple
0:08:12Watch compared to everything else they have to do. Apple's very busy this time of year
0:08:17with things like iOS and getting the new phones out and all the new stuff for iPad and everything.
0:08:22So while I have filed bugs and contented the appropriate people, I don't think these bugs
0:08:28are going anywhere basically. The beta season is almost over and they haven't gone anywhere
0:08:32so I wouldn't expect them to. So I'm faced with this decision of like, do I move to this
0:08:38new API which is much worse for my purposes in every possible way and way buggier and
0:08:45introduces all sorts of new problems and requires all sorts of crazy hacks like using a timer
0:08:51and polling things that are supposed to be KVO compliant but aren't, stuff like that.
0:08:56A lot of bugs and a lot of weird workarounds that you have to do, polling things to see
0:09:00if they're playing or if they're stalled because sometimes the is playing attribute is wrong.
0:09:05Like there's all sorts of problems that I can't even overstate how many problems there
0:09:11are with this API. And so I can switch to that but it's going to be way, way worse than
0:09:17it is now. And right now the feature is barely shippable as it is, like with the watchOS
0:09:223 version that was barely shippable and I probably shouldn't have shipped it but I did.
0:09:27Or I can remove this feature now and just say sorry everyone, it didn't work out. And
0:09:34this is complicated, like some people have said like well I can, I'll just leave my watch
0:09:38on watchOS 3. Well that's not very, that's not going to work because first of all if
0:09:43I leave this feature in for everyone else, when they upgrade to watchOS 4 it stops working
0:09:46even if I don't recompile the app for watchOS 4. And then second of all if I update my app
0:09:51to iOS 11 and watchOS 4 then if their watch is still on 3 it'll just be deleted from
0:09:57the wrap when they update the phone app. So they would have to also not update to iOS
0:10:0211 and that's unlikely, you know, so anyway. I'm basically stuck and I have to remove
0:10:07this feature. And this is really a tricky decision because the good thing is not a lot
0:10:15of people use this feature. It's used by something like 0.1% according to my analytics
0:10:19of active users so it's a very, very low number. But that 0.1% is going to be really
0:10:28mad. And I've tried to warn them on Twitter ahead of time and say you know, hey just so
0:10:32you know I've been working on this, not going well but I've decided it's really
0:10:36out now and I'm not going, I'm going to remove this feature. Like the decision is
0:10:40made and I'm also going to remove it like now rather than in a month and a half or whatever,
0:10:47you know, whenever iOS 11 ships and watchOS 4. Because I don't want my entire iOS 11
0:10:54updates story to be a removal of a major feature. And I don't want all the one star ratings
0:11:00that I'm definitely going to get by removing this feature to apply to my big iOS 11 update.
0:11:04You know, I want to get this out of the way now and I want to kind of stop the influx
0:11:10of new customers finding this feature and getting accustomed to it only to have it be
0:11:15ripped away from them in a month and a half or whatever. So I'm going to remove this
0:11:19feature now. And it's always a very tricky balance because again, it's like you have
0:11:24to think about all these things. You have to consider like you're definitely going
0:11:28to make a lot of people angry. You're definitely going to get a lot of one star reviews. It's
0:11:33going to hurt the app for a while. But the feature wasn't very good to begin with and
0:11:39I've been getting one star reviews over the current feature as it is today. Even from
0:11:44people who love the rest of the app but they want this feature to work better so they say
0:11:49one star for the whole app because they're mad at this feature. So like, it's, what
0:11:55should I do? Does this sound reasonable?
0:11:57I think it does. Because I think the reality in a situation like this is that like the
0:12:04biggest things that come to mind is at a certain point there's like the sunk cost fallacy
0:12:08that you have to deal with of the feeling of like because you've put so much into
0:12:13something that you should put more into it to save that effort that you put into it before.
0:12:20So like in this case, the thing that I'd always have in the back of my mind is this
0:12:23like am I continuing to work on this feature because I've spent months working on this
0:12:28feature? Or does this feature still make sense in and of itself? Like if I was coming at
0:12:32it fresh? So you have to have that in the back of your mind. And then two, it's like
0:12:37is what is this feature getting in the way of being made? Because you know, it's like,
0:12:46especially as a one person developer, or even a small team, like you're the one thing that
0:12:52you can't get more of is time and attention to work on your app and to make the part of
0:12:59the app that 99.9% of your other users interact with better. And so the biggest things I'm
0:13:07like, it is so hard to say, to just like accept the fact that this is going to be unfortunate
0:13:14that this is not going to be pleasant for who knows how long for, you know, I mean,
0:13:19it could be indefinitely problematic for that very small group of people. But hopefully,
0:13:23it's you know, for a month or something or for a couple of weeks when the you know, the
0:13:27update comes out where this gets gets pulled. But the reality is trying to please that small
0:13:33group of people indefinitely trying to sort of pile hacks on top of hacks of this crazy
0:13:39feature is just never going to it's never going to win. And so you kind of have to at
0:13:44some point just say, you know, we tried it, it didn't work. I'm very sorry, and move on
0:13:50because otherwise, you're just the app is just going to get stuck. And I mean, it's
0:13:54in a weird way, it's like the the reverse of the sunk cost fallacy is you start to think
0:13:58in terms of like, should I have pulled this project earlier? Should I, you know, would
0:14:03it in what could I have done in the meantime, and you know, it's not that you want to just,
0:14:09you know, only slightly try experimental interesting features. And if at the first sign of trouble
0:14:13back out, because you know, a lot of the cool and interesting things that differentiate
0:14:19apps and make them useful and interesting, are these kind of more experimental, like
0:14:23going down these crazy routes and seeing if it can work and coming up with interesting
0:14:27workarounds and, you know, crazy hacks, like, I love that part of things. But I think at
0:14:31a certain point, you have to decide, you know, is this does this continue to be worthwhile?
0:14:35And it sounds like in your in your case, like, I absolutely agree that it's time for it
0:14:39to go. And it's just going to be one of those things where they will, you can work on the
0:14:44messaging around that you can try your best to kind of message that and maybe you'll end
0:14:48up putting message maybe having messaging in the app to try and communicate that because
0:14:54the majority of your users almost certainly aren't, you know, following overcast FM on
0:14:58Twitter or whatever or reading your blog, like messaging that as best you can to try
0:15:03and make sure that, you know, people are at least have some understanding about what's
0:15:07going on. But ultimately, it's like the being held hostage by a vocal minority is just going
0:15:14to stall everything else out. And the you know, if anything, the best thing is to do
0:15:17is to just call it quits. I like that you're just you decided to do it early and the cycle
0:15:22just get it done. And just put that to the side so you can focus on your next big updates
0:15:27for iOS 11. Because, you know, once you've done it, the nice thing in many ways, at least,
0:15:33it's a funny thing to say, but one of the things I like about the App Store is that
0:15:35like, I don't it's not like I work in a physical retail store, or something like that, where
0:15:41if I do something that my customers don't like, they reach out to like, to me specifically,
0:15:46in a like a physical way that I can't avoid. Like, if you make some make do something that
0:15:51upsets some people, you can in some ways, isolate yourself from that and just move on,
0:15:56at least for a period of time, let it die down and focus on the things that are going
0:16:00to make your app better for everyone else. Because almost certainly, like that is better
0:16:04for the future of the app than trying to hold hold on to a feature. And like, in this case,
0:16:09you're kind of your hand is kind of forced. But I mean, there's even situations where
0:16:13you have to make any change in an app is going to have this exact same experience. I think
0:16:19like, if you change the font, or you change the color, or you change the layout, people
0:16:24will be upset. Like there's just that is the that is the inevitable reality of any change.
0:16:29But if that change is making the app better, then it's kind of essential to just develop
0:16:34a bit of a, you know, it's like I struggled with this a lot early in the early days of
0:16:37my indie career, with this feeling very personal about it. But at a certain point, I've had
0:16:42to just develop a thick and thick enough skin to say, whatever, this is the I'm trying to
0:16:47make the app as the best app that I can make it. And just go with that and hope and hope
0:16:52that people accept that, you know, like, the majority, it's making it better for more people
0:16:57is always almost certainly better than leaving it as it was for a small group of people.
0:17:04This has been a lot of my rationale for for choosing to remove this feature now because
0:17:08like I have, you know, like the sunk cost fallacy is definitely at play here. And but
0:17:12but I think what you what you just described and what I will now I guess coin the the the
0:17:18lost opportunity cost tragedy. Like, I like I could have done so much more for the main
0:17:25app in the time I've spent on this feature. And and if I would have known this feature
0:17:30would have cost so much time, I probably wouldn't have started tackling it in the first place.
0:17:35But you know that that's all gone now. Now you have to focus on well, what do I have
0:17:39now? And the fact is I'm already like more than halfway through the summer. And I have
0:17:46done relatively little to adapt the main app for iOS 11 because I keep getting stuck in
0:17:51watch problems and developing for the watch in general. As you know, it's better than
0:17:57probably anybody. It's complicated and it's slow going. You know, like it's it's a very,
0:18:03you know, because it is first of all this like kind of sister device to the phone. So
0:18:08it has like you have to do a lot of things through the phone first and then over the
0:18:11Bluetooth or Wi-Fi to the watch. And it also is very, you know, rudimentary performance
0:18:16hardware because it has to fit in the watch like it has to have the power envelope to
0:18:21fit in the watch and everything else. Like it's very low powered hardware. The OS is
0:18:24fairly young. The API's are fairly young and very limited. So it's it's just very slow
0:18:32going development wise. Everything you do to develop for the watch is more difficult
0:18:37and more cumbersome. The cycles of developing and testing and debugging are all longer just
0:18:43because it's this low power thing that's complex and tied to your phone. So watch development
0:18:50for me has just been a massive time sink. And a lot of a lot of my users do use the
0:18:58watch app. But, you know, way more people use the watch app than whoever used the send
0:19:03to watch offline playback. And part of that, you know, the feature could be better. I'm
0:19:08not saying it was perfect before, but, you know, it could be way better actually. But
0:19:12the fact is like it is not worth investing as much time as I've been investing in the
0:19:18watch app for the amount of users it gets. You know, still by far like I have something
0:19:22like 15% of my users who have the watch app installed, but only about 1% of the daily
0:19:28actives actually interact with it. Like they have it running in case they need it. Very
0:19:33few people actually use it or interact with it more than just looking at it or glancing
0:19:38at it or even just having it installed and never launching it. So I need to now adjust
0:19:44my time allocation for the reality of the usage of the watch app and how expensive time
0:19:53wise it is for me to invest time into it. You know, like it's just so slow going to
0:20:01make real progress on the watch. It's difficult and it's expensive. So what I need to do now
0:20:07is focus on the main app, the main UI, the main interactions people actually do with
0:20:14it. Because that's what I'm focusing on for iOS 11. This is no secret. As we discussed,
0:20:19I'm adopting the new drag and drop APIs. I'm updating some of the UI here and there
0:20:24for various little behavioral tweaks that people have wanted and stuff like that. So
0:20:28I have a good amount of work still to do. All my table views in iOS 11 have weird animation
0:20:35bugs and are broken because of the way that it changes table view sizing and everything.
0:20:38I still haven't started dealing with that yet because I haven't had time. I keep losing
0:20:43time to massive tar pits of watch development. So I just need to end the watch development
0:20:52now. And it's okay. I'm going to maintain the app and update the app over time but it
0:20:59has to be a small scope. It has to be like this watch app will continue to work and I'm
0:21:06going to make it as fast as I possibly can and even faster to interact with which by
0:21:09the way is actually better without the offline feature because then I have back to a one
0:21:13page interface and I don't have to link all these extra frameworks and everything so it
0:21:16actually is way faster without the offline playback and it's easier to touch it without
0:21:23your touch being interpreted as swipes. So that's nice. Anyway, the watch app is way
0:21:29better without this feature and it's more in line with the amount of time it has earned
0:21:35from my development time for the usage it actually gets. For those 1% of people who
0:21:41are interacting with it every day, I want to make it really fast because 1% is not great
0:21:45but it isn't like if I leave it without the offline playback, it isn't that big of a time
0:21:49suck but that does not make it worth investing half of my development year into it when the
0:21:57rest of the app needs attention to. Anyway, we are sponsored this week by Indeed Prime.
0:22:02Indeed Prime helps tech talent such as yourself and other software developers and data scientists
0:22:07simplify their job search and land their dream job. Indeed Prime candidates get immediate
0:22:13exposure to the best tech companies with just one simple application to Indeed Prime. Companies
0:22:18on Indeed Prime's exclusive platform message the candidates with salary information right
0:22:23up front and the average software developer gets five employer contacts and an average
0:22:27salary offer of $125,000 a year. Indeed Prime is 100% free for candidates, no strings attached,
0:22:34100% free for you. Sign up now at Indeed.com/Prime. Once again, Indeed.com/Prime. Thank you very
0:22:43much to Indeed Prime for sponsoring our show.
0:22:46So the thing that you're, as you're saying that, that also comes to mind I think just
0:22:50in general is the being aware of the trap of how we allocate our time as we work on
0:23:01our apps because this is something that I've actually been struggling with a lot recently
0:23:04and I have like the double fold problem of where do I allocate my time within an app
0:23:10and then where do I allocate my time within a variety of apps that I have.
0:23:15Oh, of course.
0:23:17And I think this loops back into this sort of this topic around removing features because
0:23:24it is so easy to get stuck in these rabbit holes I find where you kind of you're working
0:23:29on something that isn't actually giving you a lot of return and I think it is so like
0:23:36the things that the traps that I am so easily fallen into are ones where you get like the
0:23:42feedback we get from our customers whether that be an email or online you know in in
0:23:46the app in the App Store wherever it comes comes from we get this feedback and it's so
0:23:51easy to misconstrue the representativeness of that feedback and I think like in this
0:23:58case it's like if you you know you got the you had a lot of you had this feeling that
0:24:03you had a lot of people requesting offline watch playback like from there you know this
0:24:08was a highly requested feature since the watch came out great turns out point one percent
0:24:15of people actually used it in practice right like and I think that is something that is
0:24:21it's like the best way to remove a feature probably is to never had it in the first place
0:24:27which is pretty like like preemptive removal which didn't like doesn't doesn't dig you
0:24:34out of a city the situation you find yourself in now and I mean the reality is you're just
0:24:38gonna have to sound you know it's like you just have to navigate it as best you can it's
0:24:41out in the world but I think to wrap this up at the thing that comes to mind for me
0:24:45is it's I do I'm increasingly trying to be very analytical about where I'm spending my
0:24:52effort to try and maximize the output from that because it is otherwise I end up spending
0:24:58time on these apps around these features that you know I get the impression are well are
0:25:03very desired but the reality is they're not in the common case they're these sort of these
0:25:08edge case users or uses of the app or honestly even more problematic are the ones where they
0:25:15change the core functionality to be slightly worse a custom or a special use case slightly
0:25:24better like those are the situations where it's I think it's very important to when we're
0:25:30going into these kinds of things it's like to take that step back and say like how many
0:25:34people realistically are going to probably use this and do I have any measures in my
0:25:38app that I can use to identify that like you know even just at the basic level of like
0:25:44what percentage of my apps of users in this case like have an Apple watch and like knowing
0:25:49that number ahead of time you know like that is the absolute if every single person used
0:25:53it well that would be this many people and like you can go down that road of being very
0:25:58thoughtful about it ahead of time because otherwise you end up in you know in this situation
0:26:02I've gotten myself in there many times myself where it's it's so easy to get sucked down
0:26:08these these things that can become these like the like you think you said tar pits like that's
0:26:12what it feels like sometimes very and almost certainly we're at our best when we're able
0:26:18to move quickly when we're able to focus on features that will you know if we can make
0:26:22that core experience better and better and better and it's like the refining having the
0:26:28it having the attention and the patience to refine the core experience over and over and
0:26:32being okay with letting other opportunities go fall to the side because I think I don't
0:26:38know if you ran into this but when I often run into with these kind of these side features
0:26:42is I have this this fear I guess it's like the fear of missing out like I don't want
0:26:47to be it's like I know this opportunity exists like there's here's this functionality here's
0:26:52this thing that I could build you know in this case building offline watch play black
0:26:56like it's a known thing it isn't this crazy novel invention that you've come up with it's
0:27:01like it's a pretty obvious next step being it's like is it getting over the fear that
0:27:08someone else is going to do it someone else is going to do it better and as a result like
0:27:14they're going to have this runaway success that crushes you in your business like that's
0:27:20a constant fear of mine but the reality is that is almost certainly not the case like
0:27:25it's possible like in the same way that it's possible to like win the lottery and in some
0:27:30ways the odds are probably more similar it's like it's the there's a point oh one percent
0:27:35chance of this that that that situation happening but the reality is the vast far more likely
0:27:41thing is that your app will would lose out and fall to and fall away because the core
0:27:47experience got worse over time rather than that it didn't have some one little feature
0:27:54and like that's really hard like I've having to say no to something that I know that I
0:27:58can do but just would end up being this massive time suck is really hard but it's probably
0:28:05an essential thing for us to do because otherwise we're just gonna you know like I don't know
0:28:09what the next feature that you or I will are going to add to our apps that we're ultimately
0:28:13going to kind of regret and maybe have to walk back from and have to navigate and take
0:28:16our lumps when we remove it but almost certainly there's opportunities are going to keep presenting
0:28:22themselves and we just have to try and focus on the right things is this all your like
0:28:29subtle long way of saying that you want me to bring back one touch playback no no no
0:28:35that's fine I'm okay with the two touch what about the play button on the right side is
0:28:39that is that good enough play button on the right side is perfect okay but it is an example
0:28:45of like it's you that it's that core experience of you know of overcast like the optimizing
0:28:51those are those then you know the behavior of playing a podcast is like a core experience
0:28:57that should be perfect yeah and that's where you should be spending your time rather than
0:29:01worrying about the side features that a few people use a few people love like there may
0:29:07be super passionate and then like that's awesome but that's not most your users and that's
0:29:12get going down that road too far it's just going to end up you know missing it's like
0:29:15missing out on way bigger opportunities than missing out on this small small opportunity
0:29:20over here not to mention I gotta fix all my broken table views still that too thanks for
0:29:25listening everybody and we'll talk to you next week bye
0:29:28[BLANK_AUDIO]