Category Archives: facebook

Google’s Strengths & Weaknesses in 2012

In the past, I’ve had terrible advice from brilliant people. The best way to avoid that is to be careful to research the brilliant person and tailor your questions to avoid their weaknesses.

Tomorrow I’ll be meeting a bunch of people at Google London’s open day. I started by writing down a list of known strengths/weaknesses based on my knowledge and experience of the company and the people. Earlier this year I had some in depth meetings with Facebook, which gave me a fresh perspective on the similarities and differences. I think the list itself is interesting – modulo: it’s only my personal impressions:

google strengths

[comments in brackets to clarify some non-obvious points for anyone reading this]

  • innovating on the Web
  • bringing native tech to Web and making it as good as native
  • software development
  • worlds biggest/most popular search engine
  • …? focus on curation ?… [Page ranking etc is subtle curation]
  • tech brand associated with “quality”
  • massive scale advertising
  • algorithms for automating heuristic tasks (imperfect, vague domains)
  • enormous scale data manipulation
  • throwing hardware at impossible problems to make them possible [Street View]

google weaknesses

  • community [in general, but also specifically: Google Groups]
  • consumer marketing [many Googlers have said “we don’t need to; the brand is enough”]
  • building products that people want, rather than products Google staff enjoy [Wave, Buzz, Google Voice]
  • understanding consumers [Android]

New startup, aiming for acquisition by Facebook

Please email me (adam at red-glasses.com) if you have skills / interest in the following:

  1. Mass market (i.e. everyone + their mom) telling stories
  2. javascript frameworks for complex visual 2D stuff (e.g. iGoogle, Netvibes, etc)
  3. Visual manipulation of large 2D images on mobile (especially iPhone)

NB: we have no funding yet, just an idea. This is a scatter-gun first approach – if things go well, there will be another call for people in 2-4 months time.

Fight the Guardian’s and The Independent’s spam

On Facebook.com front page:

“Dave Stone and Mike Merren recently read articles.”

…so I click on one of them. Lo and behold, instead of getting an article, I get The Independent app trying to force me to install it.

Force. Yes, force – there is no option to “view the article”, the only option is “install this app or cancel”.

Lots of people complaining about this recently, but there’s really only two things to do:

  1. Shame the newspaper by tweeting them
  2. Report them to Facebook for abuse

Tweet them to let them know what you think

@Guardian and @TheIndyNews

Report to Facebook

Yes, I know Facebook is behind this in the first place, but if you don’t bug them about it, they’re less likely to care:

…and you might as well let the developers know how pissed you are – directly – since Facebook gives you this option:

Is Google’s mistaken belief in the power of Product killing them?

Steve Yegge’s Google Platforms Rant is not so much a rant as a sign of someone fighting an inappropriate culture. We saw stuff like this a lot at NCsoft when people were trying to turn around the $100 million clusterf*ck that created hundreds of redundancies all the way to director level.

It’s a great article, but a couple of the key points resonated with my own experience of Google UK’s hiring practices a couple of years ago. There was clearly a lot wrong with the internal culture, but as an outsider I couldn’t quite put my finger on it. Here’s the crux of Steve’s post (but seriously – read the whole thing, it’s rich and meaty):

That one last thing that Google doesn’t do well is Platforms. We don’t understand platforms. We don’t “get” platforms. Some of you do, but you are the minority. This has become painfully clear to me over the past six years. I was kind of hoping that competitive pressure from Microsoft and Amazon and more recently Facebook would make us wake up collectively and start doing universal services. Not in some sort of ad-hoc, half-assed way, but in more or less the same way Amazon did it: all at once, for real, no cheating, and treating it as our top priority from now on.

But no. No, it’s like our tenth or eleventh priority. Or fifteenth, I don’t know. It’s pretty low. There are a few teams who treat the idea very seriously, but most teams either don’t think about it all, ever, or only a small percentage of them think about it in a very small way.

It’s a big stretch even to get most teams to offer a stubby service to get programmatic access to their data and computations. Most of them think they’re building products. And a stubby service is a pretty pathetic service. Go back and look at that partial list of learnings from Amazon, and tell me which ones Stubby gives you out of the box. As far as I’m concerned, it’s none of them. Stubby’s great, but it’s like parts when you need a car.

…and finally, reading that, it clicked for me what I saw that was so wrong:

Google has forgotten what a Product is

“It’s a big stretch even to get most teams to offer a stubby service to get programmatic access to their data and computations. Most of them think they’re building products.”

That pair of sentences, back to back, is the problem: people outside Google would put the word “except” in between. Googlers put the word “because” in between. Google’s cultural definition of Product has got lost and perverted somewhere along the way, and now looks and smells like the real thing but is – to the rest of the world – a fake. Except Google – internally – can’t see this.

Every Googler I talked to worshipped at the altar of Product-as-King; three quarters of them would then – even in the same sentence – admit that they hated Product, didn’t believe in it, and felt it was a waste of time — “get out of my face with your product BS, and let me write beautiful code in my Ivory Towers, and leave me alone”.

They were smart people; they never said this explicitly (although one came very close – and you could see the moment when he had the thought: “oh crap; if anyone else hears I said that…”, then backtracked very hastily) – instead they frequently said mutually conflicting things, and dressed them up in enough abstractions that you could pretend that they weren’t conflicting. They were very good at it – I could tell there was a crack, but I couldn’t work out where the fault-line lay.

