This past week we needed the services of both an electrician and a plumber, and somehow managed to escape the week only $200 lighter.

Having a lemon tree has been one of the unexpected pleasant surprises of our house. I am forever spoiled with homemade lemonade.

It feels like we’re spending a ton of money on our non-fixer up home. I need to keep reminding myself that all these little things are to be expected. Or rather the number of them is not unexpected, even if each individual one might be unexpected. We’ve been lucky that so far each of the issues haven’t been too expensive, with one notable exception.

I’m the kind of person whose comforted by numbers. To keep from going completely insane I’ve been keeping a list of our home repair costs. I’ve then calculated out the sale price we’d need in order to break even. (In addition to being comforted by numbers I may be a little OCD.) I’ve actually calculated out several sale prices: (1) what we’d need to break even just including repairs, (2) what we need to break even including estimated closing costs, and (3) what we need to break even including all additional maintenance costs that have come with the house.

It may seem like we’re spending a lot, but we’ll likely make it back again when we sell the house. According to both Zillow and Redfin, our home has risen enough in value to meet the first milestone. They disagree about the second one, and both don’t think we’ve reached the third. I guess the advantage of a high cost of living area is that small percentage changes translate to pretty large numbers.

I know moving was a good financial decision, but “knowing” isn’t really knowing without hard numbers.

Since we’re not planning on cashing in on the increased equity any time soon, I’ll just try to focus on the unexpected positives in our property – like our lemon tree – with a fresh glass of lemonade.

Since starting my own business I’ve been operating under the “build it and they will come” mentality. I’ve built, but few have come.

Analyzing my traffic from 2016 so far, I see that only 4.7% of my visitors are coming for only the new apps, whereas 6.9% of my visitors to my existing apps have tried some of the new ones. The new apps are in different genres, and it’s necessarily true that a visitor to one app is predisposed to like another app. Something seemed off about my adoption rate. Why wasn’t I attracting more users interested in those new apps in new genres? I’ve been stunned that even after months some of my new apps have had near zero adoption rates. This week I set off to figure out why.

It didn’t take me long to zero in on a possible culprit. My search results are awful.

Remember how I noticed my visitors seemed to prefer the old version of my labor predictor? I was making that assumption based on the number of visits to the url for the new version, and the url for the old (same as the new but with the parameter ‘type=old’ appended to the end of the URL). Take a look at the search results and see if you notice a difference in snippets.

laborsearchresult(Click to enlarge)

None of my snippets for any of my webapps were good by my estimation, but this is about as bad as I get. That first snippet is an enumeration of the values on the graph axes.

For the most part I have been ignoring meta tags under the assumption that google ignores meta tags. (That was internet common knowledge back in the mid 2000s.) These days Google uses them as a suggestion. They treat titles as suggestions too, which is a bit annoying. Enumerating my pages I see Google hasn’t exactly been consistent with how it wants to display my titles. Personally, I’d prefer consistency without the ‘- Sarah K Tyler’.

This week I decided to see if I couldn’t help Google come up with better descriptions at least. It gets a little complicated because google tries to write good snippets that match the query, not just the web page. To make my job simpler, I decided to focus on the case when someone issues a query for the name of my apps, like “labor probability calculator” above.

For a first pass I decided to use the descriptions on my app list page for descriptions. That mostly bombed. Some of my descriptions were kept, but most were ignored. My best guess is that google didn’t feel my description was any good. They may have thought I was keyword stuffing. My webapps are generally lacking in large blocks of text, and what little text there is often appears below the fold as I want my app front and center. Without much text on page to compare the description against, it might have appeared like the description wasn’t a good fit.

To eliminating the mismatching problem, I decided to text of work the meta tag descriptions into the “about” divs for each App. It’s not keyword stuffing if those words are actually being used! My success rate improved somewhat. Google was now convinced to use the “about” div, and not, say, the axes on the graph, when generating snippets, but it still wasn’t using my descriptions for the most part. Instead it was grabbing the first couple of sentences in the paragraph. Trouble is, some of those first sentences in the “about” paragraphs are motivational rather than descriptional. Google was also wasting space on unnecessary words like “About the Labor Predictor.” That’s nearly 20% of my allotted snippet space!

