January 23, 2012

The Fallacy of "Nimble"

It's one of my favourite perks of being a small (one programmer, one manager/business guy) tech company: we're "nimble". What does nimble mean? Nimble means when you have that niggling annoyance, I can fix it in front of your eyes. Nimble means that when we figure out our product is wrong and we need to pivot, we don't throw too much away. Nimble means that the time between a decision getting made and palpable effects of that decision being visible to users is minimal, sometimes non-existent.

Nimble is a waste of time.

That's really over-simplifying it, though. Nimble can be useful. Nimble is great when your idea is unproven, you're unsure of your market, and you're rushing to get a minimum viable product out the door. Nimble is necessary and an advantage in those situations.

2cloud has been going strong for almost two years now. I validated its idea on accident and the market has proven itself over the last couple of years. It has been given great reviews by not one but two of the most respected publications in the industry.

And yet, we're still nimble.

That's not something to be proud of. That's us doing it wrong. We're not going to pivot. We know our product, we know our market. We've spoken to customers (excessively). We need to focus on execution now, not whether or not we're on to something. Being nimble is hurting us now, in subtle ways.

Not having an automated deployment system.

Not having enough test coverage.

Not having enough processes and check-lists and double-checking and all those things that make nimble-advocates cry out in terror. Because those things exist for a reason.

Nimble is great when you need to figure out what you're doing, fast, and with as little expense as possible. But nimble leads to duplicated effort, mistakes, and, ironically, wasted time when you know your niche and just need to fill it.

Time to be less nimble.

December 17, 2011

An Open Letter To Congress: SOPA Is A Good Start

Dear Congress,

Hey guys, how've you been? I know you probably don't know me—I don't have a whole lot of money to contribute to your campaigns, so you guys don't have a lot of time for me. That's understandable—you can't get elected and get to know the people you're representing at the same time. You're only human.

I just wanted to whisper in your ear about this whole "SOPA" thing. I've been kind of following it, and I have to hand it to you guys: that's some nice work. As a student, I produce a lot of writing—and I mean a lot. Just today, I wrote eight thousand words. Eight thousand. That's eight thousand words of copyrighted intellectual property. So I'm really psyched to see that you're going to help me keep those words from being pirated online.

But here's the thing: I'm not sure you're doing enough. I mean, most the people passing this bill aren't too familiar with the internet. That should be a pretty big indicator that the internet is not popular enough to have a big impact on piracy. No, my concern is that people will just pirate my work in person. Like, for example: what if someone reads one of my essays to a friend? That friend just got my hard work, my insight, and my intellectual property. For free. That's not fair—they should have to pay me for that!

So here's what I suggest—and I think you'll agree it's pretty reasonable: if someone quotes my intellectual property, in part or in whole, I can call the police. The police then have five days to track down that person and cut their tongue out, so they can't pirate my work anymore. If the police don't respond in five days, they become accessories to the crime.

Now, I know what you're thinking: but what if I accuse someone who didn't actually pirate my work and get their tongue cut out just because I don't like them? Well, I bet your first instinct is to say there needs to be a trial. I urge you to ignore that instinct—any delay will only embolden and strengthen the pirates. Instead, if I cut their tongue out and it turns out I was wrong, I should be obligated to buy them a parrot to talk for them. That will certainly keep me honest, I swear.

Keep up the good work, guys. SOPA is a great start, I just think you need to carry the idea a bit further. Take the core premise, that the possible misuse of a right means that right should be stripped at the drop of a hat, and extend it to every facet of our lives. Remember, you are legislating children here, not adults—if there's a possibility a tool will be misused to hurt a minority of us, the majority should only be allowed to use that tool at the discretion of the minority. The fact that the minority could misuse your legislation to hurt the majority is a small snag, but I'm sure we can figure that out later.


September 8, 2011


I've been meaning to write a post about companies and users, and what I believe their relationship should be. Tino and I have had some very good conversations about it, and he's helped me to get a better grasp on my views on the matter. I don't have a full handle on it yet, but I'm getting there. I'd really like to have done that post before I did this one, but it's going to have to wait. Today pretty much broke my spirit.

Before I go any further, I'm just expressing myself here. There are no decisions contained herein, I'm not announcing anything. These are just words to explain my feelings to you.