Google’s illusions of Product

As Steve puts it later on:

Google+ is a prime example of our complete failure to understand platforms from the very highest levels of executive leadership (hi Larry, Sergey, Eric, Vic, howdy howdy) down to the very lowest leaf workers (hey yo). We all don’t get it. The Golden Rule of platforms is that you Eat Your Own Dogfood. The Google+ platform is a pathetic afterthought. We had no API at all at launch, and last I checked, we had one measly API call. One of the team members marched in and told me about it when they launched, and I asked: “So is it the Stalker API?” She got all glum and said “Yeah.” I mean, I was joking, but no… the only API call we offer is to get someone’s stream. So I guess the joke was on me.

Product. Platform. Since when have those been mutually exclusive? Not in this Millennium, I believe…

And even when Google gets over their hatred of Platform, even with something as simple as the pixels that their apps put on screen, they’ve jumped the shark:

You know how people are always saying Google is arrogant? I’m a Googler, so I get as irritated as you do when people say that. We’re not arrogant, by and large.

But when we take the stance that we know how to design the perfect product for everyone, and believe you me, I hear that a lot, then we’re being fools. You can attribute it to arrogance, or naivete, or whatever — it doesn’t matter in the end, because it’s foolishness. There IS no perfect product for everyone.

And so we wind up with a browser that doesn’t let you set the default font size. Talk about an affront to Accessibility. I mean, as I get older I’m actually going blind. For real. I’ve been nearsighted all my life, and once you hit 40 years old you stop being able to see things up close. So font selection becomes this life-or-death thing: it can lock you out of the product completely. But the Chrome team is flat-out arrogant here: they want to build a zero-configuration product, and they’re quite brazen about it, and Fuck You if you’re blind or deaf or whatever. Hit Ctrl-+ on every single page visit for the rest of your life.

It’s not just them. It’s everyone.

Any genuine Product person would run screaming from that situation – there’s nothing salvageable. It’s like someone coming to you with their design for a chocolate teapot: “Once you’ve had your tea, you can have a tasty chocolate treat too!”, leaving you wondering: where do I even start with trying to explain to this person what they’re missing?

D&D on Facebook

Step 1

follow link

Step 2

app demands your date of birth, for no reason (one day … Facebook will stop being so ridiculous about this, and give the user power, rather than the advertisers. One day…)

Step 3

app fails to install (having taken your private data)

Step 4: tell them what to do with it

Bye-bye!

ngmoco … really worth $400m? Hmm

Another interesting post from Dan Lee Rogers on whether the money paid for ngmoco last year was reasonable.

(hint: Dan is clearly rather doubtful, IMHO with good reason) E.g. …

Further, Ms. Namba stated that DeNA’s purchase decision was based ngmoco’s ability to create hit iPhone games, which begs the question: what hit games? The ones they were giving away for free or the ones they lost money selling?

Perhaps ngmoco showed DeNA some sort of new-fangled accounting scheme to justify their purchase price? Unfortunately, whatever it was is a mystery to all of us simple cotton pickers.

Harsh but probably fair. I’m settled in with the popcorn, and eager to see where this goes next.

Farewell, Metaplace

I got this in my inbox a few days ago, and it’s been forwarded to me by a few people since:

(NB: the fact that you still have to login MERELY TO READ THE DAMN FAQ linked from the PR statement is IMHO symptomatic of some of MP’s problems :( )

metaplace.com is closing on january 1, 2010

We will be closing down our service on January 1, 2010 at 11:59pm Pacific. The official announcement is here, and you can read a FAQ guide here. We will be having a goodbye celebration party on January 1st at 12:00noon Pacific Time.

Some of the correspondence I’ve seen on this – what went wrong? what should they have done differently? – has been interesting. Personally, I’m in two minds about it. I think there were some great things about and within MP, but from the very start I felt it had no direction and too little real purpose (and if you ask around, I’m sure you’ll find plenty of people who’ll confirm I said that at the time).

I’ll hilight a couple of things that haven’t come up so much in conversations:

Bad

  1. On the face of it, MP was “the bad bits of Second Life…” (poor content tools, poor client, no direction, no purpose)
  2. “… without the good bits of Second Life” (no sex, no mainstream publicity, wrong target audience to charge millions of dollars in land-rental to)
  3. Poor discoverability (how do you find something cool in Metaplace? Go to site, login, download client, wait a lot, browse a weak index, wait for more downloads, wait for content to stream in … etc)

Discoverability was IMHO the killer: this is something that so many “hopeful” social sites and systems get wrong, and only a few get right. The best examples are still simple: browsing your friends’ friends on Facebook by looking at photos of their faces (hmm; who do I fancy?), or using Google to find things you’re looking for (the gold standard in tech, but also the base *expectation* of the modern web surfer).

The history of SLURLs in Second Life should probably be required reading for people interested in this – if you can find ways to experience / re-live life pre-SLURLs, and read through some of the trials and tribulations that Linden went through in getting them to work.

And even then, of course, SL still had no browsability – but it least it had “open” bookmarks and copy/paste references you could share with people, and embed in webpages. That was barely acceptable (and still “awful”) back when SL was in its prime; the equivalent “minimum acceptable” is probably Faceboook Connect with full Facebook integration (i.e. not just FC-login, but having a bona fide FB app too that acts as an alternate access-path for your virtual world).

Good

  1. Well, obviously, there was a lot of great content in there. I only skimmed it, but apart from the problems above, I saw a lot of interesting stuff
  2. The AJAX/CSS/HTML GUI … it was really easy for me to mess about gaining and browsing badges (both mine and other peoples).

Early on, I found the AJAX vs Flash part particularly interesting. The former showed up how weak the latter (the world-client) was: sometimes I went to the site, all happy about the badges, the popovers, etc, and as soon as I got into the Flash client, my mood would drop noticeably. Eventually, I stopped bothering visiting at all; I dreaded the slow, unwieldy, “clicking all over the place to move fractionally”, Flash experience.

One question I had was how much this was to do with the languages / platforms involved: did AJAX/CSS inspire the people working in it to make lighter-weight, faster, more abstracted core experience? Or is this just coincidence? There should be literally no reason why either of those platforms forced the designers to provide the experiences that way (Flash is capable of a much faster, snappier, fluid usability experience – it’s been excelling at this for years).

iPhone App Store: Social Network and Game Portal

The App Store is just another casual games distribution platform + social network. You can pretend it isn’t (sometimes I think Apple is still pretending that it’s just an extension of iTunes, and ignoring the social side completely – Doh!), but that doesn’t make it true :).