The apps that still have terrible descriptions:
* Baby Name Explorer (showing the title of the table, and not the description)
* Name Uniqueness Analyzer (showing part of the faq, and not the description)
* Passive Voice Detector (describing the highlighting, and not the description)
* Miscarriage Odds Reassurer (describing motivation, and not the description)
* Accelerated Debt Repayment Calculator (part of the table, and not the description)

At least that list is down from 20!

When we were halfway through March I was sure the theme of this post was going to be “a lot of effort for no progress.” After 14 days I had earned just $6.44, a rate of just 54 cents a day. I was loosing ground, and self sufficiency seemed to be slipping further and further away. Having sporadic thoughts of throwing in the towel is normal for me, but this time I started telling close friends and family I was thinking of giving up. The next 17 days? $19.50. My per day average over the entire month was 84 cents, and the last two weeks were well above the dollar a day metric. I predict I’ll reach my dollar a day target for the entire month of April.

The feast or famine of starting your own business can really take you for a ride.

This month I developed five new apps:

Time Until. Time Until is a count down app that lets you choose how you want to count down: week days, business hours, only the hours between 2 and 6 pm on Tuesdays. Whatever you want to count, it can count. I designed it after reading a study that couching time in smaller increments (hours vs days, days vs years, etc) can increase productivity. Since I work odd hours, I thought it would help me stay focused and accomplish my monthly goals. Only 207 hours left until my next progress and income report.

Color EyeQ. While working on one of my photography apps I realized I struggle with determining how the hue’s and saturation levels differ between photograph of different subjects. I thought it would be fun to test my ability to see color differences, and make a game out of it. Color EyeQ gives you a report card so you can see how well you did.

Business Scale Up. Business Scale Up is another motivational tool that shows you how adjusting different variables can scale your business. I discovered that I don’t have to scale up my user base as high as I initially thought I did before seeing some real revenue.

Nickname Finder. A simple app that lets you search proper names for nick names, and to find out what proper names a give name could be a nick name for.

Loan Comparator – Lets you put several loans side by side so you can see which one is the right one for you. I like to think of my apps as intuition busting. The Loan Comparator showed me that sometimes the best loan is not necessarily the loan with the lowest interest rate, and that term length plays a big role in determining how much interest you’ll pay over time.

I now have enough data from my adblocking detection script to determine that about 12% of my webtraffic uses a blocker. The vast majority of those adblockers (97%) work the same way; preventing the adsense javascript from downloading. A super simple work around would be to pre-fetch the content of the javascript, and embed it directly into the apps.

Twelve percent of my traffic using an adblock isn’t great, but it’s also not horrible. For now I’m focusing on other things, like growth!

As I was driving the kids home from daycare yesterday it suddenly dawned on me that a code change I had made a few weeks ago may have introduced a bug into some of my less popular apps. It wasn’t until I was drawing the kids their bath that I had a chance to whip out my phone and confirm the bug’s existence. Drat. At least I was pretty sure it was an easy bug to fix.

Once the kids were in bed I opened up my laptop to get started. This was looking like a minor bug in an set of apps with an embarrassing low number of visitors last week. I decided to chance editing it directly in production rather than setting up a test environment first. I made a single change, before getting called away. I was gone for a minute. Not more than 30 seconds. I returned back down stairs to discover the internet was out. I opened my phone to test the change I had made. Instead of a small bug that only affected an obscure case, my app was now completely unusable. Serves me right for working in production.

I checked in with our internet service provider. They already knew about the outage, and expected to have the internet restored by 2 am. It was 8pm. Not a good. Not good at all.