I've always believed in free open source software. I think it's how the world should work. I've always believed that if I give my best to people, they'll give me a just reward of their own volition. So when Kevin covered 2cloud (then android2cloud) for Lifehacker and we got thousands of users overnight, a lot of people called me crazy for not trying to make a quick buck off it by charging people a dollar per download. People still tell me I'm crazy. How can you have an app with over 50,000 downloads and still be $500 in the red? That makes no sense. And yet, that's where 2cloud stands.

When 2cloud became popular, I formed an LLC with my friend, Tino. Tino invested startup costs for the venture. The point wasn't really to start a company to make money or become rich; really, I just wanted to cover my ass in case someone decided it would be fun to sue me over the app. Tino and I, obviously, hoped to recoup the money we put into the venture, but that was about as far ahead as we thought. We took a contract with a startup here in Buffalo, and it paid off the startup costs and then some. We were incredibly fortunate on that front. But we're still nowhere near paying ourselves back; our company bank account sits at a depressing (not dangerous, just depressing) level and the main project our value-generating efforts are going into is still in the red.

Every day, I get to look at or talk to Tino and know I'm failing him. I get to try to defend free open source software, even as it fails spectacularly in front of me. I talk about value and reward, trust and relationships, mutual benefit. I talk about how our users are on our side and we're all fighting for the same thing. Because we are, right? You want to use useful software that makes your life easier. I want to create things that makes life easier. It seems like a good fit, no?

