CGContextSetStrokeColor

I discovered the weirdest behavior *ever* today.

	#define DRAW_COLOR [UIColor redColor]
CGContextSetStrokeColor(context, CGColorGetComponents([DRAW_COLOR CGColor]));

For some bizarre reason, this line of code works fine as long as you are drawing into a “screen” context (e.g. one set up by drawRect).

If you are drawing to a bitmap context (e.g. UIGraphicsBeginImageContext), it will for some random reason set the stroke color to transparent (WTF?)

The correct way (and as far as I can tell, nearly equivalent) to get drawing behavior to work for both types of contexts is this:

	CGContextSetStrokeColorWithColor(context, [DRAW_COLOR CGColor]);

The only conclusion that I can come to is that somehow the colorspace for bitmap contexts and screen contexts are slightly different. This is because the buggy line requires the device to be using an rgba colorspace, whereas I don’t think the second line depends on the colorspace or colorcomponents of the color.

On the enforceability of laws

There’s much ado today about the pain gun which HN thinks will be turned around and used on civilians. They’re probably right. But in the long run, that doesn’t matter.

You see, pretty much every piece of technology ever invented started out looking pretty evil. Computers were a way to rapidly calculate bomb trajectories. The internet was a secret government network designed to coordinate military attacks. GPS was invented to track ground and air targets.

These things don’t seem quite as evil today, do they? Computers and the internet are probably the most democratically-empowering invention ever, and we’re in the middle of a location-aware GPS renaissance that’s certainly much less hostile than an air strike.

The nature of technology is that it makes things easier to do. The idea in the DoD’s mind is to only make things slightly easier to do, such that only organizations as large as the government can do them. However, progress doesn’t stop because a large government wants it to. Smaller governments develop the technology, and then larger corporations develop technology, until finally, you and I are holding internet-connected computers with GPS in our hands.

This is the reason why the Orwellian nightmare didn’t happen: cameras became cheap enough not only for the government to buy them to spy on us, but for you and I to buy cameras to spy on them. State governments have recently figured this out, but there’s not an awful lot they can do about it.

The first casualty in the widespread availability of technology has been the music and movie industries. Until quite recently, copyright infringement that was good enough to actually pass as the original required complicated equipment–on the order of the cost to make the content in the first place. This complicated equipment was difficult to hide, was easily found when executing a search warrant, and it was expensive. Pirated copies had to be sold (instead of given away) to cover the expense.

Of course, this is no longer the case today. The device you are reading this on is more than powerful enough to copy the very highest-quality audio or video file. How far we have come from military defense networks and rocket trajectory calculators!

Until recently, it was easy to pirate content, but it was difficult to profit from it. Now it is even profitable. In spite of perhaps every country out for its blood, the Pirate Bay sails on, advertisers and all, and seems to be all but unstoppable.

This is the first and the best example, because it is almost fully played out. The pattern is this: technology is birthed to aid the elite. At some point it starts to chip away at the elite’s monopoly. It starts rendering existing laws widely unenforceable. And then it reaches a point where subverting the law is an enormously profitable market.

Let’s look at another example: encryption. Until about the 1970s, if you wanted to send a secret message you needed to employ a small army of mathematicians. If you wanted to keep your message secret from a world power, you were flat out of luck unless you happened to be the US government.

With the rise of formal private key cryptography, it became feasible, technically, to render search warrants unenforceable. Nobody was terribly concerned except the spooks at the NSA, who began feverishly trying to come up with better and cooler ways of cryptanalysis to keep ahead of the curve. They were successful for some time, and still are in a very technical sense. We know today that the NSA actually used some complex math that hadn’t been publicly discovered yet to “fix” DES to be stronger against attacks. However, as strong encryption became easier and easier to implement, it started to work against the NSA’s interests.

More and more politicians began to view strong encryption as a serious problem, and laws were put in place to ban its export outside the US. You actually had to have an export license in order to let your Munich office use your internally-developed DES software. This law remained on the books until 1996, at which point PGP and other open-source encryption software had rendered it totally unenforceable. Even in the PGP era, there were complex legal hoops that had to be jumped through–instead of digital distribution, PGP went through the ridiculous step of printing 6000 pages of source code, exporting them from the US on paper, and scanning and OCRing them, using the “scanned version” for all the international mirrors, where they were downloaded over the internet just like every other piece of software.