Apple’s had the iPhone version of the App Store running for more than half a year now, and made tens of millions of dollars from it, so what’s it like? Where’s the social stuff good and bad? Where’s the game distribution stuff good and bad?
Continue reading

Microsoft turns Live.com into a social network?

(from Nic Brisbourne’s blog)

NB: I can’t actually try it, of course – Microsoft is still subscribing to the classic anti-Web 2.0 ideal of making it “zero information from our walled-garden until you pass a detailed user-verification process; visitors will be shot; guests are not welcome here”.

The interesting piece for me is that they are inferring the social graph from Instant Messenger. It has long seemed sensible to me that building from existing social graphs (email, IM, phone records etc.) is a better way to go than building a new one from scratch as we have all been doing on Facebook, Myspace, LinkedIn etc., although there are many tricky issues around service design. Google and Microsoft think the same way according to this Techcrunch post of a year ago, although we have yet to see thought translated into action.

Yeah … we wanted to do the exact same thing with MMO publisher data when I was at NCsoft. Given how much you know about subscribers, you can infer some extremely valuable stuff (that is much harder for people like Google/Microsoft/etc to piece together). Turned out there were a lot of internal political problems in the way (something I’ll be talking about at GDC 2009: “How to sell social networking to your boss / publisher”) that really came down to a handful of extremely powerful people not getting it / not caring. It was an … interesting … journey learning what they didn’t get, and why, and how to dance around that.

(PS: all the above is assuming “without breaking privacy / data-protection laws”; if you’re reasonably well-moralled, you can provide a lot of value while being well inside the law; I have little sympathy for organizations that run roughshod all over the Data Protection stuff – IME you really don’t need to)

Installing and using PHP Eclipse IDE on OS X

I wanted to knock something up for Facebook, and I thought I’d try out PHP development on my shiny macbook air laptop (I usually develop on a much more powerful windows/linux PC).

This is tortuous, painful, and mostly undocumented on the official site. Sigh. After some experimentation, here’s how to make it work (IMHO you shouldn’t need to do this – although the Eclipse project allows plugin developers to package their plugins in really stupid ways, and doesn’t make it easy for anyone (users, developers, etc) – it’s still the fault of the plugin developer if they ALSO do not make it easy for the users to install).

First problem: get Eclipse

IME, most programmers who would use Eclipse already have it. The PHP plugin website won’t really help you, mostly taking the attitude of “install an extra copy of eclipse, just for doing PHP development; if you already have eclipse … work it out yourself”. I kind of understand why, but still feel that the first duty of every developer is to make their stuff easy to install!

If you don’t have Eclipse, I highly recommend you do NOT follow the PHP instructions (by downloading their pre-made “PHP + Eclipse all in one”) because then you are doomed to having multiple parallel installs if you ever need to use any other programming language; learn how to do it properly instead.

Download eclipse here (you want the latest stable version, currently called “Ganymede” (no, I don’t know why they stopped using Version numbers either – yes, it does make life more difficult for all normal users who haven’t memorized the funny names. Sigh)). You can get “Eclipse with Java” or “Eclipse with C/C++” or whatever you want – they are all identical, some just have extra plugins pre-installed.

NB: the people that run the Eclipse website have some pretty icon-artists, but a cruel sense of humour (or just suck at website design, maybe? I shouldn’t complain – it used to be a LOT worse than this) and don’t provide bookmarkable links to the OS X version (that I could find, at least); you’ll just have to go to that page and scroll till you find it. Right now, the current “standard” Eclipse version is at the VERY BOTTOM OF THE SCREEN (c.f. my previous comment re: sense of humour), and at the right hand edge of that box is a tiny link saying “Mac OS X”)

If you’re new to Eclipse, you will probably find that downloading eclipse is one of the most confusing downloads you’ve ever done; if so, this is part of that same problem mentioned above where the Eclipse project makes plugin installs ridiculously difficult: all those many confusing different Eclipse versions that you cannot tell the difference between are actually the same, but differ only in which plugins are pre-installed.

Yes, this is stupid. Yes, it’s badly documented. Sorry. You’ll learn to live with it – they’ve been doing this for almost ten years now so don’t expect it to be fixed any time soon.