We're still in the red. We set up a quota system, something that I took considerable emotional pain in doing. I knew it meant some users would be locked out of using the service for a limited amount of time. That hurt me and went against everything I believed in, but the alternative was to shut the server down. To simply let the project go. That would've hurt more, so I took the lesser of two evils. Users complained about it, and that hurt even worse. I work hard on this project and it costs money to run. The fact that someone would assume I was just trying to make a quick buck, after I struggled for a year to keep the application free and unfettered for everyone, wounded me deeply. Switching the server over cut costs by a lot, as some users still haven't switched over, and people are still donating sometimes. I think we're actually in the green, for the last month or so. But it's a negligible amount of green; I make about that much in two hours of work at my minimum-wage job. At this rate, the project will be two years old before it stops being a money-sink. That's assuming donations keep coming and the server costs stay low (which they won't). We turned the quota on yesterday, switched it off the unreasonably high level it was at previously. The app went over quota around 9pm EST; I tested, and everything worked smoothly with the payments system. Nobody paid. We talked about it, Tino and I, and thought maybe it was because it switched on for just 6 hours. I lowered the quota a bit more, and today it kicked in around 4pm, EST. In the 4 hours since then, our income has remained steady at the $0 mark. Maybe nobody's using the app? 200 users were active today. Since the quota kicked in, over 100 links have been sent. People are using the app, they're just not paying for it.

People are still looking for more work to be done, for free. People are still emailing me bug reports. I'm still issuing updates. I'm still the only one who has contributed code to the project. People just don't seem to think that's worth anything. And if it's not worth anything, why am I working so hard at it? That doesn't make much sense.

This is not a bitch-and-moan-fest about how a project is in the red. That's the nature of investment, that's the nature of trust: sometimes it blows up in your face. Sometimes it doesn't pan out. I made decisions on how to spend my money, and nobody forced me to do anything. The same is true of Tino. And really, we're blessed with a large number of people who did donate and who did support the project. And that's wonderful. I'm not posting this so people will feel guilty and go donate money or buy their way around the quota. That's not the system I want; I shouldn't have to guilt people. People who donate mean a lot to me because they did it of their own free will, and their money means so much more when that's the case. So if you're reading this post and feeling bad and thinking you should contribute, I'd much rather you answer a simple question: why did it take this post to get you to feel that way?

Really, my lamentation is about the world I live in. Because I'm starting to lose faith that if I do the right thing and create value and make something people want, they'll do the right thing and help support it voluntarily. I'm starting to change my default stance; it's a very good possibility that all the software I release in the future will be open source, but if you want to get it from me or use my server, you have to pay. It's a very good possibility that I'll stop trusting my users to do the right thing and turn software from a partnership into a transaction. And that breaks my heart.

As I said at the beginning, this is all personal reflection and expression. 2cloud isn't changing. I'm not going to start charging for it. I made that promise, and I'm standing by it. If push comes to shove, though, it'll be a lot harder for me to justify working on it more or paying to keep the server online. This is the community's project, not just mine. The community is speaking, and it doesn't offer a lot of hope for the future. There may be a time where I drop the project. There may be a time where the public server exists only within the free quotas App Engine provides. Only time will tell. But I can't look at the future with the optimism and assurance that everything will work out fine anymore.

September 3, 2011

On App Engine's Pricing Change

By now, most of you running App Engine applications have received the dreaded email: App Engine is leaving beta. Normally, that'd be a great thing. But as they announced at I/O, that means the pricing structure is changing, because now they need to actually pay for their operation; in other words, they can't keep operating at a loss. So the pricing structure was simplified a bit, and prices were hiked.

For 2cloud, this is terrible news. We were having trouble operating under the old pricing structure; making ends meet under the new pricing structure is going to be difficult. Our new quota system is hopefully going to help make it happen. We'll see.

I'm a little disappointed with the change; not because Google's charging us more, not because we have even more pressure on us to get our app to pay for itself; those I understand. It is not Google's job to pay for my app, and it is not Google's fault that I haven't been able to come up with a monetisation plan. Google is not a charity, they are a company. The fact that they've given us this long to figure it out is a gift and a blessing, not a license to demand more time from them. My disappointment, instead, is rooted in the "one pricing scheme to rule them all" approach. I understand its goals—make the pricing scheme more predictable and less confusing—but I don't think it fits well. Our app spent most of its free CPU quota on creating channels; now that Channels are split out from the CPU in terms of the quota, we'll have a bunch of unused CPU and pay even more for Channels than we already would have. I would've liked to see a bit more flexibility in the pricing scheme than is currently offered.

In the end, though, App Engine is still fantastic. And even as we look at whether another hosting provider would provide a better experience for our users, I feel nothing but fondness and loyalty to App Engine. If we do end up developing another set of server software for AWS or a similar service, I'd like to keep our App Engine code running in parallel. It still remains the best service to quickly and easily start a project on.

August 22, 2011

College & Startups

Disclaimer: I tend to write posts for this blog, maybe sleep on them (at most), then publish them. Very rarely do I edit or ask for feedback. However, this is a topic that I feel strongly about and wanted to speak intelligently on, so I asked for feedback during its drafting process. Ahmed Al-Sudani, Kevin Purdy, Matthew Turland, Ryan MacGillivray, and Tino Galizio were all instrumental in getting this post written. I owe them a debt of gratitude for working with me through multiple drafts to come up with the post you're reading now. It's still not perfect, and never will be, but they gave me a safe environment to learn from my initial failures.

I might not be the most qualified person to write this; I’ve never run or worked at a startup and I refuse to take my expected role in college. But it seems like nobody is saying this, and I felt it needed to be said. So my unworthy voice is going to have to suffice.

You’re working crazy hours of the night. You’re broke, collecting massive debt, and all you’re getting in return is the chance that your investment may lead to a better life. You seek the wisdom and guidance of mentors. A small group of people can decide your future with their whims.

To two groups of people, this sounds agonisingly familiar: startup founders and students. There has been a lot of hype recently about how degrees are over-rated and students should drop out and start a company, but little has been said about how similar the lifestyles are. How seemingly insane both lifestyles are. But one is widely recognised as an expectation for the teenagers leaving high school, and I have to wonder if it’s the wrong one.

First, let’s take a look at the two concepts we’re dealing with here, to avoid any confusion.

Startups are, I believe, one of the most interesting jobs a person can ever hold. Startups have a culture that makes learning not only possible, but unavoidable. It’s an almost Darwinian system; the best survive, those that aren’t up to the challenge die off. I love that, because it requires engagement. You can’t just punch a clock at a startup; if you aren’t entirely consumed by what you’re doing, you’re not going to be doing it for long. Odds are you probably wouldn’t be doing it in the first place. This is the side-effect of the interesting nature of startups; a startup surpasses a job, becoming more of a lifestyle and a mindset. It technically is any company that is trying to deliver a new product or service and is living in a great deal of uncertainty. For our purposes, and in its most common usage, it is related to technology. Just as we’ll be talking about the institution of college as a whole, rather than a specific college, we’re going to look at the culture and ideologies of startups (gleaned from things like TechCrunch, Hacker News, and Paul Graham, amongst other sources), rather than a single startup.

College is more difficult to explain, because it exists in what’s almost a split personality. There’s what college is supposed to be and what college is. College is supposed to be a safe environment for teenagers to grow into adults. It’s supposed to be the final transition between being prepared for the real world and actually living in the real world. In practice, it is an accreditation system; it’s a way of saying “I can verify this person knows this information”.

There’s one final concept I want to hammer out before moving on: growth. I believe, firmly, that the best way to grow is to fail. To fall flat on your face. Why? Because if you aren’t falling on your face, you’re not learning anything—you already know everything you’re working with. It’s impossible to grow without failing. Remember when I said that college is supposed to be a safe environment in which teenagers grow into adults? That means it’s supposed to be a safe environment in which teenagers can fail. Even if you’re simply watching people smarter and more experienced than you do their thing, you’re realizing how much you don’t know, and that’s still a (more gentle) kind of failure.

Now that we’ve got that conceptual work out of the way, let’s move on to the point. Startups are a bigger risk than pursuing the same sort of project in college; in a startup, failure can mean you don’t eat. Unlike college, startups aren’t the expected path for today’s youth; when you tell someone you’re an entrepreneur, chances are they hear “unemployed”. So, if we have an environment where risks have very little consequence and where there are a lot of people, why is it producing nowhere near as much innovative thinking as the environment where risks carry the highest consequences and where there are relatively few people? That seems counter-intuitive, and yet it’s how the system currently works. Why? The answer lies in the split nature of college.

The environment I described with lots of people and little consequence is college as it should be. The truth is that startups are closer to that role than college is in reality. Some colleges (MIT, Yale, Harvard, etc.) seem to be closer than others (mine, for example), but the reality of the situation is that the students in colleges aren’t given much opportunity to experiment, to try new and daring things. In short, they’re not given much of an opportunity to take part in those consequence-free risks I spoke of. Instead, that type of research is reserved for the professors. Professors have a low-risk environment in which to conduct research. While students get to help them, that’s not quite the same thing, is it? The student doesn’t have the same investment, the same engagement in their professors’ problems as they would in their own problems.

And that’s the crux of it. That’s the problem. College exists in the paradigm of measuring knowledge; it measures knowledge to verify that the student has it. But for that knowledge to be measurable, it has to be known. It means the student can’t be the pioneer in the field, because there’s no way to measure that. It means the student is always relegated to walking in the footsteps of another, so the college has a known quantity to measure the student against. In return for those metrics, that ability to measure its students, college has lost the most valuable asset of startups: the competition. In college, you know something or you don’t. There isn’t a constant push to be better. There is no concept of better.

This concept of better is one of the three things startups have that college sorely needs. The second is interest. While it’s true that those not engaged in their startup won’t have a startup for long, this confuses the effect for the cause. The truth of the matter is that those who would not be engaged in their startup never start one in the first place; passion is what drives the exploration that startups do. College, however, has taken that exploration and handed it to the adults. Professors, not students, lead most the research done in colleges now. The professors’ passions, not the students’, are the ones being explored and engaged. Consequently, the professors are the ones engaged, not the students.

The final concept that college needs to appropriate from startups is the concept of action. College measures what a student knows, not what a student does. In startups, the importance is reversed; what you do matters, what you know is immaterial. And really, the reasoning of startups is more logical: when I die, what I know dies with me. Only the things I’ve done can contribute back to society.

Without these three concepts, college isn’t engaging. Students show up to class, check off their course lists, and graduate without really learning anything. So we have things like Peter Thiel’s 20 under 20. We have a society that is rapidly losing faith in college at the same time the cost of attending a college is skyrocketing.

College needs to take a good hard look at startups and think for a bit about how it can offer its students more opportunities to fail. I’ve written a fairly successful application that has been covered by several large tech publications, has over ten thousand users, and is part of a rapidly evolving ecosystem. I am, purely by luck, in an amazing position to learn at a rapid pace. The fact that college is unequipped to and disinterested in taking advantage of this situation is nothing short of a criminal misuse of potential.

July 31, 2011

Tips and Secrets for Dealing With App Engine

Google's App Engine is a wonderful, amazing, and revolutionary service. A free, managed hosting experience in which you can build scalable applications. That is huge. I can honestly say I would not know half the things I know or have half the relationships I have with the tech world, were it not for this program. It makes writing server-side software simple; it allows you to only know about writing the software, and not having to worry about system level vulnerabilities, system load, or scaling headaches. I don't have to think about things like iptables, SSH permission levels, or other ways nasty people who are better sysadmins than I am can get into my application. I don't have to worry about hard drive failures at 3 in the morning. Rather, it just asks me to be a programmer.

That divorce between programming and systems administration comes with some costs, though. The most commonly touted one is the lack of control over the system: if I want to run node.js or Redis, I'm out of luck. But there are other, deeper costs as well, things that aren't intuitive to the average user. Things that don't come to mind when you think about the shortcomings of App Engine. And really, they all come down to one thing: if what you want to know isn't documented, you probably are out of luck.

Date and Time

The handling of date and time on App Engine is inconsistent, and it caused me quite the headache. See, the datastore is written in UTC time, but a "day", in App Engine terms, is determined by Pacific time. Your quota, for example, resets at midnight Pacific time. Meanwhile, the datastore holds values that are from UTC time, which means seven hours in the future (according to the quota). Furthermore, the "system time" (what you get if you call datetime.now()) on App Engine is in UTC. The only way to get the values you're writing to the datastore, the values datetime.now() are returning, and the datetime that the quota is based on all in sync is to translate the values to Pacific time, strip the timezone information from them (lest the datastore see it, take it into account, and attempt to correct for it), and then write to the datastore. Then everything will be in sync.

That is all documented, or at least relatively easy to figure out. You can even see it in practice at http://timezones.appspot.com. But I had to implement a soft quota over Google's quota, so I needed to know exactly what quota day I was on, and had to keep the two in sync. And that meant one big question that was not in any documentation and that would take me quite some time to figure out: does the App Engine quota take DST into effect?

Fortunately, Moishe Lettvin, an App Engine employee, has been kind enough to keep in touch with me after I took part in the Channel API trusted testers session. He checked the source code and got back to me. I don't know how I would have handled the situation had he not responded; it would have taken me months to find out on my own. For those who are curious, yes, App Engine's quota takes DST into account.


I have a love/hate relationship with App Engine's built-in OAuth provider. I love it because it's a built-in, out-of-the-box, free way to authenticate against someone's Google account. I hate it because if something goes wrong (it's listed as an experimental API, and things do go wrong) or if something isn't working as I expect (it differs from the main OAuth API in a couple crucial areas; mainly it seems to lag. It still uses 1.0a and will not accept xoauth_displayname), I have no real recourse. Beyond not being able to tell why getting a request token threw an error for 38 requests in the last 24 hours, besides undocumented differences between it and Google's regular OAuth offering (not even their 2.0 offering, which is now available in experimental status), my biggest gripe has to be one I discovered just recently: it will not allow a non-http, non-https callback URL. If the URL you are redirecting to uses a different protocol, it will error out. While this seems like a silly gripe, it's actually pretty important for Android developers who rely on callbacks to app-specific protocols to allow the OAuth flow to remain secure and user-friendly.

