Why arguing about Link’s gender is dumb, and why it’s important

So there is a new Legend of Zelda game coming out, as there always is. Nintendo have shown it at E3, and fans have been speculating about it endlessly in anticipation, as they always do. I guess somewhere or other, people glommed on to a rumor that Link might be a girl in this next incarnation.

Nintendo shot down that rumor with some spurious logic about balancing the triforce, which apparently becomes unbalanced if it goes from 2/3 male to 2/3 female. See, in the original Legend of Zelda, a Triforce was a golden triangle made out of 8 pieces of smaller triangles, and there were three of them: a triforce of wisdom, a triforce of power, and uh I forget let me look it up, oh yes a triforce of Courage. These triforces brought “balance” to the world, and whenever the balance gets out of whack, Link (using the Triforce of Courage) has an adventure to restore balance and peace to the world.

Later, I guess, these triforces became identified with the major characters in the Zelda world: Link, Zelda, and Gannon. And because these characters have gender, and because a 2M:1F gender ratio is apparently “balanced”, you can’t make Link a girl. Because apparently there’s no way to restore that imbalance through adventuring, or rewrite Zelda to be a dude, or whatever. It would just ruin Zelda as we know it, according to Nintendo. This, despite the fact that Link takes on a wide variety of identities in many of (immutably) his adventures.

Link can be anything you can possibly imagine... except a girl.

Link can be anything you can possibly imagine… except a girl.

My point in writing this is not to slam Nintendo for their decision to keep Link male, but to point out that Link is Nintendo’s property, and they can manage their property however they want to. They don’t have to make up dumb excuses (and they are dumb) why Link has to be male. They don’t owe fans a female Link. If they decided to offer a female incarnation of Link, there’s nothing wrong with that, either. But Nintendo created and own the Legend of Zelda world, and they’re the ones who get to decide how it works.

Except…

We get to play in that world. As it unfolds for us, we take part in the creation, and so each of us owns a small piece of it. We are invited to become Link — as is the common convention with nearly every videogame ever made: you are the protagonist.

And, it turns out, about half of us are girls.

So, regardless of what the instruction manual says, or what the pixels look like, or what Nintendo wants, about half of all Links are girls.

For some girls, they may think of Link as a boy, and so they’re playing “in drag” while they use Link as their avatar, in much the same way that, in Shakespearean times, men played the women roles too, since real women weren’t allowed to be actors back then.

Some girls playing as Link may think of Link as a girl. That’s fine. Maybe Link’s a tomboy. Or maybe she’s disguised as a boy, because Hyrule doesn’t accept that women can be action adventure heroes. Or maybe some other thing.

Who cares? If someone wants to play the game and use it with their imagination that way, who are we to tell anyone that they’re wrong? That’s the experience they had, playing their game. There’s nothing official about it of course, but that doesn’t matter.

The thing with videogame characters is, we inhabit them for the duration we play the game. It’s like putting on a costume and playing a role. Each actor brings something different to a role.

But if we neglect this aspect of theatrical artifice, and consider the character of Link as a real person, who is a distinct individual, the character has its own identity. Its original incarnation as designed by the original creator seems to have some sort of magical hold on the character concept that defines it. Link is small. Link wears green. Link uses a sword and shield. Link explores the world and finds things. Link is heroic. Link is… male.

But every time a serial storyline has a new story written, or goes on a new adventure, the author of that story takes the opportunity to create new things. If there wasn’t anything new, there wouldn’t be much point to creating a new story. These new stories may be said to extend the existing body of canonical stories that have to agree in continuity. Or they may have an “alternate” reality, often thought of as subordinate in some sense, or subject to pre-existing continuity where possible, but existing in a loosely connected multiverse of worlds surrounding different incarnations of the characters. Sometimes serial stories are “rebooted” or “reinterpreted” by new authors who take aspects of the original work, and use them as raw materials for writing completely outside of the canonical milieu.

There’s some core conceptual things that we sense in the character that can’t be changed, and everything else is subject to the interpretation the author/publisher chooses to present, and the vestiges of the actor’s persona that a player brings for the time they inhabit the role. In cinema, characters like James Bond and Batman have been portrayed by different actors. On stage, over 4+ centuries, different actors have portrayed the characters of William Shakespeare in countless different interpretations. In comic books, different writers and artists crank out new stories in a world that has been worked on in some cases for 75+ years, while the characters never seem to age, despite the world around them always being contemporary to the time of publication. Sometimes these characters go through dramatic re-inventions or spin-offs.

People debate whether these things are good or not, but the world keeps on going.

What’s different about videogames is, we all inhabit the role of our videogame protagonists. This is different from Christian Bale inhabiting Batman for a while, and then handing it off to Ben Affleck, etc. Each of us who plays a Zelda game is Link, contemporaneously and privately. Link *is* a girl, in hundreds of thousands of living rooms, right now. And Link is a boy. Link is all things to all people.

And Link is Link, the published work offered on the market by Nintendo. We’re invited to play with him, and as him, and become him. Or her. But Nintendo gives us a set of traits and constraints to work with.

People just need to get over it and accept it, or ignore it and substitute their own reality. It literally doesn’t matter which you choose.

If the publishers want to reinvent the character or take it in some really different direction, it’s up to them to do so in a way that brings the bulk of the fanbase along, or to be willing to leave a chunk of the fans behind. Either way, it’s fine.

Just do a good job with it.

Classic videogame storage

If you’re a classic game collector, videogame storage is a constant challenge. After hunting for the better part of a year, I have found that Sterilite 32-quart/30L “Clear View Latch” containers are just about perfect for my needs. Measuring 23 5/8″ L x 16 3/8″ W x 6 1/2″ H, they seem to be an ideal size for Atari 2600/Colecovision/Intellivision and NES cartridges. I highly recommend these, and I hope that Sterilite won’t discontinue them any time soon. I bought several at Target recently for $6.29 each.

Product label for Sterilite 32-quart Clear View Latch container

It’s also a good size for carrying and moving — they are not too heavy when fully loaded, are sturdy enough not to bend when lifted, and the lid latches securely to the bin. The walls and corners are somewhat rounded, which is necessary for strength and rigidity with this type of plastic, but are straight enough that you don’t end up with a lot of wasted space or weird humps that prevent the games from lining up nicely into rows and columns.

One of the annoying problems of storing Atari 2600 games is the odd sizes certain third parties packaged their games in. M-network, Parker Bros., Imagic, and others, used non-standard sizes which will mess up any specialized solution that uses slots. This container is tall enough that this is not a problem for all but the “double ender” carts that are two games in one, elongated shell. This is great for me, because it means that I can finally store almost all of my games in alphabetical order by Title, without compromising by storing the oddball cartridges in another container.

