<?xml version="1.0" encoding="utf-8"?>
<feed xmlns="http://www.w3.org/2005/Atom">

  <title>Makalu Blog</title>
  <link href="http://makaluinc.com/atom.xml" rel="self"/>
  <link href="http://makaluinc.com/"/>
  <updated>2015-09-16T13:30:35+00:00</updated>
  <id>http://makaluinc.com/</id>
  <author>
    <name>Makalu Interactive</name>
    <email>hello@makaluinc.com</email>
  </author>

 
 <entry>
   <title>The State of Bitcoin in 2015</title>
   <link href="http://makaluinc.com/blog/2015/09/state-of-bitcoin-2015.html"/>
   <updated>2015-09-15T00:00:00+00:00</updated>
   <id>http://makaluinc.com/blog/2015/09/state-of-bitcoin-2015</id>
   <content type="html">
&lt;p&gt;In 2012, a visiting friend from Berlin got me excited about bitcoin. During the next several months, wild price fluctuations, the scent of speculation and spectacular collapses of exchanges like Mt. Gox, caused many to dismiss bitcoin as nothing more than a bubble that would eventually pop and disappear, like the Dutch Tulip mania of the 1600s.&lt;/p&gt;

&lt;p&gt;The effects of speculation unfortunately obscured the promise of bitcoin’s underlying technology. With bitcoin, the transfer of value—whether $1 or a million—is instantaneous, irreversable and nearly cost free. And its network-distributed “blockchain” provides a level of transparency and accountability that has never before existed in financial transations.&lt;/p&gt;

&lt;p&gt;In 2012, my hope was that bitcoin would survive. Today, in September 2015, I thought I’d reflect on some observations of how its doing.&lt;/p&gt;

&lt;h2 id=&quot;price-stability--adoption&quot;&gt;Price stability &amp;amp; adoption&lt;/h2&gt;

&lt;p&gt;The price of bitcoin seems to have (relatively) stabilized around $240, as seen in this chart from &lt;a href=&quot;http://coinbase.com&quot;&gt;Coinbase&lt;/a&gt;:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://files.dafacto.com/uploads/Screen%20Shot%20on%202015-09-16%20at%2011_54_13.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;It hasn’t reached a level of stability that would give me the confidence to store large values, but nonetheless it’s a promising sign in terms of its liklihood to survive.&lt;/p&gt;

&lt;p&gt;In terms of adoption, it’s also promising to see a steady increase in the number of daily bitcoin transactions.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://files.dafacto.com/uploads/Screen%20Shot%20on%202015-09-16%20at%2011_56_52.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Many, myself included, imagine that there’s only two outcomes for bitcoin—that it will eventually replace gold as the world’s principle non-fiat store of value, or that it’s value will go to zero. &lt;/p&gt;

&lt;p&gt;It’s interesting to consider that if bitcoin attained even half of gold’s current $6.5 trillion market cap, the value of a single bitcoin would be worth over $150,000.&lt;/p&gt;

&lt;h2 id=&quot;wallet-technologies&quot;&gt;Wallet technologies&lt;/h2&gt;

&lt;p&gt;The emergence of &lt;strong&gt;multi-signature wallets&lt;/strong&gt; allow users to store their bitcoins with providers like &lt;a href=&quot;http://coinbase.com&quot;&gt;&lt;strong&gt;Coinbase&lt;/strong&gt;&lt;/a&gt; and &lt;a href=&quot;http://bitgo.com&quot;&gt;&lt;strong&gt;Bitgo&lt;/strong&gt;&lt;/a&gt; in such a way that they can’t be lost to hackers or mischief on the part of platform staff (think Mt Gox).&lt;/p&gt;

&lt;p&gt;The emergence of &lt;strong&gt;hierarchical deterministic wallets&lt;/strong&gt; allow  far greater privacy and security, in that a unqiue address can be generated for each transaction, and the entire wallet can be recovered from a complex passphrase in the case of, say, loss of device.&lt;/p&gt;

&lt;p&gt;And for those who want to completely delegate the custody of their bitcoins to a third-party, we’ve seen the emergence of services like &lt;a href=&quot;http://xapo.com&quot;&gt;&lt;strong&gt;Xapo&lt;/strong&gt;&lt;/a&gt;, who currently lead the market in custody of bitcoins held by large institutions (such as the Bitcoin Investment Trust ETF.)&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://files.dafacto.com/uploads/Screen%20Shot%20on%202015-09-16%20at%2012_21_15.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;global-financial-innovations&quot;&gt;Global financial innovations&lt;/h2&gt;

&lt;p&gt;As someone who has lived in one country, operated a business in another, hired staff in a third, and serviced customers in a forth, I have direct experience with the friction involved in dealing with border-constrained financial institutions, multiple currencies and slow, costly and outdated monetary transfer mechanisms. (Speaking of which, did you know people still send &lt;em&gt;paper checks&lt;/em&gt; in the United States?)&lt;/p&gt;

&lt;p&gt;In that context, I’ve been excited to see the emergence of innovative financial products set to disrupt international finance—many of which use bitcoin as an &lt;em&gt;infrastructure or access component&lt;/em&gt;, rather than as a currency, exploiting the speed, low cost and blockchain validation benefits inherent to the technology, while mitigating risks associated with bitcoin’s relative price volatility.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://bitreserve.org&quot;&gt;&lt;strong&gt;Bitreserve&lt;/strong&gt;&lt;/a&gt; is a product created by one of the Salesforce founders, whose value proposition is to act like a bank, but without exposing its customers to the risks associated with traditional fractional reserve banking. &lt;/p&gt;

&lt;p&gt;Once you deposit “value” into the platform via a bitcoin transfer, you can then covert those bitcoin into—and exchange between, cost free!—any of several worldwide currencies, or even precious metals like gold and silver. Visually, they present these as “cards”.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://files.dafacto.com/uploads/Screen%20Shot%20on%202015-09-16%20at%2012_23_17.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;And using blockchain technology, the platform allows public confirmation that, at all times, Bitreserve retains physical reserves of all currencies and metals, equal to or greater than its liabilities.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://files.dafacto.com/uploads/Screen%20Shot%20on%202015-09-16%20at%2012_32_08.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Since the only way to get funds &lt;em&gt;out&lt;/em&gt; of Bitreserve presently is bitcoin, the platform seems to be of minimal transactional utility, but they claim to be in the process developing interfaces with traditional financial channels like debit cards, bank transfers, etc. &lt;/p&gt;

&lt;p&gt;For the moment, the practical uses of Bitreserve would include, say, holding of one’s cash savings, mitigating exchange rate risks associated with future expenses in a foreign currency, speculation on currencies or metals, or even to retain one’s investment in, say, physical gold (although with a 2% exchange commission, I think BitGold, discussed below, is a better options for that.)&lt;/p&gt;

&lt;p&gt;Payment processors like &lt;a href=&quot;https://stripe.com/bitcoin&quot;&gt;&lt;strong&gt;Stripe&lt;/strong&gt;&lt;/a&gt; have integrate bitcoin into their products, allowing businesses to extend product marketing into regions where credit card penetration is lower, but digital currency adoption is higher—e.g. developing nations, and nations with currency instability like Argentina.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://files.dafacto.com/uploads/stripe-bitcoin.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://bitwage.com&quot;&gt;&lt;strong&gt;Bitwage&lt;/strong&gt;&lt;/a&gt; is a platform working to allow companies to extend payroll services and payments to anyone in the world, from native currency to local currency of the workers, using bitcoin and its network as a low cost and instantaneous transport.&lt;/p&gt;

&lt;p&gt;Although not directly bitcoin-related, the Canadian company &lt;a href=&quot;http://bitgold.com&quot;&gt;&lt;strong&gt;BitGold&lt;/strong&gt;&lt;/a&gt; has brought convenience and improvements to the area of acquiring, storing and using gold. &lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://files.dafacto.com/uploads/Screen%20Shot%20on%202015-09-16%20at%2012_44_04.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Previously I used BullionVault as custodian of physical gold, but eventually left due to its inconveniences; for example, their gold accounts can only be associated with one bank account, and so moving funds into and out of the service proved restrictive and involved costly (and error prone) international wire transfers.&lt;/p&gt;

&lt;p&gt;BitGold allow you to purchase physical gold through ACH bank transfer, credit card purchase and bitcoin—and even choose among several vaults worldwide for its storage. (It’s interesting, however, that when purchasing gold with bitcoin, the only vault option provided is Dubai.)&lt;/p&gt;

&lt;p&gt;You can sell gold and retrieve funds via ACH bank transfer (to any account you’ve connected) or via a super-convenient pre-paid debit card, available in any of three currencies. If you want, there’s even an option to have your physical gold shipped to your house. Finally, BitGold have promised to allow withdrawals in bitcoin in the near future.&lt;/p&gt;

&lt;p&gt;BitGold’s costs are attractive. Purchasing or selling gold is done at 1% within the spot price, and there are &lt;em&gt;no storage costs&lt;/em&gt;. I simulated a cost comparsion with BullionVault, who have a lower purchase fee, but charge an annual storage fee. If you hold gold for more than a few years, the overall costs easily work out in favor of BitGold.&lt;/p&gt;

&lt;p&gt;Although a relatively new company, BitGold acquired BullionVault’s main competitor GoldMoney, making them one of the world’s largest holders of gold. Exciting stuff!&lt;/p&gt;

&lt;h2 id=&quot;future-concerns&quot;&gt;Future concerns&lt;/h2&gt;

&lt;p&gt;If Bitcoin succeeds, we can imagine ourselves in a world in which we’re transacting daily with the currency as we would today in dollars and euros, in which bitcoin is used as an transport layer to bring speed, low costs and accountability to fiat systems, and in which we possibly store a portion of our wealth in bitcoin.&lt;/p&gt;

&lt;p&gt;A concern I have imagining such a world, is government’s tax treatment of digital currencies. For example, the US government currently &lt;a href=&quot;http://www.irs.gov/pub/irs-drop/n-14-21.pdf&quot;&gt;treats digital currencies as property&lt;/a&gt;, subject to capital gains on certain transactions.&lt;/p&gt;

&lt;p&gt;That implies a requirement for anyone using bitcoin to continually track their fiat-equivalent cost basis when purchasing, as well as current exchange rates when disposing of bitcoin. Such a burden would obviously become impractical in the world described above. Just imagine if every time you earned or spent a dollar, you were required to keep track of the current exchange rate of gold. And imagine if having earned $1,000 in January and later spent that $1,000 in June, you could find yourself subject to capital gains tax if, in the meantime, the USD exchange rate with gold had dropped.&lt;/p&gt;

&lt;h2 id=&quot;conclusions&quot;&gt;Conclusions&lt;/h2&gt;

&lt;p&gt;Given its relative stabilization in price, observing its continual increase in transaction volume, and witnessing a growing momentum in the emergence of related innovative products and services, I’m more optimistic about the future of bitcoin than ever. It’s exciting to imagine the possibilities that would be enabled in a world in which bitcoin is successful, especially for people like myself, who enjoy geographical independence of home, business, employees and customers.&lt;/p&gt;

&lt;p&gt;On the other hand, slow-to-adapt governments &lt;em&gt;already&lt;/em&gt; make it difficult for people to operate internationally, and since the widespread use of digital currencies is not particularly in their interests, I foresee governments becoming even larger points of friction in the process of bitcoin realizing its full potential.&lt;/p&gt;

&lt;p&gt;In any case, as with past technological shifts, translating unfamiliar concepts into engaging and usable consumer products is an exciting and important design challenge, and one I hope our team at Makalu has the opportunity to take on, whether through helping an innovator’s product to achieve widespread appeal, or in developing our own.&lt;/p&gt;

&lt;p&gt;And that’s my current view of the state of bitcoin in September 2015. See you in 2016, and be sure to &lt;a href=&quot;http://twitter.com/makalu&quot;&gt;follow us on Twitter&lt;/a&gt; to get notified of the next update.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The Design of Xapo</title>
   <link href="http://makaluinc.com/blog/2015/09/the-design-of-xapo.html"/>
   <updated>2015-09-14T00:00:00+00:00</updated>
   <id>http://makaluinc.com/blog/2015/09/the-design-of-xapo</id>
   <content type="html">
&lt;h2 id=&quot;the-challenge&quot;&gt;The challenge&lt;/h2&gt;

&lt;p&gt;Through generations of experience, we comfortably relate to the concepts surrounding traditional stores of value and transactional currencies. As a commodity that we can touch and hold, we have an intuitive understanding of gold. We understand that we can put it in a safe or entrust it to a custodian like Brinks. When we transact in gold, we understand that we’re passing ownership of a physical object from one to another. &lt;/p&gt;

&lt;p&gt;We also tend to relate to fiat currencies like Dollars, Euros and Pesos as physical objects, although their realities are more abstract. Like gold, we intuitively understand that we can secure and transact ourselves in physical cash, or we can entrust its security and access to the vaults, credit cards and transfer services of banks.&lt;/p&gt;

&lt;p&gt;Bitcoin represents an entirely new paradigm. There’s nothing physical about bitcoin. The “owning” of a bitcoin means the “controlling” of a complex number known as a private key. If we try to relate that private key to something with which we have familiarity, it would be a “wallet”, or a bank account. But whereas most people have one wallet and one checking account, with bitcoin it can be advantageous to create a new private key for every transaction we make!&lt;/p&gt;

&lt;p&gt;For products offering the storage, security, and access to one’s bitcoins, translating such foreign notions into concepts that are approachable and understandable by consumers and organizations represents a considerable design challenge—and one that is of critical importance if we’re to achieve widespread adoption of this promising technology.&lt;/p&gt;

&lt;h2 id=&quot;a-personal-interest-in-xapo&quot;&gt;A personal interest in Xapo&lt;/h2&gt;

&lt;p&gt;While evaluating bitcoin storage options, I created an account at &lt;a href=&quot;http://xapo.com&quot;&gt;Xapo&lt;/a&gt;, but soon afterwards switched to another product. I didn’t give much thought to why I switched; something just didn’t feel quite “right” about the Xapo product.&lt;/p&gt;

&lt;p&gt;Then I happened to read the book, “Digital Gold”, by Nathaniel Popper. In his telling of the history of bitcoin, we’re introduced to Wences Casares, an Argentinean entrepreneur and the founder of Xapo. I so related to the life experiences, frugal disposition and passions of Wences, that I finished the book thinking that if I could choose to work with anyone in the bitcoin industry, it would be with him.&lt;/p&gt;

&lt;p&gt;And that led me to think deeper about why his product Xapo didn’t stick with me, and what I’d do to fix it.&lt;/p&gt;

&lt;p&gt;In the rest of this article, I’ll retrace my onboarding experience with Xapo, highlighting the frictions and confusions I felt along the way, and I’ll conclude with thoughts on the approach I’d take to addressing those problems. &lt;/p&gt;

&lt;p&gt;The reader will notice that the article grows harsh in tone, and my fear is that it might come across as offensive. But just before editing all that out, I realized that the growing harshness is a direct reflection of the growing frustration I felt trying to get to know the product. And since that ultimately led me to leave Xapo, I decided it was an important ingredient to keep in the article.&lt;/p&gt;

&lt;h2 id=&quot;so-youve-landed-at-xapo&quot;&gt;So you’ve landed at Xapo&lt;/h2&gt;

&lt;p&gt;When you first land at Xapo, you’re greeted with the following message:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://d.pr/i/1kd55+&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;My very first thought was that the word “most” must be missing, i.e. that this message was supposed to have read, “The world’s &lt;em&gt;most&lt;/em&gt; secure bitcoin wallet”. That’s a minor detail, but important in the sense that my &lt;em&gt;very first&lt;/em&gt; cognitive experience with the product is a tiny bit of confusion.&lt;/p&gt;

&lt;p&gt;Moving on, this first screen immediately refers to “cold storage” and “multi-signature” technologies. These are concepts that are unlikely to be commonly understood, and as such represents the first potential point of friction in terms of converting a new customer. If I were a new bitcoin user, still grappling with the concept of a “bitcoin wallet”, I think I’d feel unsure whether this product is or isn’t relevant to me.&lt;/p&gt;

&lt;p&gt;Still feeling unsure about this product, I’m probably more likely to click “Start tour”, than to directly create an account.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://d.pr/i/bwiq+&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Starting the tour, I’m dropped &lt;em&gt;straight&lt;/em&gt; into the the topic of “offline encrypted servers”, that are “never connected to the internet”. Remember, this is the &lt;em&gt;second screen&lt;/em&gt; I see as a potential new Xapo customer, and possibly even a new bitcoin user. I still don’t really know what the product is, but I’m launched into a presentation of how its security is implemented.&lt;/p&gt;

&lt;p&gt;In that context, some questions a new bitcoin user might have:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;If my bitcoins are offline, does that mean I can’t use them?&lt;/li&gt;
  &lt;li&gt;Why are the servers “never connected to the internet”?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;(I know the answers to these questions, but I don’t expect the non-technical bitcoin user would.)&lt;/p&gt;

