I’ve never been a great salesperson. For a long time that was because I didn’t know my product. One memorable example of that happened when I was selling used cars. I was on a test drive with a couple and the man asked if the moonroof had an auto-open feature. I didn’t know and said that it did. And then he tried it. And I looked like a fool and my credibility was shot. That was embarrassing.

Now I have a very different problem – I’m afraid to sell things that I make. I don’t know if that sounds strange. I’m afraid to sell them for two reasons.

First, I know they aren’t perfect. I know them so intimately that I know all of their flaws and limitations. I know that one of my apps is deeply flawed because it is an alarm clock app that you have to leave open all night long. I haven’t been able to look past that flaw to sell it.

Second, I’m afraid. I’m afraid of someone not being happy with what I created and being angry at me for selling it to them. I’m afraid of the responsibility of taking someone’s money and the obligation that I feel that creates. I’m afraid of trying to sell something that I’ve put my heart into and the world not caring.

It’s much easier to hide behind the idea that I’m an artist and not everyone will get what I make. And to tell myself that the reason the things I create aren’t catching on is because I’m not even trying to sell them.

I’m terrified of the idea but I’m ready to start putting that hiding behind me. I make some damn good things that I’m proud of. It’s time for me to let the world know about them.

I feel like I am facing two problems with building an audience to share the things I create. Either what I make isn’t good enough for anyone to care or I haven’t earned the audience that wants to hear about my creations.

They both have the same solution, keep making things. Keep getting better. Keep making things. Keep getting found.

Here’s my rule about self promotion: I can only do it when I’ve made something new for my audience that I think they will enjoy or when I’m meeting a new audience that I think will enjoy things I’ve made.

Anything else is spam.

I liken it to whispering in a crowded, noisy room – I’m picturing a dinner party from one of the Batman movies right now. Most people will not hear you or ignore you but the ones that care about what you have to say will listen harder and pay more attention.

The scary thing about this is that it’s possible that no one cares right now. In my mind, the worst thing you can do in that case is repeatedly pick up the bullhorn and interrupt everyone’s good time.

We have so much control over our world today and it is tempting to make it exactly how we want it. To order the food we like without the mushrooms we know we don’t like. To stay inside in our nice comfortable homes. To think about our nice comfortable world views. Taking in what we want.

I’d like to make the case for allowing serendipitous events to unfold. Order something the way it comes, or add something to it you’ve never tried. Get outside in the cold and feel it to your bones. Read things that you don’t agree with or talk with people who have different points of view.

Doing these things will both make you grow as an individual and appreciate the things you like even more. More importantly, they open you up to possibilities you can’t imagine in your perfectly controlled world.

And it doesn’t make you right. This world is too big for you to know all the answers. It is too complicated for you to understand all the factors involved. But this world has plenty of room for both your opinion and mine. I’ll take some time to try to understand yours and I hope you’ll do the same with mine.

In many industries the biggest competitor is non-consumption. By that, I mean that people are not buying your product or service from anyone. For example, a household that does not buy any milk is a non-consumption household for a milk company. To combat non-consumption, milk companies team up in dairy industry associations and pay for advertising about the benefits of milk. This advertising is meant to convert non-milk-drinkers which increases the size of the industry. Every milk company benefits when their industry is larger.

I believe that the idea of forming a team with other companies in your industry – your competition – is powerful. I don’t mean that you should collude on pricing or do anything unethical. But work together to create awareness around the work you do. Work together to show people why non-consumption is bad for them in the long run.

When your competitors succeed your market is moved forward. Every news article highlighting the benefits of a project you did helps your competitors. Work together to create more opportunities for everyone.

On the second episode of The David Brunow Podcast I talked about difficulties I’m having with my Dharma Talks app. I’d like to follow up that discussion with some examples that would be hard to share over audio only.

The problem is that I’m having trouble getting the proper information from the Mission Dharma website to display in the app. On the surface, this seems like a simple issue of taking the information that’s on the website, figuring out which parts of it mean what, and then storing it in the right places in the app. For example, if I can find an anchor tag, represented in HTML as

<a href="/talks/1">March 21, 2015: Talk Title, Talk Speaker</a>

then I can take the text inside that tag as the raw Talk data. In this example, I can find the date by looking for the colon and taking everything before that colon and storing it as the date. I can find the title of the Talk by taking everything after the colon, looking for a comma, and then storing everything after the colon and before the comma as the title of the Talk. The rest of the text inside the tag is the speaker for that Talk. The URL to download the Talk is the easiest part because it is the full contents of the href tag.

This seems pretty easy, problem solved! But not really. This is where the fragility of HTML scraping becomes a problem. This is why most people would recommend against HTML scraping and I would definitely agree with those people if there is any other, better way to solve the problem. Or if the system you are building needs to be 100% reliable. But most systems don’t and I believe that Dharma Talks fits into that category.

I’ll give an example of the fragility. Here is an anchor tag that I ran into while I was initially developing Dharma Talks:

<a href="/talks/1">March 21, 2015, Talk Title, Talk Speaker</a>

Do you see the difference? It’s subtle, but that comma after the year will completely ruin the parsing I described before. But while making the first version of Dharma Talks I’d seen this pattern so I adjusted my parsing for it. First I look for a colon, and if there is one then I do the parsing I described before. If there isn’t a colon then I find the second comma in the text inside the anchor tag and treat it the same as I did the colon earlier.

