mark cerqueira well-rounded nerd

Proposal for Saner Pre-Ordering

Another day, another dollar, another chance to be frustrated if you were interested in picking up the limited edition of Fire Emblem Echoes. Between ernest interest in the product and scalpers looking to make a quick buck, pre-orders are a race against time and an exercise in frustration. But do they have to be? Not really.

A saner pre-ordering system could be:

  1. The seller announces product, price, and a window for pre-ordering. This pre-order week can be well ahead of the release date to leave enough time for production.
  2. During that window people can pre-order the product. There is no fixed inventory yet so the seller can sell as much as they want.
  3. At the end of the pre-order window, payment is collected.
  4. The amount of product to be manufactured is now known. An extra amount can be produced for traditional methods of distribution.

The 99% of people who want to get a copy of the product can get it and the 1% who want to purchase it to resell later can do so as well. There is no need to punish people who just want a copy for themselves and even scalpers can carry on with their business. There are limits on how fast items can be produced but that can be accounted for by having your pre-order week way ahead of release date and, if needed, distributing the product on a first-ordered, first-shipped basis.

Publishers like Nintendo ultimately want and need to make money. They should make sure no one is getting turned away from giving them money.

Defying Expectations - Tales and Zelda

You’ve probably heard about it by now, but there’s a new Zelda game out! Breath of the Wild is a wonderful game that has been an absolute pleasure to play and experience. While thinking about what I should say about Zelda, surprisingly the Tales series came to mind! Why?

Protaganists from the Tales series

I see the Tales series as a consistent deliverer of JRPG experiences. Some are better than others (and some are worse) but generally I can pick up a Tales game and know that I’ll get a healthy serving of JRPG from the game; I’ll get a cast of interesting characters, a plot to flesh them out and keep me hooked, and plenty of things to level and power up.

Reflecting upon my expectations with the Zelda series, I realized those expecations were very similar to my expectations from the Tales series. I approach a Zelda game expecting puzzles, heart containers, a Master Sword, cuccos, and boss battles in a grand adventure to once again save Zelda and destroy Ganon. Each game delivers some interesting new mechanics, but it’s usually a play on the same formula.

Breath of the Wild upended those expectations. I applaud Nintendo for taking the risk of breaking from a working formula and I’m so excited about the product that resulted from that deviation. Playing Breath of the Wild took me back to when I first started playing Xenoblade Chronicles: a feeling of excitement that I, admittedly very jadedly, thought was no longer attainable in adulthood.

If you’re a fan of the previous Zelda entries, play this game! If you’re not a fan of previous Zelda entries, play this game! If you’re not even into video games, consider playing this game! If you’ve already played this game and want to play more amazing games – with a little bit of JRPG mixed in – check out the Xenoblade Chronicles games!

Rethinking How We Talk About Programming Languages

A small anecdote to warm us up… I switched from iOS to Android development in 2012. At the time, the team I joined was using the official Android IDE Eclipse. A few days in, I was about to switch back to iOS because I could not stand Eclipse. A colleague suggested I check out IntelliJ IDEA and because of that I was able to stick with it.

It may time to rethink how we talk about programming languages. We frequently talk about languages in a vacuum, but oftentimes, there are rich ecosystems built around languages. These include things like IDEs (e.g. IntelliJ IDEA, Android Studio) and open-source libraries to enhance the language (e.g. RxJava, Retrolambda). These things impact how I work with a language and I find myself talking about how the synergy between all these elements can supplement the deficiencies of a particular language.

Let’s take Java for example. Unlike modern languages like Kotlin and Swift, Java does not have named arguments so calling a method with lots of parameters can look funny. For example, let’s call our makeNetworkCall method:

makeNetworkCall(true, false, true);

What do these three boolean methods do? Impossible to say from just looking at this line. The method header looks like this:

makeNetworkCall(boolean allowCacheResponse, boolean retriesEnabled, boolean followRedirects)

To make the call look more readable I used to do in-line comments for each parameter:

makeNetworkCall(true /* allowCacheResponse */, false /* retriesEnabled */, 
		true /* followRedirects */);

This works but it’s a tad annoying and requires buy-in from everyone on a project. We can cry about how Java does not have named arguments for methods and ride the high-horse of our favorite programming language that does… Or we can rely on the ecosystem around a language to help us work around defencencies. This is what IntelliJ IDEA added in a recent update:

Here we have an IDE supplementing a programming language to enhance the development experience. No new workflows are needed, no rewrites into a hot new programming language needed to reap the benefits, and no waiting for the platform you develop on to adopt the language updates before you can use new stuff. I don’t talk about Java in a vaccuum anymore because that doesn’t do justice to all the things I use everyday that make development easier.

Build Software for Many, Not Few

We develop software ultimately for others, usually customers. Sometimes you are your own customer. But we should aim to build software for many, not just the customer. Build for:

  • You   Build software you are proud of today and won’t be ashamed of in the future. You don’t want your name to show up when someone runs git blame to figure out who crafted a mess. Help your future self by writing stable, reusable code today!

  • Fellow engineers   Be a team player in all respects. Craft your code with care. Talk with your teammates if you’re unsure of how to approach a problem rather than building the wrong solution correctly. Review your own code before asking others to review it. Be nice; learn from your teammates and teach your teammates. Become an invaluable part of your team.

  • Quality assurance folks   QA helps engineers by testing their code and verifying implementations against mocks and specifications. Don’t waste their time. Build things properly and given your familiarity with the codebase and issues you have encountered in the past, think about edgecases and handle them before code is merged. Take the time to build tools (e.g. debug screens) that helps QA exercise every nook and cranny of your code.

  • Your customers   Don’t forget the people you are building things for. You are trying to help them solve a problem or improve something in their lives. In the hustle of bustle of the development process, don’t forget about caring for your customers.

Don’t confuse this school of thought with cognitive overload! Think more about spreading out your mindfulness - from you all the way to your customers - during the entire process. Happy developing!

The Legend of Zelda: Breath of Disappointment

The NES had the original The Legend of Zelda, the SNES had A Link to the Past, the N64 had Ocarina of Time, the Gamecube had The Wind Waker, and the Wii had Skyward Sword. On the heels of the release for Nintendo’s newest home console – the Switch – and a new entry in the Zelda series – Breath of the Wild – which will be released on both the Wii U and the Switch, I can’t help but feel so very disappointed in how Nintendo let the Wii U down: we never got an original and exclusive Zelda game for the Wii U.

There are a lot of reasons the Wii U didn’t do well, but Nintendo’s saving grace has always been its incredibly strong portfolio of games. Nintendo was slow to do so, but it ultimately released titles from this portfolio on the Wii U, but it never did so for Zelda. We got HD remasters of Wind Waker and Twilight Princess, but never a new entry in the Zelda franchise.

I’m excited for Breath of the Wild, especially after hearing the Monolith Soft team lent a hand on the project, and will be playing it on my Wii U. In the end, the Wii U ended up with a great library of games from Nintendo’s existing portfolio like Mario Kart 8, new staples to add to their portfolio like Splatoon, and a (obviously) great game by Monolith Soft: Xenoblade Chronicles X.

I won’t claim that a Wii U exclusive Zelda entry would’ve saved the console, but it would’ve at least shown that Nintendo put its all into making the Wii U succeed. I hope Nintendo puts its all into making its future consoles and games succeed.