&lt;p&gt;Clicking next…&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://d.pr/i/1bEr+&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I’m on screen number three, and I’m looking at “Wave-blocking Faraday cages”. I’m afraid a lot of people might return to their Google search at this point.&lt;/p&gt;

&lt;p&gt;But for those who continue…&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://d.pr/i/1hnPi+&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Screen number four talks about storing my bitcoins in Switzerland. A new bitcoin user might wonder if that’s even legal, vaguely recalling stories about Americans getting in trouble for having money there. And is the length of the access column &lt;em&gt;really&lt;/em&gt; relevant to my decision to use this product?&lt;/p&gt;

&lt;p&gt;We continue, just to finish the tour…&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://d.pr/i/XnP8+&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Now we’re on a page that gives the visual impression that we’re floating in space—complete with moving stars in the background—and boasting that Xapo has raised $40 million. This is the last screen in the product tour, and it’s the screen least related to the product.&lt;/p&gt;

&lt;p&gt;At this point, I’ve finished the tour, but I feel I know even less about the product than I did at the beginning. I certainly am left with the impression that Xapo take security seriously, but I still don’t know exactly what Xapo &lt;em&gt;is&lt;/em&gt; or whether it’s relevant to &lt;em&gt;me&lt;/em&gt;.&lt;/p&gt;

&lt;h2 id=&quot;the-tour-didnt-work-lets-try-navigating-around&quot;&gt;The tour didn’t work. Let’s try navigating around.&lt;/h2&gt;

&lt;p&gt;Let’s look at the Xapo navigation options. We find six items that are treated equally from a visual design point of view:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://d.pr/i/hgOO+&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;An “about” area, where I hope I can learn more about what this product actually is.&lt;/li&gt;
  &lt;li&gt;Two “product” areas, for the wallet and the vault.&lt;/li&gt;
  &lt;li&gt;One “contextual” area, Institutions. I’m an individual, so I guess I should skip that one.&lt;/li&gt;
  &lt;li&gt;A functional area, “login”. I’ll also skip that for the moment.&lt;/li&gt;
  &lt;li&gt;And a hamburger menu, which, although it can have its place, is known to be the junk drawer of navigation controls, as you have no idea what to expect there.&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;So here’s the About page:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://d.pr/i/12AxH+&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Reading this, I’m now thinking that the product is somehow a &lt;em&gt;combination&lt;/em&gt; of a bitcoin wallet and a vault, perhaps not exposed to the risks I’ve read about with other online wallets. That sounds pretty good, and I find myself wanting to learn more about how that works.&lt;/p&gt;

&lt;p&gt;But to learn more, it looks like I’ll need to tap the pulsating “down arrow”, because the designers felt that before understanding more about the product, I’m more likely to want to read—again—about the company’s investors.&lt;/p&gt;

&lt;p&gt;So I click the down arrow, expecting to be taken somewhere where I can learn more about the product, but instead, all that happens is that I &lt;em&gt;jump straight to that same message about the investors&lt;/em&gt;.&lt;/p&gt;

&lt;h2 id=&quot;lets-just-create-an-account&quot;&gt;Let’s just create an account&lt;/h2&gt;

&lt;p&gt;If I can’t understand the product from the marketing site, maybe it’ll all make sense once I create an account. After doing that and logging in, I see three equal navigation items—xapo, wallet and vault. (And I find myself wondering why they’re all displayed in lower case, since at least Xapo has until now been consistently capitalized.) &lt;/p&gt;

&lt;p&gt;So I click to access the “wallet”.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://d.pr/i/1bmdv+&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;In the WALLET (now all capitalized), and I see a credit-card shaped block with a gear and a large “X” in the middle. I have no idea how to interpret the meaning of the big “X”? Is there something missing? Did I do something wrong?&lt;/p&gt;

&lt;p&gt;Conceptually, “My Address” is information, while “Transfer” and “Send” are actions, and so they shouldn’t be treated identically in the visual UI. Here I find myself wondering what the difference is between “transferring” and “sending”.&lt;/p&gt;

&lt;p&gt;Let’s try clicking on the gear icon:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://d.pr/i/18weO+&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This feels a bit overwhelming, and now I’m even more confused:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;I still don’t know why I’m looking at an “X”. Should I email support about that?&lt;/li&gt;
  &lt;li&gt;Apparently this is the wallet I’ll use to send “micropayments” through “Twitter and third-party apps”. What if I want to send payments that are not “micro”? And what’s a “third party app”?&lt;/li&gt;
  &lt;li&gt;There’s no contextual help information around the concepts of “Who can access this wallet?” What does it even mean to “invite someone to my wallet”? Why should anyone other than me have access?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;At this point I’m thinking, “OK, I was just looking for a place to store my bitcoins, but this thing looks &lt;em&gt;waaaaaay&lt;/em&gt; too complicated for my needs.”&lt;/p&gt;

&lt;p&gt;Let’s try the “vault”:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://d.pr/i/1ftAx+&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Instead of a black card used in the wallet, the vault is represented by a green card with a “V”. What does “V” mean—“Vault”? But if that were the case, shouldn’t the wallet have displayed a “W” instead of an “X”. And what are those three vertical white bars supposed to mean?&lt;/p&gt;

&lt;p&gt;Say I want to transfer bitcoins into or out of the vault. Here’s what that looks like:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://d.pr/i/1kpb4+&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This UI gives the impression I’m transfering from my black “X” (different typeface now) to my green “V” (with three vertical lines). And it looks like the black wallet’s balance is in bitcoin (BTC), while the vault’s balance is in US Dollars (USD)?&lt;/p&gt;

&lt;p&gt;And for some reason, whereas everywhere else in the site the submit buttons span the width of the window, &lt;em&gt;here&lt;/em&gt; it’s shorter.&lt;/p&gt;

&lt;p&gt;I believe it was around now, when I decided to just switch to another product. All of these conceptual and UI friction points caused me to feel insecure in using the product, and I also had a lingering suspicion that the product wasn’t really even intended for &lt;em&gt;me&lt;/em&gt;.&lt;/p&gt;

&lt;h2 id=&quot;miscellaneous-issues&quot;&gt;Miscellaneous issues&lt;/h2&gt;

&lt;p&gt;I observered a number of other, minor design and copy quibbles at the website, none of which were show-stoppers, but all of which compound in terms of experience and impression.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://d.pr/i/108Tj+&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;I think the website needs some tightening and editing of the copy. For example, when you say, “Secure bitcoin storage is what we do best,” the first thing that comes to my mind is, “Everything else we do, we do worse.” Something like, “We’re the industry leader in secure bitcoin storage” might be better.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://d.pr/i/1bNCT+&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Here’s a layout issue, in which you can’t read the white text against the white background.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://d.pr/i/I3hp+&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;And here’s some poor attention to detail. Margin spacing is off. Font size doesn’t make sense with respect to the rest of the site.&lt;/p&gt;

&lt;h2 id=&quot;redesigning-the-product&quot;&gt;Redesigning the product&lt;/h2&gt;

&lt;p&gt;The design of a product like Xapo has to both bridge the conceptual gap between people’s existing mental models of currency storage, security and use, and the realities associated with a complex system like bitcoin. And it has to do that within the context of a product that’s engaging, confidence-inspiring and easy to use. &lt;/p&gt;

&lt;p&gt;But to design Xapo, specifically, would require an understanding of the business priorities of the company, which we don’t currently have. For example, we don’t know the relative importance of providing services to individuals vs institutions. (Xapo was recently announced to be the custodian for a new Bitcoin ETF traded on the stock market.)&lt;/p&gt;

&lt;p&gt;So while a Xapo redesign is beyond the scope of this article, we can at least identify some likely objectives.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Let’s communciate what the product is, why you need it, and why you should choose Xapo &lt;em&gt;long&lt;/em&gt; before getting into the implementation details of encrypted servers and 100 meter bunkers. Xapo are the best at security, but security is not the &lt;em&gt;product&lt;/em&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;A considerable conceptual challenge is helping the user understand &lt;em&gt;why&lt;/em&gt; they would need both hot and cold wallets. Savings vs checking accounts comes to mind as an analogy, but falls short. (Perhaps we could even discover a way to present the wallet and vault as integral components of a single product, instead of two separate things?)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Let’s ensure that the process of signing up, creating a wallet, getting bitcoins into the wallet, and then understanding that we might want &lt;em&gt;some&lt;/em&gt; of those bitcoins put into cold storage, is friction-free in concept and workflow.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Let’s introduce the secondary concepts around the product—multi-signatures, buying bitcoins, etc.—only after we’re sure users understand the core product.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Let’s divert the heavy stuff to the institutions—e.g. our $40 million dollar funding, our A-level advisors, our bunkers in Switzerland. It’s those who will have the time and interest in all that before making a decision.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Let’s make sure individuals know that using Xapo is free.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Let’s make the user experience engaging and reassuring. (The dark theme of the current product feels somehow omninous.)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Finally, let’s keep in mind that as early adopters, we’re participating in a historic process of transitioning people into an exciting but unfamiliar new world. Ultimately, after using the product, we want the user to feel better about entering the bitcoin economy than before they joined.&lt;/p&gt;

&lt;p&gt;It’s a big challenge, indeed, but an exciting and worthwhile one to take on, since as product designers we have a huge opportunity and role to play in helping bitcoin succeed!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Managing customer relations on the Mac with Daylite and Direct Mail</title>
   <link href="http://makaluinc.com/blog/2013/03/customer-relationship-management-daylite-directmail.html"/>
   <updated>2013-03-22T00:00:00+00:00</updated>
   <id>http://makaluinc.com/blog/2013/03/customer-relationship-management-daylite-directmail</id>
   <content type="html">&lt;p&gt;To help spread the word about the recent launch of &lt;a href=&quot;http://www.regoapp.com&quot;&gt;Rego&lt;/a&gt;—an iPhone app for bookmarking locations—we wanted to send an email announcement to our contacts. We use two Mac OS X applications—&lt;a href=&quot;http://marketcircle.com&quot;&gt;Daylite&lt;/a&gt;, a customer relationship management (CRM) tool and &lt;a href=&quot;http://directmailmac.com&quot;&gt;Direct Mail&lt;/a&gt;, an emailing tool—which together allow us to segment and execute such announcements more effectively.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://makalufiles.s3.amazonaws.com/2013-03-12-coverimage.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;This article introduces these tools and describes how we use them.&lt;/p&gt;

&lt;h2 id=&quot;daylite&quot;&gt;Daylite&lt;/h2&gt;

&lt;p&gt;Daylite is a powerful, multi-user CRM for the Mac, and one that we’ve been using for close to 15 years. It provides integrated management of people, companies, opportunities, projects, and tasks.&lt;/p&gt;

&lt;p&gt;In &lt;a href=&quot;http://makaluinc.com&quot;&gt;Makalu&lt;/a&gt;, we primarily use Daylite to keep track of people and companies, and their relationships to opportunities and projects. (For project management itself, we use &lt;a href=&quot;http://basecamp.com&quot;&gt;Basecamp&lt;/a&gt; from 37signals.) Since this article describes how &lt;em&gt;we&lt;/em&gt; use Daylite, it only scratches the surface of everything the tool can do.&lt;/p&gt;

&lt;h3 id=&quot;daylite-architecture&quot;&gt;Daylite architecture&lt;/h3&gt;

&lt;p&gt;Daylite runs as a server/client system. I have the server running on a home iMac and serving clients running on a MacBook Air, an iPhone 5 and an iPad mini.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://makalufiles.s3.amazonaws.com/2013-03-12-daylite-architecture.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The Daylite clients are smart enough to detect whether they need to connect to the server over the local network, or over the internet. Connecting over the internet obviously requires a fixed hostname, and we use a dynamic DNS provider for that. The Daylite server will automatically configure modern routers to provide the necessary external access.&lt;/p&gt;

&lt;p&gt;The Daylite clients maintain a local copy of the server database and periodically sync themselves. So everything works very fast—online or offline.&lt;/p&gt;

&lt;p&gt;An important component of the Daylite architecture is the &lt;strong&gt;Daylite Mail Assistant&lt;/strong&gt; (DMA)—a plug-in for Apple Mail that integrates with the Daylite client—allowing you to create new contacts, companies, opportunities, projects and tasks directly from within Mail. In addition, DMA allows you to link important messages directly to those objects in Daylite.&lt;/p&gt;

&lt;p&gt;In this screenshot, you can see I’ve linked this email to my contact Alex Bendiken, as well as our MLK Maintenance project.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://makalufiles.s3.amazonaws.com/2013-03-12-email-from-alex.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;(If I wanted to, I could also create a delegated task for Alex, and set a reminder for myself to follow up later—but again, we mostly use Basecamp, rather than Daylite, for project management.)&lt;/p&gt;

&lt;h2 id=&quot;classifying-contacts-by-keyword&quot;&gt;Classifying contacts by keyword&lt;/h2&gt;

&lt;p&gt;Daylite allows you to add any number of keywords to your contacts. These are like tags, and you’re free to define and use them as you like.&lt;/p&gt;

&lt;p&gt;In Makalu, we’ve decided to classify our contacts primarily by three different groups of keywords — Context, Role and Relationship.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://makalufiles.s3.amazonaws.com/2013-03-12-daylite-keywords.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Let’s take a look at these:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Context&lt;/strong&gt;. Our company does client work, and we also sell products like &lt;a href=&quot;http://racesplitter.com&quot;&gt;RaceSplitter&lt;/a&gt;, &lt;a href=&quot;http://regoapp.com&quot;&gt;Rego&lt;/a&gt; and my &lt;a href=&quot;http://moneyforsomethingbook.com&quot;&gt;Money for Something&lt;/a&gt; book. We’ve created a set of keywords to help us associate our contacts with each of these business contexts. (And, as you can imagine, some of our contacts are associated to several contexts.)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Role&lt;/strong&gt;. We also need to distinguish in what role a contact exists. Is the person a customer, an applicant, or perhaps a partner.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Relationship&lt;/strong&gt;. Perhaps most important, we need to know what kind of relationship we have with the person, and for that we’ve defined five.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Relationships are important, so let’s look at those in more detail.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Family&lt;/strong&gt; is obvious.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Friend&lt;/strong&gt; is probably obvious as well. Among the thousands of contacts I have, only about 120 are classified as friends.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Personal&lt;/strong&gt; might need some explanation. A personal relationship isn’t quite a friend, but if you asked them, “Do you know Matt Henderson?” they would immediately say yes.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Acquaintance&lt;/strong&gt; is someone with whom we’ve had a conversation in the past.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Unknown&lt;/strong&gt; means we (for whatever reason) have them as a contact, but have never had a conversation with them (perhaps they were copied on some client communication to us).&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;Why is relationship so important? Mostly for segmenting our announcements, since you don’t want to send a close friend an email that says, “Hi there, my name is Matt Henderson…”&lt;/p&gt;

&lt;h2 id=&quot;filtering-and-segmenting&quot;&gt;Filtering and segmenting&lt;/h2&gt;

&lt;p&gt;Daylite allows you to segment or filter your contacts through smart filters. If I need to quickly identify the RaceSplitter customers with whom we have an acquaintance relationship, it’s as simple as this:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://makalufiles.s3.amazonaws.com/2013-03-12-daylite-smartfilter.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;And we can get much more complex! Say I want to identify all my contacts, excluding friends, family, personal and those I’ve tagged “A-List” and “Influential”. And say I want to exclude our competitors, my Dydra contacts, those people I came into contact with during the Catalog Choice project, and those people who commented on my Telefonica and Vodafone blog articles.&lt;/p&gt;

&lt;p&gt;All that would look something like this:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://makalufiles.s3.amazonaws.com/2013-03-12-daylite-segmenting.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Daylite’s ability to include sub-groups of filter criteria in the construction of smart filters basically removes all limits to the scope of possible segmentation.&lt;/p&gt;

&lt;p&gt;Once I’ve filtered my contacts, I’ll add those people to Daylite &lt;strong&gt;Group&lt;/strong&gt; objects, like these I created for our Rego announcement campaign.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://makalufiles.s3.amazonaws.com/2013-03-12-daylite-groups.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Why use Groups? Because as we’ll see in the next section, Groups are the link between Daylite and our emailing tool—Direct Mail. Also in the next section, we’ll see why I prefixed the Group names with numbers.&lt;/p&gt;

&lt;h2 id=&quot;direct-mail&quot;&gt;Direct Mail&lt;/h2&gt;

&lt;p&gt;Direct Mail is a bulk-emailing tool for the Mac that integrates with Daylite. Like Daylite, Direct Mail is an established product that’s been on the market for many years.&lt;/p&gt;

&lt;p&gt;And as with Daylite, this article will hardly scratch the surface of everything Direct Mail can do. It provides extensive capabilities for importing and validating addresses, and extensive support for message creation, allowing both text and HTML, and even the import of templates from popular online services like MailChimp and Campaign Monitor. It provides token substitution in messages (with fallback), and will even tell you how likely your message is to get caught in spam filters.&lt;/p&gt;

&lt;p&gt;Although it can send outgoing emails through your own server, Direct Mail really shines when you send mail through their own hosted service, as that provides you with scheduled delivery, reporting and subscription management. You buy credits through the app, at about $0.01 per email.&lt;/p&gt;

