Developing Perspective

#131: The Greatest Good for the Greatest Number.


00:00:00   Hello and welcome to Developing Perspective.

00:00:03   Developing Perspective is a podcast discussing news of note and iOS development to Apple

00:00:06   and the like.

00:00:07   I'm your host, David Smith.

00:00:08   I'm an independent iOS Mac developer and I guess now webmaster based in Herne, Virginia.

00:00:13   This is show number 131 and today is Friday, June 28th.

00:00:18   Developing Perspective is never longer than 15 minutes, so let's get started.

00:00:21   All right, so it's been I think almost two full weeks since I did my last show, the last

00:00:26   And I believe I recorded while I was sitting in my hotel room at WWDC, just packing, getting

00:00:31   ready to go.

00:00:32   And so, yeah, very different time now.

00:00:35   The next week after WWDC, I was actually away with family for pretty much the whole week.

00:00:40   And so that's why I didn't do a show last week and honestly didn't do much work.

00:00:44   And it would encourage anybody who can to try and just anytime you actually go away,

00:00:48   to really go away.

00:00:49   I tried very hard to just not check anything, not be constantly checking email or servers.

00:00:54   I'd rather dig out of that later and really be able to enjoy some time with friends and

00:00:58   family.

00:00:59   But anyway, so I'm going to talk about a couple of things today.

00:01:03   Obviously, if you're at all paying attention to at least what's going on in my world, the

00:01:08   biggest thing going on today is that everyone is sort of—we're not really freaking out

00:01:14   about the Google Reader apocalypse that's occurring, I guess.

00:01:18   No one really knows.

00:01:19   Either it's Sunday night or Monday morning or Monday evening.

00:01:23   sometime very soon Google readable die.

00:01:25   And so the service that I launched a couple months ago,

00:01:27   feed wrangler, has been seeing quite a lot of traffic

00:01:32   as a result. And it's been fairly well reviewed.

00:01:34   And I really appreciate it with people

00:01:35   who said kind things about it and stuck with it today itself.

00:01:39   And so this week especially has been

00:01:41   pretty rough in terms of server stuff,

00:01:44   in terms of trying to keep up with things.

00:01:47   It's kind of an interesting thing that you--

00:01:49   I was reading a great post-- I'll have a link in the show

00:01:51   by the guy who runs Pinboard.in.

00:01:56   And he posted a fascinating chart

00:02:00   where he looked at his number of new user signups by day over time.

00:02:04   And it's fascinating because you'll see these massive spikes

00:02:10   in users, in usership as he goes.

00:02:14   And then things fall down very precipitously.

00:02:17   And there's these very sharp ups and downs.

00:02:17   And that makes sense.

00:02:19   The things that are driving downloads

00:02:20   are events, are news, are attention,

00:02:23   are people paying attention for whatever reason.

00:02:25   And then there's a certain background rate

00:02:27   that just happens naturally, kind

00:02:29   of an organic sort of growth rate, if you will.

00:02:33   And the interesting thing about that, of course,

00:02:35   is that today is that day for me.

00:02:37   I've had as many sign-ups today as basically--

00:02:42   at this point, it's roughly tied with the launch day,

00:02:45   where it was featured on a lot of prominent blogs,

00:02:48   and just in general, it was a brand new service.

00:02:51   So it's been a pretty wild day.

00:02:53   Things are mostly keeping up.

00:02:55   Things aren't quite as fast or as fluid as I'd like.

00:02:58   But that's kind of getting to the first topic

00:03:00   that I was going to have.

00:03:01   And it's one of the interesting difficulties

00:03:03   about building something and scaling it,

00:03:08   is that in general, it's only practical to a certain degree

00:03:16   to work flawlessly at every level.

00:03:21   And by that, I mean if I were to have architectured and built

00:03:25   and paid for a system that would allow a feed wrangler to run

00:03:30   such that it could handle with today's load, which is--

00:03:35   I think today's new user signups is about 10 times normal load.

00:03:40   Whatever it's been for the last month, average or so.

00:03:47   If I had structured it so that it would handle that without sweat,