This worked for over a year other than a couple of minor issues where the person that maintains Mission Dharma’s website changed the text inside the anchor tag after the app had parsed it, resulting in two of the exact same episode. At that time I hadn’t wanted to limit the parsing to any sort of uniqueness because I wanted it to be able to parse things as generally as possible – I feared any restrictions would make it more fragile.

At this time the app only relied upon the Mission Dharma website being available for it to get new episodes. All the parsing was done inside the app and I had no control over what episodes were showing on someone’s phone. I couldn’t remove a duplicate episode that had had its title changed. I couldn’t fix a parsing error if the person maintaining Mission Dharma’s website didn’t follow one of the two patterns I described above. I liked the simplicity of only needing the app and the website, but I hated how fragile the whole thing was. I hated that my name was on something that looked poorly made. The line between simple and shoddy is thin.

Life got in the way and I didn’t work on the app for a year. When I did get time I noticed that I had taken a shortcut in building the app and I had hard-coded the years to be parsed. By hard-coding, I mean that I had told the app to parse 2010, 2011, 2012, 2013, and 2014. You can probably see the problem there. Hard-coding is bad and I know that, but I’m guessing I saw that as a very short term solution so I let it slide. That’s a good lesson for the future.

So I fixed the hard-coding so it looks at the current year and parses starting at that year all the way back to 2010 which should make that part of the app future-proof. I submitted the update to Apple, it was approved, and things worked. For about a week.

Up above when I was describing the ways the parsing could break I only talked about the text inside the anchor tag. That’s the nice way things can break. The bad way is if there is no anchor tag. For example, a simple typo could make this:

<a href="/talks/1"March 21, 2015: Talk Title, Talk Speaker</a>

Do you see the problem? The app would see it instantly and the parsing would break immediately. The opening anchor tag doesn’t have its closing ‘>’ so it isn’t truly an anchor tag. This is what happened about a week after I released the new version of the app. New Talks stopped being added to the app.

I’d been thinking about having an application on my server that does the parsing and stores it in a database for a while. That would give me the control I needed to make sure that the Talks were loaded in the app correctly. Since the database was on my server I could change any entries that got parsed incorrectly. If things were too broken on the Mission Dharma site I could manually add Talks to the database. I could finally guarantee uniqueness for each Talk because I had total control of the data in the database. Ultimately, it meant that I could make sure that the information for each Talk was correct.

Why didn’t I do this a year ago when I first released the app? A few reasons. I wanted the app to be able to live on without me and without my server. I wanted the components to be simple. And I didn’t have experience with any programming language that I could run on my server. All my work had been on Windows servers and I had a Linux server. I still think these are valid reasons to make the decision I made, but if I had it to do over again I would have done it differently. I would have implemented the solution that I just did – a server application that contacts the Mission Dharma website for Talks to parse and an iOS app that gets the Talk information from that server application.

Fear is powerful. My greatest fears are the unknowns and the greatest unknown for me is the future. It is so easy to let that fear take over and prepare a fear based reaction to things that might never happen. When I do this I throw myself into a future that I don’t have all the tools to handle. For example, if I try right now to live in my future that will happen in a couple of weeks where I’m trying to figure out how to handle taxes when I’m self employed and have almost no income (which I have no clue about right now) then I won’t have the tools of any research I can do on the topic or professional advice I can seek. I’m setting myself up for failure.

Here’s a question I came up with the other day that stuck with me, “Why would you want to live in that future?” Why do I want to put myself in a position where I can only fail like I described above? Or why would I want to imagine a series of worst case scenarios three steps into the future when I have no indication that step one won’t go smoothly?

Planning definitely has its place but it can quickly turn into living in a fear based future. Yes, if you have all the information you need (or all you’re going to get even if you need more) then go ahead and plan. I suggest you sit down and make a task of it, rather than letting it take over your thoughts while your doing some other mindless task like driving.

But if you are still waiting for information then let it go. Put it on your calendar or task list for later if that helps you let it go. If I’ve just submitted an iPhone app for review by Apple I don’t need to plan for the possibility of it getting rejected. I’ll handle that when it happens. Why would I want to live in that imaginary future?

We are great at putting the different pieces of our lives together into timelines that become stories we tell about ourselves. Stories like “I’m not a morning person, I never have been” or “Even as a kid I didn’t like to run and play so I’m just not meant for exercise.” These stories can be a great way to share information about yourself and a way to form bonds with others that have similar stories (more elaborate stories than my examples above.) But these stories are dangerous.

The stories you tell yourself reinforce your actions each time you tell them. They create an attachment between you and a way of being. They don’t allow you to be anyone other than the person in the story.

These stories are also loosely based in fact. We have a way of only remembering some of the data about our lives because our memories are not perfect. We remember most days of our childhood sitting inside reading books but we may completely forget about those summer vacations when we were able to run free in nature and loved it.

Over the past fifteen years I have had 15 different addresses in three states and two countries. I’ve moved around a lot. That frequency of moving changes my mindset about things and makes everything seem temporary. No need to have a lot of things because that’s just more things to move.

It has worn on me though. It is tough to maintain friendships, to find a place you belong, and to work to improve your home when you know that it will all be short lived. I’ve built up a form of detachment from everything over the years.

I want to change that now. I’ve found a home in Denton that I love and a community that I want to be a part of. I’m ready to put down my roots and build something lasting.