Those are the biggest gripes I have with App Engine for now. I'm sure more undocumented things I need to know will show up as I continue to learn more and more about the environment. I'm sure I'll be stymied in other places. But I reiterate the point I opened with: App Engine remains a wonderful, powerful tool that makes my development possible. These gripes don't come close to overshadowing the cause of them: the removal of the system from my list of "things I need to concern myself with" in most cases. Really, these gripes are created by the edge cases in which I do need to concern myself with the system.

July 22, 2011

The Problem With Tangential Learning

Last Thursday, my roommate turned 21. For her birthday, I baked her a batch of brownies. As college students, we don't have the world's greatest kitchen for baking (she told me she had everything! Steph, if you're reading this, your lies haunt my soul), so I had to make do with a less-than-ideal dish. It was too small in surface area, so the brownies ended up nice and thick. Which would totally be cool, if it didn't make baking them such a challenge. I was kept on my toes trying to keep the outer edges from burning while cooking the entire middle so we didn't end up with spots of raw brownies. In the end, it was a middling success (but, fortunately, it being her 21st birthday, I think she was too drunk to care).

This is a horribly transparent metaphor for the topic I want to discuss. Thanks in no small part to my business partner (if we're going to be entirely accurate, it's all his fault), I've become more or less addicted to Extra Credits, a video series on The Escapist. Extra Credits is what I would call an English major's take on video games, but I'm really giving too much credit to English majors with that. It's actually just video games and the video game industry being examined with critical thinking skills and the built-in assumption that video games are an art-form that are deserving of deep thought—an assumption I don't disagree with.

In one episode, however, I must disagree with them. Sort of. In their "Tangential Learning" episode, they tout the virtues of (spoilers) tangential learning and espouse the belief that this is the best way for video games to become educational without becoming boring. I think this is folly.

Don't get me wrong, I think tangential learning is great. It takes a proposition that I hold most dear (that students learn best when they're interested) and puts it into practice. It shows educators that the trick is not getting students interested in what you want to teach them, the trick is helping them learn what they're interested in. And that's wonderful. Great. Leaps and bounds above the current "I will force-feed you information and hope you remember it" model.