Of course, today, you can get military-grade encryption simply by typing an “s” after the “http” in the URL bar, and it would take the NSA a decade and a billion dollars to read your bank password. There is a whole cottage industry dedicated to very complex encryption software, and in an incredibly ironic twist, encryption is still being hailed as the holy grail to fix the failing movie and music industry.

The pattern isn’t quite as clearly marked, particularly because there are a few channels where encryption has not quite taken hold. Many voice communications, for instance, are not regularly encrypted in a secure manner, although new VoIP networks (see Skype) are often fully encrypted. This is why the NSA is so serious about their wiretap program–they know that the window of unencrypted voice communication is rapidly closing.

One potentially serious-sounding loophole is that in many countries (including the US) it is theoretically or actually possible to throw you in jail for refusing to decrypt some kinds of data. In response to this, there are now mathematically rigorous ways of encrypting data in such a way that it is impossible to prove that it is encrypted, and so by extension it is impossible to command you to decrypt it. And there are equally rigorous ways to encrypt several different data blocks in the same cyphertext, meaning you could reveal one of them on command, leaving your adversary no way to prove that there is a second layer. So this has basically rendered the “command decrypt” legislation unenforceable again.

So while this battle is playing out, and with the pattern firmly established, we turn to the future. What will be the next casualty of technology?

It seems to me that the next to go might be controlled money. In almost all civilized country, money serves as a very tightly regulated commodity, one subject to hundreds of thousands of laws, from the IRS code to business regulation to case law. Now some of you are thinking “But banking regulation keeps us safe–surely you are not arguing against it!” Technology did not care if we were morally in favor of copyright law, and it didn’t care if we were morally in favor of wiretapping laws. It simply gave everyday people a viable means to insulate themselves from both. I think the same thing is about to happen with money.

I can envision a future world where the IRS is simply incapable of determining how much money you made (and unable to tax you for it), where the private investigators are unable to investigate your credit card purchases, and where the governments of the world are unable to print more just to get themselves out of trouble. The flipside of deregulation is that consumer protections will also disappear–you cannot enforce bankruptcy protection if there was never a traceable debt to begin with.

Of course, this will cause every civilized government to fail, because governments depend on tax dollars. Do not fool yourself into thinking that this is a reason that it cannot happen–piracy will probably kill the record labels, but that fact hasn’t stopped it.

The easiest way to convince you that this is going to happen is to say “you can watch it happening already”. How many products do you buy from Amazon sales-tax-free? You are supposed to write the state a check for that. Already the entire sales chain that was used for well over a century to get mass produced goods in people’s homes has been virtually undermined. If it is easier to ship your cleaning sponges from a warehouse in New Jersey than it is to walk down to your local Wal-Mart, how long will it be before a warehouse outside of US jurisdiction is cheaper than both?

You also see anonymous banking as a very popular research topic. Right now there are mostly papers about it, and a few silly-looking implementations. It’s like cryptography in the 70s. If back then somebody said that the research was going to lead to subverting a dozen industries and severely curtailing the powers of the US government, you would be laughed at. Today, the cryptography battle is almost won.

But perhaps most convincingly there is a huge need to make money untraceable. Some of this probably comes from the highest levels of the US government as a way to move spies’ funds around without letting on to other governments. China has a huge incentive to prevent the US from trying to print its way out of a depression. But businesses and even normal people also want to reduce their tax liability (and increase their privacy safeguards). So you have the same demand slope for untraceable money as for digital copying and strong cryptography.

And so when I see articles about new government tech like the pain gun, and I see very smart people getting very upset, it strikes me a bit odd. The prevailing wisdom seems to be that we live in an oppressive legal world that desperately needs a reboot, and Orwell is lurking right around the corner. Perhaps this is true, but it is only true on paper. In practice, technology seems to be giving us back our rights even as the law fails to protect them.