00:03:50   I'm necessarily wasting a lot of energy and a lot of resources as a result.

00:03:54   Because today is a unique thing.

00:04:01   Today is something that's just probably not going to happen again.

00:04:02   And if this becomes the new normal, then I guess at that point I'll put in that effort

00:04:07   and roll it up.

00:04:08   But especially because I know exactly why it's happening, this is just going to be a

00:04:12   rough day and I'll do my best and hope people are accepting of that.

00:04:17   But it's just something that you can do what you can, but there is no magic pixie to us

00:04:23   that you can do to scale services.

00:04:24   At the end of the day, what you end up doing when you try and scale something is you're

00:04:28   just going to be moving from bottleneck to bottleneck.

00:04:30   And at some point you find a bottleneck that you can't just trivially replace or expand

00:04:36   or fix with logic or whatever.

00:04:38   And I did a show about this a little while ago, talking about performance.

00:04:41   But at the end of the day, what right now I'm running into, the bottleneck I have is

00:04:48   write performance on my database master server.

00:04:51   That's my specific bottleneck that I'm struggling with right now.

00:04:55   There are just so many users adding themselves to the system,

00:05:00   and signing up for new feeds,

00:05:05   and adding, subscribing to other feeds,

00:05:07   and it's just pushing so much data into the database

00:05:09   that it's hard to keep up.

00:05:12   And something that's in general is fine.

00:05:14   The system can handle a lot of,

00:05:16   I don't know, quite a lot of traffic,

00:05:19   but just not all at once.

00:05:22   And so it's a tough question,

00:05:23   and what you do within these kinds of scenarios,

00:05:23   or at least what I've been doing,

00:05:28   is you just start scaling back on the things that you can do.

00:05:29   And so I'm scraping feeds a little slower than I used to.

00:05:32   Except for I'm scraping popular feeds more often

00:05:38   than not as popular.

00:05:42   I'm playing those kinds of games to try and maintain

00:05:43   some level of performance, or at least some level

00:05:47   of apparent performance, without impacting the user.

00:05:49   But I think the lesson that I thought would be interesting to talk about is, it's important, I think, to understand that.

00:05:48   But I think the lesson that I thought

00:05:50   would be interesting to talk about

00:05:51   is it's important, I think, to understand and have

00:05:56   a good tolerance for that kind of thing.

00:05:58   I think as an engineer, it is so easy to think

00:06:01   that you want to build the perfect thing, that you want

00:06:05   to build something that is that pristine, whatever,

00:06:09   like the platonic ideal of a system that you can scale up

00:06:13   or will just always work perfectly.

00:06:15   But the reality is that in the real world,

00:06:17   That's not really practical.

00:06:19   And you can learn lessons from mistakes you've made,

00:06:22   and you can improve things, and you can get better and better.

00:06:24   But you're never really going to arrive.

00:06:27   And understanding that, I think, can help you stress out

00:06:30   a little less about it, or at least feel less bad about it,

00:06:33   and understand that this is just the process.

00:06:35   And I think about even large companies, things like--

00:06:41   it's a bit of a whipping boy, certainly.

00:06:43   But I think about something like iCloud, right?

00:06:45   So one of the largest companies in the world with essentially infinite money was then unable

00:06:50   to build a reliable service for a variety of purposes.

00:06:58   And so, you know, cut yourself a little slack if you can't quite hit it too.

00:07:03   And understand that, and this is the second point that I want to emphasize, is that you

00:07:07   can't please everybody.

00:07:09   And especially, this is something that I learned a lot actually from the App Store that I think

00:07:14   that has actually been very helpful as I've been working on a web service, is that

00:07:19   the people who are loudest, the people who are most

00:07:24   in your face about whatever the problems you're having, whatever the issues you're running into,

00:07:29   about wanting to make sure that you know that they don't like what you're doing, whatever it is,

00:07:34   that negativity is going to be coming from people who are negative in a loudest way.

00:07:39   Whereas the people who are enjoying and just using it exactly how you expected them to

00:07:44   are unlikely to say so.

00:07:46   And sometimes people will say nice things, and if they do, definitely encourage them