&lt;p&gt;So here’s how we use Direct Mail.&lt;/p&gt;

&lt;h2 id=&quot;serial-segmented-mailing&quot;&gt;Serial, segmented mailing&lt;/h2&gt;

&lt;p&gt;In announcing Rego, I wanted to send different emails to different types of contacts. For people I know well and have a close relationship, I don’t mind asking for a favor to help us promote the app. For people I don’t know so well, I might just want to tell them about product and leave it at that.&lt;/p&gt;

&lt;p&gt;So being able to segment is important, and we’ve seen how to do that with Daylite. Now we’ll look at the Direct Mail side of the  setup.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://makalufiles.s3.amazonaws.com/2013-03-12-directmail-groups.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;From this screenshot, you can see that I’ve created a Direct Mail project document, called “Rego Announcement”.&lt;/p&gt;

&lt;p&gt;In that document, I’ve created one address list corresponding to each of the Rego “Groups” I created in Daylite. Direct Mail maintains a link from its group to the Daylite group—allowing me to re-sync at any time, and allowing Direct Mail to link sent emails back to those corresponding contacts in Daylite.&lt;/p&gt;

&lt;h2 id=&quot;avoiding-multiple-mailings&quot;&gt;Avoiding multiple mailings&lt;/h2&gt;

&lt;p&gt;It’s quite likely that some of my contacts will be found in multiple Rego Groups within Daylite. For example, some of our beta testers also signed up on the Rego website to be notified about the launch.&lt;/p&gt;

&lt;p&gt;I want to ensure that we only announce Rego &lt;em&gt;once&lt;/em&gt; per contact, and that’s the reason for adding a numeric prefix to my Group names.&lt;/p&gt;

&lt;p&gt;In the above example, we first announced Rego to our beta testers, and then converted that Group to a &lt;em&gt;Blacklisted&lt;/em&gt; group, to ensure that when emailing our Signups, none of our beta testers would additionally receive &lt;em&gt;that&lt;/em&gt; email.&lt;/p&gt;

&lt;p&gt;Then we announced to the people invited to the beta, but who didn’t ultimately participate. To do that, we emailed the “Beta Invites” group, while blacklisting the “Signups” and “Beta Testers”.&lt;/p&gt;

&lt;p&gt;And so on through all our groups, ultimately emailing the largest group, our “Acquaintances”.&lt;/p&gt;

&lt;p&gt;Make sense? It’s pretty cool!&lt;/p&gt;

&lt;h2 id=&quot;reporting&quot;&gt;Reporting&lt;/h2&gt;

&lt;p&gt;Direct Mail provides extensive delivery and interaction reporting and statistics through a Mac app, as well as through iOS reporting apps running on the iPhone and iPad.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://makalufiles.s3.amazonaws.com/2013-03-12-directmail-reports.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h2 id=&quot;hope-you-enjoyed-the-article&quot;&gt;Hope you enjoyed the article!&lt;/h2&gt;

&lt;p&gt;And there you have it. That’s how we use the powerful combination of Daylite and Direct Mail to manage our contacts and communications in Makalu Interactive. If you have any questions, don’t hesitate to contact us!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Getting ready for Rego</title>
   <link href="http://makaluinc.com/blog/2013/03/getting-ready-for-rego.html"/>
   <updated>2013-03-01T00:00:00+00:00</updated>
   <id>http://makaluinc.com/blog/2013/03/getting-ready-for-rego</id>
   <content type="html">&lt;p&gt;We’re in the final week of beta testing prior to launching &lt;a href=&quot;http://regoapp.com&quot;&gt;Rego&lt;/a&gt;, Makalu’s second product for the iPhone. I wanted to share with you a few reflections on the experience of getting here.&lt;/p&gt;

&lt;h2 id=&quot;simple-products-are-hard&quot;&gt;Simple products are hard&lt;/h2&gt;
&lt;p&gt;We’ll post more about this after launch, including a video of all the UI revisions we’ve made, but once again we find ourselves profoundly intrigued by how difficult it is to create a great—simple, clear &amp;amp; elegant—user interface model.&lt;/p&gt;

&lt;p&gt;As always, we found that a “great” model is rarely pre-conceived; rather, it’s discovered through lots and lots of iteration. When we post the video, we think you’ll be amazed at how many iterations a simple little app like Rego can experience!&lt;/p&gt;

&lt;h2 id=&quot;lessons-learned&quot;&gt;Lessons learned&lt;/h2&gt;
&lt;p&gt;What makes Rego different is that it’s meant to be private. Unlike apps like Foursquare, you don’t have to worry that Rego’ing that wonderful little cafe you discovered is going to expose it to the rest of the world. Sure, you &lt;em&gt;can&lt;/em&gt; share a place with a friend if you want—and we make it such that they can seamlessly import it into their own Rego—but it’s an explicit action the user has to take. By default, everything’s private.&lt;/p&gt;

&lt;p&gt;Preparing for our beta, we innocently thought we’d do our testers a favor by pre-loading Rego with a number of already-captured places and moments.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Huge mistake!&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Why? Because that simple little inclusion gave almost all our testers the impression that Rego was primarily for &lt;em&gt;discovery&lt;/em&gt; and &lt;em&gt;sharing&lt;/em&gt;, completely obscuring the most important aspect of Rego, it’s &lt;em&gt;privacy&lt;/em&gt;. (One tester commented, that they found zero places captured near them. Of course—that’s the point!)&lt;/p&gt;

&lt;p&gt;So that was a big lesson learned for us. We had been considering including one location—the Makalu office, where Rego was born—with the final 1.0 product, but having this beta experience behind us, we know that would be a bad, bad idea!&lt;/p&gt;

&lt;p&gt;So instead, we’ll ship with some great blank slates.&lt;/p&gt;

&lt;h2 id=&quot;positioning&quot;&gt;Positioning&lt;/h2&gt;
&lt;p&gt;Our biggest struggle is positioning.&lt;/p&gt;

&lt;p&gt;We consciously crafted Rego to be a general utility that would adapt to a broad range of personal needs related to location. I might use Rego to keep track of my favorite restaurants and cafes. A real estate agent might use Rego to capture prospects and sales locations. An archeologist might use Rego to capture and classify “finds”. A fisherman might use Rego to track their catches. A tour guide might use Rego to package up interesting places for their clients.&lt;/p&gt;

&lt;p&gt;In that respect, Rego is a general utility that would likely be of interest to &lt;em&gt;everybody&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;Great, right? Well, actually it’s not.&lt;/p&gt;

&lt;p&gt;We’ve found it surprisingly difficult to effectively communicate that “general utility” value proposition. When my wife saw me Rego’ing my favorite cafes, she lost interest—that’s irrelevant to her. She didn’t see past my usage to how the facilities of the app could be useful to her. And we’ve found the same reaction from many of our beta testers.&lt;/p&gt;

&lt;p&gt;But something interesting happened last week.&lt;/p&gt;

&lt;p&gt;My wife scheduled a family weekend trip to Paris and I immediately decided to use Rego to both plan the trip and then capture memories in the form of notes and photos while there.&lt;/p&gt;

&lt;p&gt;I began by Googling for interesting attractions, restaurants, and things to do in Paris. I then created places in Rego for all the ones I wanted to visit and organized them into a collection called “Paris Trip”. (I even added some notes with opening times, addresses, and phone numbers and a couple photos to help set the context when I’m there.)&lt;/p&gt;

&lt;p&gt;Looking at the resulting map, I could immediately see that our hotel was 5km from most of the attractions we wanted to visit (unfortunately, though, it was too late to cancel.) So I also Rego’d the closest metro points.&lt;/p&gt;

&lt;p&gt;Then while traveling in Paris, I used Rego constantly—to see what the closest “next attraction” was and to capture our memories in photos and notes attached to the places we visited (both the ones we’d planned, and new ones we discovered and Rego’d while there.)&lt;/p&gt;

&lt;p&gt;After returning home, I &lt;a href=&quot;http://www.dafacto.com/2013/02/26/paris-in-february/&quot;&gt;blogged about the trip&lt;/a&gt; and posted a few public Rego shares for some of the places we visited. When those shares are viewed on iPhones, they can be directly imported into Rego—useful for others planning a trip to Paris who might want to experience some of the places we enjoyed.&lt;/p&gt;

&lt;p&gt;The reaction to this article from several people, including my wife, went something like this:&lt;/p&gt;

&lt;blockquote class=&quot;full&quot;&gt;Oh, wow—&lt;em&gt;now I get Rego&lt;/em&gt;! It&#39;s the ultimate  app for planning and documenting travels. I want it, I want it, I want it!&lt;/blockquote&gt;

&lt;p&gt;Planning and journaling travels will probably be the most common use case for Rego, and where its value will shine the most. But that’s just one of an infinite number of usages—which presents us with a delimma: Should we position Rego as a general purpose utility, or should we position it as a travel app?&lt;/p&gt;

&lt;p&gt;Our current inclination is to position it as a travel app, but we’re torn over potentially losing the broader general-purpose market. We’ll likely be doing some A/B testing to help answer this question.&lt;/p&gt;

&lt;h2 id=&quot;coming-soon&quot;&gt;Coming soon&lt;/h2&gt;
&lt;p&gt;We’re going to be submitting Rego to the App Store next week, the first of March, and expect it to be available about a week after that.&lt;/p&gt;

&lt;p&gt;Rego will be a free download, limited to about 10 places. An in-app purchase of $2.99 will unlock it for unlimited usage.&lt;/p&gt;

&lt;p&gt;We’re planning to run a launch sale of $0.99 for about a week, so if you’d like to be notified when it’s available just &lt;a href=&quot;http://regoapp.com&quot;&gt;head over to the Rego site&lt;/a&gt; and sign up today!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Going off the Book</title>
   <link href="http://makaluinc.com/blog/2012/12/Going-off-the-Book.html"/>
   <updated>2012-12-02T00:00:00+00:00</updated>
   <id>http://makaluinc.com/blog/2012/12/Going-off-the-Book</id>
   <content type="html">&lt;p&gt;In chess, there’s a moment when a game deviates (if it ever does) from a well known sequences of moves each player has memorized. They call this going “off book”. I first heard of this concept while listening to an &lt;a href=&quot;http://www.radiolab.org/2011/aug/23/&quot;&gt;episode of RadioLab&lt;/a&gt;  and it struck me as an apt metaphor for modern software development. In programming we have a book of moves to choose from too. Variations of common choices that we all make over and over.&lt;/p&gt;

&lt;p&gt;We open with the platform, or platforms, on which our software will run. This could be a desktop or mobile OS or even the web. We probably also need to decide on a minimum level of functionality we’ll require.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Pawn to iOS &amp;gt;= 5.1&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We then often build upon this initial move by choosing a language. Like in chess, our options for the next move are limited by the choices we’ve already made. Even still, there are a huge number of options for developing web applications and even on iOS there are &lt;a href=&quot;http://www.rubymotion.com/&quot;&gt;alternatives to Objective-C&lt;/a&gt; that we might consider.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Bishop to Objective-C 2.0&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;We could go “off book” here and write our application. And while this would be a novel approach it would probably not be a smart one. Instead we usually employ the help of an existing framework. By choosing a framework we allow the framework authors to make a series of decisions for us in exchange for not only a savings in effort but the benefit of the framework author’s experience.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Knight to Cocoa Touch&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;At this point our framework may provide us with the option of using pre-made templates or scaffolding to get started with. &lt;a href=&quot;https://developer.apple.com/xcode/&quot;&gt;Xcode&lt;/a&gt; comes with templates for numerous application types and web frameworks such as &lt;a href=&quot;http://rubyonrails.org/&quot;&gt;Ruby on Rails&lt;/a&gt; or &lt;a href=&quot;https://www.djangoproject.com/&quot;&gt;Django&lt;/a&gt; often come with a way to automatically generate a basic project structure to build upon.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Queen to Single View Application template&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This is our opening. We have made our own choices but they are not unique to us. More than likely many others have made the exact same choices up to this point. It’s only once we go “off book” that things get exciting. From this point on the roads aren’t paved and we have only our own experience and creativity to rely on. Like chess, this is where the game becomes unpredictable and where, more importantly, it gets fun.&lt;/p&gt;

&lt;p&gt;How many developers are, at this very moment, staring at a brand new Xcode project? How many have just generated a new Ruby on Rails application? Many of these projects will never see the light of day but any one of them could &lt;a href=&quot;http://en.wikipedia.org/wiki/WorldWideWeb&quot;&gt;change the world&lt;/a&gt;. This is what keeps me excited about software development. The joy of creating something no one has ever seen before. The challenge of solving new problems. The thrill of going “off book”.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was reposted from my personal blog at &lt;a href=&quot;http://adevelopingstory.com&quot;&gt;A Developing Story&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>About those unsolicited designs</title>
   <link href="http://makaluinc.com/blog/2012/11/about-those-unsolicited-designs.html"/>
   <updated>2012-11-30T00:00:00+00:00</updated>
   <id>http://makaluinc.com/blog/2012/11/about-those-unsolicited-designs</id>
   <content type="html">&lt;p&gt;Whenever we do design, it’s to meet one or more &lt;em&gt;objectives&lt;/em&gt;. Perhaps the objective is to be aesthetically pleasing. Perhaps it’s to increase conversion on a landing page. Perhaps it’s to minimize the errors made by the operator of a satellite control system.&lt;/p&gt;

&lt;p&gt;And when we do design, it’s usually in the context of one or more &lt;em&gt;constraints&lt;/em&gt;. Perhaps the design has to be completed within a week. Perhaps it has to be completed within a particular budget. Perhaps it has to be delivered on a particular platform or device, or implementable with a certain technology.&lt;/p&gt;

&lt;p&gt;Considered in this way, it’s better to characterize design by the extent to which it meets its objectives within its constraints — i.e. by how &lt;em&gt;effective&lt;/em&gt; it is.&lt;/p&gt;

&lt;p&gt;So the better question is whether &lt;em&gt;effective&lt;/em&gt; design can come out of an unsolicited activity?&lt;/p&gt;

&lt;p&gt;Each objective and each constraint can be thought of a dimension which constrains the space in which effective design solutions exist. Consider three planes in space. Their intersection can at best be a single point; almost always, they won’t intersect, and instead will bound some space in-between. That’s the reason perfect solution almost never exists, and why design is actually an engineering activity involving trade-offs.&lt;/p&gt;

&lt;p&gt;It’s the job of the designer to identify the space in which an effective solution can exist, and then to create a solution within it. It’s his job to solve the puzzle. The more objectives and constraints involved, the smaller that space will become; the more complex the puzzle is to solve.&lt;/p&gt;

&lt;p&gt;So let’s return to the question of whether an effective design can come out of an unsolicited activity? The answer is that it depends on the complexity of the puzzle to be solved. Without the knowledge of the objectives and constraints that the inside designer learns through a professional engagement, the less likely the outside designer is to even know what the puzzle is, much less be in a position to solve it. The outside designer is left only in a position to infer what the puzzle &lt;em&gt;may be&lt;/em&gt;, and only for those aspects of the product to which they’re exposed.&lt;/p&gt;

&lt;p&gt;Could unsolicited design result in an effective concert announcement poster? Probably. Could unsolicited design result in an effective satellite control system user interface. Far more unlikely.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>How to calculate your hourly rate</title>
   <link href="http://makaluinc.com/blog/2012/11/how-to-calculate-an-hourly-rate.html"/>
   <updated>2012-11-27T00:00:00+00:00</updated>
   <id>http://makaluinc.com/blog/2012/11/how-to-calculate-an-hourly-rate</id>
   <content type="html">&lt;p&gt;This article describes how we determine our rates here at Makalu.&lt;/p&gt;

&lt;h2 id=&quot;start-with-the-minimum&quot;&gt;Start with the minimum&lt;/h2&gt;

&lt;p&gt;Regardless of &lt;em&gt;how&lt;/em&gt; you plan to charge for your work—i.e. on a project basis (fixed-fee) or an hourly basis—the first step is to determine the minimum amount you need to earn per chargeable hour.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Available hours.&lt;/strong&gt; Begin by computing the number of hours per year each of our staff will work, on average, taking into account public holidays (12 days, in Germany), vacation (30 days, in Germany) and weekends (104 days, on Earth). In Germany, that’s 219 working days per year, or 1,752 &lt;em&gt;available working hours&lt;/em&gt;.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Chargeable hours.&lt;/strong&gt; It’s important to recognize that not all of a person’s available time will end up being chargeable. People will sometimes be supporting bids, sometimes working on overestimated projects, sometimes idle, sometimes off sick, etc. In our case, we assumed a chargeability figure of about 70% (which turns out to be pretty consistent with the service industry as a whole). With that, we’re down to about &lt;em&gt;1,226 chargeable hours per year&lt;/em&gt;, per person.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Minimal hourly rate.&lt;/strong&gt; To compute a minimum hourly rate, we need to divide the minimum revenue we need to make per person, by those 1,226 chargeable hours. The total minimum revenue equals our employment costs (salary, benefits, social security, etc.), all overhead expenses (office rent, support staff, marketing, accounting, legal, etc.), plus the minimum profit we want to make.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;em&gt;Example&lt;/em&gt;. In a hypothetical scenario in which a company’s staff costs, on average, $75,000 per year per person, with overheads equivalent to say 20% of employment costs, and wanting to make a 15% profit, the minimum hourly rate would be roughly $85/hour.&lt;/p&gt;