And technology bestows rights in a way which is true and real far beyond the law. The law can be changed, but you cannot undiscover AES. The law gives you rights as a fiction, but technology gives you rights as a fact.

Reverse Engineering

This is, more or less, how I taught myself x86 assembly. By reverse-engineering Skype.

http://www.secdev.org/conf/skype_BHEU06.pdf

It wasn’t quite that difficult back in the 90s. And these guys got way further than I ever did. But a lot of the binary protection (polymorphic checksumming, dynamic calling, a really clever packer, RSA verification, etc) is close or identical to what I was playing with.

Play with that stuff long enough and, well, you’ll get really good at asm. A lot of really clever ideas of mine came out of things I saw in their binary.

I tracked down one of the exe packers I helped write way back when, and turns out that malware protected with it has been detected by McAfee over half a million times now. So that’s kinda cool… even if it’s a little scary.

But sort of the holy grail of reversing right now is Kaspersky. Those guys are hardcore. Their engine can pick apart a lot of packers these days, even stuff it’s never seen before. I’ve heard stories of people who have written decent custom packers that get detected automatically. They’ve got a static analysis tool that can follow not just off-by-one byte alignment tricks or decompress LZW blocks automatically, but it can simulate execution in a sandboxed environment and use the binary’s own decryption routines to decrypt it, even on binaries that only decrypt a few pieces at a time. It’s incredibly hardcore.

Tracking an outbound link as a goal with Google Analytics

As part of some SEO I’ve been doing, I’ve been wanting to track an outbound link (specifically, to the app store) as a goal in Google Analytics.

The roundabout explanation is that the Google Documentation for tracking outbound links is wrong, because they want you to track it as an event (and events cannot be goals).  Here’s the right way:

//<!--Normal GA code in header-->
    function recordLink(link,newname)
  {
    try {
          var pageTracker = _gat._getTracker('UA-8841539-3');
      pageTracker._trackPageview(newname);
      setTimeout('document.location ="' + link.href + '"',100)
    } catch(err){window.alert(err)}
  }
</script>

Then just format your links like this:

<a href="http://real-url.com" onClick="recordLink(this,'/fake/goal/url');return false;">URL text</a>

This will redirect the user to real-url.com, and log it to GA as http://currentdomain.com/fake/goal/url enabling you to treat it as a goal.

Timely landing page

Just for fun, I’ve thrown together a quick&dirty landing site for Timely from some templates.  I’m interested in seeing whether having a high-quality landing page causes an uptick in sales as well as whether AdWords is profitable for a decent niche iPhone app.  Will report back with results.

In other news, my consulting landing page has been a huge success–I’ve landed close to $15k in clients for a total AdWords outlay of under $200.  I actually had to turn off AdWords months ago because I simply had way too many inquiries.  There’s room for improvement here–I want to implement a “inquiry” web form designed to turn away the revenue sharing people–but I think to do so myself at this precise moment would be penny-wise and pound-foolish.  Any students out there who want to do a small webapp contract job?

WWDC was really fantastic–I met some great people and have some great ideas for some new apps.  One is currently in private beta.  Don’t have a whole lot of time to pursue my own stuff with my contract work, but I’m doing what I can in the cracks.  Also, finding high-quality, reliable artists for iPhone stuff is a pain.

A modest proposal: Advertise a utilization ratio

You know what sucks?  US Broadband.  More specifically, caps seem to be getting more and more popular.

Now I have nothing against caps, in theory.  Charging by usage works fine for electricity and water.  The problem is:

  • Growth.  Data is one of those resources that you keep using more of.  GMail has solved this problem– it keeps giving you more space every day.  When are the caps renegotiated?  Maybe never.
  • Cost.  Data is often sold at profit margins of 1000%+.  I understand you need to make some money–just keep it realistic, k?

I have a modest proposal to solve this problem.  Alongside every advertisement of “up to” 10Mbps (which is a whole other post in itself), require advertisement of the percentage of time you can actually max out this connection.  For instance, if you have a 100GB monthly cap, you could actually sustain your 10Mbps for 8000 seconds before hitting the cap.  There are 2,592,000 seconds in a month, so your advertized utilization for this service (the amount of time you can actually use the advertised speeds) is 3/10ths of 1 percent, a.k.a. .3%.  That will strike fear into the heart of a consumer.  That will force them to start competing on caps.