00:07:49   and say thank you.

00:07:51   But typically in my experience, what people do, you'll see the negativity and sort of

00:07:57   whatever, your mentioned stream or whatever.

00:07:59   People will be like, "Oh, gosh, it's so slow today," you know, blah, blah, blah, blah,

00:08:03   blah, like kind of that kind of thing.

00:08:04   And it's very easy, I think, to internalize that and to feel very negative about yourself.

00:08:09   It reminds me a lot of App Store reviews.

00:08:14   You'll see people who are happy will rarely write App Store reviews unless you pop up a panel that says, "Hey, please go write my app."

00:08:16   Which has other problems, which I can talk about in another episode.

00:08:24   But in general, people don't think to go write reviews if they're happy.

00:08:26   People write reviews if they're mad.

00:08:31   So reading reviews is a little complicated.

00:08:31   And understanding that you can't please everybody, I think,

00:08:34   is very freeing.

00:08:35   And it lets you focus on things that you can change.

00:08:37   Because that's really the practical part of this.

00:08:39   The practical part is that as soon

00:08:43   as you kind of internalize that, it really helps free you.

00:08:45   I don't know if you're like me, but I get really tied up

00:08:48   when I think about somebody who's

00:08:50   having a particular problem that I could probably solve

00:08:53   if I focused on it particularly.

00:08:54   They have some feed that won't load,

00:08:56   they have an open PML file that won't load,

00:08:57   whatever it is in my case.

00:08:58   Like, these are the kind of examples

00:09:00   been running into a lot.

00:09:02   The difficulty, though, is it takes a certain amount of time

00:09:05   per user to investigate that, to find the problem.

00:09:09   And hopefully I can have a general purpose solution.

00:09:11   Hopefully I can find a bug or find an issue or find

00:09:14   something that will make that go better.

00:09:15   But generally speaking, the issue is always going to be

00:09:18   that time is time that's focused on a single user.

00:09:22   And I have no shortage of tasks that I can do on things

00:09:25   that I'm working on that will hopefully improve the system

00:09:28   for every user.

00:09:29   And so balancing those two things is certainly attention,

00:09:34   that you want to be doing things that,

00:09:37   it's sort of like you have the greatest good

00:09:41   for the greatest number,

00:09:42   with also making sure that every customer has,

00:09:43   at least not every customer,

00:09:45   that you are treating your customers well,

00:09:47   that you're treating them with respect,

00:09:49   that you're understanding that they have a reasonable expectation

00:09:51   on things working.

00:09:56   And if they don't,

00:09:58   they have a reasonable expectation on your attention.

00:09:56   But don't get too carried away with that.

00:09:58   Don't let people sort of control you in that way.

00:10:01   Because every time I try and do that, every time I

00:10:04   try and fix everybody's problems at whatever level, in whatever app,

00:10:08   in whatever thing I've worked on, ultimately I

00:10:10   think it makes my products worse.

00:10:13   Because individual problems are going to slow down

00:10:18   the overall pace at what I can do.

00:10:20   And so focus on the things that you think

00:10:22   will have the biggest impact to the most users.

00:10:25   And understand that a lot of this--

00:10:27   and this is where it gets a little funny--

00:10:29   is a numbers game.

00:10:30   Even at the small levels that I work, in terms of I'm not,

00:10:33   whatever, Feedly or whatever, one of these larger, free,

00:10:38   venture-supported things who's trying to get millions

00:10:40   and millions of users.

00:10:41   I'm not one of those kind of companies where I'm trying

00:10:44   to have millions of people.

00:10:46   I'm trying to have thousands of people use my service.

00:10:48   And so it's a different-- even there, it's still a numbers

00:10:53   game in that some percent of users

00:10:56   are going to try what you build, not like it,

00:10:59   and want their money back, or cancel,

00:11:01   or whatever mechanism makes sense for you.

00:11:04   And that percentage, you can maybe adjust slightly,

00:11:07   but you can never really eliminate it.

00:11:09   And so trying to, and trying too hard and focusing on it,

00:11:13   is I think very problematic.