About 80 NES games fit neatly in one bin.

NES games in four rows of twenty fit neatly in the bin

And about 102 Atari 2600/7800/Colecovision/Intellivision sized cartridges.
Atari games in 6 rows of 17, for a total of 102, fit efficiently in the bin

I need to buy more to box up the rest of my collection, but when I do I’ll post some more photos showing how they do with Atari 5200, SNES, and N64-sized cartridges.

Follow Up to GameMaker: Exodus

My earlier post airing my dissatisfaction with GameMaker since YoYoGames was acquired by PlayTech has been unexpectedly popular. Shortly after the post went live, prominent indie game developer and owner of the ersatz gamemakerblog website, TrueValhalla, retweeted the article, bringing a great deal of traffic to this site, and many other retweets, likes, and comments.

This evening, the article received some attention from Shaun Spalding, of YoYoGames, and I had a brief exchange with him on Twitter, although due to the time zone difference it was late for him and we weren’t able to go in depth. Shaun’s a recent hire at the company, and has been in charge of the community forums since joining. Previously, his YouTube channel has provided a great series of GML tutorials. He’s an all around good guy, and I have nothing against him personally. In fact, I’d like to be clear, I have nothing against any of the other prominent YYG personalities such as Mike Dailly or Russell Kay, or GMC forums administrator Mark “Nocturne” Alexander, or former YYG CEO Sandy Duncan. All of them have been friendly and accessible, and have always responded to questions, suggestions, and even the occasional complaint professionally. It’s great to have such accessible and visible people standing behind the product. I’m not looking to make enemies or get into a fight with anyone. I’m interested in frank dialog.

TrueValhalla characterized my post as detailing the “decline of GameMaker” since the PlayTech acquisition. I didn’t use those words myself, but it seems like a reasonable way to characterize my position, given the numerous disappointments and failings I had outlined in my post. I would say that my confidence in YoYo and in the future of GameMaker is at a low point. In my opinion, GameMaker hasn’t declined, exactly — it’s improved over what it was a year ago — but the rate of improvements has slowed noticeably over the last year. With the failed migration of the GMC Forums n the last couple months, I’m very concerned.

Absent insider knowledge of what’s going on, I am left to speculate that it’s due to the way PlayTech have managed them. A large part of the problem has been YYG’s failure at maintaining community relations to let concerned users know what’s going on with the product.

The minute the new GMC Forums release was late, or better still, the moment they knew it would be late, YYG should have communicated to the community to let them know what was going on, why, and what to expect, and when.

I’m not slamming YYG by saying this; I’m trying to help them by calling attention to problems, so that they can make improvements. My dissatisfaction with GameMaker doesn’t mean that I want to see GameMaker fail, or even that I don’t like GameMaker. Quite the contrary, I love it and want to see it thriving. But, the fact is, I don’t see GameMaker thriving right now, and I see numerous reasons for concern as I outlined in my previous post. There should be no controversy: a company must listen to its customers and be responsive to their needs.

But, given their track record over the last year since the PlayTech acquisition, I don’t have much hope for improvement. And so I’m looking at alternatives, and I’m currently very interested in the Godot engine, which seems to be delivering improvements with great velocity and doing all the right things to attract my attention as a developer. It’s good to have alternatives, and anyone who’s passionate about game development is constantly looking for better tools anyway. However good GameMaker is, they have to improve continuously in order to remain competitive in the marketplace. Slowing down or stagnating is death in this business climate. I really don’t want to see that happen.

Let’s look at Shaun’s responses in detail.

First, he responded by tweeting that he disagreed with “basically everything” in my post, but couldn’t articulate why in 140 char. So, ok. That’s fair. This blog post is an invitation for Shaun or anyone else at YoYo or PlayTech to respond in depth to my points.

Next, he tweeted a link to reddit, where on May 26 he responded to someone asking about why the new GMC Forums were so late. The explanation offered there is that PlayTech does gambling software, and so has much more stringent regulatory requirements for security, and because of these requirements, their IT security hasn’t cleared the new forum for release yet due to unforseen issues with the security of the new forums.

This is really sub-adequate, for at least four major reasons:

  1. This explanation happened on May 26 — the GMC forums went offline on April 8, with a promise to return in about two weeks, which would have been April 22. So this explanation is over a month late.
  2. The explanation is buried on a subreddit, not on the front page of yoyogames.com, or even on the front page of gmc.yoyogames.com, where it belongs.
  3. Someone had to ask what was going on. Didn’t it occur to anyone at YYG that the community would want to know what was going on with its forum, and that they should proactively communicate what’s been going on? YYG seem to have completely disregarded the importance of the community of active users who support their business.
  4. The explanation reveals that they weren’t prepared to perform the transition, and did not plan adequately. Good IT practice says that:
    • There should have been a rollback plan in case the deployment couldn’t happen as planned.
    • The gap between the old forum going readonly to the new forum going live should have been minimal. Even the planned two weeks of no GMC forum was far from optimal. There really isn’t any good reason why the old forums should have gone readonly until after the new forum was up and running.
    • You should understand your security posture and ensure requirements are met before you start deploying a new system. During deployment is not the time to start testing the security of your new system!

It sounds like YYG went about the transition thinking that it wouldn’t be a big deal to make changes live on the production server, and midway through PlayTech caught wind of what was going on, at which point their IT Security department said, “Hold up, just what are you doing? Oh, hell no.” And since then, they’ve been stuck trying to comply with whatever PlayTech IT Security’s requirements are. And this has been going on for two months now, with no announcement or explanation in the most obvious place to make announcements, and no end in sight, and no rollback. GMC forum users are without a forum that they can post discussion on.

There’s no way you can convince me that “it’s all for the best” or “this was the way it had to be” or “this was the best we could do under the circumstances.” It’s a disaster born of mismanagement, poor planning, and poor communication. It harms the community of customers, and it harms YoYo’s reputation.

I highly, highly doubt that since the PlayTech acquisition that the YoYoGames web servers were integrated into PlayTech’s infrastructure in such a way that a security compromise in the GMC would have any impact to PlayTech’s compliance with any gambling regulatory concerns.

Absolutely, YYG should be implementing a secure web forum to replace the old GMC. But they should have had an acceptably secure solution ready before they went to deploy it.

You can bet if the GMC forums were directly generating revenue for YYG, this would never have been allowed to happen. But YYG seem oblivious to the fact that the community of GameMaker users is the lifeblood of their company, and that trust in YYG is essential. Users do not become customers without faith in the vendor.