But we're only fooling ourselves if we think it's a silver bullet or even a bronze bullet. The vast majority of our learning cannot be done this way. If every game implemented this, or even most games, it would enrich our educational experience from video games, yes. But that is a far cry from saying it would make video games educational.

In the video, they mention the sephiroth and how Final Fantasy introduced that concept to thousands of people by naming a character after it. At the end, they said that if you didn't know what a sephiroth was and were going to go look it up, you knew that tangential learning worked. And I didn't know what it was, and I did go look it up. But that didn't prove to me that tangential learning worked. That proved to me that tangential learning gave us trivia. I knew what a sephiroth was, but I had no context for that information. My context was the game. In literary theory, we talk about how the original context a fact is learned in shapes the fact—I will always associate the Treachery of Images with Foucault and semiotics, because that's how I learned about it. I never learned about it as a visual art piece; I learned about it as a literary concept. Likewise, I'll never associate a sephiroth with its cultural and religious context, but instead with its gaming context.

The problem is, there is a lot to learn, a lot to be known. Kind of like those brownies I baked: the topic matter is deep, in that you can follow a single idea or topic for quite some time and discover a lot about it; broad, in that there are a lot of topics you can pursue; and (this is the important one) inter-connected, in that ideas give context to each other. Much like the heat had to penetrate from the outside edges of my brownies all the way in or there'd be raw areas, our education needs to cover a certain amount of broad topics, cover them deeply enough to make sure we grasp the nuances, and cover them in such a cross-disciplinary way that we can put them in the appropriate context in our mental picture of the world. Tangential learning doesn't give us that. Tangential learning is much like a scavenger hunt; you're given an interesting item, you go and retrieve it, but it isn't the item that's important—the retrieval is the important part.