&lt;p&gt;How did we get to that number?&lt;/p&gt;

&lt;figure class=&quot;full&quot;&gt;
  &lt;img src=&quot;/uploads/blog/2012-11-27/skitched-20121127-154601.png&quot; alt=&quot;Minimum Hourly Rate Calculation&quot; /&gt;
  &lt;figcaption&gt;Minimum Hourly Rate Calculation&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;(If you’d like a copy of this Soulver document, you can &lt;a href=&quot;/uploads/blog/2012-11-27/soulver.zip&quot;&gt;download it here&lt;/a&gt;)&lt;/p&gt;

&lt;p&gt;That wasn’t the particular number in Makalu’s case back when we got started, but might seem a reasonable starting point today.&lt;/p&gt;

&lt;h2 id=&quot;adjusting-to-balance-supply-and-demand&quot;&gt;Adjusting to balance supply and demand&lt;/h2&gt;

&lt;p&gt;Now that we have a starting point, is that it? Not quite. We now need to adjust that rate to balance supply and demand.&lt;/p&gt;

&lt;p&gt;Over time, as we produced good work for our customers (and through some lucky breaks!), we found ourselves with consistently more demands on our time than we had availability. It’s important to note, however, that doesn’t necessarily imply a higher level of chargeability as all the elements relating to that 70% are usually still applicable.&lt;/p&gt;

&lt;p&gt;As is natural in free markets, prices adjust in order to balance supply and demand, and so we began to slowly increase our hourly rate, in order to alleviate the excess demand. Some companies would have just ramped up their staff count. In Makalu, however, we place far greater importance on maintaining our ability to produce great work and deliver measurable value, and that means only hiring great people. We simply couldn’t find legions of great people; we’ve been lucky to find one per year!&lt;/p&gt;

&lt;p&gt;An interesting consequence of increasing our hourly rate, is that the customers that were left tended to be exactly the type of customers we’ve always wanted to work for—they appreciate high quality, demand real value and are doing interesting things!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Reinventing the investment calculator</title>
   <link href="http://makaluinc.com/blog/2012/10/reinventing-the-investment-calculator.html"/>
   <updated>2012-10-03T00:00:00+00:00</updated>
   <id>http://makaluinc.com/blog/2012/10/reinventing-the-investment-calculator</id>
   <content type="html">&lt;h2 id=&quot;the-challenge&quot;&gt;The Challenge&lt;/h2&gt;
&lt;p&gt;Make an online investment calculator that helps readers of Money for Something answer questions like:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;How much do I need to save each month to have a certain amount of money at a certain time in the future?&lt;/li&gt;
  &lt;li&gt;If I’m saving this much per month, and earning that rate of return, how long will it take to accumulate one million dollars?&lt;/li&gt;
  &lt;li&gt;If I increase my monthly savings, how will that affect my savings in the future, and the amount of income it’ll provide?&lt;/li&gt;
  &lt;li&gt;How sensitive is the final amount to the savings rate? or to the amount of time?&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;the-strategy&quot;&gt;The Strategy&lt;/h2&gt;
&lt;p&gt;We began by looking at some existing calculators:&lt;/p&gt;

&lt;figure&gt;
  &lt;img src=&quot;/uploads/blog/2012-10-02/research.png&quot; /&gt;
&lt;/figure&gt;

&lt;p&gt;While these might be adequate for their target audiences, it was obvious they didn’t meet our goals. Want to change a value? Well, simply click into the field, switch to using the keyboard, clear the old value, type the new value, and submit. Want to compare two calculations? Better write down the previous result before you make a change.&lt;/p&gt;

&lt;p&gt;One of them even tries to be extra helpful by offering options to save more by giving up daily expenses, like coffee, restaurants, pizza, etc. But who really does that? There’s no need to give up coffee and pizza for the next 25 years in order to achieve financial independence.&lt;/p&gt;

&lt;p&gt;We knew our calculator needed to be friendlier and much more interactive than anything else we’d seen. You ought to be able to just jump in and start using it right away. Your very first interaction should have an immediate effect on the final result, which hopefully piques your curiosity and leads you to try out more “what ifs”.&lt;/p&gt;

&lt;p&gt;To achieve that, there should be no forms to fill in, it should be easy to adjust the values, and most importantly, it would need to update live.&lt;/p&gt;

&lt;h2 id=&quot;the-interaction-design&quot;&gt;The Interaction Design&lt;/h2&gt;
&lt;p&gt;Our first design challenge was to decide what to focus on. The calculation is based on a number of variables: rate of return, initial balance, monthly savings, inflation, annual savings increase, etc. Obviously we can’t just ask people to fill in all of those. Even having read Matt’s book, I wouldn’t have any idea where to start. So we needed to narrow down the options.&lt;/p&gt;

&lt;figure class=&quot;full&quot;&gt;
  &lt;img src=&quot;/uploads/blog/2012-10-02/wireframes-1.png&quot; alt=&quot;Early design sketches&quot; /&gt;
  &lt;figcaption&gt;Early design explorations&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;After some back and forth we decided to focus on just three variables:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Starting balance.&lt;/strong&gt; How much do you have saved right now?&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Monthly savings.&lt;/strong&gt; How much can you afford to save per month?&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Years to invest.&lt;/strong&gt; When do you want to retire?&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;What these variables have in common is that they’re all unique to your circumstances. Do you already have some savings? Adjust the starting balance accordingly. You’re making $5k per month? You probably want to be saving at least $500. You’re 25 years old? Maybe you want to retire when you’re 50 years old.&lt;/p&gt;

&lt;p&gt;It’s not that the rest of the variables, like rate of return and commissions, are any less important, but you just have much less influence over them. Our guess is that most people will be fine with the default values. That being said, it &lt;em&gt;is&lt;/em&gt; useful to see how a different rate of return influences the calculations, so these values should still be editable.&lt;/p&gt;

&lt;p&gt;When you add up all of those variables, and run them through some formulas, what you end up with is a final balance in dollars. However, the dollar amount by itself is not terribly useful. One million dollars is a nice round number—and who doesn’t want to be a millionaire—but is it enough to retire on? It’s difficult to put into perspective without some more context.&lt;/p&gt;

&lt;p&gt;Thankfully, Matt’s book introduces a rule of thumb known as the “4% rule”, which states that you can annually withdraw 4% of your savings for the rest of your life, without risking to run out of money. That makes it easy to compare the final balance to your current income and see if it’s even in the ballpark.&lt;/p&gt;

&lt;p&gt;Another thing we wanted to emphasize was the power of compounding interest. Given sufficient time, the amount you make from interest will far outgrow the money you’ve put in. Just a couple years can make a surprisingly big difference. We chose a stacked area graph to illustrate how this proportion changes over time. It nicely contrasts the linear growth of the savings with the hockey stick curve of the earnings.&lt;/p&gt;

&lt;figure class=&quot;full&quot;&gt;
  &lt;img src=&quot;/uploads/blog/2012-10-02/wireframes-2.png&quot; alt=&quot;More design sketches&quot; /&gt;
  &lt;figcaption&gt;More design explorations&lt;/figcaption&gt;
&lt;/figure&gt;

&lt;p&gt;At this point we had the basic building blocks: a chart, basic variables, advanced variables, and a summary showing both the final balance and 4% rule. Our next challenge was figuring out the easiest way to edit the variables.&lt;/p&gt;

&lt;p&gt;The obvious solution is to use standard text fields—just like every other calculator on the web. While flexible and easy to implement, they’re cumbersome to actually use. Not to mention we’d have to deal with formatting differences, validations, and whatnot. Not ideal.&lt;/p&gt;

&lt;p&gt;How about sliders? They’re easier to adjust, that’s for sure, but they also implicitly suggest a range of values. The amount I can invest per month should in no way be related to what the slider’s maximum value happens to be configured to. It’s a potential point of confusion, so we continued looking for something else.&lt;/p&gt;

&lt;p&gt;We need something that’s unconstrained, as if you were typing the values directly, but that’s easy to change, just like dragging a slider.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.worrydream.com/&quot;&gt;Bret Victor&lt;/a&gt; to the rescue. If you’re not familiar with Bret’s work, you should definitely go read some of his essays. Impressive stuff. His &lt;a href=&quot;http://worrydream.com/Tangle/&quot;&gt;Tangle&lt;/a&gt; Javascript library lets you change variables in text, simply by dragging them directly in context. It gives us the convenience of sliders, with the flexibility of input fields (minus the hassle). Perfect.&lt;/p&gt;

&lt;p&gt;Well, perfect except that people in general are not accustomed to dragging text, so we need to somehow communicate that they can do that. Once you get a hang of it, though, it’s super convenient to play with the values. In this case we were willing to sacrifice a bit of discoverability for increased usability. (It did end up biting us though. Keep reading…)&lt;/p&gt;

&lt;h2 id=&quot;the-ui--visual-design&quot;&gt;The UI &amp;amp; Visual Design&lt;/h2&gt;
&lt;p&gt;If you look at the design explorations above, you’ll notice that we had actually gotten ahead of ourselves by adding styling to what was supposed to be wireframes. So we took a couple steps back, stripped all the styling and made an inventory of the content.&lt;/p&gt;

&lt;p&gt;Here’s an abridged version of the thought process that followed:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/uploads/blog/2012-10-02/ui-1.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Now that everything is laid out, it’s easy to focus on what matters and start grouping things together. Try to resist the temptation to make things symmetrical, or to align them perfectly, or to add something new, and instead look for inherent connections in the content.&lt;/p&gt;

&lt;p&gt;Let’s start by grouping the main variables together. They should probably be at the top, since they’re the first thing you’ll want to tweak. The chart, final balance, and 4% rule are all part of the result, so let’s bunch those together as well. And for now, let’s just put the “advanced options” at the bottom.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/uploads/blog/2012-10-02/ui-2.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;That’s a start. But the result column blends in with the adjustable values at the top. Let’s try differentiating them through contrast.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/uploads/blog/2012-10-02/ui-3.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Better. Except that now the whole thing looks top-heavy. It also lacks a clear flow—you can adjust the middle part from the top &lt;em&gt;and&lt;/em&gt; the bottom. Let’s group the adjustable variables together at the bottom, which should hopefully solve both issues.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/uploads/blog/2012-10-02/ui-4.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;OK, things are starting to look more balanced. That right column with the final amount just doesn’t sit right, though. It’s taking up way too much space to show so little information. Space that could be used for a bigger chart. Not only that, but its alignment with the years could be confusing.&lt;/p&gt;

&lt;p&gt;Where else could we put it? See that big empty space in the upper-left corner of the chart? Doesn’t it look like the results block would fit perfectly there? Let’s give it a shot…&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;/uploads/blog/2012-10-02/ui-5.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;That’s it. We’re left with two distinct units: one for displaying the results, and another one for adjusting the values. Now it’s just a matter of cleaning up the visuals, amping up the contrast, and adding some color.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://www.moneyforsomethingbook.com/investment-calculator&quot;&gt;&lt;img src=&quot;/uploads/blog/2012-10-02/ui-6.png&quot; alt=&quot;&quot; /&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;In addition to the visuals, we made a few other refinements in this final iteration:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;We added arrows to indicate that the values are draggable.&lt;/li&gt;
  &lt;li&gt;We turned the chart legend into supporting content, which not only better integrates it with the rest of the design, but also increases its usefulness.&lt;/li&gt;
  &lt;li&gt;We turned the 4% rule into a self-explanatory sentence, therefore avoiding having to add a separate help link for it.&lt;/li&gt;
  &lt;li&gt;We de-emphasized the advanced variables by turning it into a footnote.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;&lt;strong&gt;And we’re done!&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Or so we thought. Here are some things we changed shortly after launching the calculator:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;The arrows on the adjustable values misled people to think you could click on them. We changed them to a more explicit textual help. Not quite as elegant, but infinitely clearer.&lt;/li&gt;
  &lt;li&gt;From the start we had wanted to add the ability to make comparisons, but were unable to make it clear and easy to use. Then, right after launch, we had an epiphany. What if we just displayed the change from the previous balance whenever you make an adjustment? Turns out that was sufficient for the majority of cases we wanted to support.&lt;/li&gt;
  &lt;li&gt;We also added some example scenarios, to give people ideas for using the calculator.&lt;/li&gt;
&lt;/ul&gt;

&lt;h2 id=&quot;the-takeaway&quot;&gt;The Takeaway&lt;/h2&gt;
&lt;p&gt;The calculator was designed and built almost entirely by Marcus Andersson, our new intern from Sweden, with a little guidance from yours truly. Marcus is studying mobile development at Hyper Island, but wants to learn more about design and front-end development, so this was the perfect bite-size project for him to get started.&lt;/p&gt;

&lt;p&gt;In the process he improved his Javascript skills and learned CoffeeScript, SCSS, and HAML (yes, we like abstractions). He also got a crash course to how we approach design at Makalu. Here are some of his lessons learned:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;&lt;strong&gt;Start with the content first.&lt;/strong&gt; Be sure to understand what you’re designing and always use real content. Before adding anything extra, look for connections and opportunities inherent to what you already have.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Iterate and test.&lt;/strong&gt; Test your designs frequently against the defined goals and keep experimenting with alternative solutions. When you think you have the perfect design, push further, try other approaches and be open to change.&lt;/li&gt;
  &lt;li&gt;&lt;strong&gt;Re-evaluate your assumptions.&lt;/strong&gt; If you feel stuck with the design, take a step back and try questioning the constraints and assumptions that led to where you are.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We think the end result is by far the easiest-to-use investment calculator anywhere. &lt;a href=&quot;http://www.moneyforsomethingbook.com/investment-calculator&quot;&gt;Give it a go&lt;/a&gt; and let us know what you think.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Communicating with Blocks in Objective-C</title>
   <link href="http://makaluinc.com/blog/2012/09/communicating-with-blocks-in-objective-c.html"/>
   <updated>2012-09-03T00:00:00+00:00</updated>
   <id>http://makaluinc.com/blog/2012/09/communicating-with-blocks-in-objective-c</id>
   <content type="html">&lt;p&gt;Let’s talk about &lt;a href=&quot;http://developer.apple.com/library/ios/#featuredarticles/Short_Practical_Guide_Blocks/_index.html&quot;&gt;blocks&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;One area where I’ve personally seen a lot of benefit from using blocks is in setting up communication between separate systems. This could be communication between an app and a web service or between separate concerns within a single app. Communication with blocks helps maintain a high level of encapsulation while keeping your code readable and concise.&lt;/p&gt;

&lt;p&gt;Traditionally, we might set up communication between two objects using a &lt;a href=&quot;http://developer.apple.com/library/ios/#documentation/General/Conceptual/CocoaEncyclopedia/DelegatesandDataSources/DelegatesandDataSources.html&quot;&gt;delegate&lt;/a&gt;. Delegates are used througout Cocoa and Cocoa Touch to great effect and they’re virtually impossible to avoid. In iOS, the application delegate is one of the first objects we interact with. Delegates work well when two objects need to have an ongoing or broad relationship and the UITableView delegate is a great example of this.&lt;/p&gt;

&lt;p&gt;In other cases we might just want to be able to pass a little information around between objects without them necessarily knowing that much about each other. While we can get by defining a delegate protocol, implementing the delegate methods on our object and assigning the delegate to a property, using blocks we can accomplish the same thing while avoiding formal protocols and keeping the related code closer together.&lt;/p&gt;

&lt;p&gt;Let’s say we want to build an app that fetches and displays stock quotes. Because we’re good little programmers we’ve decided to separate, or encapsuate, the logic that actually communicates with whatever web service we’re using and provides a common interface or API for the rest of our app to use.&lt;/p&gt;

&lt;p&gt;If you’re new to this stuff (or if you use PHP) you might wonder why we would do this. Well for one, in the future we might want, or need, to switch the service that provides our stock quotes. If we wrote directly to the original service’s API in our app and the new service is not compatible with the original one we would need to update our application in any number of different places to make this change. But with the service API safely abstracted away behind an internal API of our own devising we would need only to modify one part of the app. This is called &lt;a href=&quot;http://en.wikipedia.org/wiki/Separation_of_concerns&quot;&gt;Separation of Concerns&lt;/a&gt;, and it’s a wonderful thing.&lt;/p&gt;

&lt;p&gt;Let’s assume we’ve got our Xcode project set up. You can even download &lt;a href=&quot;http://github.com/jdriscoll/ads-sample-stock-price-fetcher&quot;&gt;the complete project from Github&lt;/a&gt; if you want. Why don’t we first define the class that will handle all communication with the stock API we’ll be using. This class will provide the internal API that our application will interact with.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Note: For this example I’m using the undocumented but public Yahoo! stock quote API the details of which are beyond this post but available elsewhere on the internet.&lt;/em&gt;&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-objc&quot; data-lang=&quot;objc&quot;&gt;&lt;span class=&quot;c1&quot;&gt;//  SPFPriceFetcher.h&lt;/span&gt;