I suggest you run Eclipse once, now, before going on to the next step – if Eclipse doesn’t start at this point, don’t waste time confusing yourself with the PHP plugins until you can get Eclipse working on its own!

Second problem: get PHP IDE (now renamed to “PDT”)

You can try to do the automated-install; Eclipse is bad at handling automated installs, has very poor error-handling if anything goes wrong (it just crashes and doesn’t explain), and plugin developers usually screw-up the auto-install API in ways that can actully render your copy of Eclipse unusable (this happens *a lot*). I would advise never using it if you can avoid it.

This one’s pretty messed-up. According to the website and the list of requirements, if you want to use the latest version (vesion 2.0, not yet “packaged”), then you have to download approx 6 massive files.

I found that if you download the “Eclipse for Java” pacakge then it has some of those built-in already, and even if you don’t, several of those have EACH OTHER built-in (WTF?). I suggest you don’t take any risks, and that you do this the long way (download EVERYTHING).

First, go to this download page.

Decide which version you want; right now you want “2.0.0 Stable Builds”, but soon that will be what you get from “Latest Releases”, so check there too.

Then download ALL the zip files listed under “PDT” AND everything listed under “Build Dependencies”. Right now, there are 3 files for “PDT” (SDK, Runtime, and Tests), and 5 files under “Build Dependencies” (Eclipse gtk, EMF, DTP, GEF, and WTP).

Third problem: OS X can’t unzip the files

If, like most OS X users, you’re using Stuffit Expander to unzip the files, by default it won’t do it, because they all overwrite the same directory name (and StuffIt is designed to “protect” you from that, which is nice).

That’s only slightly annoying to get around, but you are still screwed, because OS X itself is (apparently – I couldn’t find a way around this using Finder) hard-coded to prevent you from copying the contents of the directories into the Eclipse directory. When you try to it says “delete the target directory first, or cancel?” (unlike windows, which says “only overwrite files which are the same, otherwise copy all the missing files … or cancel?” which is 99% of the time what you wanted. I have no idea why Apple uses a “destructive” copy – and gives you no alternative!)

Here’s how to get around both problems: The solution – Manual install via Terminal

Fortunately, if you switch to using the Terminal, and run “unzip” by typing it in manually, by default it’s setup as a unix variant that acts in the same way that Windows works by default.

First, make sure you are in the directory where you saved the ZIP files, e.g. by typing:

cd ~/Downloads

(assuming you saved them to your personal Downloads folder)

Then you just type:

unzip [name of zipfile1]
unzip [name of zipfile2]

unzip [name of zipfileN]

…which resolves the incompatibilities in the distro files, and then to install the plugin you type:

cp -Ri eclipse [location of your eclipse folder – usually: /Applications/eclipse]

Note that the “-R” is *required*, and that there is NO trailing slash after “eclipse”. The “i” after the “-R” is optional, it might be good to know if you have problems, but it allows you to get confirmation before overwriting any files. Thankfully, you can just hold down the enter key and it will do the defautl (do not overwrite) as it goes through each file; there are many hundreds of files to copy, and you may already have hundreds of them, so this is handy.

Installation complete

Now start Eclipse – this took 5 minutes for me, where normally it takes 30 seconds, don’t ask me why) – but eventually it worked.

Test it works – go “File -> New Project” and scroll down to the PHP folder, and select “PHP Project”. If there is no PHP folder in the list, then the install has failed. Start again. Good luck.

Otherwise, it should let you create a project, in which case: You now have PDT / PHP-IDE for Eclipse installed and working.

Writing a PHP file

I’m assuming you know how to do this, or can find a tutorial (any PDT tutorials should be fine – it works the same way as the mainstream language plugins for Eclipse, so *any* tutorial on creating a source file and building it ought to work).

Fourth problem: Running your PHP

Oh crap. If you go ahead and create a project, give it a name, and hit OK, you’ll find that the PHP IDE seems designed to not allow you to develop or test PHP on a server; it only supports developing and testing on a local (inside Eclipse) private PHP interpreter. If you’re new to programming, this is fine to get started and learn some basic PHP.

If you’re an experienced programmer, you’ll probably hat that: unless you enjoy tracking down unreproducable bugs and tearing your hair out, you need to develop on the same software + version that runs your production server (in most cases, this will be an Apache2 server running the PHP5 module). Since OS X comes with Apache2 *and* PHP5 built-in, you *already* have a server on your machine that is probably 98% the same as the live server you would use (so far Apache2 + PHP5 on OS X seems to act almost identically to the same versions on Linux, FreeBSD, etc – as you would expect).

(98% is annoyingly short of 100%, but it’s a lot closer than using the bulit-in interpreter)

I can’t find any options in the Run Dialogs to control how it invokes the running of the code from a remote server (or even a local one!) – if you go digging through all the config options, they’re just missing.

NB: there IS something that looks like it might do the trick, where it has a list of “Server” and lets you choose a “PHP Server” – but THIS IS A LIE (there is no cake), do not believe it, this is for something else entirely; it’s just that someone made a poor choice of name for those labels).