I humbly submit that we need more than that in education. We need to have context and meaning for the trivia we're learning, or all we're really doing is making ourselves better Jeopardy players, not more rounded and educated individuals. Tangential learning is great in theory, but it falls short in practice. It's not, to use the educational theory background I paid so much for, theoretically sound. It ignores the instructional scaffolding theory set forth by Bruner, a theory that is generally accepted by the educational community. Knowledge is like a building; you lay the foundations, set up a scaffolding (I bet you see where the name comes from!), and build a lasting structure bit by bit, one piece on top of another. This is not what tangential learning is doing; tangential learning is throwing a shack up rather quickly. Yes, it will keep you dry in the short run, but it's not going to last long. And it's certainly not something you boast about, something that makes you a better person. The results are quick, but fragile and ultimately useless.

So, if tangential learning is right in theory but wrong in practice, how do we fix that? Much like Extra Credits, I believe games are one of the best positioned mediums for learning. Games are an inherently interactive medium, and (as tangential learning proponents have noticed) learning is (or at least, has become) an interactive process. There's a lot of talk that in our parents' generation, we learned through broadcast. Someone would tell us something, and we'd know it, and that was learning. I find that hard to believe. I find it hard to believe that being told something can ever constitute learning it—I think the correct word is believing it, which is a very different thing. Just look at the war between science and religion, and you'll see the gulf between belief and knowledge. They're antithetical. But I digress. Whether our parents' generation was interactively learning or not, our generation is. And our children's generation will almost certainly continue the trend. The fact that games have that interactivity in their DNA already puts them in a far better position than, say, television. Or books.