&lt;span class=&quot;cp&quot;&gt;#import &amp;lt;Foundation/Foundation.h&amp;gt;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;typedef&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;void&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SPFQuoteRequestCompleteBlock&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;BOOL&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;wasSuccessful&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;NSDecimalNumber&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;@interface&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SPFPriceFetcher&lt;/span&gt; : &lt;span class=&quot;bp&quot;&gt;NSObject&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;requestQuoteForSymbol:&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;NSString&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;symbol&lt;/span&gt;
                 &lt;span class=&quot;nf&quot;&gt;withCallback:&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SPFQuoteRequestCompleteBlock&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;callback&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;@end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;Very simple. Just one method that takes a stock symbol and a callback block. As you can see here I’ve used a typedef to define the callback. In many ways this is like defining an informal protocol. It’s not necessary and you can define the block inline with the method but in this case I think it aids in readability and it can be helpful when defining a callback as we’ll see later.&lt;/p&gt;

&lt;p&gt;Here’s the implementation of our PriceFetcher class.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-objc&quot; data-lang=&quot;objc&quot;&gt;&lt;span class=&quot;c1&quot;&gt;//  SPFPriceFetcher.m&lt;/span&gt;

&lt;span class=&quot;cp&quot;&gt;#import &amp;quot;SPFPriceFetcher.h&amp;quot;&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#import &amp;quot;JCDHTTPConnection.h&amp;quot;&lt;/span&gt;

&lt;span class=&quot;c1&quot;&gt;// Yahoo stock quote API&lt;/span&gt;
&lt;span class=&quot;c1&quot;&gt;// Example: http://download.finance.yahoo.com/d/quotes.csv?s=GOOG&amp;amp;f=l1&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#define kYahooStockQuoteAPIURL @&amp;quot;http:&lt;/span&gt;&lt;span class=&quot;c1&quot;&gt;//download.finance.yahoo.com/d/quotes.csv&amp;quot;&lt;/span&gt;
&lt;span class=&quot;cp&quot;&gt;#define kYahooStockQuoteAPIFormatString @&amp;quot;l1&amp;quot;&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;@implementation&lt;/span&gt; &lt;span class=&quot;nc&quot;&gt;SPFPriceFetcher&lt;/span&gt;

&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;void&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;requestQuoteForSymbol:&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;NSString&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;symbol&lt;/span&gt; &lt;span class=&quot;nf&quot;&gt;withCallback:&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;SPFQuoteRequestCompleteBlock&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;callback&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;bp&quot;&gt;NSURL&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;url&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;NSURL&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;URLWithString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:[&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;NSString&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;stringWithFormat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;@&amp;quot;%@?s=%@&amp;amp;f=%@&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                                       &lt;span class=&quot;n&quot;&gt;kYahooStockQuoteAPIURL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                                       &lt;span class=&quot;n&quot;&gt;symbol&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt;
                                       &lt;span class=&quot;n&quot;&gt;kYahooStockQuoteAPIFormatString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]];&lt;/span&gt;

    &lt;span class=&quot;bp&quot;&gt;NSURLRequest&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;NSURLRequest&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;requestWithURL&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;url&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;

    &lt;span class=&quot;n&quot;&gt;JCDHTTPConnection&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;connection&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;JCDHTTPConnection&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;alloc&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;initWithRequest&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;request&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;connection&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;executeRequestOnSuccess&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;
     &lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;NSHTTPURLResponse&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;response&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;NSString&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bodyString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
         &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;response&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;statusCode&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;==&lt;/span&gt; &lt;span class=&quot;mi&quot;&gt;200&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
             &lt;span class=&quot;bp&quot;&gt;NSDecimalNumber&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;price&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;NSDecimalNumber&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;decimalNumberWithString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bodyString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
             &lt;span class=&quot;n&quot;&gt;callback&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;YES&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
         &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
             &lt;span class=&quot;n&quot;&gt;callback&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;NO&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
         &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
     &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;failure&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;NSHTTPURLResponse&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;response&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;NSString&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;bodyString&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;NSError&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;error&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
         &lt;span class=&quot;n&quot;&gt;callback&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;NO&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;nb&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;);&lt;/span&gt;
     &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;didSendData&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;nil&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;

&lt;span class=&quot;k&quot;&gt;@end&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;You may notice that I’m keeping this block love-in going strong here by using my &lt;a href=&quot;http://adevelopingstory.com/blog/2011/11/jcdhttpconnection.html&quot;&gt;JCDHTTPConnection&lt;/a&gt; class which itself provides a block-based API for making HTTP requests using NSURLConnection. Calling blocks from within other blocks can be very powerful and allows you to chain callbacks which is also neat. I’m not going to go into all of this but basically we’re just making a simple GET request to the API url and passing in the stock symbol as a parameter. When our request completes we check to make sure it was successful and execute the callback block we’ve been passed with a BOOL indicating whether we able to fetch the price and, if so, the price we fetched.&lt;/p&gt;

&lt;p&gt;With our API proxy in place we can now look at how our application code might use this class. Our app’s only view controller (SPFViewController) has a single action that’s connected to the “Get Price” button in our UI. This action defines a callback block and then uses an instance of the SPFPriceFetcher class (that we lazily instantiate) to make the actual request. The callback that we pass in only needs to check if we were successful and update the UI accordingly.&lt;/p&gt;

&lt;div class=&quot;highlight&quot;&gt;&lt;pre&gt;&lt;code class=&quot;language-objc&quot; data-lang=&quot;objc&quot;&gt;&lt;span class=&quot;p&quot;&gt;-&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;IBAction&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nf&quot;&gt;getPrice:&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;id&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt;&lt;span class=&quot;nv&quot;&gt;sender&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
    &lt;span class=&quot;n&quot;&gt;SPFQuoteRequestCompleteBlock&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;callback&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;^&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;kt&quot;&gt;BOOL&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;wasSuccessful&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;bp&quot;&gt;NSDecimalNumber&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;*&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;price&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
        &lt;span class=&quot;k&quot;&gt;if&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;(&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;wasSuccessful&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;)&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;priceLabel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;bp&quot;&gt;NSString&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;stringWithFormat&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;s&quot;&gt;@&amp;quot;Latest price: $%@&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;,&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;price&lt;/span&gt; &lt;span class=&quot;n&quot;&gt;stringValue&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;]];&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt; &lt;span class=&quot;k&quot;&gt;else&lt;/span&gt; &lt;span class=&quot;p&quot;&gt;{&lt;/span&gt;
            &lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;priceLabel&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt; &lt;span class=&quot;o&quot;&gt;=&lt;/span&gt; &lt;span class=&quot;s&quot;&gt;@&amp;quot;Unable to fetch price. Try again.&amp;quot;&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;;&lt;/span&gt;
        &lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;
    &lt;span class=&quot;p&quot;&gt;};&lt;/span&gt;

    &lt;span class=&quot;p&quot;&gt;[&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;quoter&lt;/span&gt; &lt;span class=&quot;nl&quot;&gt;requestQuoteForSymbol&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;nb&quot;&gt;self&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;stockSymbolTextField&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;.&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;text&lt;/span&gt;
                          &lt;span class=&quot;nl&quot;&gt;withCallback&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;:&lt;/span&gt;&lt;span class=&quot;n&quot;&gt;callback&lt;/span&gt;&lt;span class=&quot;p&quot;&gt;];&lt;/span&gt;
&lt;span class=&quot;p&quot;&gt;}&lt;/span&gt;&lt;/code&gt;&lt;/pre&gt;&lt;/div&gt;

&lt;p&gt;With our application structured in this way we can easily change the internal workings of our PriceFetcher class without having to modify any other code. And because we’ve used blocks to implement our API we have the flexiblity to define our callbacks inline, ahead of time, or even pass them around or store them in instance variables.&lt;/p&gt;

&lt;p&gt;If you haven’t already you can &lt;a href=&quot;http://github.com/jdriscoll/ads-sample-stock-price-fetcher&quot;&gt;download the complete project from Github&lt;/a&gt;.&lt;/p&gt;

&lt;p&gt;I can only imagine we’ll be seeing more Apple APIs that use blocks in the future. Delegate-based APIs like NSURLConnection are clumsy and begging for a more modern interface. As an exercise, try rewriting our PriceFetcher class using NSURLConnection without JCDHTTPConnection and see how much code it takes (sure you can cheat by using stringWithContentsOfURL but what if we need to make a POST request?). Blocks are a great addition to the Objective C language and they can help us all write better, and less, code.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;This article was reposted from my personal blog at &lt;a href=&quot;http://adevelopingstory.com&quot;&gt;A Developing Story&lt;/a&gt;.&lt;/em&gt;&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Design for great customer support</title>
   <link href="http://makaluinc.com/blog/2012/05/customer-service.html"/>
   <updated>2012-05-31T00:00:00+00:00</updated>
   <id>http://makaluinc.com/blog/2012/05/customer-service</id>
   <content type="html">&lt;p&gt;One thing the experience with &lt;a href=&quot;http://racesplitter.com&quot;&gt;RaceSplitter&lt;/a&gt; has clearly taught us at Makalu Interactive is that customers absolutely love getting personalized service from somebody who knows the product inside and out. And that love translates to loyalty, retention, word-of-mouth marketing and all sorts of goodness.&lt;/p&gt;

&lt;blockquote&gt;“Support is awesome—quick, personal and great. Multiple messages answering all questions asked with helpful hints. Not a form letter as with some apps I have seen. These guys know their app and take the time to support their users.”&lt;br /&gt;&lt;em&gt;—recent five-star review in the App Store&lt;/em&gt;&lt;/blockquote&gt;

&lt;p&gt;Obviously nobody’s in a better position to provide this level of customer support than the product development team. But as a product becomes popular, and you have more and more customers, the problem of course is scaling that support. If your development team is answering hundreds of mails a day, they’re not going to be doing much development. &lt;/p&gt;

&lt;p&gt;At some point, companies hire support staff, and not having quite the product insight the development team has, service tends to devolve into the land of boilerplate.&lt;/p&gt;

&lt;blockquote&gt;“Thanks so much for contacting us! We sincerely appreciate both your business, and your frustration! Have you tried restarting? I hope I’ve been of some help. Have a great weekend! Love, Your Friendly Support Agent.” (Please don’t reply directly to this email, as the account is not followed by humans.)&lt;/blockquote&gt;

&lt;p&gt;What can we do to avoid that fate? (Or at least avoid it for as long as possible?) &lt;/p&gt;

&lt;h3 id=&quot;empathetic-design&quot;&gt;Empathetic design&lt;/h3&gt;

&lt;ul&gt;
  &lt;li&gt;
    &lt;p&gt;Keep the product as simple as possible.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;We iterate on the user interface to eliminate usage friction (all those tiny little points of “what next?” or “what just happened?” confusion)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Anticipate those “first moment” needs — the first-time a person visits the various sections of the website, the first time a customer returns to the website after having bought the app, the first time the customer launches the app and all the blank-slate versions of every functional screen.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Carefully craft the website copy and the text of our emails. We grab friends, ask them to read it, and watch their reaction.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Continually observe how the customers use the product, and enhance the experience to address common problems. (In the case of RaceSplitter, we automatically monitor their published results, looking for likely cases of mis-typed timing entries, and automatically send them a small email when we suspect it happened, and tell them how to recover.)&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Get out in the field and use the product ourselves. (In the case of RaceSplitter, you can’t simulate the pressure of a real race in the comforts of an office!)&lt;/p&gt;
  &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;All these things work to minimize the support requests we receive — allowing us to grow our customer base, while still being able to provide personalized customer service in cases when they do reach out to us.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Making of the Catalog Choice iPhone App</title>
   <link href="http://makaluinc.com/blog/2011/12/catalog-choice.html"/>
   <updated>2011-12-08T00:00:00+00:00</updated>
   <id>http://makaluinc.com/blog/2011/12/catalog-choice</id>
   <content type="html">&lt;p class=&quot;intro&quot;&gt;
It&#39;s not every day that an opportunity presents itself to develop a product for an audience of **1.5 million people**. That’s exactly what happened recently at Makalu, as we were engaged to develop the iPhone component of Catalog Choice’s new suite of premium services.
&lt;/p&gt;

&lt;p&gt;And we can’t wait to tell you about it!&lt;/p&gt;

&lt;h3 id=&quot;the-background&quot;&gt;The background&lt;/h3&gt;

&lt;p&gt;In 2007, Makalu was engaged by The Ecology Center of Berkeley, California to design and build a website that would provide American consumers with an effective tool to combat the growing number of unwanted catalogs they receive in the mail. The website — CatalogChoice.org — was launched, and quickly received the attention of nearly every large media channel in the United States, including a  focus spot on “Good Morning America”.&lt;/p&gt;

&lt;p&gt;Within one year, the service signed up more than &lt;strong&gt;one million members&lt;/strong&gt;.&lt;/p&gt;

&lt;p&gt;When Catalog Choice members receive an unwanted catalog, they login to their account, search for the catalog they received, and register an “opt-out” request. At that point, the Catalog Choice system acts as a powerful agent on behalf of the consumer to get request processed by the sending merchant. In this way, the consumer saves the effort of having to interact with individual companies, and benefits from the effectiveness the influential service has in getting their requests honored.&lt;/p&gt;

&lt;p&gt;Through use of Catalog Choice, consumers reduce clutter and simplify their lives. And on the collective scale of millions, the service is helping the environment by considerably reducing the natural resources used in the production of unwanted catalogs.&lt;/p&gt;

&lt;h3 id=&quot;re-engaging-with-our-friends&quot;&gt;Re-engaging with our friends&lt;/h3&gt;

&lt;p&gt;After Catalog Choice’s first year, when it was clear that a market existed for the service, a dedicated non-profit was formed, at which point The Ecology Center and Makalu handed the project over to the team that was established to manage and operate the service moving forward.&lt;/p&gt;

&lt;p&gt;Five years later, we’ve re-engaged with our friends at Catalog Choice to:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Redesign the website&lt;/strong&gt;, harmonizing the contextual changes and features that have evolved over the past half-decade, and to&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;Design and develop an &lt;strong&gt;iPhone app&lt;/strong&gt;, which is the first in a suite of premium products known as, &lt;em&gt;MailStop&lt;/em&gt;.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;We’ll first take a look at the website redesign, and then look at the iPhone app.&lt;/p&gt;

&lt;h3 id=&quot;catalog-choice-website-redesign&quot;&gt;Catalog Choice website redesign&lt;/h3&gt;

&lt;p&gt;Over the years, the service has expanded beyond catalogs, allowing consumers to opt-out of all types of unwanted mail — everything from credit card offers, to phone books. In addition, the service has established special relationships with local communities and townships throughout the United States, which are reflected in various ways throughout the site. Accommodating these changes, along with the introduction of a set of premium services, necessitated a fresh look at the overall site architecture and design.&lt;/p&gt;

&lt;p&gt;The service is preparing to launch the new design, which so far has addressed the home page, and the purchase workflow related to the new MailStop products. We focused on simplification, higher sign-up conversion, and clearer communication of the service’s message.&lt;/p&gt;

&lt;p&gt;We’re thrilled to show you three sneak-peek screenshots of the new look:&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://dafacto.com/content/images/makalu/catalogchoice/web-01.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://dafacto.com/content/images/makalu/catalogchoice/web-02.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://dafacto.com/content/images/makalu/catalogchoice/web-03.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;We’re really happy about the design, and looking forward to seeing its launch, and extended implementation throughout the site.&lt;/p&gt;

&lt;h3 id=&quot;the-mailstop-iphone-app&quot;&gt;The MailStop iPhone App&lt;/h3&gt;

&lt;p&gt;The MailStop suite was conceived as a set of premium add-on services that both extend the ways in which consumers can be protected, and make using the existed Catalog Choice services even easier.&lt;/p&gt;

&lt;p&gt;In that regard, Makalu was engaged to design and develop an iPhone app that saves consumers the effort of even having to login to the website. Having purchased opt-out credits (as an in-app purchase), users of the service can simply capture the relevant information related to their unwanted mail in images, and submit them directly to the service. Catalog Choice takes it from there.&lt;/p&gt;

&lt;p&gt;With the MailStop iPhone app, it couldn’t be easier to opt-out of unwanted mail!&lt;/p&gt;

&lt;h3 id=&quot;the-design-process&quot;&gt;The design process&lt;/h3&gt;

&lt;p&gt;The experience of RaceSplitter and Rebalance (still ongoing) has taught us that it’s far more time consuming and expensive to change app code than design mockups (when, for example, you realized you’ve gone in a wrong direction), and so with the MailStop app, we went much further into the UI design than we have in the past, before starting the development.&lt;/p&gt;

&lt;p&gt;The results were good. We found that a reasonable level of discussion and review were, in fact, possible around just a set of mock-ups, as opposed to playing with a working prototype. On the other hand, it wasn’t perfect. Although it was possible to satisfy all the &lt;em&gt;requirements&lt;/em&gt; and &lt;em&gt;constraints&lt;/em&gt; in abstract design, once the product came to life in the form of a prototype, we realized that no matter how careful you are, you can never completely appreciate the subtle interactions and frictions that make themselves apparent when &lt;em&gt;actually using&lt;/em&gt; a product.&lt;/p&gt;