Actual stats from real ISPs:

Cox Premier – “up to” 20Mbit, 3.8% utilization

AT&T 3G: “up to” 7.2Mbit, 0.08% utilization

Longview Cable: “up to” 10Mbit, 1.1% utilization

Letourneau University: (a little hard to calculate) 5Mbit measured speed, 1.1% utilization

HughesNet: “up to” 5Mbit, 0.09% utilization

The User Experience and App Review

So. It’s fashionable lately to whine about app review. I’ve done it. I’ve blogged about how evil it is.

Being at WWDC though, and hanging around Apple reps 24/7, I’ve started to drink the kool-aid. Now, I still think app review is often terribly unfair (I’ve had some absolutely awful rejections). But. I’m kinda starting to see Apple’s point. If you were looking for another article to enforce the mob mentality and get your juices flowing, you can stop reading now.

The User Experience

The reason app review exists is because it enhances the user experience. Jobs has said this. Apple PR has said this. Apple engineers have said this. Apple legal has said this. But I don’t think, in a very serious way, many developers have actually considered this statement on its face.

You see, from any other company, it would be a joke, or worse. On the level of “We’ve raised our prices to serve you better.” The sort of parroting that happens out of fear that it will be quoted in a class action lawsuit somewhere.

However, I’ve come to the conclusion after speaking with high levels of Apple insiders that Apple is indeed being deadly serious about user experience.

Part of the huge disconnect comes because I think most developers look down on mere users. In today’s world, the number of people who really want to use computers is pretty small. Real people want to browse web sites. They want to get e-mails. They don’t want to use a computer. They don’t want to have to learn the file metaphor. They don’t want to have to learn to use a mouse.

When developers talk about usability, we’re talking about GUI vs. commandline, or mac vs. linux. Nobody cares. The difference in usability is so minuscule for a normal person that it can hardly be measured: that is, everything sucks. It might be just a hair easier to use Apple Mail than Outlook. It’s certainly prettier to look at. But that’s the extent of the difference.

We’ve forgotten what it’s like to be frustrated by a mouse. We’ve forgotten what it’s like to not know what “IMAP” means. We’ve forgotten what it’s like to forget what we named that file or where we placed it. At this level of computer-uneducation, the sort of “prosumer” usability gains from Mac OS just don’t exist.

When developers see these people, we tell them to RTFM or to learn how to subscribe to the mailing list, or even things that (to us) are really trivial like drag this app to your Applications folder or control-click with that icon selected or “type it in spotlight.” All these require the parallel mental understanding of at least:

  1. A conceptual idea of what it is the user is doing (at least if he ever wants to do it again)
  2. Dexterity to perform some potentially challenging keyboard-and-mouse combos
  3. At least one jargon term they’ve never heard before, making them feel stupid
  4. The chance that, due to some weird hardware/software configuration issue, the right thing won’t happen, something bad will happen, or viruses from space will infect their computer.

Contrast this with iPhone OS, where the steps to do just about anything are:

  1. Touch stuff
  2. Nothing bad ever happens

As developers, we underestimate the order of magnitude of this distinction. We learn a new programming language once a week. Pro users learn a new version of Final Cut once a year. Your mom might learn how to send e-mail once, if you’re lucky.

And so, while we’ve laughed at Apple’s claim that Google Voice was rejected for a user experience issue, rather than an anticompetitive issue, consider the assertion on its face: mom installs the GV app. Maybe she even makes calls with it, some of the time. But she wonders why it only works occasionally, having never even entertained the idea of a dialing “program” before, and using GV over the phone’s native dialer is far from her mind. She gets confused–she has these notifications for voicemail, but they’re not in the usual voicemail place? She sends SMSes, but some of them aren’t recorded in GV? Maybe that will get fixed when iOS4 introduces support for “multitasking.”

The real place to have GV support is in the OS itself–perhaps refusing to do so is anticompetitive. But Apple’s statement is certainly true: a GV app is a serious usability issue for normal people.