Next, in response to my question of why YYG haven’t fixed the performance issues in My Library for over a year, Shaun’s response was that they have a small team and struggle with prioritizing fixing existing stuff and delivering new stuff.

I don’t doubt that. However, nothing about that admission inspires confidence. It generates a little sympathy, perhaps, but I can’t build video games with sympathy.

Here’s what’s wrong with Shaun’s response:

  1. Having been acquired by a larger company, YYG should have resources to hire additional staff to get to these tasks.
  2. YYG project managers need to assess the capability of their team and release only what they can maintain.
  3. The Marketplace is a major new feature. Releasing a beta, and then not continuing to develop it is not the right way to do a beta. Beta releases should be actively developed, and given priority. The purpose of doing a beta release is to allow the users an opportunity to use the solution, and provide feedback that can be used to improve it prior to the official release. Failing to act on feedback about the beta defeats the entire purpose of releasing it. Labeling something “beta” is not an excuse for poor quality.
  4. The workaround solution offered by YYG limits the number of assets a user can effectively own. Any defect that limits or discourages users from purchasing assets in the Marketplace should be considered a critical bug and given top priority. The whole purpose of the Marketplace is to generate sales of the assets sold there.  Anything that discourages or limits the number of assets a user of the Marketplace can own is a top priority problem. Imagine if Amazon had a bug whereby every time you buy something from them, it makes the amazon user experience slow down, eventually preventing people from using anything they bought from them. What priority do you think Amazon would give to fixing that problem? Do you think the fix would be to advise customers to not buy so many things that it hurts performance, where “so many” is a number that can be represented in 7 bits?
  5. The performance problem of My Library is embarrassing. YYG should prioritize fixing it out of pride. Or shame. Either way. There’s no way a computer built after 1977 should have a problem managing a list of 100 items! Even an Apple ][ should be able to generate the list in under a second. Whatever is wrong with the code in My Library that causes this performance degradation, it is very, very wrong. No matter how bad Delphi is, surely it was always capable of managing a list of 100 items in a few milliseconds. It shouldn’t take a 2.0 GHz Core 2 Duo with 8 GB of RAM 11 minutes to populate the list! It shouldn’t take another 11 minutes each and every time the list needs to be refreshed!
  6. If your team is hard pressed to balance fixing current issues vs. building future solutions, your team needs to stop working on building future solutions immediately, and start fixing problems until you’re free enough of technical debt that you can advance while maintaining what you’ve released. Ideally, fixing problems can be accomplished by releasing the future solution. Get off the Delphi codebase and work on releasing a clean, maintainable rewrite. But don’t introduce more new features that you can’t support until you’ve gotten a handle on supporting what you’ve already released. If Delphi makes development difficult, stop using it.

My conversation with Shaun ended before we could get very deep into these points, so I don’t mean to bury him before he’s had a chance to address things, and I hope to hear more from him or others at YYG about how they intend to address these problems. But the response that I’ve seen so far haven’t been what I’d hope to hear, and do not inspire confidence.

I sincerely hope that YYG can turn things around and give its customers the GameMaker they deserve. But how they can accomplish this, given what they’ve shown lately, I don’t know. Getting the new GMC Forums up and running as soon as possible has got to be a top priority for them. Addressing the performance problems with My Library for “large” manifests has got to be a top priority for them. Releasing GM:S 1.5 or GM:Next, and getting off of the Delphi codebase that has given them so much technical debt has got to be a top priority for them. YYG need to understand what’s important to their users, and act to deliver the most important things. They used to do pretty good at this, prior to being bought by PlayTech. They need to get back to that, right away.

GameMaker: Exodus

I’ve been doing game dev programming in GameMaker since 2010, and lately I’ve been feeling rather frustrated by the pace with which they’ve been improving the tool. Since being bought by PlayTech in February 2015, YoYoGames seem to have hit a brick wall.

Languishing, poor quality betas of (potentially) exciting new features

The GameMaker Marketplace debuted almost two years ago. Today, it is still in Beta. Much worse than that, there has not been any substantial development in the Marketplace website, or the integration with the GM:S IDE, in about the last year-plus.

There’s been a long-standing bug with their marketplace integration, when you have purchased a “large” number of assets from the Marketplace, the interface for managing them bogs down and becomes nearly unusable. I reported this defect, a year ago, and YoYo have acknowledged the problem, but done nothing to address it in a meaningful way, other than to warn users not to buy too many marketplace assets. That’s right: YoYoGames built a store for its users to sell assets they’ve made to each other, and then told them not to buy too many assets.

The interface for My Library is terrible — very basic, and lacking in features to allow you to organize the assets you’ve purchased. The performance problem especially is infuriating, and makes the My Library feature basically useless. I offered some ideas for improving the My Library interface on the GMC Suggestions sub-forum, which is now unavailable — apparently YYG have done more in “archiving” the old forums than simply setting them to readonly. [Internet Archive snapshot of the forum thread.]

YoYo acknowledged the problem, but rather than fixing the performance problem, they recommend a workaround of disabling assets from your purchase manifest, until the number of purchased assets is at a number that GM:S can manage without choking. That is, YoYo recommend that you disable assets that you’ve purchased through the Marketplace store, until you’ve disabled however many assets you may need to get below a number that their terrible interface can manage. We’re talking modern computers with billions of bytes of memory and multi-core gigahertz processors, choking on a list of perhaps 75-125 assets. It’s an embarrassment, and the worst part of it is that it discourages users from purchasing more assets from the marketplace, or using them.

None of this has stopped YYG from taking 30% of sellers’ revenue from Marketplace sales. In many cases, sellers are building assets which provide features and functionality that YYG should have developed themselves. For example, GameMaker 8.x used to have something called Room Transitions, which gave a neat visual transition when switching between one room and other. These were implemented in a way that took advantage of native Windows system calls, and couldn’t be supported on other build targets easily, so rather than re-implementing them in a cross-platform way so that all build platforms could make use of them, the room transition functions were deprecated and removed from GM:S.

Developers were told to write their own room transition code, and not expect the built-in transitions to return in any future updates. A few enterprising GM:S users have done so, and now sell room transitions asset packs through the Marketplace. The result of this is that a feature once included in GM:S now a separate add-on that you have to pay for. Except YYG don’t have to pay the developer anything for the work, and instead take a 30% cut of the developer’s income. This makes the Marketplace a very cheap way to outsource development that should be happening in the core product, not as aftermarket add-ons.

Of course there’s also a lot of assets for sale in the Marketplace that are free, and/or do things that are useful but should not be core engine features. The Marketplace was a great idea, and has a lot of promise, but has languished since the PlayTech acquisition.

Hamstrung by legacy cruft

YYG have been stuck with an old, crufty codebase written in Delphi C for the main IDE, and haven’t gotten off of it in 4 years. They always blame the old codebase for why they can’t deliver new features to the IDE, and promise to consider ideas for new features in “GM: Next”. They had made excellent progress in the first 2-3 years, focusing first on improving the performance of games built with GameMaker by introducing the YoYo compiler and runtime, porting those to modern C++, and incorporating exciting new features like Box2D Physics and Shaders into the old IDE. But since then, we haven’t seen much. GM:S 1.4 was released in late 2014. The PlayTech acquisition was announced a few months later in early 2015. Before the acquisition, we had a major update about once a year: Since the acquisition, YoYo have only released minor bugfix updates to 1.4. The biggest missing deliverable by far is the replacement of the old IDE with something modern and coded in a more maintainable way. The old Delphi codebase has left them hobbled, unable to deliver new features, and having to work harder than they should have to to add simple enhancements and fix bugs in the old.

In the meantime, a third-party IDE for GameMaker has been offered by at least two different groups. Parakeet and Enigma are the effort of frustrated GameMaker users who got sick of waiting for an official rewrite of the GM:S IDE, and took matters into their own hands and built their own. While it’s good to have alternatives, these are precariously positioned as GameMaker is closed source and any third party efforts such as these are prone to breaking if YYG change the way GameMaker works.

Promises undelivered and unfulfilled

“GM: Next” feels more and more like vaporware as time goes on. There’s no timetable for its release any longer; YYG have actually withdrawn their old roadmap that charted out their plans for the future so you could know what features might be coming and when.

The last straw has been this failure of the migration from the old GameMaker Community Forum software to a replacement running something with better security and features. They put the old forums in readonly mode in early April and promised the new forum in a couple weeks, which was itself a pretty headdesk move on their part, since there’s no reason why there should have been any downtime — archive the old forum only once the new forum is up and running, ready to launch.

But, almost 2 months later, they still have yet to deliver the promised replacement forum. Inexcusably, they’ve been all but silent on the matter. No apology for taking so long, no explanation of why it’s been taking way longer than expected, no revised ETA on the new forums. I’ve seen one tweet from a YYG source saying that they don’t know when it will happen, and they’re sorry but their “hands are tied” — presumably by PlayTech.

Shaun Spalding of YoYoGames commenting on the delinquent GMC forum upgrade.

Acquisition: What is it good for? Absolutely Nothing!

Say it again!

When the PlayTech acquisition happened, I expressed some concern but optimistically said I’d take a wait and see approach before judging whether it was a good thing or not. It’s pretty clear by now that it’s been a very bad thing.

It’s been my experience from watching small companies get gobbled up by large companies again and again that it’s almost always a bad thing for the small company and those who care about what it does. A small, successful company has drive, passion, and vision. A large company wants to secure its position and diversify its risk, and cares more about maintaining the status quo and staying on top than it does about disruption and shaking things up. When a large company buys out a small company, they say the same thing every time: “We’re not going to change a thing. We’re not going to risk disrupting what’s been working so well. We want to get on board and help them succeed to even greater heights.” It’s almost always a bunch of happytalk to put customers at ease and give investors a warm fuzzy feeling.

But what really happens is the small company totally gets disrupted. There’s usually a round of rebranding that happens, and the small company is paralyzed by Find/Replacing $OLDNAME to $NEWNAME, to no actual productive gain. Then there’s another round of aligning the small company’s goals to the greater strategic vision of the big company, at which point anything interesting or cool that the small company was working on gets squashed or distorted. Oftentimes the best people who made the small company great leave, pockets flush with money from the boost in the stock price from the buyout, in order to pursue other opportunities, where they can remain nimble and free to innovate without all the dead weight overhead from the large company. Products and services shift in ways that alienate former customers, the operation hemorrhages money, customers, and employees for a time, and eventually the burning dirigible crashes to the ground. Oh, the humanity.

That’s what usually — almost always — happens. I don’t know that that’s what’s happened with YoYoGames, but I’ve seen it happen time and again with countless small companies in all kinds of fields.

There’s still a lot of things I like about GameMaker: its simplicity, it’s easy learning curve, the speed with which an demo can be built. I still think it has a great deal of potential for a bright future, but I fear that PlayTech have squandered it for much of the last year. The acquisition has caused YoYo to fumble badly, and from what I’ve seen so far, I have little hope for a turnaround.

Unfortunately, for a proprietary tool a fumble like this is generally fatal. Around the time I got into GameMaker, there was another popular tool, called Torque, that was a bit more sophisticated, and went through a similar ownership transition and died shortly thereafter, to be reborn as a MIT licensed open source project. I guess it’s technically still around, but exist today largely as an afterthought. This situation is starting to feel eerily similar. Although… if GameMaker were to be open-sourced, that would be one of the best possible outcomes of the current situation. YoYoGames have stated on many occasions that this will never, ever happen, though.

Another door opens

For the last two years, I have also been watching an open-source project, called Godot. Godot is a 2D and 3D game engine with many features comparable to GameMaker, but is all modern and open source, and as of this writing is now at version 2.0. The development environment for Godot runs not only on Windows, but on Mac OS X and Linux as well. It looks really good, and I am planning to use it for my next project.

I’m very excited by this. If it works well, and I like it, I will be able to say goodbye to Microsoft, finally, and after the debacle of Windows UpdateRape, forcing users to upgrade to Windows 10 without their affirmative and informed consent, the timing couldn’t be better for me. GameMaker: Studio was the last proprietary Windows-only application that was keeping me on the Windows desktop platform, and I had been hoping that GM:Next might allow me to run GameMaker on Linux, but with Godot I may not have to wait to see if that day ever comes anymore.

I won’t be surprised in a few weeks time if I am kicking myself for not making the transition sooner.

[Update: be sure to read the follow-up post]

A Tale of Two OS Updates

This morning, I woke up to find my phone had an OS update pending. So I installed it. My android update:

  • Took about 45 minutes from start to finish.
  • Didn’t delete any of my data.
  • Didn’t result in any of my apps breaking.
  • Didn’t result in any of my settings being reset back to defaults.
  • Didn’t result in my being logged out of anything I had been logged into before the update.
  • Didn’t result in my apps even losing their state. Even my open browser tabs were still there after rebooting. (Granted, maybe if I’d had some form filled out, but not submitted yet, I wouldn’t expect the data to be retained there, but otherwise, everything is exactly as it was before the update.)
  • Was done with my consent.

And, after the upgrade, everything pretty much works same as it did before, ALBEIT FASTER. The phone feels snappy again.

I didn’t have to learn anything to pick up where I left off.

The only thing new that I have noticed? My icons have rounder edges. That’s it. Frankly, I don’t really even care for that, but it’s pretty acceptable, and if it’s useful in quickly identifying Android 6 from 5 at a glance, ok. I’ll take it. This is as it should be for a mature UI. No paradigm shift, reinventing, or pointless reorganization. And it doesn’t feel sluggish and laggy anymore, like it had been lately.

All in all, thank you Google and the Android team.

Microsoft Windows, take note.

I’m running Windows 7 on my home PCs, and at work. We both didn’t want Windows 8, not even after the release of 8.1.

Now that Windows 10 is out, I have been receiving all kinds of news about how Windows 10 is spyware, that it reports all sorts of information back to Microsoft, more than it ever has in the past, and that it even moves your own files to their servers. Microsoft also plan on making Windows 10 a subscription-based service, instead of something you pay for once and own a perpetual license for, along with entitlement to free updates for the life of the product. I’m not interested in this, and I hope to make Windows 7 the last version of Microsoft’s operating system I ever run.

Apparently most Windows users agree with me, because despite making the Windows 10 upgrade available to users of Windows 7 and 8 for free for almost a year, they’ve only seen about 300 million users of Windows 10, after predicting 3 billion. Microsoft is desperate to hit the goal they promised, and so has taken to some decidedly underhanded tactics to force the upgrade on unsuspecting users. I’ve had to repeatedly remove Windows Updates for Win7 that would nag me to upgrade to Win10 for free. Even after removing and then hiding the update so that it should not have been re-downloaded, I’ve had it come back several times on various Win7 systems that I maintain. I’ve even taken to using a 3rd party blocker app called GWX Control Panel to monitor my systems to ensure that the blocking configuration I’ve set up isn’t being overridden by Microsoft.

Since then, I haven’t personally experience further problems, but I’m now reading about a new nag window that would treat closing the window as consent to install.

Since Microsoft doesn’t seem to respect the fact that its users are people with agency who own the computer they are running Windows on, and thus must grant consent to install software or updates, I’ve taken to calling this behavior “Windows Update Rape”. It’s an ugly word, but such strong language seems to be warranted as Microsoft continue to pretend that they are acting in user’s best interest and with their consent.

To be clear, this sort of behavior *should* be considered illegal, and by my understanding of the law, it is. My computer is my property, and if I don’t want to take an update that is freely offered for whatever reason, I should not be compelled to, nor should I be repeatedly harassed to take the upgrade, nor should the vendor resort to trickery or usurp control over my computer outright. No license terms should be able to change this.

Microsoft deserves to be sued by billions of users for hundreds of billions of dollars, and I would love to see the antitrust actions taken by the US Federal government against the company during the Windows 95/browser wars era resumed. These abuses are unacceptable and have completely ruined any trust that I may have put in Microsoft.

Microsoft should not be allowed to get away with this. Customers should be up in arms, storming the offices in Redmond, taking justice into their own hands, stringing up executives, writing a message of warning with their entrails to other companies that might dare to think they can get away with these abuses.

I’m not kidding.

Microsoft is a malware and spyware vendor, and needs to be stopped.

YoYoGames’ GameMaker Community Forums seemingly in limbo; promised upgrade overdue more than 2 weeks

Back in April, I posted about an upcoming transition with the GameMaker Community Forums. YoYoGames had announced that they were going to start a new forum, move off of IPBoard as its forum software, and give the community something fresh and modern that would be better. The old forums were to briefly become unavailable, and then would be restored in a read-only format, to preserve the history and knowledge they contain.

This was to have taken about two weeks. It’s over a month later now, and we still haven’t seen a new GMC forum. The old forums have been archived, and are available now at gmc.yoyogames.com, after being completely offline for over two weeks. YYG have not spoken much about the new forums since they announced their original plan, which has left me wondering what’s going on.

At this point, it’s difficult to characterize the transition as anything but a failure. But as to why the failure, and when things will be coming back, we’re left to speculate. I will, however, offer a few criticisms:

Archiving the old forums should have taken place instantly, not taken more than two weeks

I don’t have any insider information to justify why the transition from an active state to a read-only, logins disabled state took more than two weeks to accomplish, and I’ve never managed an IP board site before, but for this to require the site be completely offline for more than two weeks, it must have been quite a broken implementation design. It should have been very simple, and possible to achieve nearly instantaneously: disable login for non-administrator accounts. Demote non-essential administrator accounts, such that only YYG Staff directly involved in the forum migration can still log in and manage things.

Boom. Done. No one can post anymore; the site is in a read-only state for all users but the administrators. No downtime need be incurred.

So why did this take more than two weeks? I’d love to know.

Taking the old forum down should not have been done until the new forum was ready to go

Again, I don’t know why YYG did things the way they did, and it’s possible there’s reasonable explanations for it, but I just can’t imagine any. Normally, web development is done by having a production environment, which is the live web site exposed to the world, and a development environment, which is accessible to developers and operations folks. Development takes place in the development environment until all systems are go, at which point the site is migrated to the production server. Normally this migration is something that can be accomplished within minutes, or seconds. It might well take weeks or months to get to the point where the migration is ready to happen, but the actual migration doesn’t have to take longer than a few minutes if planned properly, unless the migration is truly massive, which I cannot imagine the GMC forums new software qualifying, since they had announced that the new forums would start off empty. I understand they need time to test and configure the new forum software, test it for security vulnerabilities, and so forth but all of that could have been — and should have — been done in a test environment well before the old forums were taken down.

Remaining quiet when previously-announced deadlines slipped disrespects GM:S users

When it became apparent that the transition was not happening according to plan, and this impacted the publicly announced timetable, someone at YYG should have handled communicating the news to the user community. To date, I have not seen any announcements explaining what’s going on. No explanation of why the release date has slipped, no announcement of a new date. Even if they have no idea how long it will be, there should have been some kind of communication. Without this, it creates an impression that YYG does not value the forums or the community that uses it. This is surely not true, but the lack of transparency here is inexplicable and harms YYG’s reputation. Considering the huge efforts they had made over the last 5 years with branding GameMaker: Studio as a professional-caliber development tool, and making numerous improvements to give that branding credibility, this is a serious stumble on their part.

Because of these failures, GameMaker users have been left without an official community for over a month, and have had to make do with alternatives such as gamedev.net, Reddit and Facebook. This can’t be good for YoYoGames’ reputation or the GameMaker brand. The community’s self-support for GameMaker has long been one of it’s greatest assets, and YoYoGames seems to be acting as though they do not understand this. I only hope that they can fix whatever problems have been preventing them from moving forward and complete the release of the new forums.

The Decline and Fall of the The Walking Dead

[Editor’s note: I started writing this post shortly after the last episode of season six aired, back in April… then promptly forgot about it, until season seven started last week. In light of the outpouring of fans and critics complaining about the season’s first episode, I decided to finish up and publish.]

I’m thinking about this season’s last episode of The Walking Dead. The big season ending cliffhanger in which we’re finally introduced to Negan, and he brutally beats (likely kills) one of the central cast members, and we’re left to wonder who until next season.

My feelings on the show are pretty mixed. I definitely like TWD, overall, and moreover, I am predisposed to like it. But I increasingly find myself wondering why as the show grinds on. Mainly, I think, it comes down to the characters that I’ve grown attached to: Glenn, Daryl, Carol being my favorites. They’re played by great actors, and viewers have grown very attached to them over six seasons. But what really hooked me was the strength of the writing in the first season, and the realism of the situations that the survivors faced, and the realism of their responses to it.

There was a serious external threat represented by the zombie outbreak and the collapse of civilization, but also internal struggles as people who probably would ordinarily never cooperate or interact with each other were thrust together by circumstances and forced to cooperate for a chance at survival. Disagreements and conflicts and strained loyalties. And the choices the characters made had real, life or death consequences. People died on the show, just about every episode, and they were often characters who you cared about.

But also, there were the pragmatic, immediate matters of survival at hand. What tactics work against zombies? What about a huge number of zombies? Forgetting about zombies, how do you do basic survival when civilization has collapsed — how do you eat? Stay warm? Take care of your health and hygeine?

As the show has worn on, though, these things that made it interesting have been replaced or receeded into irrelevance. It’s taken for granted that they know how to survive. They are shown foraging, farming, and scavenging, but we never really see them starving, or shivering, or too weak to go on. They’ve gotten competent with fighting and know anti-zombie tactics so well that zombies are no longer a threat unless the show decides to make a stealth zombie come out of nowhere for a deus ex machina kill. Death spares the central cast, making it tame and predictable.

[[PUT SOMETHING HERE ABOUT HOW THE SHOW AT ONE TIME GAVE A FALSE HOPE OF FIGURING OUT WHAT WAS CAUSING THE ZOMBIE OUTBREAK AND STOPPING IT]]

For a time, the series dangled some hope of answers and a resolution. We might find out what caused the zombie apocalypse. There might even be a way to cure it. But those hopes were blown up in a memorable episode a few years ago, and since then, apart from a false hope in the form of Eugene’s story that he needed to get to Washington, D.C., there really hasn’t been any sense of direction. The cast have not been on a quest to go anywhere or accomplish anything, it’s just been an endless sequence of running into people, running into zombies, running into people, running into zombies, and most everyone they run into ends up dying before too long, but the central cast had started to take on an aura of invincibility.

Encounters with the living follow a formula: Either the other group is brutal and threatening, cannot be trusted, ever, and must therefore be destroyed; or, the other group is soft and weak, cannot be relied on, and must be exploited until their inexplicably stable pocket of civilization is overrun by either zombies or stronger people. We pick up a few new cast members who have the potential of making it with the protagonist group, but these people are all marked for death, and the idea is that we’re supposed to start to develop feelings for them before the show rips them from us, usually in some meaningless, almost accidental incident that is there mostly for its shock or horror value, which due to the contrived and predictable nature of the setup, is always diminished and weaker than intended.

Because there’s not enough time to allow for meaningful character development at the pace the writers want the show to take, we mostly don’t get any. There’s hints of possibility that go unexplored as the main plot hurtles past at highway speed. In many ways it feels like what makes it to broadcast is the “digest version” of a larger, richer story that we’ll never get to see. I guess that’s why the book is always better than the screenplay production. Yet, it’s frustrating. And if they could simply choose to take the time, you know they could make the show 10 times better than it ends up being. Essentially every character’s arc is left unfinished, or truncated. This could be the tragedy that we crave if it’s in full development only to be cut short by an untimely, horrible death. But despite the cornucopia of death that the show loves to present to us, almost none of it seems to hit us that way — the recent death of the doctor character just as she’s starting to come into her own being one notable exception, but all the more glaring due to its singularity.

Also, the central characters are so safe that the show’s writers are forced to have them make stupid decisions for no apparent reason. Carol’s most recent apparent death wish and her decision to leave the group again, for no real good reason, being the latest example of this. But we see it again and again, and it feels like it’s only an excuse to put a central character in danger, only to have the show pull its punches and spare them from harm.

Now, with the Negan kills ????? cliffhanger, the show is promising us a bloody, brutal end to one of our favorite characters. I’ve admired The Walking Dead for its willingness to kill characters, as TV shows so seldom often do. It was far more interesting to watch TWD knowing that it would not pull punches and spare a character just because they were a fan favorite. But this cliffhanger, I think, is too much for me. It’s like the show is using the spectacle of execution as entertainment. Death on the show wasn’t for entertainment, at least not for me, it was there to illustrate that TWD was a different sort of show, where, just like in real life, death doesn’t play fair, and that made me feel like characters were really in peril whenever there was danger.

I haven’t watched the first episode of Season 7 still, and after reading a lot of people’s responses to it, I’m not sure that I want to.

Ludum Dare 35

Ludum Dare 35 happened a weekend ago, and although I published a postmortem on my LD48 blog, I haven’t posted here about it.

The theme for this one was Shapeshift. The first idea I had was to do a game that played like the arcade classic Asteroids, but where your ship’s shape would shift according to its state. I did a quick proof of concept Friday night, where the ship stretched under acceleration, and while it was a pretty cool effect, it wasn’t really something that made the game better or more interesting than the original. By late Friday I was convinced I was on the wrong track, and should start over with something else, but wasn’t sure what.

Saturday morning, I woke up and briefly considered just giving up my efforts for the weekend, and working on other stuff with my weekend time. In the afternoon I attended a Cleveland Game Developers “Excuse to Create” event, and started over with a new project. In the morning, I’d thought about another arcade classic, Robotron 2084, and I started getting interested in making a twin-stick arena shooter. In part I was spurred by the discovery that the keyboard for my new Lenovo ThinkPad P50 laptop has poor rollover characteristics, which make playing games on it all but impossible. I started building it at Excuse to Create and by the end of the 3 hour session I knew that I was on the right track. What I ended up with was much closer to a Geometry Wars clone than I had originally wanted, but it plays pretty well and I had fun making it.

I would have preferred to come up with a more original concept than that, but oh well. It’s not an attempt at a straight up clone of Geometry Wars, but more of a knock-off. The shape-shift theme comes into play with the target shapes, which “lose a side” when shot and shift into the (N-1)th sided polygon. This gives the larger shapes a kind of “hit points” which makes them take several hits to completely destroy. I thought that would be a novel enough twist, but in practice it plays feels about the same as the original Geometry Wars.

Along the way I learned a few things, all of which are game design rather than programming lessons.

  1. At one point in my development, I had the power-up items be vulnerable to the player’s shots, and also if the player shot a power-up item, they would lose one level of that power-up. This would have made the game a lot different from Geometry Wars, where it’s safe to shoot indiscriminately because your shot has no bad effects in that game. I had hoped that this change would make my game more about aiming and looking where you are shooting, and being careful. But in testing, it just made the game too difficult. As the difficulty of the game ramps up, it becomes a frenetic twitch game where you mostly dodge and run away from a swarm of shapes that are following you, and there’s not really any opportunity to be selective about when you’re shooting or where you’re aiming, and if you do lose a level of power-up, it’s pretty much instantly lethal.
  2. Spawn location matters. I knew that I needed to spawn enemies far enough away from the player that they would not be prone to crashing into a newly spawned instance that appeared directly in their path, leading to unfair death. But I also learned that spawning near the edge of the view makes the game seem more active, and puts more instances in view especially in the opening seconds of the game, when there are few objects and the pace of the game is slow. The compo release has enemies spawning randomly anywhere in the room, and as a result feels much more sparse and too slow during the opening.
  3. Code mistakes can be fun! My original code for spawning a swarm of enemies accidentally placed them all in the exact same location. Since the movement of the enemies is purely deterministic, this resulted in a “stack” of enemies all piled up on top of each other, looking like a single instance. When shot, instead of destroying the entire stack, the bullet would only destroy the first instance in the stack, and the rest of the stack would continue to advance, looking to the player as though a early-invincible “super shape” that took a great many shots to destroy was inexorably running the player down, and the player’s shots merely chipped off lesser shapes, which then joined in the attack. I liked the effect so much that after fixing the swarm spawn code in the compo release, re-added a toned-down version of this to the post-compo branch.

In looking back over my Ludum Dare games, I’ve come to realize that I’ve felt overly negative about my performance in LD48. I do have high standards for what I think makes a good game, and so naturally I feel disappointed if my efforts fall short of that mark. In my first few events, I was happy just to have proven to myself that I could build something playable in under 48 hours. In later events, I became disappointed that my abilities didn’t improve as fast as I wished they would. And, really, unless I take game development as a full-time occupation, it’d be hard to improve as fast as I would like. But perhaps an even greater sense of frustration has come from my inability to come up with a good idea for a game — or rather, a good idea that I could complete with my abilities in 48 hours that fit the announced theme. Particularly after the submission deadline, when I’d see so many good games produced by others. But if I focus on the 8 games that I did complete, rather than the 6 LD48 events I didn’t submit for, I’m able to view my work more positively. In the immediate aftermath of the event, I would always feel a certain amount of frustration and disappointment in some aspect of the game I’d made — some feature I struggled too much with implementing, some stupid bug that I got stuck on that took too much time to fix, some feature I had to drop for lack of time, something that was missing, but I couldn’t figure out what it was that the game needed, or something that just wasn’t quite right. But looking at what I have produced, there are some good ideas in six of the projects, and I’m happy about that.

>>> Play Shape Struggle <<<

GMC forums upgrade

YoYoGames recently decided to overhaul the GameMaker Community Forums. Formerly run on IPBoard, they are moving to a new solution.

YYG did the right thing, by asking the community for feedback on how they’d like to preserve the historic threads in the old forum system. The old forum will be retained, frozen in read-only mode, with no sign-in allowed. I’m a bit concerned about not being able to log in any more, since it was easier to find content that I had posted or replied to that way. It would be nice if the forums could be read-only but still allow existing users to log in. But, as I understand it, the IPBoard has had many security problems, and so disabling login probably helps mitigate privilege escalation attacks.

When the new forum goes live, users will need to re-register their username. I had suggested that YYG reserve the user IDs of all existing users and send an invite email to them, to claim their old username. I don’t believe that this suggestion was adopted, however. It would have been a good thing, though, as there’s been concern that pranksters might claim famous user names from the old forums and impersonate users. Hopefully this will not be a big problem, but a way to either carry over the old user accounts or else reserve the account names and send invites to users to claim their old username would have been a great way to avoid the problem altogether.

Currently the old boards are down while the upgrade is happening. The migration is taking several days, during which the boards will continue to remain down. I don’t understand why it should take such a long time and having the boards unavailable for an extended time is disappointing; I would think that YYG could have the new forum software staged in a testing environment that could be moved to the live server with a simple press of a button to trigger an elevate script. Likewise, I would think that putting the old forums into read-only mode could be achieved without taking the forums offline at all. Why this wasn’t possible, or wasn’t the best way to take on the migration, I don’t know. There was a very active thread discussing this, but… it was on the old forums, which are currently down.

Based on what I read, it’s unclear at this time whether the url of the old forums will continue to be gmc.yoyogames.com, and the new boards take a new domain name, or if the old forums will be moving to a redirected url. My hope is that the old URL will be preserved, so deep links to old threads will not be disrupted, and the new forums will have a new domain name. However, my guess is that the new forums will use the existing gmc.yoyogames.com domain, and the old forums will probably be redirected, or simply moved.

It will be interesting to see the new forums, how they are organized and curated. Hopefully YYG have learned from the years they maintained the old forums, and will have many improvements. The biggest item on my wish list is to allow file uploads and hosting, so that project files no longer have to be hosted on external services, which tend to fall victim to link rot over time.

The developer community surrounding GameMaker has long been a valuable asset to YYG. In a lot of ways, it’s probably their best asset — the community has always been very helpful for helping new users solve problems and turn into seasoned, experienced programmers. Hopefully the new forums will continue this tradition for many years to come.

Hands On Introduction to Agile: reflections

So last night after work I went to the Cleveland Agile meetup, where we did a “Hands on Introduction to Agile” workshop. It was really fun. Even though I’m reasonably well acquainted with Agile concepts, I got a lot out of the experience.

We didn’t use computers or programming in the workshop, which made the event accessible to non-technical people who didn’t have specialized skills.

The workshop was split into two exercises.

For the first exercise, we split into four groups of about 6 people. We were sitting at tables, and each table had a pile of Lego pieces. We were instructed to split the pile into halves, and then spend 60 seconds sorting one of the halves, according to whatever sorting method we felt like using. We quickly sorted our pile by color.

Then, the facilitator re-assigned my team to work on the project on the table next to us, and told that team to work on our project.

The other team who’s work we inherited had barely done any sorting. All they had managed to do was take the pieces that had wheels and separate them from the rest.

Our project was to build a structure using each type of Lego piece only once. No duplicate pieces were allowed. We weren’t told what to build, just to connect bricks together. Our team split into two groups, one for each pile of Lego, and each built a structure. We quickly re-sorted our badly-sorted pile, and then did a second-order sorting to weed out all the duplicate pieces, then assembled the rest into a disorganized hodgepodge structure that had no architecture or form. We barely had enough time to do this. The other half of our team took the unorganized pile from the first sort, and did their own structure.

We were asked which half of the Lego piles was easier to work with, and obviously the sorted piles were better to work with. It was much easier to pick out the duplicate parts from the sorted piles, so construction from the sorted piles went faster and smoother.

I was expecting we’d do another iteration, and that it would involve changing the structure in some way, and so I was worried that the haphazard, planless structure we had built would be unsuitable for modification, and that this would teach us another lesson about the value of planning architecture, or refactoring, or maintainability. But we actually stopped with the legos at that point.

I asked the facilitator what we might have done had we been asked to do another iteration, and he said maybe it’d be a project to combine the two structures that the two halves of the team had built, with a requirement that we keep to having no duplicate pieces. I thought that would have been pretty interesting.

It’s too bad that I didn’t think to take pictures of the stages we went through, as it would have made this article a bit more fun to read, and easier to understand, I think.

For the second half of the workshop, we split the participants into two groups, counting off by twos. Ones were asked to find a Two to partner with on a project. It happened that we had an odd number of people, and I was the odd man out, so I was joined to a group, creating a group of three. This turned out to make the experience more interesting for me.

Once we had our pairs established (and my triad), we separated, the ones stayed put, and the twos went to another room, where we talked for about 10 minutes about why we were interested in Agile, who among us were actually “developers” in real life, etc. It was just conversation to pass the time. After ten minutes, we went back to meet with our partners. They were the project’s business requirements stakeholders, and had written up instructions for us, the project developers. They handed off the instructions, and before we were allowed to read them or ask any questions, they all left the room. We developers were given ten minutes to figure out the instructions and follow them.

The instructions were to draw a figure. The instructions were difficult to understand. We didn’t know *what* we were drawing, only a description of the various aspects of the drawing. The instructions specified the color of the lines, and described shapes that the drawing included, but it was hard to visualize from the written description. We muddled through it and did our best to figure it out, but we were not very confident in what we produced.

It turned out that our drawing was reasonably close to what was asked for, but the lesson we took from this was that the process was more difficult and less certain than it would have been had the “business requirements” person stayed with us and been available to answer questions and provide feedback to us as we were working.

After reviewing our drawings and discussing how we felt about the experience, we switched roles. The Twos took on the role of the business requirements analysts, and the Ones departed to allow us to work on instructions for how to draw a new drawing. This time, though, the business analysts were allowed to stay with the developers while they worked, and the developers were allowed to ask us questions. We business analysts weren’t allowed to interfere by volunteering feedback, but if the developer had a question we were allowed to answer it.

Since this was the second time we were doing this, and we both had a little bit of experience with it, and had seen the previous finished product, it was a bit easier. But being available to answer questions made an even bigger difference. We could eliminate the uncertainty in the developer’s mind about what they were trying to draw, and give them confidence that enabled them to move forward with each step successfully completed. The finished drawing was extremely close to the model this time; only if we’d been able to provide detailed measurements of line segment lengths and angles would it have been able to be improved.

For me, working as a pair team, this experience was more interesting. I not only had to deal with the written instructions, but I also had to figure out how to work effectively with the other developer on the team. I don’t often get to do real pairing, and working with other programmers has always been somewhat mystifying to me. So this was a good opportunity to try to figure out ways to work effectively.

For our first project, I tried to decipher the instructions step by step. It seemed that some of the steps were very complicated and difficult to understand, while others were relatively simple and straightforward. It occurred to me that we might run out of time trying to figure out the very complicated steps, and not get to the simpler steps. So I volunteered the idea that we should try to draw out the parts from each step separately, then figure out how to combine them. Tackling the project in a modular way seemed like a smart idea, but since we didn’t have the means to cut and paste the drawing elements, it meant a bit of re-work as had to we re-draw the bits from each step that we’d created during what essentially had turned into tiny sub-iterations for the “release version” of the drawing. While this did take some extra time, I think the final drawing ended up being better for it.

The instructions were not very well organized, either. When I got down to Step 7, I found that it referred back to Step 2, providing some additional clarification, but in a way that would have made us have to throw out the work we’d already done on Step 2, if we’d done Step 2 without first reading the entire set of instructions. We ended up drawing the different parts from each step separately, then puzzling out how to fit them together — the instructions were probably the least clear on this. They specified that lines should not overlap and that the different parts of the drawing should all connect, with no un-attached line segments, but it was unclear how exactly this was to be accomplished. What we ended up with was pretty close to correct, but we really had no idea how close we were until we saw the “prototype” drawing that the instructions described. But I did find it helpful to have a partner who I could discuss with while puzzling through the instructions together.

When it came to writing up the work instructions for the second iteration, partnering wasn’t easy either. We ended up just writing up our own instructions separately, then comparing what we’d come up with, and picking the superior of the two, which happened to be mine. Mine was clearer, simpler, and more complete. But again, having a second pair of eyes helped, and my partner made some suggestions to improve a few minor points that needed additional clarification. When our developer came back and worked on the instructions, he only had two or three questions as he followed the instructions, one of which was a matter of not being able to read my handwriting, the others being about specific angles, which I’d been somewhat vague about. But his drawing was very, very close to the shapes and lines we were describing, correct in all the major details, and only off in terms of specific lengths and exact angles, which we didn’t have time to measure or describe in the time we had to create the instructions.

Figuring out how to work effectively with someone on a project is always a challenge for me, especially with people who I have not worked with previously. But it seemed to go very smoothly with these exercises. In part I think this was because they were especially simple, and it didn’t seem like there was a need to do a lot of discussing about who should do what, or how to do it. We just sort of dove right in, and did it, and we didn’t seem to get in each other’s way all that much, if at all. With more complex, more serious work, this doesn’t seem to work as well, and I have yet to work on a real project with a pair programming approach. I would really like to have this sort of experience sometime.