&lt;p&gt;For example, during the design process we iterated six times on the workflow in which a user captures “up to” three images to capture three critical pieces of information (the catalog name, mailing label, and merchant data.) How do you efficiently communicate to the user that they can take &lt;em&gt;up to&lt;/em&gt; three images, but that &lt;em&gt;one is often sufficient&lt;/em&gt;? Given that they are to capture three pieces of information, the risk is that they assume they &lt;em&gt;must&lt;/em&gt; take three photos.&lt;/p&gt;

&lt;p&gt;As you can see in our screenshots below, our solution feels more &lt;em&gt;described&lt;/em&gt; than &lt;em&gt;direct&lt;/em&gt;, and that’s an important disctinction. The designed solution works, but it’s not perfect. We’ll take the opportunity in version 2 to design something which feels more direct and intuitive, and better avoids the potential correlation in the user’s mind of the number of photos available, and the number of information pieces we need.&lt;/p&gt;

&lt;p&gt;The design and development process, however, was definitely an improvement over the experience we had with RaceSplitter (in which we built prototypes &lt;em&gt;too&lt;/em&gt; early). We’re pleased with the results, but we didn’t yet hit the sweet spot; and so there’s process improvements still to be discovered.&lt;/p&gt;

&lt;h3 id=&quot;a-visual-tour-of-the-app&quot;&gt;A visual tour of the app&lt;/h3&gt;

&lt;p&gt;And with that, we’d love to show you the app, with this 10-image tour.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://dafacto.com/content/images/makalu/catalogchoice/iphone-01.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://dafacto.com/content/images/makalu/catalogchoice/iphone-02.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://dafacto.com/content/images/makalu/catalogchoice/iphone-03.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://dafacto.com/content/images/makalu/catalogchoice/iphone-04.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://dafacto.com/content/images/makalu/catalogchoice/iphone-05.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://dafacto.com/content/images/makalu/catalogchoice/iphone-06.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://dafacto.com/content/images/makalu/catalogchoice/iphone-07.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://dafacto.com/content/images/makalu/catalogchoice/iphone-08.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://dafacto.com/content/images/makalu/catalogchoice/iphone-09.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://dafacto.com/content/images/makalu/catalogchoice/iphone-10.png&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Look interesting? Why not give it a try right now? It’s free, and &lt;a href=&quot;http://bit.ly/mailstopapp&quot;&gt;available today on the App Store&lt;/a&gt;!&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>How to schedule focus</title>
   <link href="http://makaluinc.com/blog/2011/11/how-to-schedule-focus.html"/>
   <updated>2011-11-23T00:00:00+00:00</updated>
   <id>http://makaluinc.com/blog/2011/11/how-to-schedule-focus</id>
   <content type="html">&lt;p&gt;For nearly a decade, we at Makalu have worked to consistently deliver real, objective value to our customers, and by external measures we’ve been successful. We built a website for Catalog Choice that registered a million users in its first year. We built a game for Google and Virgin America that Ogilvy &amp;amp; Mather pointed to as a reference for modern-day marketing. And we’ve increased signed up conversion, customer retention, and ultimately the bottom line for many more.&lt;/p&gt;

&lt;p&gt;We seem to have done well, which is great, except for one thing — we’ve never been able to shake a nagging feeling of dissatisfaction. Although we’re doing good work by external standards, we know deep down that we’re not doing our &lt;em&gt;best&lt;/em&gt; work, by our &lt;em&gt;own&lt;/em&gt; standards.&lt;/p&gt;

&lt;p&gt;Is it something we should just accept, or should we do something about it? In case others in our industry might share in this internal tension, I decided to put our thoughts into an article to share.&lt;/p&gt;

&lt;h3 id=&quot;doing-great-work&quot;&gt;Doing great work&lt;/h3&gt;

&lt;p&gt;Doing really great work requires &lt;em&gt;focus&lt;/em&gt; — getting in the zone, and staying there, uninterrupted, until you come to whatever milestone makes sense in the context (a wireframe, a mockup, a prototype iteration, or a blog article.) And, unfortunately, you can’t know in advance exactly how long it will take to get there. You might know it &lt;em&gt;usually&lt;/em&gt; takes a day, but sometimes it takes three.&lt;/p&gt;

&lt;p&gt;So to create great work, we need uninterrupted focus, for as long as it takes.&lt;/p&gt;

&lt;h3 id=&quot;running-a-services-business&quot;&gt;Running a services business&lt;/h3&gt;

&lt;p&gt;Customer engagements (even if you’re your own customer) introduces constraints that work contrary to producing ones best work. &lt;/p&gt;

&lt;p&gt;The owner of a services company can, through policy, control some of these constraints. When talking with potential customers, you can communicate that your company’s mission is to do great work, and therefore you avoid certain things. In our case, that would include fixed-price projects, and projects involving severely limiting budgets or time contraints. We’ve done a good job sticking with this policy.&lt;/p&gt;

&lt;p&gt;But what we haven’t been able to avoid, is the necessity of working on multiple projects in parallel.&lt;/p&gt;

&lt;h3 id=&quot;project-concurrency-to-address-idle-time&quot;&gt;Project concurrency to address idle time&lt;/h3&gt;

&lt;p&gt;All service projects involve idle time, such as when a customer reviews an iteration, or when a delay is introduced. We could try to forcibly manage flow by contract, but nobody likes that. Both customers and providers appreciate a process that allows projects to follow their natural dynamic, and reasonably accommodate the unforseen. So we accept that (sometimes unpredictable) idle time is part of our way of doing business.&lt;/p&gt;

&lt;p&gt;So how can we address the cost impact (and profit loss) of idle time? Our approach has been to operate multiple projects in parallel, for a given team, in an effort to keep our resources busy. It doesn’t eliminate idle time, and it introduces its own challenges, but it’s the best approach we’ve found.&lt;/p&gt;

&lt;p&gt;Of course, if we take on too many projects, we’ll end up the source of project delays, and we don’t want that. We’ve found, through experience, that things go well if we take on no more than two projects at a time, per team.&lt;/p&gt;

&lt;h3 id=&quot;effort-scheduling&quot;&gt;Effort scheduling&lt;/h3&gt;

&lt;p&gt;So we’re working on two projects, each of which has some current milestone that we’re working towards. How do we schedule our time?&lt;/p&gt;

&lt;p&gt;We’ve tended to schedule our time weekly, by day — Monday (Project 1), Tuesday (Project 2), Wednesday (Project 1), Thursday (Project 1 &amp;amp; Project 2), Friday (Project 2) — taking into account, as best possible, the various needs of each project.&lt;/p&gt;

&lt;p&gt;(Since we don’t know how long it takes to get to a milestone, and if we insist on providing at least a minimum level of quality, then a consequence of this planning is that we can’t tell Client 1, “We’ll finish XYZ by Monday night.” Instead, we can only say, “We’ll be working all day Monday, Wednesday and half of Thursday, and we &lt;em&gt;think&lt;/em&gt; we might get to XYZ.”)&lt;/p&gt;

&lt;p&gt;This loading (two projects at once) and planning strategy has worked well during the past few years — we haven’t gotten terribly behind on any project, we’re maintaining a consistently high ratio of chargeable/non-chargeable time, our customers have all been happy, and we’ve remained profitable.&lt;/p&gt;

&lt;p&gt;But, there’s that darn elephant in the room. &lt;/p&gt;

&lt;p&gt;At the end of the day, we just don’t feel satisfied. We try to soldier on, but it keeps popping up. We keep asking ourselves, “We only have one life to live. Are we really OK with not doing our &lt;em&gt;best&lt;/em&gt;?”&lt;/p&gt;

&lt;h3 id=&quot;a-new-approach-scheduling-in-blocks-of-a-week&quot;&gt;A new approach — scheduling in blocks of a week&lt;/h3&gt;

&lt;p&gt;Analyzing things, we suspect that the focus (essential to great work) lost with daily (and sometimes mid-daily) context switches is just too consequential. Knowing that we’re switching context so frequently seems to create too strong a feeling of urgency, encourages taking shortcuts, and going with known patterns instead of pushing the envelope. It seems to lead to &lt;em&gt;good enough&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;To address this, we’re going to try experimenting with planning things in blocks of a &lt;em&gt;week&lt;/em&gt; — i.e. Week 1 (Project 1), Week 2 (Project 2), and so on. We’re hoping that focus blocks in units of weeks will give us enough time to reflect and explore, allowing us to get deep enough to make the work &lt;em&gt;great&lt;/em&gt;.&lt;/p&gt;

&lt;p&gt;That’s the target, at least. I’m sure it’s going to prove easier said than done. Implementing this will imply both economic and scheduling concessions on the part of our customers. But, if it gets us closer to doing our &lt;em&gt;very best work&lt;/em&gt;, maybe it’ll prove worth it — for both us, and our customers.&lt;/p&gt;

&lt;p&gt;We’ll see, and I’ll report back.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>We’re looking for a designer</title>
   <link href="http://makaluinc.com/blog/2011/09/looking-for-a-designer.html"/>
   <updated>2011-09-12T00:00:00+00:00</updated>
   <id>http://makaluinc.com/blog/2011/09/looking-for-a-designer</id>
   <content type="html">&lt;h4 id=&quot;who-we-are&quot;&gt;Who we are&lt;/h4&gt;

&lt;p&gt;Makalu Interactive is a small company that provides its clients with high quality design, development and consulting services. We regularly get to work on interesting projects for great companies like Google, YouTube, Virgin America and O’Reilly.&lt;/p&gt;

&lt;p&gt;Recently, we’ve begun to produce our own products. Our long term goal is to sustain ourselves exclusively through products.&lt;/p&gt;

&lt;p&gt;Our office is on the Mediterranean sea, in beautiful Marbella, Spain.&lt;/p&gt;

&lt;h4 id=&quot;what-were-like&quot;&gt;What we’re like&lt;/h4&gt;

&lt;p&gt;Quality of life is very important. At the end of our careers, we want look back on years of doing great work, creating real value, solving important problems, delighting people, and feeling we’ve done our best and have enjoyed ourselves. We’re very serious about that.&lt;/p&gt;

&lt;p&gt;We believe if those are the priorities, everything else will fall into place. So far everything has.&lt;/p&gt;

&lt;h4 id=&quot;who-were-looking-for&quot;&gt;Who we’re looking for&lt;/h4&gt;

&lt;p&gt;You’re someone who loves to design product interfaces, and has experience with web and mobile design. Although you feel you still have so much to learn, you know inside you’re really good at what you do.&lt;/p&gt;

&lt;p&gt;Ideally, you like to build what you design, and are proficient in HTML and CSS (maybe even JavaScript.) You’re not afraid of technology.&lt;/p&gt;

&lt;p&gt;You enjoy studying well designed products, like those from Apple. You like to think about the process of design, and try to figure out how to &lt;em&gt;consistently&lt;/em&gt; produce great design. Your work is thoughtful, reasoned and justified; very little is arbitrary.&lt;/p&gt;

&lt;p&gt;Characteristics that are likely important to you are humility, honesty, objectivity and authenticity.&lt;/p&gt;

&lt;h4 id=&quot;about-the-job&quot;&gt;About the job&lt;/h4&gt;

&lt;p&gt;We’d love to hire someone who can work in our office. But we’re also fine with remote working. If you’re based in Europe, at least we’d be in the same time zone.&lt;/p&gt;

&lt;p&gt;Although this is a full time position, we’ll probably want to start with a couple of pilot projects, to make sure we’re right for each other.&lt;/p&gt;

&lt;h4 id=&quot;how-to-apply&quot;&gt;How to apply&lt;/h4&gt;

&lt;p&gt;Along with your CV, send a letter to matt at makaluinc.com explaining why you’re interested in the position.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Minimum Viable Products</title>
   <link href="http://makaluinc.com/blog/2011/07/minimum-viable-product.html"/>
   <updated>2011-07-31T00:00:00+00:00</updated>
   <id>http://makaluinc.com/blog/2011/07/minimum-viable-product</id>
   <content type="html">&lt;p&gt;Early in 2011, we at Makalu released our first product — “RaceSplitter,” an application for the iPhone that changes how organizers of sporting events time their races. Our aim for version 1.0 was to deliver a “minimum viable product”. This article discusses what that means to us.&lt;/p&gt;

&lt;h4 id=&quot;minimal-product-does-not-mean-minimal-implementation&quot;&gt;Minimal product does not mean minimal implementation&lt;/h4&gt;

&lt;p&gt;Any organization that sets out to bring a product to market must decide what to build, and on that point it’s common to hear people speak of a “minimum viable product” — i.e. a product with the minimal functionality to deliver the core of the its value proposition. &lt;/p&gt;

&lt;p&gt;Many organizations take this definition one step further, to include the minimum &lt;em&gt;implementation&lt;/em&gt; of the minimum functionality, believing that — perhaps in the interest of time or costs — it’s acceptable to release a product that’s rough around the edges, and later improve on it (possibly depending on how well it’s accepted by the market).&lt;/p&gt;

&lt;p&gt;We believe this is short-sighted, and reflects a flawed perception of the importance, even criticality, of the user experience in the success of any new product.&lt;/p&gt;

&lt;h4 id=&quot;the-case-of-racesplitter&quot;&gt;The case of RaceSplitter&lt;/h4&gt;

&lt;p&gt;After 200 man-hours of effort, we had a version of RaceSplitter which was minimally functional, in that it implemented all of the features we considered core to the product — you could create and configure a race, you could time a race, and you could export results.&lt;/p&gt;

&lt;p&gt;But it wasn’t until we’d invested an additional &lt;em&gt;400 hours&lt;/em&gt; improving the user interface — fully &lt;em&gt;two thirds&lt;/em&gt; of the overall development cost — that we felt we had a minimum &lt;em&gt;viable&lt;/em&gt; product — i.e. a product that delivered the core functionality, and within an experience so delightful that the users would want to tell others about it.&lt;/p&gt;

&lt;p&gt;Here’s a number of examples:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Reducing fundamental interface complexity.&lt;/strong&gt; The user interaction model went through three fundamental revisions. Each revision reduced one complete level of hierarchy. The result was an interface providing access to the essential features, with far fewer clicks. Identifing potential reductions of hierarchy is as important as it is difficult, and requires a conscious effort not to get stuck in the current interface paradigm.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Making the user think less.&lt;/strong&gt; The interaction of the timing model — i.e. how the user records the time when a racer passes by — went through several iterations until one was found that supported three modes of timing simultaneously: (1) single racer timing, (2) group timing (giving the same time to multiple racers), and (3) sub-group timing (giving the same time to a subset of a selected group of racers). By supporting all timing scenarios in a single interaction model, we avoid one user choice: “Which mode should I select?” That’s a lot of effort to reduce a single decision; but in the heat of a race, that can make the difference between successful and failed use of the product.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;&lt;strong&gt;Reducing interface friction.&lt;/strong&gt; We worked to identify momentary pauses occurring when users (and us) interacted with the app, and then made efforts to eliminate those UI friction points. For example, when changing a race from one start mode to another — e.g. from &lt;em&gt;interval&lt;/em&gt; start to &lt;em&gt;mass&lt;/em&gt; start — we inform the user what effect that’s going to have on the ordering of any racers already existing in the start list (giving them the chance to cancel the change). This contextual feedback eliminated that momentary, “Uh oh, how’s this going to affect things I’ve already done?” friction.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;h4 id=&quot;iterate-with-high-fidelity-prototypes&quot;&gt;Iterate with high-fidelity prototypes&lt;/h4&gt;

&lt;p&gt;We found that these kinds of user experience refinements are best achieved through an iterative process of testing high-fidelity (working) prototypes of the application, and diligently seeking to identify points of friction. &lt;/p&gt;

&lt;p&gt;You can identify friction by watching someone use the product for the first time, without a manual. For example, with RaceSplitter, when you ask them to create and run a race, and observe a smooth tap-tap-tap-tap-tap-done, you know you’re on the right path. But when you see tap-tap…hmmm…tap…oops…tap — you know further thinking and refinements are needed.&lt;/p&gt;

&lt;h4 id=&quot;costly-but-worth-it&quot;&gt;Costly, but worth it&lt;/h4&gt;

&lt;p&gt;This process of iterating with working prototypes is obviously costly. On the other hand, you simply can’t get this kind of deep insight by staring at static mockups, and imagining yourself using the app. We’re convinced that in the long run, the costlier development approach maximizes the possibility of the product ultimately succeeding in the marketplace.&lt;/p&gt;

&lt;p&gt;In the case of RaceSplitter, our initial users absolutely &lt;em&gt;loved&lt;/em&gt; the product. Time and again, we’ve received feedback along the lines of, “It’s so easy to use! With no instruction at all, I was able to time the entire event, edit a couple mis-entries, and publish the results online.” In fact, due to the enthusiasm (and blogging!) of a single early adopter in Norway, we’ve ended up selling nearly as many copies in that one small country as we have in the entire United States.&lt;/p&gt;