Developers start with the assumption that the user is wrong. The user needs to be re-educated. Don’t delete your mail, archive it. Don’t power off your computer by pulling the plug. Use “documents” for documents, don’t put your downloads in there. Stop clicking “allow” on all those prompts. Don’t use IE, use <insert-browser>.

Apple is starting with the assumption that the developer is wrong. Developers write software that is way too hard for users to use. Developers need to throw away old metaphors like “save” and “load” and make things Just Work (TM). And if it can’t Just Work then don’t even do it in the first place.

App Review = $$$

I read an article the other day about a person who died because of a third-party dialer on Android.  Can you even imagine if an article like that was written about the iPhone?  I mean it’s obviously not Google’s fault.  But in the mind of your mom who just watched a scary Fox News piece on it… it kinda is.  Now she’s too scared to buy apps anymore.  Good thing she has an iPhone, were nothing bad can ever happen.

A free app market is kinda like terrorism.  Not many people really get hurt, but due to psychology it’s way scarier than the mundane things we really should be worried about.  Especially in the minds of people who don’t really understand technology.

So if there was, say, just a single app in the store that accidentally deleted all your data–how many newspaper articles would be written about it?  How many people would swear off buying apps?  By how much would the app market shrink?  How much would it cost you personally, competent app developer who doesn’t delete anybody’s data?

If one app deletes a customer’s contact list, that anger will be directed at Apple. If one app manages to hit 100% CPU for an hour and drain the user’s battery, that anger will be directed at Apple. If one app gets a kid busted for looking at porn, that anger will be directed at Apple. Developers in theory know better than to direct that anger at Apple–yet in the same breath we blame MS for creating a shoddy architecture that allows malware to thrive.

Already, newspapers don’t need any excuse to blame technology for today’s ills. Any day now, Australia or Jack Thompson or somebody’s ready to ban the Internet. Apple wants to pull itself entirely in the opposite direction–to be totally above reproach. They want those articles to be written about Android.

Fallacies

Due to psychology, consumers are irrationally afraid of bad apps.  But developers can be irrational too.  Here are a few amusing fallacies I’ve heard against the Apple market:

“There’s crap on the market already, so opening it up can’t make it any worse.” Why not?  Seriously, why not?  Just because it’s X bad now doesn’t mean that performing some action A won’t cause it to be 2X bad.

“Android has an open market and it’s doing fine.” If by “fine” you mean people aren’t buying anywhere near as many apps.  You have two things working against you on Android:  1) The people who buy Androids are more often than not developers, who either write their own software or are used to FOSS apps and are conditioned against paying money and 2) Any “real users” who pick up an Android device have the same barriers to buying apps that anyone not on an iPhone has:  (irrational) fear of bad things happening.  Paradoxically, an open market leads to reduced consumer trust and reduced consumer spending.

“Apple could use a community policing policy and that would work out fine.” It would work out fine until the first article about a third-party dialer causing somebody to die.  At that point, sales both of iPhones and of apps would drop off pretty sharply.

“Maybe with some consistent, clear rules, app review would be better.” No, it would be worse.  Right now, there’s (really) only one (secret) rule.  Don’t tell anyone I told you…

The One Rule

There’s only one rule on the app store.  Here it is:

Make your app a magical experience for ordinary people.

Things that are not a magical experience include:

  • Crashing
  • Not doing what the description says it does
  • Using private APIs (a.k.a. crashing on iOS5)
  • Being “slow”
  • Being hard to use
  • Having a sucky cross-platform GUI
  • Running in a VM, a.k.a. killing the user’s battery life
  • Being not roughly worth what you charge for it (“I Am Rich”)

Almost every rejection ever is a violation of The One Rule.

Conversely, if you follow the One Rule, you’ll find you can break a lot of the things in the SDK agreement.  Providing video recording on the iPhone 3G?  Turns out you can use private APIs.  Writing themes for your game?  Turns out you can use Lua.  The SDK agreement is just writing out a lot of things that are somewhat tangential to The One Rule, in a failed attempt to make app review seem objective.  Well, it’s not.  But that’s not necessarily bad.