The internet wasn’t technically down, but experiencing about a 60-75% packet loss. Packets were bouncing around all over our provider’s network before getting out to the internet backbone. It looks like our service provider were experience a major hardware problem and were trying to reroute traffic around it, but the rest of the network couldn’t handle the extra load. What that meant for us was that we could occasional connect for a minute or two. It was usually just enough for me to connect through the web ftp, open a file and make a single change. If I was lucky, I could also test the change on my laptop instead of my phone before I lost the connection again.

By the way, my work environment? I’m working with a web based ftp and IDE. The web based ftp wasn’t anticipating connection interruptions. If the connection timed out while trying to commit a change, the web based ftp showed the change as committed. I discovered this after debugging the same bug and changing the same line the same way multiple times.

It was a night of not fun discoveries. Thankfully, the internet was stable enough at 11:30 for me to return my app to it’s mostly correct state. This morning I took a few extra minutes to squash that bug.

Next task: setting up a better working environment.

My willingness to spend money has increased the past couple of years. I hemmed and hawed about purchasing the the wine bottle wall art that decorated our dinning room walls with when Domingo and I first moved in together. Domingo had to convince me that it really wasn’t that expensive to buy both the white and red pieces. A few years later I lamented not having purchased a backup set. Sadly, they broke in our move not two years after that, thank you movers who put them in a box without wrapping them first.

The ‘I should get a back up set’ (or ‘should have gotten’ in this case) is the good I-wish-I-spent-more feeling. Lately I’ve had a few of the not so good I-wish-I-spent-more feeling. The reading chair we purchased for the office came cheap from Amazon. Sadly it both looks and feels as cheap as it was. I wish I had purchased a different chair, a nicer one. The deck furniture was similarly disappointing. It’s already has some rust after just one season of use. I can’t really bemoan the purchase of the Ikea couch. We got it at a basement bargain price for the apartment. We weren’t sure where we were likely to move, and I didn’t want to spend a penny more than I had to on something that might not work in the new place. It was the cheapest couch I could find, and meant to only be temporary.

Then there were the good purchases. The Mainstays table for the kitchen was a steal. The initial table I bought that arrived broken, only had two chairs and cost more. Our dinning room table was another great purchase, though the shipping and handling surcharge eat into the discount a bit. And, of course, I ended up liking our Christmas trees that were a bit of a gamble. I’m glad I didn’t spend one penny more on those items because it’s hard to imagine a different table or tree that I would have appreciated measurably more.

Reflecting on past purchases has me thinking about price points, and whether mine is at the right point. The lower the price point, the greater the chance of being disappointed with the product. (In general at least, price and value may be interlinked but they’re not interchangeable). The higher the price point the less likely to be dissapointed, but the greater the chance that another product may have been equally good for less. The greater the risk of over paying. There’s a trade off between paying as little as possible, and being happy with one’s purchases.

dissapointed missingout
Probability of being disappointed as a function of price point, and probability of missing out on a deal as a function of price point.

Putting the two charts together to get an idea of overall happiness.
Minimizing the probability of being disappointed means maximizing the probability of over spending and vise versa. The trick is finding the sweet spot where the both probabilities are in the acceptable range for your sensibilities.

I could lower my price point, but it means more back and forth. More returning items I’m really not happy with. More accepting items I’m marginally happy with. I initially assumed my batting average wasn’t that great. I’m starting to think my price point might be just about right after all. I certainly wouldn’t go lower. I don’t have as much patience as I once did, or time, to handle more returns and more calls to customer service. But I’m happy I’m not spending more too. A penny saved, and all.

This weekend we purchased a new set of patio chairs. I spent a bit more than I typically do. Here’s hoping I don’t regret it.


I don’t regret it!

March 7, 2016

Practically Synonyms

This morning I noticed something curious when I entered Alexis’ nursery. Upon seeing me she extended her arms to be picked up and called out “Owie!” She hadn’t been crying, or even calling out before I went into her room. She was just standing in her crib, waiting. I was sure she wasn’t hurt. I must have misheard.