&lt;h4 id=&quot;its-your-choice&quot;&gt;It’s your choice.&lt;/h4&gt;

&lt;p&gt;Shipping the minimal &lt;em&gt;implementation&lt;/em&gt; of the minimum viable product can save money and get a product to market faster. But it increases the chances that your first users will think, “Nice idea. I’ll try to remember to check back someday.” — and then never return.&lt;/p&gt;

&lt;p&gt;Quality execution takes longer and costs more, but ultimately leads to far better chances of success in the marketplace. And at the end of the day, that’s all that matters.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>The Story of RaceSplitter</title>
   <link href="http://makaluinc.com/blog/2011/03/the-story-of-racesplitter.html"/>
   <updated>2011-03-17T00:00:00+00:00</updated>
   <id>http://makaluinc.com/blog/2011/03/the-story-of-racesplitter</id>
   <content type="html">&lt;p&gt;This article was first featured on the blog at &lt;a href=&quot;http://37signals.com/svn/posts/2808-how-makalu-interactive-created-the-international-iphone-hit-racesplitter&quot;&gt;37signals&lt;/a&gt; (a company which has long been a role model for us).&lt;/p&gt;

&lt;h3 id=&quot;makalu-history-of-a-service-provider&quot;&gt;Makalu — history of a service provider&lt;/h3&gt;

&lt;p&gt;Since 2001, our small team at Makalu Interactive has provided web design and development services for clients around the world. We’ve been fortunate to work on some high-profile projects, including the &lt;a href=&quot;http://www.makalumedia.com/skitch/cc-original-20100913-180735.html&quot;&gt;original&lt;/a&gt; CatalogChoice.org site, which gained over one million users in its first year, and the interactive game anchoring the Google &amp;amp; Virgin America cross-marketing campaign, &lt;a href=&quot;http://dayinthecloud.com&quot;&gt;Day in the Cloud&lt;/a&gt;. (And as a side note, &lt;a href=&quot;http://sortfolio.com/company/6420-makalu-interactive&quot;&gt;Sortfolio&lt;/a&gt; has proven to be an amazing source of high-quality leads for us.)&lt;/p&gt;

&lt;h3 id=&quot;the-itch-to-create-for-ourselves&quot;&gt;The itch to create for ourselves&lt;/h3&gt;

&lt;p&gt;Despite success in client work, we’ve always imagined that creating our own products would bring deeper satisfaction, and provide the opportunity to succeed beyond the linear function of available manpower. As a team of people passionate about great user experience — and having studied the companies that make them (like Apple) and the processes through which they are made — we’ve always been curious as to just what kind of product &lt;em&gt;we&lt;/em&gt; would be capable of making.&lt;/p&gt;

&lt;p&gt;We’ve always identified with 37signals. It was inspiring to watch a team of people that seemed so much like ourselves transition from a web design company (like ourselves) to a highly successful products company. We also enjoyed both Getting Real and REWORK, as they articulated a refreshing view and simple approach to many of the issues we struggled with. (It was no small satisfaction to later learn that a former employee of Makalu, Mike Rohde, would end up being the designer of the REWORK illustrations.)&lt;/p&gt;

&lt;p&gt;Not only did we try to apply the ideas from Getting Real &amp;amp; REWORK to our client services business, we later found them particularly valuable when making our first steps in the direction of becoming products company.&lt;/p&gt;

&lt;h3 id=&quot;hello-racesplitter&quot;&gt;Hello RaceSplitter&lt;/h3&gt;

&lt;p&gt;Last year, we were approached by a group of people associated with NENSA.net, FasterSkier.com and FlyingPointRoad.com, interested in having a timing app developed, for recording split times and providing relative racer position during nordic ski events. With European timing devices costing $500 and up, and the previously popular Palm app going the way of the PalmOS, it seemed natural that something should be built for the iPhone.&lt;/p&gt;

&lt;p&gt;In certain nordic ski races, similar to cycling time trials, racers start individually or in waves, separated by a start time interval — say, 30 seconds. If you’re a coach on the course, timing racers as they pass by, it’s difficult to know who’s in the lead. Although it does other things, that’s the essential problem that app solves.&lt;/p&gt;

&lt;p&gt;We accepted the project, and got to work. The app would be called RaceSplitter.&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://racesplitter.com&quot;&gt;http://racesplitter.com&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;It soon became apparent that the app had the potential to be an ideal first product for Makalu. It passed both the “scratch your own itch” and “focus on what doesn’t change” tests. As both participants and observers in similar sports, we were deeply familiar with the application domain, and needed such an app ourselves. And unlike an app for, say, telling the world you’ve checked in at Starbucks, a sports timing device is something that should be as relevant in five years as it is today.&lt;/p&gt;

&lt;p&gt;We put together a proposal, in which Makalu would acquire ownership of the app, with the client keeping a minority stake. Seeing our interest, not only in the app itself, but also in building a business around the product, they accepted our offer and RaceSplitter became Makalu’s first product.&lt;/p&gt;

&lt;p&gt;As a client provider, one always hopes to give 100% to the client, but we’d be lying if we didn’t admit that becoming the app’s owner didn’t provoke a psychological change. This was the chance we’d been waiting for; to discover what we were truly capable of.&lt;/p&gt;

&lt;h3 id=&quot;the-complete-user-experience--attention-to-detail&quot;&gt;The complete user experience — attention to detail&lt;/h3&gt;

&lt;p&gt;We poured our hearts and abilities into the product. As believers that user experience extends to every way in which a product interfaces its users, we worked as hard on things like the pre-launch sign-up site, announcement emails, even the app icon, as we did on the app itself.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://makalu-assets.s3.amazonaws.com/images/racesplitter/37signals/screenshot-signup.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;center&gt;&lt;em&gt;The RaceSplitter signup screen&lt;/em&gt;&lt;/center&gt;

&lt;p&gt;&lt;img src=&quot;http://makalu-assets.s3.amazonaws.com/images/racesplitter/37signals/screenshot-racesplitter.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;center&gt;&lt;em&gt;The RaceSplitter website&lt;/em&gt;&lt;/center&gt;

&lt;p&gt;As emphasized in REWORK, even though our 1.0 would be minimal in terms of features, it wouldn’t be half-assed; it’d be “at-home good”.&lt;/p&gt;

&lt;h3 id=&quot;launch--an-international-hit&quot;&gt;Launch — an international hit&lt;/h3&gt;

&lt;p&gt;The application launched, at $24.99, and within its second day on the market became the &lt;a href=&quot;http://skitch.maka.lu/RaceSplitter_Top_Grossing_Sports-20110127-163117.html&quot;&gt;4th top grossing app&lt;/a&gt; in the US App Store (Sports), number one in Norway, and was selling well around the world.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://makalu-assets.s3.amazonaws.com/images/racesplitter/37signals/sales-geography.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;Feedback started coming in from customers, and they absolutely loved it. Many said it was the perfect product. We began collecting comments at:&lt;/p&gt;

&lt;p&gt;&lt;a href=&quot;http://racesplitter.com/testimonials&quot;&gt;http://racesplitter.com/testimonials&lt;/a&gt;&lt;/p&gt;

&lt;h3 id=&quot;racebuilder-building-on-our-momentum&quot;&gt;RaceBuilder — building on our momentum&lt;/h3&gt;

&lt;p&gt;We quickly shifted focus to &lt;a href=&quot;http://racesplitter.com/racebuilder&quot;&gt;RaceBuilder&lt;/a&gt;, a companion web-app to create, share and discovered races for import into RaceSplitter. This proved equally popular, and within two weeks more than 110 nordic ski races were published, containing 5,500 unique racers — including the World Championships in Oslo, Norway. More importantly, we established the beginnings of a central hub and community, on which we’ll be able to build and market services in the future.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://makalu-assets.s3.amazonaws.com/images/racesplitter/37signals/screenshot-racebuilder.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;center&gt;&lt;em&gt;The RaceBuilder website&lt;/em&gt;&lt;/center&gt;

&lt;p&gt;&lt;img src=&quot;http://makalu-assets.s3.amazonaws.com/images/racesplitter/37signals/screenshot-race.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;
&lt;center&gt;&lt;em&gt;Creating a race in RaceBuilder&lt;/em&gt;&lt;/center&gt;

&lt;h3 id=&quot;great-products-are-discovered-not-specified&quot;&gt;Great products are discovered, not specified&lt;/h3&gt;

&lt;p&gt;One of the most important things revealed through the process of building RaceSplitter is that we could have never specified at the beginning of the project precisely how the final product would look and behave. (This observation has important implications for the client-services business!) The “functional requirements” were satisfied during the first one-third of the effort ultimately spent. The final two-thirds were spent in iterations — transforming a &lt;em&gt;functionally-complete&lt;/em&gt; product, into a &lt;em&gt;great&lt;/em&gt; product.&lt;/p&gt;

&lt;p&gt;As proposed in Getting Real, the user interface design led the process, and ultimately went through four revisions, with two of those resulting in the elimination of an entire level of interface hierarchy. Here’s a sequence of revisions in a couple of areas:&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The active race screen&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The active race screen shows the current race standings, as well as provides access to the timing function. In the original wireframes, we separated lap standings on individual screens, navigated through swiping. We also had the “stop race” button in the lower right corner. To access the timing interface, we used the “Record” terminology.&lt;/p&gt;

&lt;p&gt;In subsequent revisions, leading to the final, we decided to display all laps on a single (scrollable) screen, and moved the “Stop” button to the bottom left, where it was less likely to be inadvertently tapped by the thumb of a right-handed user. We also used more explicit “Time Racers” terminology to access the timing interface.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://makalu-assets.s3.amazonaws.com/images/racesplitter/37signals/appui-activerace.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;&lt;em&gt;The timing interface&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;The timing interface, from a UI perspective, was challenging. We created a &lt;a href=&quot;http://www.makalumedia.com/skitch/nensa-2010-09-20-13-06-19.html&quot;&gt;live wireframe prototype&lt;/a&gt; of our initial idea for the interface, in which the racer’s bib identification and timing button are integrated into the same UI control.&lt;/p&gt;

&lt;p&gt;Later, however, we realized that this interface would only allow for timing one racer at a time. In nordic races, &lt;em&gt;groups&lt;/em&gt; of racers often pass together, and need to have the same split time applied to everyone in the group.&lt;/p&gt;

&lt;p&gt;Taking inspiration from Apple’s Mail app on the iPhone, we created a “timing bar” interface, where multiple bib numbers can be added, and timed at once.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://makalu-assets.s3.amazonaws.com/images/racesplitter/37signals/appui-timinginterface.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;p&gt;The timing interface can be seen in action in this &lt;a href=&quot;http://racesplitter.com/videos/RaceSplitter&quot;&gt;video screencast.&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;We spent a lot of effort focusing on the details of the UI. For example, we created aesthetically pleasing blank slate screens, and we created a custom, efficient UI control for numerical fields whose modification tends to happen incrementally — such as the assignment of lap number to a timing entry.&lt;/p&gt;

&lt;p&gt;&lt;img src=&quot;http://makalu-assets.s3.amazonaws.com/images/racesplitter/37signals/appui-details.png&quot; alt=&quot;&quot; /&gt;&lt;/p&gt;

&lt;h3 id=&quot;features-wolves-in-sheeps-clothing&quot;&gt;Features — wolves in sheep’s clothing&lt;/h3&gt;

&lt;p&gt;We’ve always been aware of the importance of focusing on a product’s essential functions, and taking great care when adding features. This was probably one of the strongest messages from Getting Real — learning to say no to features.&lt;/p&gt;

&lt;p&gt;That said, we still couldn’t help but add some nonessential, and seemingly innocent, features during development. Some of those features later turned out to be surprisingly complicated, and costly.&lt;/p&gt;

&lt;p&gt;For example, we added the ability to record a timing entry for a racer that wasn’t in the start list. Later, we realized we’d also need to design the UI to assign that blank entry to a racer. In designing &lt;em&gt;that&lt;/em&gt; UI, it occurred to us that we’d also need to offer the ability to create a completely new racer (not existing in the database of racers), and then when creating a new racer, offer the possibility to create a new team. It didn’t stop there. We then had to make sure the app behaved sensibly in other areas, such as exporting of data, if the user chose not to assign that blank entry to anybody. &lt;/p&gt;

&lt;p&gt;And on it went. We learned the hard way the unintended consequences of seemingly simple features.&lt;/p&gt;

&lt;h3 id=&quot;a-different-view-of-minimum-viable-product&quot;&gt;A different view of “minimum viable product”&lt;/h3&gt;

&lt;p&gt;As users of several 1.0 products ourselves, we’ve gotten the impression that for many, the concept of “minimum viable products” extends beyond the essential features, to the entire user experience. We believe that although a 1.0 may be slim on features, its UI and overall user experience should be polished, and as frictionless as possible. &lt;/p&gt;

&lt;p&gt;In RaceSplitter, after 200 hours, we had a working app. But then we spent another 450 hours perfecting the execution of that core application. The UI went through four revisions, focusing on the smallest details. &lt;/p&gt;

&lt;p&gt;The results speak for themselves. Customers of RaceSplitter, rather than saying, “Good idea, let’s see where this is in six months.” (and then never come back, nor tell anyone about the product), are shouting praise from the rooftops. Not a day goes by that we don’t receive an email from somebody saying, “This app is perfect!”&lt;/p&gt;

&lt;p&gt;Of course, we get a lot of feature requests, and it’s a bit of irony that many of those requests would work against the simplicity and frictionless interface that the customers value so much. Perhaps that’s why the designers of successful products are sometimes unpopular and under-appreciated; they’re the ones always saying, “No.”&lt;/p&gt;

&lt;h3 id=&quot;dont-be-afraid-to-price-an-app-beyond-099&quot;&gt;Don’t be afraid to price an app beyond $0.99&lt;/h3&gt;

&lt;p&gt;To determine our pricing we surveyed coaches, who said they’d pay $50 for such an app. Then we spoke to some parents to understand what would be the impulse buy threshold, and we came to believe that was around $25. We settled on $24.99, hoping the app would then be popular among coaches, parents and enthusiasts.&lt;/p&gt;

&lt;p&gt;We will experiment with pricing in the future, but so far we’ve not had any complaints about the product’s price. We’ve been told by several customers that although they initially tried the cheaper alternatives, they ultimately settled on our app, and feel it represents a good value to them.&lt;/p&gt;

&lt;h3 id=&quot;learning-from-the-old-advertising-industry&quot;&gt;Learning from the old advertising industry&lt;/h3&gt;

&lt;p&gt;There are generations of advertising industry history and experience available to us, from which we in the modern web/mobile world can benefit. Through a study of this industry, and particularly David Ogilvy, we gained insights on the things that deserve focus, and learned several effective techniques. &lt;/p&gt;

&lt;p&gt;For example, we learned about the related influence and importance of headlines, subheads, image captions, and, above all, good copy. As emphasized in Getting Real, it’s all part of “design.”&lt;/p&gt;

&lt;p&gt;We also learned that measuring performance is what matters, as the data often contradicts your intuition. We did a lot of A/B testing on our website, and found that by just adjusting the headline, we could double our conversions. As opposed to headlines about “ease of use” and “affordability,” we found that a headline that quickly established who the product is for (“coaches, parents &amp;amp; enthusiasts”), was the clear winner. (The worst was a title which labeled the product as a “professional” tool.)&lt;/p&gt;

&lt;h3 id=&quot;spreading-the-word&quot;&gt;Spreading the word&lt;/h3&gt;

&lt;p&gt;Our marketing of the application focused on three things:&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;Online ads&lt;/li&gt;
  &lt;li&gt;Direct email&lt;/li&gt;
  &lt;li&gt;Promote word-of-mouth&lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;&lt;em&gt;Online ads — the winner is Google&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;For online ads, we ran both Google and Facebook ad campaigns (multiple ads in each network), as well as a direct banner ad campaign at a site where coaches hang out. After a month, we calculated our cost per conversion (where conversion is clicking the buy button, leading to iTunes). The costs were unacceptably high for the dedicated banner ad, as well as Facebook, but acceptable at Google.&lt;/p&gt;

&lt;p&gt;Given how Facebook allows you to precisely target your audience (age, interests, geography, etc.) we were a little surprised how poorly the ads did there. But when you step back and think that people go to Facebook to socialize, and to Google to look for stuff, the results start to make sense.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Direct email&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;Through a couple of month’s research, we compiled a list of coaches and associations in a variety of sports. We needed to directly email these people, and to avoid coming across as spammers, we crafted the emails such that we both informed the reader of the product, as well as solicited feedback from them in terms of the application’s current applicability to their sport. We asked in which areas it might need to be modified or enhanced to more specifically address their needs. So that they could experience the app without having to purchase it, we created a couple of video screencasts of the application in action.&lt;/p&gt;