Other Rejections

“My app got rejected for some other reason!”  Possibly.  The problem here is that Apple gets like 10,000 submissions a week or something ridiculous.  The best QA team in the world would have trouble with that number of submissions.  Mistakes are made.

Personally, I would love to be able to front, say, $99 or so per submission to get a serious app evaluation, maybe even with feedback from an Apple UI designer (currently I have to fly to WWDC to do this, and only once a year).  As a professional app developer, I would have zero problems with fronting some cash to get my app looked at if it meant an “express lane” better-quality review, with actual feedback.  At least I wouldn’t be in the same bin as the crap submissions.  I think Apple’s concern here is that it wouldn’t be “fair” to poor developers.  So keep the same “free” review lane, and add a premium lane.  Problem solved.

Conclusions

Apple might be a little misguided.  They might be treating developers poorly.  But they’re making a hell of a lot of money doing it.  Who are we to say that they’re doing it wrong?

This quote from a developer I think really sums up how a lot of developers feel:

If the end result has and continues to be shoddy then maybe there’s only one way to vote — with your feet.

My rebuttal is simply:

If everybody’s flocking to iPhone, doesn’t that mean the result is better than shoddy?

Backups

I keep trying to find a cloud service that will let me back up all my computers (3TB) for a reasonable price ($<500/yr) and let me manage it (no Backblaze, Mozy, etc.)

It continues to amaze me that nothing comes close to simply colocating a NAS.

And if you think about it, even colocating 3TB is horribly inefficient. Splitting a Backblaze Pod 20 ways would be a huge cost savings.

For the price of S3 (~$5500/yr, not even including bandwidth), I could colocate 7 RAIDed NASes ($700 NAS, 4-year life, $50/month colocation fee).

If me and a couple of friends agree to exchange NASes to save on colocation fees, I could have 31 NASes for the price of S3.

For maybe 50% the price of S3, I could colocate a Backblaze pod and have 67TB of data storage, 22x my need.

This has to be a problem that affects absolutely every computing professional (and even a lot of nonprofessionals–gamers, ad agencies, etc.). How can the only viable solution be roll-your-own?

5 Lessons Learned While Being a Freelance iPhone Developer

I’m doing freelancing full-time this summer.  Here’s a brief summary of what I’ve learned so far.


Lesson 0: Be good.

The key to being a successful freelancer is being good at what you do.  If you are bad, no amount of business wisdom will save you.  In the iPhone business, this means:

  • Write a half a dozen or so apps and get them through App Review.  Kind of obvious, really
  • Troll the official and unofficial developer community hangouts and follow what is going on, especially with regards to new “unwritten” app review guidelines and practices
  • Stay up-to-date with the latest beta SDK documentation so you know what’s coming
  • Spend a lot of time trying out iPhone apps
  • Spend a lot of time learning new SDKs and APIs

Lesson 1: Say “no” a lot

Apple wins by saying “no” to features.  It makes sense that in Apple’s market, you win by saying “no” to clients.  Some examples:

  • Client wants to add lots of really complicated features.  But you can solve 80% of the problem with a simple solution.  Simple solutions are easy to maintain and can always be extended later to recover that last 20%.  If the client can’t understand this, perhaps they shouldn’t be partnering with Apple, the king of simple.
  • Avoid visual overload.  This is a design aesthetic, but it’s key on Apple platforms.  Again, if the client doesn’t get it, what other parts of the HIG is the client going to fight you about?
  • Don’t negotiate on estimates.  I’ve had dozens of people who want me to come down 5%, 15%, or 50%.  If it was going to be less, I would have quoted less.  If the start of the relationship is a spat about $500, what does that say about the rest?

Lesson 2: Filter clients fast

If you are good (see Lesson 0), the amount of work available to you is effectively infinite.  Every person who has held an iPhone has an idea for an app and dreams of riches.  The number of people who can take that idea and convert it to a product, on-time and on-budget, however, is vanishingly small–perhaps 10,000 good developers at most.  So only take the best clients.