The trick is going to be using that interactivity to kickstart a learning process, not simply giving us allusions. Allusions are helpful, yes. They help to expose us to new areas we may not have explored before. But we cannot have an education based solely on allusion; we need structural support, a contextual mindmap to assimilate those allusions into. Rather than simply suggesting the player look up a sephiroth for a bit of trivia, the game should reward the player for understanding the sephiroth. Things should be easier. Or there should be more depth to the game for that player, more things to do. I agree with Extra Credits, however; the player should not need to understand a sephiroth to move forward in a game. One of the things that tangential learning gets right (and one of the things that terrifies traditional educators) is the surrender of this absurd notion of "curriculum"—the idea that there is a prescribed set of things that students should learn. Interest drives learning, and not everyone is interested in the same things. That's why the interactivity of games is an important feature; players shape the game just as much as games shape the players. It's a two-way relationship, instead of a broadcast. And in that two-way relationship, there's no room for one party to have control. One party can't be dictating to the other party; the relationship (like all relationships) will only work with communication and cooperation. Games need to offer their players this deeper meaning, need to offer a richer experience for those who are interested in learning about the topic, but not require that richer experience in case the player isn't interested. Because as soon as you start requiring players to do things they aren't interested in, things they don't care about, you start losing those players.

I can't see tangential learning or this interactive, cooperative educational system catching on anytime soon. Our education system is too mired in the idea that there needs to be a "standardised student" and that education needs to be heavily controlled and regulated. I hope, one day, our government and our educators will see that the more room you give a student to maneuver, the more room you're giving them to grow. I hope one day we'll see games replace textbooks, rewarding us for learning what we're interested in but not punishing us for having no interest in a topic.

July 20, 2011

Professionally Yours

We've been running a feedback survey for 2cloud for a couple of weeks now, trying to get a sense of how we're doing with the project. We've gotten some great responses (if they're not from you, please go ahead and take two minutes to fill out the form. We are leaving it open indefinitely), but one response we got bothered me:

"Bottom line you're sounding juvenile, when you want professional."

At what point did the person responding to that get the horribly inaccurate impression that we want to sound professional? We do not want to sound professional. We want to stay away from professional.

Let me start this explanation out by making a distinction. A professional person is responsible. A responsible person is not necessarily professional. The two go hand-in-hand, yes, but you can be responsible without being professional. That's what our project aims to do.

Professional is not what we want for a very good reason: professional is intimidating. Professional exists to create a barrier between two entities. There's a reason it's called "personable" and not "professionable". We want to be a personable project. We want to interact with our users, we want them to be in constant contact and feedback with us. We think this connection is a strength, not a weakness. So we do not want the barriers of professionalism raised between us and our users; we want to tear down as many barriers as possible.

A professional project does not send hand-written thank you notes from its lead to people who donate. A professional project does not engage in lengthy back-and-forth emails with its users. A professional project does not have its users on Instant Messengers and social networks.

We do. And if I have anything to say about it, we always will. Because I am not a professional, I am an amateur. I am a lover of software, of creating software, and of my users. And I'm not going to give that up so we can sound important and impressive.

I've always felt that if I'm not pissing anyone off, I'm not doing things right. If nobody's getting pissed off, nothing worth saying is being said, nothing worth doing is being done. Because everyone has their own preferences. The fact that my refusal to be professional is pissing people off is not a bad sign, in my mind.

June 30, 2011

Google+: I've Seen This Before

I'm pretty fortunate. In fact, I'm doubly fortunate.

Not only was I invited to Google+ when the only way to get in was to have a Googler personally recommend you, I was invited twice. How's that for bragging rights? When everyone was begging for these invites, I had two.