We were in a bit of a rush this morning. Well, every morning lately seems a bit rushed. Domingo was downstairs with the girls getting their shoes on while I was upstairs gathering more spare clothes for the girls’ cubbies at schools. When I came down stairs she saw me and again called out with her arms extended, “Owie! Owie!” This time Domingo noticed it too, and could attest both to the spoken word and the lack of injury.

Actually, we’re pretty sure this isn’t the first time she called me owie, but with “owie” being phonetically close to “mommy” we were never sure. As always with kids and first words there’s a lot of guessing what was actually said. It takes a few iterations before words become clear.

Now that we think about it, “owie” is a pretty good substitute word for “mommy.” It’s nearly guaranteed to get Mommy’s attention, more so than “mommy” ironically, since it indicates a level of distress. We think she picked it up from Nicole. Three year olds are pretty excellent at detecting owies as well as inventing them. She probably noticed Nicole using it to get attention and is mimicking her favorite big sister.

So now we’re up to “ball”, “here”, “more”, “bucket”, “shoe”, “daddy”, “mommy”, “hi”, “bye” & “owie” in total words, and “mommy”, “daddy” and “owie” when referencing me.

Despite being a shorter month, Februrary’s numbers are up slightly. I earned $22.34 for a daily average of 77 cents. I’m slowly climbing towards that dollar a day goal. I also had almost 800 additional new users over January, thanks in part to being mentioned in a baby center forum post. (Much thanks for the love!)

This month I had only one new app, the Debt Pile Annihilator. The Debt pile annihilator compares different debt repayment strategies, such as the the snowball strategy of paying off smallest loans first, or the more optimal highest interest rate first.

Instead of focusing on new apps like I initially intended, I focused on site improvements.

There’s always a balance to be struck between writing code quickly, and writing it elegantly. I don’t get paid if I don’t publish the app. Therefore, the first time I write a new app in a new category, I focus more on getting it done quickly. Correctly, but quickly. Once I have more than one app in a given category it’s time to really focus on modularizing the code so I fix only need to fix each bug once. This month that meant both the image/photography apps and the financial apps.

While working on the financial apps I decided to make them more flexible, and allow for additional types of loans and debts, such as interest only loans, deferred interest department store cards, and changing rate loans. That ended up being a bit more time consuming than I initially estimated, partially because I had no idea how truly complex the financial industry can be. That’s one of the things I like about this self-employment journey. I am learning so much.

The other potential big issue I’ve been trying to get a handle of is the use of ad blockers. The numbers are still bouncing around a bit, but right now it looks like about 10% of my web traffic using a blocker, but I had one day as high as 30%. Ten percent is acceptable, 30% is most definitely not. For now I’m simply asking those using adblockers to consider turning them off when visiting my site. Please don’t pick on the little guy! $20/mo is barely enough to cover the costs (domain, hosting, bandwidth) associated with serving these apps to you. The little bits I get from adviews help, even if one never clicks on an ad. While one person’s ad blocker won’t make a difference, taken together it can be a big deal.

It’s been a busy month, but most of the changes have been internal and not noticeable. I do have a couple new apps almost ready to go out. Hopefully march will be the month of many noticeable changes.

February 25, 2016

My Ad Policy

There’s been a bit of an arms race between ad blocking users, content providers and advertisers. As ad blockers rise in popularity, revenue goes down for content providers. Content providers tend to resort to more obtrusive ads, hoping to garner more clicks from those users not utilizing blockers. They may put clickable content (like a next button) too close to the ad so misclicks turn to ad clicks. Or they do growing interstitial ads that block the content until the user is forced to interact with the ad. From the advertisers prospective, misclicks are worse than no clicks. They cost the advertiser money for little gain as the user wasn’t actually interested in the ad in the first place. As a result, the advertiser offers lower rates, reducing the content provider’s revenue further. The more annoying the ads, the more likely users are to turn to ad blockers in the first place. Things have gotten out of hand, and no one wins in this scenarios. The user has a terrible experience. The advertiser gets the wrong king of visitors. While the content provider may make money initially, over time he or she makes less and less as he or she drives more people to use adblockers.