&lt;p&gt;This approach worked really well. There was a clear correlation of sales to emails sent, and at the same time, we received an absolute wealth of expert domain insight, and developed some healthy relationships with key people in a variety of sports.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Promote word-of-mouth&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;This was the easiest part, and involved three important lessons from REWORK.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;First, everything is marketing. &lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;From the app, to the website, to our customer support emails, we want every aspect of interfacing with RaceSplitter to result in our customers thinking, “I’ve got to tell people about this!”&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Second, nobody likes plastic flowers.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;We decided to produce our own screencasts for the site, in order to quickly have some instructional videos available. When we later thought about commissioning a professional voice-over artist to make them sound better, we were surprised to discover how well our customers responded to hearing the voice of the person who was also responding to their support emails. Despite the imperfections and obviously non-professional voice, the reinforcement of the personal relationship seems valuable.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;Finally, speed changes everything.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;So far, we’ve been able to respond to support enquiries typically within a couple of hours; and often immediately. Customers absolutely &lt;em&gt;love&lt;/em&gt; that, and seem to directly equate that to “caring.”&lt;/p&gt;

&lt;h3 id=&quot;niche-market-beyond-the-design--development-industry&quot;&gt;Niche market, beyond the design &amp;amp; development industry&lt;/h3&gt;

&lt;p&gt;As we’ve watched others transition from providing client services to becoming product companies, we’ve seen a tendency to create products targeted to the design &amp;amp; development communities. &lt;/p&gt;

&lt;p&gt;One aspect of RaceSplitter that appealed to us was the fact that it’s a niche market, under-represented by companies with deep design &amp;amp; development capabilities, but one in which, on a global scale, presents a good business opportunity. We believe there’s a tremendous number of similar niches out there, and that design companies looking to make the jump to products should seek them out, as they represent markets full of people just waiting for a usable solution to their needs to come along.&lt;/p&gt;

&lt;h3 id=&quot;product-creation-is-uniquely-satisfying&quot;&gt;Product creation is uniquely satisfying&lt;/h3&gt;

&lt;p&gt;Before I got into Brazilian Jiu-Jitsu, I used to work out regularly at the gym. The motivation for going was, “I need to go, because I need to get the exercise.” Later, after getting hooked on BJJ, I didn’t go for the exercise; I went out of passion. And a positive consequence is that in training BJJ, I’m able to push myself far more than I ever could in the gym, and gain a much higher level of fitness.&lt;/p&gt;

&lt;p&gt;Something similar happened in the development of RaceSplitter. We become more deeply engaged than any project we’ve been involved with in the past. There wasn’t any question of finding motivation; on the contrary, it took discipline to &lt;em&gt;stop working&lt;/em&gt; in the evenings. &lt;em&gt;That&lt;/em&gt; is how we want to spend out time!&lt;/p&gt;

&lt;h3 id=&quot;concluding-thoughts&quot;&gt;Concluding thoughts&lt;/h3&gt;

&lt;p&gt;The experience of designing, developing and selling RaceSplitter has, for us, been priceless. We’ve gained the confidence that we have the ability to succeed as a product company. We’ve experienced the joy of hearing from customers thrilled in using a product we’ve created. We’ve learned things that simply weren’t possible being on the service-provider side of the table. We’ve created a product that is already successful, and has lots of potential for growth. And, in the process, we’ve had more fun and become more engaged than we have since our company’s beginning.&lt;/p&gt;

&lt;p&gt;The experience also served, for us, as a real-world validation of the ideas in Getting Real and REWORK. In a world of both increasing complexity and human interaction with software, success is going to be found in the perfect execution of simple, focused products, delivered by companies that find a way to connect personally with their customers. That’s easier said than done. The processes of the past simply don’t get us there, and these books propose an alternative.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>On the pricing of services work</title>
   <link href="http://makaluinc.com/blog/2010/11/services-company-pricing.html"/>
   <updated>2010-11-18T00:00:00+00:00</updated>
   <id>http://makaluinc.com/blog/2010/11/services-company-pricing</id>
   <content type="html">&lt;p&gt;When I started Makalu, over a decade ago, I remember longing for a user’s manual to help with questions like, “How much should I charge?” and “How should I price my work?” This article describes how we approached these questions, and includes discussion of the recent controversy over the pricing of the 37signals’s (@37signals) blog redesign project.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Determination of a minimum hourly rate&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Regardless of &lt;em&gt;how&lt;/em&gt; you plan to charge for your work—i.e. on a project basis (fixed-fee), or an hourly basis—you still need to figure out the &lt;em&gt;minimum&lt;/em&gt; amount you need to be earning per charged hour.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Available hours.&lt;/em&gt; We began by computing the number of hours per year each of our staff will work, on average, taking into account public holidays (12 days, in Germany), vacation (30 days, in Germany) and weekends (104 days, on Earth). So in Germany, that’s 219 working days per year, or 1,752 available working hours.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Chargeable hours.&lt;/em&gt; It’s important to recognize that not all of a person’s available time will end up being chargeable. People will sometimes be supporting bids, sometimes working on overestimated projects, sometimes idle, sometimes off sick, etc. In our case, we assumed a chargeability figure of about 70% (which turns out to be pretty consistent with the service industry as a whole). With that, we’re down to about 1,226 chargeable hours per year, per person.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Minimal hourly rate.&lt;/em&gt; To compute a minimum hourly rate, we need to divide the minimum revenue we need to make per person, by those 1,226 chargeable hours. The total minimum revenue equals our employment costs (salary, benefits, social security, etc.), all overhead expenses (office rent, support staff, marketing, accounting, legal, etc.), plus the minimum profit we want to make.&lt;/p&gt;

&lt;p&gt;&lt;em&gt;Example.&lt;/em&gt; In a hypothetical scenario in which a company’s staff costs, on average, $75,000 per year per person, with overheads equivalent to say 20% of employment costs, and wanting to make a 15% profit, the minimum hourly rate would be roughly $85/hour. (That wasn’t the particular number in Makalu’s case ten years ago, but might seem a reasonable starting point today.)&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Making adjustments according to supply and demand.&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Over time, as we produced good work (and through some lucky breaks), we found ourselves with consistently more demands on our time than we had availability (and we note, however, that doesn’t necessarily imply a higher level of chargeability per person.)&lt;/p&gt;

&lt;p&gt;As is natural in free markets, prices adjust in order to balance supply and demand, and so we began to slowly increase our hourly rate, in order to alleviate the excess demand. (Some companies would have just ramped up their staff count. In Makalu, however, we place far greater importance on maintaining our ability to produce great work, and that means only hiring great people. We simply couldn’t find legions of great people; we’ve been lucky to find one per year!)&lt;/p&gt;

&lt;p&gt;An interesting (though obvious, after-the-fact) consequence of increasing our hourly rate, is that the customers that were left tended to be exactly the type of customers we’ve always wanted to work for — they appreciate, value and demand high quality, and are doing interesting things!&lt;/p&gt;

&lt;p&gt;Of course, I sometimes wonder whether we should have started out with higher rates to begin with. In hindsight, though, I don’t regret starting with lower rates, because at least I know that the price we do charge is based on something non-arbitrary. I know &lt;em&gt;how&lt;/em&gt; we got here, and that knowledge frequently proves useful.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But what about the others?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;Occasionally, I hear stories of companies working in our domain charging astronomical rates (considerably higher than what we charge), and told in a way to suggest that such rates are a sort of “industry standard,” which all serious firms are charging. My instinctive reaction is usually, “Gosh, we must be really underselling ourselves. Have I completely missed the mark?” &lt;/p&gt;

&lt;p&gt;But then I remember that it’s human nature to sometimes overstate the truth. There may well be companies out there charging that much (due to their own demand), but I’ve got a couple pieces of evidence against the notion that we’ve somehow missed the boat.&lt;/p&gt;

&lt;ol&gt;
  &lt;li&gt;
    &lt;p&gt;I’ve once seen an invoice from one of our high-profile competitors, and the charged average hourly rate was actually lower than ours.&lt;/p&gt;
  &lt;/li&gt;
  &lt;li&gt;
    &lt;p&gt;One of our best customers (and an industry icon) generally tells us their project budgets up front. When I divide their budgets by how long I believe it’ll take us to do the work, I almost always end up with an hourly rate very close to what we charge.&lt;/p&gt;
  &lt;/li&gt;
&lt;/ol&gt;

&lt;p&gt;Once again, I think it can be wise to sometimes just ignore what you hear about others, and have confidence in your own experience and objectivity.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Hourly or project? Effort or value?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;How should you charge for your work, on an hourly or project (fixed-fee) basis? And if you charge by project, should it be based on effort estimate, or based on the value you believe your work has to your client. These seem to be eternally debated questions, and I don’t have answers that would likely apply to everyone.&lt;/p&gt;

&lt;p&gt;Although we occasionally take on the rare fixed-fee project, here at Makalu, we almost always insist on charging for our work by the hour.&lt;/p&gt;

&lt;p&gt;Fixed-fee projects tend to put the client and provider on opposite sides of the table, with orthogonal motivations. The client’s motivation is to achieve as much as possible within the fixed price, while the provider’s motivation is to complete the project as quickly as possible, maximizing profit and minimizing risks (and as a possible consequence, minimizing innovation).&lt;/p&gt;

&lt;p&gt;Fixed-fee projects also tend to demand that detailed requirements are agreed up front, the production of which often waste time and money, as final products rarely reflect original specifications. And such projects also suffer in the close monitoring of requirements, and the production, negotiation and agreement of contract modifications when the inevitable scope changes occur as the project evolves.&lt;/p&gt;

&lt;p&gt;Charging hourly, on the other hand, works to align the client and provider interests, and allows for the agile, iterative approach to project development that’s becoming ever more accepted as the best path to efficiently meeting objectives, while maintaining a balance of value and cost.&lt;/p&gt;

&lt;p&gt;When Makalu gets a project request, twelve years of experience allows me to make a reasonable rough estimate of the required effort, which I can multiply by our standard hourly rate to immediately provide the customer with a ballpark estimate. It won’t be perfect, but at least we can quickly establish whether the project is financially feasible. &lt;/p&gt;

&lt;p&gt;If it is, and based on that rough estimate, we’ll begin working on an hourly basis (invoicing our time periodically; say monthly). This allows us to manage cost and scope, together with the customer, and generally has resulted (for us) in the development of successful products, with little of the friction typically found in fixed-price engagements. And that makes us happy!&lt;/p&gt;

&lt;p&gt;For some potential customers, a natural reaction is, “We won’t go into a project if we don’t know precisely what we’re going to get for our money.” Such a reaction is understandable, but, unfortunately, there’s an enormous history of failed projects in our industry supporting the notion that fixed-price usually isn’t the best way to go.&lt;/p&gt;

&lt;p&gt;For others (particularly in countries like Spain), their reaction is, “We’d never enter an open-ended hourly project, since you could cheat us by charging time you didn’t really spend.” Those are precisely the kind of customers Makalu doesn’t want to work with. Nothing good can come from working with a company that doesn’t have the foresight to see that cheating isn’t a sustainable strategy for a company like Makalu.&lt;/p&gt;

&lt;p&gt;We want to have successful projects, and don’t want to spend our time in the wasteful paper-pushing and unproductive arguments that too often characterize fixed-price engagements. For those reasons, we took the decision to (generally) avoid customers who require fixed-priced engagements. Since taking that decision, our projects have gone absolutely great, and, just as importantly, the customers who we since work with have tended to be dream customers who share our passion for quality.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;But what about value pricing?&lt;/strong&gt;&lt;/p&gt;

&lt;p&gt;We recently bid on the redesign of the 37signals blog, “Signal vs Noise,” and in the process entered an interesting twitter exchange with Oliver Reichenstein (@iA) of Information Architects. His argument seemed to be (and there’s room for misinterpretation in exchanges of 140 characters) that the 37signals budget of $8,500 was far too cheap, compared to the value of a well-designed blog (to that particular company), and that their offer was disrespectful of the creative industry.&lt;/p&gt;

&lt;p&gt;This would have been one of the rare fixed-priced projects in which Makalu would have been happy to participate. First, $8.5k would have almost certainly covered the amount of time we’d need to do the work. Secondly, we’ve been reading 37signals’s blog for years, and know they are reasonable people. If we were doing good work, and the scope increased or they wanted a particularly large number of iterations, we’re confident they would have worked with us. Finally, that project is going to bring whoever does it a lot of visibility, &lt;em&gt;and&lt;/em&gt; (perhaps even more importantly) they will have the opportunity to develop a relationship with Jason, David and the other influential people at 37signals. There’s a lot of value in that.&lt;/p&gt;

&lt;p&gt;But on the other hand, Oliver does make a valid point. In the “Build an Audience” chapter of 37signals’s new REWORK book, they imply a value of “hundreds of thousands, or millions” of dollar in having built an audience of close to 100,000 readers of their blog. So it’s easily arguable that a great redesign of such a blog has a value to 37signals far in excess of $8,500.&lt;/p&gt;

&lt;p&gt;Even if I still don’t fully agree with his conclusions, Oliver’s arguments at least caused me to spend some time rethink pricing (and that’s a good thing to do from time to time). Should &lt;em&gt;design&lt;/em&gt; be priced differently than &lt;em&gt;development&lt;/em&gt;, for instance? I supposed if all I did was design logos, charging hourly wouldn’t be a smart strategy. But what about a business in which the work usually spans the whole spectrum from strategy to tactics, design to development, and even operations?&lt;/p&gt;

&lt;p&gt;Although I continue to keep an open mind on the subject, for now, I’ll stick with our tried-and-true hourly and effort-based pricing. It may occasionally result in (subjectively) unbalanced value to our customers, but I can live that. It’s a model that seems equitable, and has proven to work for Makalu, allowing us to create great products, for amazing customers, remain profitable, and be happy in the process. &lt;/p&gt;

&lt;p&gt;And, as my colleague Alex pointed out, it also happens to be the model of a firm we tremendously admire, IDEO, which (at least on this point) puts us in good company.&lt;/p&gt;
</content>
 </entry>
 
 <entry>
   <title>Why we do not sign NDAs at Makalu</title>
   <link href="http://makaluinc.com/blog/2010/09/why-we-dont-sign-ndas.html"/>
   <updated>2010-09-29T00:00:00+00:00</updated>
   <id>http://makaluinc.com/blog/2010/09/why-we-dont-sign-ndas</id>
   <content type="html">&lt;p&gt;Recently, a potential new customer expressed surprise when I told him that we at Makalu usually don’t sign NDAs. Mentioning that he’d found plenty of other companies willing to sign his NDA, I restated commitment to our position, and acceptance that we’d unfortunately have to miss the opportunity.
There are others who don’t sign NDAs, and their reasons range from the philosophical, to the financial, to the practical:&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;It feels like an expression of distrust (though, I’m not fully behind that one; life has taught me that trust is something earned, not something granted by default).&lt;/li&gt;
  &lt;li&gt;It implies an immediate cost, as no serious company is going to sign an NDA without having a lawyer read through it.&lt;/li&gt;
  &lt;li&gt;For companies — particularly VCs and services firms — that meet frequently with potential customers wanting to discuss ideas, there’s just too much risk of idea-overlap and inadvertently entering into a situation of legal liability.&lt;/li&gt;
  &lt;li&gt;Exploiting ideas and information simply wouldn’t form part of a sustainable business strategy, because as soon as that happened, the whole world would know via Google, and the company’s reputation would go straight down the drain.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;While these are all valid reasons for not signing an NDA, for us at Makalu, there’s actually something far more important — that is, demanding signature of an NDA isn’t usually a characteristic of the right kind of client for us.&lt;/p&gt;

&lt;p&gt;You see, we want to spend as much of our time as possible, working towards the creation of great products. That’s our objective. Working with the right type of client is essential to that objective, and those clients tend to share some common characteristics.&lt;/p&gt;

&lt;ul&gt;
  &lt;li&gt;In our experience, the right type of client will tend to share our belief that ideas are cheap, and that successful execution is what’s truly important, rare and valuable. They generally won’t even ask for an NDA to be signed. If something’s confidential, they’ll just say, “Hey, keep this under wraps for now.”&lt;/li&gt;
  &lt;li&gt;In a similar vein, the right kind of customer will share our beliefs about the process which leads to great products, and the ideal engagement model that derives from that process.&lt;/li&gt;
&lt;/ul&gt;

&lt;p&gt;About four years ago, we decided to no longer compromise on our beliefs, and the results have been nothing short of amazing. We’ve been thrilled to discover that some of the companies we’ve most admired happen to share our views, and have even become our clients because of our beliefs. Time after time, we’ve confirmed that engaging those clients that share our beliefs is a general precursor to successful, enjoyable projects. And in the process, we’ve created some great products, delivered some major success and value, and have had a blast doing it.&lt;/p&gt;

&lt;p&gt;I’m not suggesting that the Makalu way is the “right way” for everybody. And I’m not saying there’s necessarily anything wrong with companies that ask for NDAs. In fact, I’m not a fan of absolutes in any regard.&lt;/p&gt;

&lt;p&gt;What I do believe though, is that decisions and policies consistently guided by a set of values, is likely to be the best strategy for anyone. Makalu’s decisions are no longer guided by potential for profit, or need of work, but rather by those conditions necessary for us to create great products, and that, for us, has made all the difference.&lt;/p&gt;
</content>
 </entry>
 

</feed>