But enough of me bragging about my random luck that has absolutely nothing to do with my own skill or worthiness. I've seen a lot of people comparing Buzz and Google+. Or comparing Facebook and Google+. The general consensus seems to be "I've seen this before."

Well no shit.

Google+ isn't radically new like Wave was... which is probably for the best. Instead, it takes a bunch of things we're already used to (photo sharing, update streams, tagging friends) and puts a Google spin on them (I, personally, love Sparks—Google's way of making it convenient to introduce new content into your stream).

What I find interesting (and mildly amusing) is the comparisons that people are making. I've said that Buzz is to Twitter as Google+ is to Facebook. But that is really missing the point. There are two names missing from that analogy that should be there: Jaiku and Orkut. Jaiku was Google's first attempt at a Twitter clone—to be perfectly accurate, it wasn't Google's; they bought it. Orkut was Google's first stab at a Facebook clone. As Jason points out below, I was mistaken. Orkut was Google's first stab at a Friendster clone after Friendster refused to sell to them. Facebook, as it turns out, was an iteration on Friendster (see The Facebook Effect, page 86: "'We were really worried we would be another Friendster,' recalls Dustin Moskovitz"). Which, all-in-all, I think serves my point more than it hurts it, but in the spirit of absolute accuracy, I've amended the post. Good catch, Jason.

You've never heard of either of these, and if you have, you don't use them. And that's why they aren't being placed in the analogies. That's why they aren't being mentioned at all.

It's important to remember, though, that Google believes in iteration. I don't think that just means iteration on a single product; I think that means iteration on their entire approach to a market segment.

I don't know if Google+ is going to catch hold. I don't know if it will go the way of Buzz, or go the way of GMail. I hope it works. It's too early to tell, though, despite "insane demand". What I do know is that social is important to Google. And as a company with nearly bottomless pockets, Google has all the time and cash it needs to iterate through product after product, learning as they go. Is Google+ the end of their quest for social? Only time will tell. If it's not, are they going to give up? I doubt it.

So yes, you've seen this before. And rest assured, if it fails you'll see it again. But failing to see what Google has learned as it has iterated over social products is failing to see Google for what it is: constantly improving, slowly but surely.

June 10, 2011

Remembering Why I Write Software

I've worked on 2cloud for almost a year now. Since its inception, it has been used by tens of thousands of people, covered by dozens of publications large and small, and entered the lexicon of Android development. My professional career has been advanced by it and my personal network of friends has been augmented by some truly wonderful people I would not have met, were it not for the exposure this application received.

In all that time, however, I was never really cognizant of the software itself. I understood its function, I understood why it was cool, but I didn't think of it as useful. Part of this is the reason I started developing it: I started working on it for the sake of working on it. I wanted to learn Android development. I wanted to learn how to write a Chrome extension. I didn't have some pressing problem that this app would solve, no target use-case for it. I just wanted to learn something, and it seemed like a fun exercise. When people asked me why it was better than just emailing themselves a link, all I could think of was "it's a little more convenient."

Yesterday, somebody showed me why it was useful, and that is something I'm grateful for.

I had decided that people who donate will receive hand-written notes, thanking them for helping keep the server online. I was having a bad day, and I wanted to focus on the good in the world, instead of all of the things I hate about it. Writing letters to people who were kind, people who validated everything I believe in, made me feel better. I duly wrote and emailed out three of these notes to our latest round of good Samaritans. One went to an individual I'll call Sam.

Last night, Sam wrote back to me. In his email, he explained that he works shifts and has a young son, and so didn't get much time at his computer. By using the application, he could "speed browse" during his breaks, send the links to his machine, and have them waiting when he got a moment to sit down. He got some time to keep apace with the world, but still had time with his son. Because of this, Sam said 2cloud was "one of, if not the, best apps on [his] phone."

It was the perfect ending to a bad day. I remembered why I believe in open source software so much. I remember why I work on 2cloud whenever I can. I remembered that people found value in my work, and some of them weren't afraid of saying so, with money or words.

If you write software, I highly encourage you to communicate with your users on a personal level. Ignoring all the benefits it will provide your user experience, it will give you the most pure appreciation for your job that you can get in our line of work. As much as possible, get to know your users; some of them may be scum, but putting up with them is absolutely worth getting to know the gems.