Instead, what you have to do is be a lot more careful when creating new projects. Do this:

  • File -> New… -> PHP Project
  • Fill in project name as per normal with Eclipse
  • UNcheck the “default” option for “Project Contents”
  • Click the Browse button under “Project Contents” and navigate to wherever you keep your source DIRECTORIES for all your projects (see more on this below – and you may end up crying when you see what has to be done)
  • Click Finish
  • …NB: BE CAREFUL: it asks you a sneaky extra question, and your answer depends on how you manage source control (see below)

Special Note: where do you keep your PHP?

If:

  • you are just developing locally for now on OS X
  • AND you want to use the Sites directory to save your PHP files in
  • AND you want to use your Apache2/PHP server instead of the “fake” one that comes with eclipse

Then:

  • select your personal Sites folder as the Project Contents above
  • AND answer “Create project in /Users/[your name]/Sites/[project name]” when you press Finish above

This will:

  • automatically create a new sub-directory in Sites with the same name as your project
  • mean that the address of your project is “http://localhost/[projectname]/”
  • mean that if you delete the project in Eclipse, and select “delete from disk as well” when you do, Eclipse will delete ONLY the “[projectname]” subdirectory from your Sites folder, and leave everything else intact

…ALTERNATIVELY…

If:

  • you use proper source control which has a unique root directory for each source project

Then:
EITHER:

  • select the folder for that project as the Project Contents above
  • AND answer “Create project in . (Deleting the project will delete the entire )

OR:

  • select the PARENT folder that contains the project-specific source folder as the Project Contents above
  • AND answer “Create project in [PARENT folder of source root folder]” when you press Finish above

I actually strongly recommend the first option, since this will ensure that Eclipse doesn’t mess with your source control’s PARENT folder (which in most source control systems will either screwup the system (happens with crappy source control like CVS) or just be ignored because you won’t have write-access (happens with the more high quality source control) – but this can upset Eclipse if you do some other things wrong in the future.

FINALLY!

After all that, I finally had a working PHP IDE on OS X. Yes!

I haven’t tried debugging yet, but I found the following links that look pretty sound for setting it up. Bear in mind that the first one tells you to setup your Project Contents differently – just adapt what it tells you depending upon what you did above – the author doesn’t seem to fully understand Eclipse’s arcane approach to projects (given the name he uses for his Project!), which is fine, but IMHO not recommended.

http://robsnotebook.com/php_debugger_pdt_xdebug

Cultural differences: game developers vs web developers

Andrew Chen has just written a post comparing the cultural differences between Web industry people and Games industry people. They’re all very interesting, and on the whole I’d say they’re on the money – definitely worth reading (and see if you can spot yourself in some of the either/or’s ;)). At the start of the post, I stopped reading and paused to list my own observed differences, so that I could then compare them to what Andrew had written. There was no overlap, so I thought I’d write them up here.

Cultural differences: game people vs web people

  • concrete revenues vs “future monetizable” growth
  • team-as-blob vs sliding scale of headcount
  • obsessive search for fun vs time-wasting activities
  • surprise and delight audience with something we liked and think they want vs randomly guess and test on live audience; iterate until done
  • very high minimum quality bar vs dont worry, be crappy
  • high, strict specialization vs almost no specialization
  • money happens elsewhere, far down the chain vs show ME the money

concrete revenues vs “future monetizable” growth

Largely driven by the “money happens elsewhere” part, game people are obsessive about “what’s the actual revenue this will make (what’s my percentage of the revenue this will make)?”.

In particular, if you cannot *prove* the expected revenue (and in many cases not even that: instead you have to prove the *profit*), they won’t even carry on the conversation. This happens everywhere from small startups to massive publishers. I’ve seen meetings on “social networking” get shutdown by a senior executive simply saying “how much profit will this make at minimum, even if it’s not successful? Remember that these resources would instead bring in an extra $5million if we deployed them on [one of our existing MMOs]”, and refusing to carry on the meeting unless someone could prove that the opportunity cost to SN didn’t exceed its income.

surprise and delight audience with something we liked and think they want vs randomly guess and test on live audience; iterate until done

A team of game people sets out to make something fun. They like to get some input from experts on analysing and predicting the market (market researchers, marketing departments, retail executives, industry analysts, etc) – and then use that merely as “inspiration” and “guidelines” to making something awesome and new. They assume that “the customer doesn’t know what they want, but will recognize it when they see it, and fall in love” (which is largely true!), and so they go off and build something beautiful largely in isolation.

This beautiful thing then surprises and delights the consumer when it finally comes to market.

Web people do the first thing that comes to mind, care not whether it’s objectively good or bad, and test it in the market. Then they try again. And again. And again. And look for patterns in what is popular or not.

As a result, game people tend to think of web people as “skill-less” (partly true) and “puppets of the market” (largely true). Meanwhile, web people tend to think of game people as “perfectionist” (largely true) and “monolithic / unagile” (largely true) and “non market-lead” (partly true).

obsessive search for fun vs time-wasting activities

Game people don’t make stuff unless it’s fun. If it’s not fun, it’s a failure, and only a stereotypically bad EA Producer (or a second-rate clone) would OK the ongoing funding and/or production of a project that wasn’t fun any more.

Web people generally couldn’t care less. They generally think they want stuff to be fun, in a “well, it’s better if it’s fun, isn’t it?” kind of way – but they usually only really care that there is some activity going on, and that the users come back to do more of it. They are less judgemental about the type and motivation of activity going on. They will slave away to try to understand this activity, to extrapolate better ways of motivation people to do more of it, and to monetize people for doing it, but the activity could be selling used cars or real estate and they would not be greatly affected.