I am not a fan of adblockers, but I recognize why some users are. In my world view, it’s the content owner’s responsibility to ensure a reasonable user experience, and that includes the ads the user sees. I intend to do my part to stay out of the arms race, even if that means less revenue.

With that in mind I’ve been thinking about my own ad policy:

No Misclicks and no Trick Clicks

I used to love the game Robot Unicorn Attack on my phone. I played it daily. Nicki loved it too, referring to it as “the horsie game.”

Aside: A great way for a scrupleless developer to make a quick buck? Write a ad supported toddler game app with ads on the screen the toddler sees. If there’s a button the’ll find it and click on it. You don’t even need to be sneaky with ad placement.

When you inevitably died the game gave you the option of using a fairy tear to continue your life. You clicked “yes” to continue, “no” to move on to the next life. At some point they moved the “no” button to the bottom of the screen and put a “watch a 30 second ad clip instead” option in it’s place. After one too many misclicks I uninstalled the game from my phone and quit cold turkey. Since my terms of service disallow adblockers, I certainly can’t fault anyone from quitting me cold turkey if I tried something similar!

As a content provider I promise to make all advertisements obvious, and will design my apps in such a way that any ad click is more than likely an intentional ad click.

Limited Ads

In order to test my ad blocking detection script, I needed to download an install an adblocker. By default I turned it off, but every time my browser restarted the ad blocker also restarted. This particular ad blocker would show how many ads it blocked on each page. The record was 49 on a news website. Forty-nine. I had no idea.

Of course there’s a big difference between news websites and my apps. Lengthy articles have more space for ads. I try and keep my apps contained within a single screen, so I couldn’t fit that many ads in, evening ignoring my first pledge.

Right now I’m limiting myself to just one or two banner ads.

Possible Revenue Alternatives

A common defense of adblocking users is that they weren’t going to click on ads anyway, so what difference does it make? This argument is based on the inaccurate assumption that adviews don’t earn revenue. They do! To be fair it’s rather small.

Some websites allow for users to donate money instead of viewing ads. Others allow other currency in lue of ads; such as a share of social media or subscribing. When I get larger I may consider the former option. If you want to speed up the process, you can consider Google Contributor. You pay a small monthly fee to contributor. Contributor blocks some of the google adsense ads you would have seen, and uses your monthly fee to pay the content provider as though you had seen the ad.

February 24, 2016

My Niche

As a lowly grad student, toiling away in my single core computer I was often intimidated knowing that when I submitted a paper to conferences, it would be put up against those from the likes of Microsoft Research, Google and Yahoo! Labs. How could I ever think to compete against all those collective years of experience and seemingly endless computer resources? My adviser’s advice was not to go up against their strength, but to find my own. Big corporations that answer to share holders and consumers are not as free to tackle every idea. Her advice was to find something I could differentiate myself with, and focus on that. Find my niche.

It’s good advice that’s as applicable to starting one’s own business as it is to research.

I have been intimidated from doing the financial apps for many of the same reasons. Need a mortgage? Type in “Mortgage Calculator” (or even just “Mortgage Calc”) into Google and you get one on the search results page. How could I ever compete against Quicken and Mint?

Find my niche.

There’s a reason most mortgage and loan calculators are designed to only handle fixed rates, besides just simpler math. I imagine most people who are calculating how much a mortgage will cost them over the long haul are at least a little risk adverse, and those who are at least a little risk adverse are probably more likely to prefer fixed rates. But as any good financial person knows, stability can be more costly than risk and there are times that an adjustable rate might make more financial sense. I can either go after a small percentage of a large market, or a large percentage of a small market. I choose the latter.

So here are the ways I’m trying to differentiate myself from everyone else:

Smart Input Parsing

I’ve always found it mildly irritating when online forms choke on input that isn’t exactly as expected. Ever have to re-fill the whole form because you forgot to put dashes in a telephone number? Or because you only filled out two digits of your birth year instead of all four? It should be obvious to the computer what you meant. If a human can guess what you likely meant, I want my apps to as well.