00:11:17   I think what's far more important

00:11:19   is focusing on making your product better and better

00:11:21   to a broader and broader audience.

00:11:23   And then, in general, that will help.

00:11:26   It's kind of rough, though, when you experience people that you know--

00:11:31   it's like you have this person.

00:11:33   Bill has this problem.

00:11:35   And you know you could probably fix Bill's problem,

00:11:37   but it would probably take you a couple of hours.

00:11:39   You have to look into all of his feeds and look into this thing

00:11:42   and try to work out why this particular feed from this particular place

00:11:46   isn't loading.

00:11:47   I had this one interesting example where

00:11:49   an RSS feed I had would only load if it was loaded from certain IP addresses.

00:11:55   It was, I think, some kind of regional-based thing.

00:11:58   And it's like, maybe there's a way that I could work around that.

00:12:01   Maybe there's some way that I can proxy a request off to some European server

00:12:05   to make sure that it would work for this particular RSS feed.

00:12:09   But the reality is, I just can't make that work for that user.

00:12:13   And understanding that that time is better spent making it better

00:12:16   for the 99% of other users for whom I know I can make an impact.

00:12:21   And this is, I guess, a lot about leverage.

00:12:23   And especially as an independent, as this is--

00:12:25   and this is-- I think most people who listen to this either

00:12:27   are independents or in some ways would like to be.

00:12:30   If you're an independent, you have to-- your only real constraint

00:12:35   is your time.

00:12:37   There are a few minor constraints that you'll have, obviously.

00:12:41   Some things, obviously, in terms of resources and money

00:12:43   and those types of things.

00:12:44   There are ways to, at a certain level,

00:12:47   those can become overcome.

00:12:49   And your biggest concern at that point,

00:12:51   if you've reached any amount of sustainable business model,

00:12:55   is that it then becomes your time.

00:12:57   You have to be very careful about it.

00:12:58   And this is something that I keep

00:13:00   having to work on for myself, is that as hard as it

00:13:04   is to tell somebody, you know, I can't really fix that for you.

00:13:08   It's sort of like, I remember Dan Benjamin at 5x5

00:13:11   had a good line for that.

00:13:12   He was like, I'm sorry to lose you as a listener.

00:13:14   when someone complained about what he was doing on the show

00:13:16   or something like that.

00:13:17   It's like, as hard as it is to say,

00:13:19   sorry, I can't fix that for you, you just kind of have to.

00:13:23   And understand that that's ultimately probably

00:13:25   going to be better for you as a service.

00:13:29   So that's it.

00:13:30   Now, how far do I-- things will hopefully

00:13:32   be settling down next week.

00:13:33   Hopefully next week after Google Reader's dead.

00:13:37   And at least I won't have to manage Google Reader imports

00:13:40   anymore, which is a huge thing on my side.

00:13:43   But the advantage there, I'd hopefully be going back to that

00:13:46   and be able to talk more about some of the normal things

00:13:49   that I'll be doing.

00:13:49   And some of the plans that I have,

00:13:51   I think it's going to be a really interesting couple

00:13:52   of months.

00:13:53   I think I had some time and some perspective after WWDC

00:13:58   to think about iOS 7, to think about all the changes

00:14:01   that Apple is doing.

00:14:02   And I think it's going to be a really fascinating time.

00:14:04   And I like that I have a lot of products and a lot of things

00:14:07   that I can try ideas into and be working on.

00:14:10   and I'll be sharing as much as I can on the show about that

00:14:13   accordingly.

00:14:14   All right, that's it for today's show.

00:14:15   As always, if you have questions, comments, concerns,

00:14:17   complaints, I'm on Twitter @_davidsmith.

00:14:21   I'm on AppNet @davidsmith.

00:14:23   David@developingperspective.com is my email for feedback

00:14:26   for the show.

00:14:27   And probably fair to say, if you're

00:14:29   looking for an RSS platform, one with shaky performance today

00:14:33   but excellent performance tomorrow,

00:14:35   definitely check out Feed Wrangler.

00:14:36   It's at feedwrangler.net.

00:14:38   All right, thanks.