This one even shows up subtly in Andrew’s own writeup – he casually uses the word fun. To game developers, the word is Fun, and they would never write:

Now, I think that the productivity-inclined have their claim to the world, as does the fun/entertainment games people. But the intersection of this, in web media, is where the fun happens.

…because you don’t use the word “fun” casually like that where someone might hear it as “Fun”. You are sensitized to all uses of the F word :). Fun would never come from an intersection like that; that intersection could give rise to a number of side-effects and new content areas, and those content areas – with appropriate rulesets imposed – could merge, and react with some of the side-effects, to give rise, finally, to something “Fun”. Fun is not a simple concept.

very high minimum quality bar vs dont worry, be crappy

Game companies have QA departments that are larger in headcount than the entire development team, often by a substantial margin. They don’t ship stuff that is half-arsed, partially complete, partially working, etc. Hence, when they do, there is huge press and consumer attention around it. This is one of the thigns that the games industry has been doing more and more web like over the past 10 years – ever since they realised they could drop some launch-quality and end up with the same level of quality as standard by shipping a “patch” 1-3 months after launch (and probably getting an uptick in sales as a result, re-box the patched version as an “improved” version).

But, on the whole, games companies still consider quality the one unassailable pillar of the development triangle (“quality, short development time, cheap development cost – you can only have two at most”).

In fact, most game people turn “Quality” into 3 separate sub-pillars: core fun, longevity, and polish. And consider all three inalienable, but occasionally flirt with sacrificing one of those three instead of sacrificing either of the two other full pillars.

If it strikes you that the games industry is thereby trying to cheat and get “2 and 2/3 pillars out of 3” then … you’d be right. Understanding this can help explain a lot both about individual games and the industry in general over the past 15 years.

high, strict specialization vs almost no specialization

A game team is (typically) made up of distinct people doing:

  • Art
  • Code
  • Design
  • Production (project management)

You need at least one person devoted to each. For teams of size less than 5, it’s acceptable to have some people do two of those roles rather than just one, but it’s often considered “hard”
(by default – although in practice many teams flourish with people moonlighting/two-hatting these roles).

It is an onrunning joke that various non-design people in games companies have the unofficial job title of “Frustrated Designer” (most usually Producers and Programmers get labelled with this). i.e. someone who secretly wants to be a designer, but lacks the skill and experience – despite potentially many many years working in their person discipline, developing and launching games. Nowadays you also see people labelled as Frustrated Artist, and occasionally even Frustrated Programmer (although anyone brave enough to do that in the face of the programmers, who tend to be quite bullish about welcoming such people to try their hand at fixing a code bug (snigger, snigger, watch-him-fail) generally is quickly disabused of their frustration).

There’s good reason for this, too – the expected level of skill from anyone non-junior in a game team is sufficiently high that it can be very difficult for people to cross skills. It’s easy if they’re willing to drop to “junior” status (the level of incoming recent-graduate – very low-paid, and with very little creative or project input/control), but few are willing to take the massive drop in status and (usually) pay to do that.

money happens elsewhere, far down the chain vs show ME the money

Interestingly, perversely, this means that game people obssess about the money, despite never seeing it themselves, and worry about how their actions will affect the ability of later people in the value chain to make money, and how much the total pot will be.

Whereas the web people generally are much more blase about the money side, because they know it’s going to come almost directly to them, and they have a much more direct relationship with it (understand the ups and downs).

Game people’s approach to money is generally characterized by Fear, Uncertainty, and Doubt – plagued by rumour. Web people all know for themselves how much money can be made, and how, and don’t peddle in rumours.

Comments on Andrew’s observations

Andrew’s observations were all good, except for one thing which I think he misunderstood: “By withholding levels, powerups, weapons, trophies, etc., it creates motivation from the user to keep on playing. They say, “just… one… more… game…!!””.

…and then he makes a conclusion that makes sense given what he and wikipedia have said, but which is almost the precise opposite of the truth.

As a result of this treadmill, there is a constant pressure for players to stay engaged and retained as customers. But the flipside of this is that it’s not enough to build one product – instead you build 70 product variations, and call each one a level!

The truth is that content-gating was introduced and/or stuck around as a technique because the cost of creating content is exponentially higher than the cost of consuming it without gating. If you have decided to operate a content-centric game, you are doomed to be unable to run a service product based on it – no matter how many years you spend developing content before launch, your playerbase will soon catch up to your level designers etc and overtake them. Content-gating, levelling especially, forceably slow players down in their content consumption rates, even forcing them to re-play set pieces of content many many times (if you can get them to replay it enough, you can lower their rate of consumption to the point that a sufficiently large team of content-creators can keep ahead of them. Just).

Various other experiments have been tried over the years – most notably, User-Generated Content, but none have achieved the same level of efficiency (or yet been as well understood) as level-based content-gating.

Over $150M invested in Europe into social games, VWs, casual MMOs & games

Jussi posted an excellent writeup of how there’s been over $350 million invested in social games etc worldwide, and commented that he the European side wasn’t really included in his sources.

But I’ve been tracking the European side for a while, and since I’m preparing a new MMO / Education startup at the moment, I’ve recently been refreshing my data.

So, here it is: my version of Jussi’s post, but the EU-only version :)
Continue reading

The rest of the world is not like us…