One of the recent ways I incorporated this philosophy is with the interest rate on my loan form. Whether you type in 3%, 3, or 0.03, the form assumes you meant a 3% interest rate. That’s because a 300% or 3 hundredths of a percent are both rather unlikely interest rats. Possible, (I’ve seen some pretty predatory payday loan rates) but unlikely. It’s also unlikely that someone typing ‘3’ meant ‘300%’ given the way we humans tend to express percents.

More than Just a Formula

I love math. When I first started thinking about creating a webapp business I wanted to focus my efforts on bringing math to problems where math was traditionally not applied, such as the Labor Prediction Calculator. I’m especially proud of the math that went into the Image Color Palette, a mixture of machine learning, color theory and vector space math.

If all my app is is a implementation of formula, especially a standard well-known formula, there’s nothing to separate me from anyone else. Users have no reason to choose my app over the competition.

I especially like it when I can add a human touch to it. Sadly, not everyone shares my love of numbers. Numbers can even be a bit off putting. I like the way my Miscarriage Odds Reassurer tries to put abstract probabilities into perspective.

Data, Data and more Data

Data is definitely my thing, and one of my strengths that’s rare to come by. The more data I’m able to incorporate into my apps, and distill into meaningful results, the more I will differentiate myself from all the others out there.

Lately the data I’ve been munging has been my web traffic patterns. I hope to create some more data driven apps in the near future.

Now I just need to turn these disjoint niches into a single philosophy I can incorporate into my business. A task for tomorrow.

February 19, 2016

Anti Ad Blocker

As I try to make my way in the world as a ad supported content provider, ad blockers are a bit of a thorn in my side. Recently I’ve been pondering the ethics of ad blockers with a few friends. I’ve noticed that those people firmly in the “pro” ad blocker camp tend to view websites more as public property, such as a town library. In their view, as ‘net citizens they are entitled to the content of each webpage, should they so choose to consume it. They’ll quickly point out that ads are not just annoying, but can run a muck, crashing browsers and, in rare instances, install viruses on the web surfer’s computer. As they see it, sometimes blocking ads is necessary tool for navigating the web.

I tend to view websites more as private property, closer to a book store rather than a public library. Sure, you’re often free to browse the content at your leisure in your local Barns and Noble, but that’s more of a store policy than a requirement. After all, there’s no rule that says content providers cannot use pay walls, or restrict content by requiring registration.

The book store owner typically encourages the leisurely browsing, by providing comfy chairs and sometimes offering a coffee shop or nice music. The hope is that the additional browsing time turns into collateral purchases. There’s no requirement for patrons to purchase, of course, and not all customers do. Enough customers do buy extra books to make it worth the store owner’s while. The display advertisement model is rather similar. Content providers attempt to provide enough interesting content to keep web surfers on their websites, in hopes for a few advertisement clicks.

In the-website-as-book-store view, it’s the responsibility of the content provider to ensure his or her ads are not overly burdensome. You might not like the music playing over the loud speakers in a traditional brick and mortar store. Perhaps it’s just the lyrics you object to, but it’s playing at obnoxiously loud decibels. You still wouldn’t take it upon yourself to rip out the speakers. No jury would accept “potential hearing loss” as justification when you’re free to leave the store at any time. If your experience at the store was unpleasant you may complain, and you’d probably leave. That’s what I do. When ads get too annoying, I leave the website.

It’s not a perfect analogy – (ad blockers are not destruction of another’s physical property) – but it’s the analogy I got.

Many of my favorite techie news sources have been reporting ad blocker use has been on the rise in recent months. As someone trying to make a business with ad supported content, that’s a scary proposition. I decided I couldn’t live in the dark anymore, not knowing how many of my users are utilizing an ad blocker. In a few days I’ll have a good idea whether and how big a problem ad blockers are on my site.

Older Posts »