This concept is a lot more counterintuitive in real life than it is on paper.  You are looking somebody in the eye who is offering you $5k (for a $6k app), and turning them down, because you know that next week somebody will call you who is willing to pay full price.  It means turning down a stellar multi-app repeat client who pays on time but is extremely picky about the background color of unchangeable Apple UI controls because you know that right behind him is another stellar client who trusts your (and Apple’s) professional design judgment and will be a lot easier to work with.  Turning down a deal in-hand that’s “ok” but less than stellar simply goes against all intuition.

As soon as I have any idea at all what the project will be, I quote new clients a price with a margin of error of a couple of thousand dollars.  I do this before investing any work into writing an estimate or even hearing much about the project.  I need to weed out the “revenue sharing” people instantly, not after even one hour of my time.  There are simply too many of those guys out there.

Lesson 3: Don’t bid

There are a lot of bidding war sites out there like iPhoneAppQuotes.com and GetAppQuotes.com.  Leads from them aren’t worth the time it takes to write an estimate.  Here’s why:

  • Competent developers already have plenty of work.  So the number of competent developers on those sites are pretty small.  So if you’re a developer, you’re bidding against incompetent people.
  • Those incompetent people you’re bidding against?  They will quote a lot less than you.  It doesn’t take much money to not deliver a project.
  • All those clients (speaking from experience here) are either clueless or penny-pinchers.  The reason they’re putting projects up for bid is because they want it done (or not done, as evidenced by the responding developers) as cheaply as possible, even if it sucks.

Fast food is cheap.  It’s the same everywhere.  Any fool can be taught to make it.

I am not in the fast food business.  I am a chef.  I juggle Apple, clients, changing HIG guidelines, changing SDKs, tools, documentation… I design good layouts.  I think through small-screen UI design.  I pay attention to battery life.  I look at what the client wants and I see past the requirements and into the real business problem.  I anticipate what they really want, and I find the right balance between features and complexity.  Those are specialized skills.  They’re not cheap.  They’re not replicable.  They’re not scalable.  And if you give that speech to somebody who’s trying to order a burger at McD, you’re never going to get anywhere.

A lot of people are worried about lowball foreign developers “stealing” all the work.  I’m not concerned, any more than the 5-star chef is concerned when McD opens next door.  It’s not within 100 miles of the same market.  I will solve the problem for you and bill you a price to match.  Fast-food developers will copy and paste something off a forum somewhere and you’ll be stuck in revision hell forever until you give up and hire someone new.

Lesson 4: Revenue sharing is only mostly evil

In the past, I’ve come down pretty hard on revenue sharing:

If you’re going to offer something stupid like “revenue sharing”, just walk away.  Developers are going to laugh at you.  I have a “revenue sharing” deal already–I do development work, and Apple sends me a monthly check.  The only way to compete with that is to pay actual money up front.

I still think this is mostly right.  I have all the revenue sharing agreements I want already: with Apple.  And there’s still no shortage of people offering me a 50/50 split for their “app idea”.

However, I have begun to offer a 5% discount for a 3c per copy royalty for certain projects where the clients are known to be reliable/honest and the product is sound.  This gives me a little bit of residual income and a little bit of risk.  The smart clients realize that it keeps me invested in their projects.

Conclusion

I’m learning more this summer than I’ve ever learned in a classroom.  Being forced to make actual money is perhaps the best teacher of all.  Why don’t we expose students to something like this before they enter the workforce?

SealedAbstract data loss

Due to hardware problems, I’ve managed to lose quite a bit of data. My most recent full backup was from 2009.

If you know me, you know I have a very ridiculous backup setup, with stuff stored on multiple continents and pretty much instantly restorable going back years. Unfortunately, Sealed Abstract was not part of that setup (it is now…)

I’ve taken the opportunity of cleaning house. Getting rid of some old posts, and reimporting new ones from Google’s Cache. I’ve also adjusted the permalink structure, something I wanted to do for awhile but was afraid of breaking existing links.

I think I’ve got SA and DrewCrawfordApps (and a few other sites hosted here) back up. I’m still working to restore some custom servers I had running here.

If you see anything seriously missing, I probably have it around here somewhere… shoot me an e-mail and I’ll put it back up.

Return top