Andrew Chen has a great post on how people use Facebook and why MySpace pages are so ugly

I particularly liked the straightforward comparison between the opposing viewpoints on design, i.e.:

Facebook / Google / “modern” web companies:

  • Simple, Functional, Easy

Myspace / GeoCities / “poorly designed” web presences:

  • Lots of options – perceived as complicated
  • Entertaining – perceived as lacking a point
  • Layers of complexity – perceived as difficult

So. Scrapbooking. A $2.5 Billion industry, huh? Serious food for thought for game designers trying to think up ways to take advantage of Web 2.0, but struggling to break out of the boring “chat”, “friends lists”, and “character pages” ideas…

Internet as Platform – Marc Andreessen is wrong?

“Often wrong, never in doubt” is the tagline on Marc Andreessen’s blog. With a recent post of his, on the “three kinds of platforms you meet on the internet”, I think the first part of that tagline is ringing true :P – Marc is talking nonsense with his claims that “[a Level 3 platform is] much better for the developer [than a Level 2 one]”

It’s great that he’s trying to “disentangle and examine the topic of Internet Platform”, but … seriously, there are good analyses and bad analyses, and this one rings jarringly false to me.

To save you reading the whole thing initially, here’s Andrew Chen’s summary:

The fastest summary:

* A Level 1 platform’s apps run elsewhere, and call into the platform via a web services API to draw on data and services — this is how Flickr does it.

* A Level 2 platform’s apps run elsewhere, but inject functionality into the platform via a plug-in API — this is how Facebook does it. Most likely, a Level 2 platform’s apps also call into the platform via a web services API to draw on data and services.

* A Level 3 platform’s apps run inside the platform itself — the platform provides the “runtime environment” within which the app’s code runs.

And which companies are working on Level 3 platforms, other than Marc’s Ning?

* Salesforce.com

* SecondLife

* Amazon (through AWS)

* Akamai

Which is fine, but I need to add Marc’s statement that

I call these Internet platform models “levels”, because as you go from Level 1 to Level 2 to Level 3, as I will explain, each kind of platform is harder to build, but much better for the developer. Further, as I will also explain, each level typically supersets the levels below.

  1. Are they monotonically harder to build?
    • Yes
  2. Do they typically superset the levels below?
    • Yes
  3. Are they “much better for the developer”?
    • Hell no

Marc has written a very programmer-centric post here. He’s identified that, technically speaking, the different classes of platform are “bigger” than each other and obey a transitive, non-commutative, superset relationship. Natural consequences of that are the first two items I hilight in his claims above.

But he’s then made the mistake of conflating this with *entirely unsubstantiated* business concepts of “better”. As the developer of one of these “level 3” platforms he contends are “best”, it’s no wonder that he wants to believe that it is a *logical* conclusion that the business advantage comes forth just as the technical conclusions are logically sound. But wanting to believing a thing doesn’t make it true. And whilst I genuinely believe he could have provided a decent argument that makes it true *for his business*, I think it’s not only an illogical claim, but actually false, in the general case.

Specifically, I would like to know how a level 3 is “better for the developer” than a level 2?

And I’m sorry, but I’m going to stop calling them “levels”; they are only levels in a programming sense, not in a business sense, and to name them that way implies something is globally true that only applies to one aspect of them.

Going from class 2 to class 3, you:

  1. have to do more work
  2. pay more in ongoing costs
  3. provide no appreciable benefit to any user who is also a competent developer

To give an example of a valid way of making the “3 beats 2” argument work is that you could argue that if your target-market is people who can’t write code at all then the third point above is irrelevant, and that actually you ARE adding value.

But for all the other users – and, let’s be fair here, Marc chooses *Facebook* as one of his examples of class TWO, not three; Facebook, where pretty much any idiot can (and does) write a facebook app within a matter of days or hours – point three above means you aren’t adding any value at all by moving to class 3.

Hosting is incredibly cheap these days, and developing basic functionality is incredibly easy – as mentioned, look at the proliferation of non-programmers and what they’ve done on FB. Reducing the dev cost and hosting cost over and above a level 2 platform seems to have very little actual point to it.

And, worst of all, with a level 3 platform, you make it into an “all-or-nothing” proposal, completely about-face from what has driven the proliferation of Web 2.0. You create a walled-garden of proprietaryness, where every user is dependent upon your ongoing existence. Facebook expressly does not do this.

Even when people use your service because they have no choice but to limit themselves to your walled-garden, you will scare away vast swathes of the best users because they will be rightly suspicious that yours is a proprietary platform that they cannot exist without.

I would rather contend that class 2 apps are the best of all. Why? Because:

If I develop an FB app, and FB disappears tomorrow, I can still run my app all over the web with almost literally no changes to code.

On the other hand (and I know many examples of where this has prevented people from using SL, even though LL have taken many steps to blur this and insulate people from the problem, including open-sourcing pretty much everything)

If I develop something in SL, and Linden implodes tomorrow … I lose my entire ability to conduct business.

I think it’s telling that even in Marc’s post it’s clear he was struggling to find examples of class 3 platforms. I think it’s disingenuous to even put SL in that category, since it is (as noted) moving so strongly and rapidly towards being something different – they’re even talking about allowing anyone to run the servers themselves. If they’re a poster-child for level 3 being “much better for the developer”, then why are they running full-tilt for becoming something that would only fit in his level 2?

Ten tips and tricks for writing Facebook Apps

(Only a couple of these are java-specific, but this is a.k.a.: “How to make Facebook Apps using Java – part 3”)

(I assume you’ve already had a look at part 1 and part 2? They’re more beginner-oriented)

Bugs, Misconceptions, and Subtle Features

Interfacing with Facebook’s servers is pretty hard, considering how seemingly trivial the interface is. Obviously the almost total lack of documentation is mostly to blame for this, but some of it is just common bugs that have yet to be fixed.

So, here’s ten things I’ve found whilst fiddling with the API, and some of the nicer features that may not be immediately obvious even if you do read the docs provided by FB (you should go read all of them, but … there’s some bad organization and layout, so it can be a chore reading the mega-long HTML pages, with many of the API features having just blanks for description fields :( ).

Continue reading

How to Make Facebook Apps Using Java – part 2

In the first part, I covered a very high-level, idiot-guide to getting started with writing a Facebook app in java. This part will cover the details of how to architect your own code for basic Facebook authentication, and include code samples you can use to get up and running more quickly. It will also explain in more detail precisely how Facebook’s servers interact with your code, and what you can expect (and what their servers expect of you!).

NB: if the quoted source code is unreadable because it disappears off the edge of the screen, select it and copy/paste (or view source of the page to see it). The most useful stuff is put together into one class you can download here – source code for FacebookLoginServlet.java.
Continue reading

How to Make Facebook Apps Using Java – part 1

I wrote a game last weekend, for Facebook. Writing the entire multiplayer persistent game took a day and a half; getting it to integrate with Facebook is taking several days. Mostly, the problem is that Facebook hasn’t – yet – provided user-guide documentation, and there are plenty of bugs in their system. Without docs, you have to guess whether a “nothing happens” is due to your mistaken guesswork, a bug in FB, or … a bug in your own code. That’s fine, but it takes time, lots of time.

Google kept giving me zero hits for any of the problems, or even any java-focussed docs (just one link to a FAQ on an issue that seems to be a bug that was fixed a while ago. That’s all). So, as I solve the various problems that come up, I’m writing about them.

Platform

First thing to be clear about: if you want to write FB apps using java, you’ll be using Enterprise Edition (J2EE). The way FB works *requires* you to provide a webserver for your app. Whilst its true that java can run in the web browser, that’s a completely different way of using java – for this, you’re going to have to find a server, and install J2EE (it’s the same as standard java, just has lots of extra libraries, only a few of which you’ll need to use).

Facebook Apps: how they work

This diagram shows a very simplistic summary of the different URL’s you are asked for when registering a Facebook application, or are used when serving an App. Note that FBML is served entirely internally in the FB server, it does NOT make a request to your web server.

NB: this image got deleted in the server crash last month; WordPress is rather badly designed with images, and doesnt save them. But it’s been stolen and copied widely all over the web, so you can probably find it relatively easily
Basic explanation of facebook servers

First step: Registering your Facebook Application

Assuming you can find yourself a webserver/J2EE server to run your app on, and have a domain name for it (or the hosting provider gives you a default domain-name – you don’t HAVE to buy one just for your app), the first thing to do is register the app with Facebook. This just reserves the name of your app, and gets you the login details you’ll need before you can do ANY testing or development.

This process is actually nicely documented (and is also very simple – although the huge scary forms they ask you to fill in are very poorly explained, there’s a only a few fields you actually *need* to fill in). Don’t follow the list of things on that page literally, see the differences below that you want to make.

For the URL’s you need to fill-in, you’ll be making a servlet for each. So, work out the URL for each of the servlets (depends on how you setup your J2EE server), and have them ready to give to FB.

So, to summarise:

  1. Create a Facebook account if you don’t have one, and login
  2. Add the “Developer” app to your account (link is here)
  3. Go to your Home page on FB
  4. Click on the Developer app in the sidebar to go to the main centre for all your Developer activity
  5. Make a new application, and fill in the form it presents you with (make sure you do at least:
    1. App name
    2. Callback URL (see the example app)
    3. Canvas page (see the example app)
    4. iFrame (not FBML)
    5. Post-add URL (see the example app)
  6. Save the api-key and the session-key that it now displays for the newly-created app – you’ll need them to do any coding

First test: Can Facebook display your Application?

Create the various servlets on your server (callback, postadd, and canvas) and make each of them return basic HTML that just says “callback servlet”, “postadd servlet”, or “canvas servlet”).

Open a new browser window, and type in the canvas page URL from FB, something like: http://apps.facebook.com/yourApplicationName

You might be asked some security stuff by FB, but once you’ve got past that you should then see a Facebook page with the navbars etc, but just a big empty space in the middle with the test “callback servlet”. If so, congratulations, you’ve got your app basically working. Now comes all the hard stuff…

If not, first check that your servlet is even working, by copy/pasting the callback URL from your FB application setttings (click Edit Settings to re-load the form you submitted) into a browser window, and seeing if you can get the page. You’ve probably got a typo in the URL you gave FB. If the “callback servlet” text doesn’t come up on its own, without all the FB stuff, then your J2EE server is misconfigured or broken. Time for you to go find some Tomcat / jBoss / etc tutorials and get your J2EE working…

Part two…

Now you can move on to part 2 of this series, covering the details of how to authenticate with Facebook and start doing interesting work, including sample source code.