· 6 years ago · Oct 10, 2019, 09:56 AM
1 {
2 "excerpt" : "Let's make a plan: The Creative App Building Workflow. What happens after you've come up with a great idea?",
3 "permalink" : "https:\/\/learnappmaking.com\/the-creative-app-building-workflow\/",
4 "categories" : [
5 "Guide"
6 ],
7 "tags" : [
8
9 ],
10 "content" : "<p><em>From idea to app<\/em><\/p>\r\n\r\n<p>Isn’t it odd how you always seem to conceive cool ideas in the weirdest of places? When taking a shower, or when you were about to fall asleep, or right when you shut down your laptop to go to lunch.<\/p>\r\n\r\n<p>It’s as if ideas have a mind of their own, hiding in plain sight until they decide it’s time to show their colors. I like that about ideas; it’d be boring if you could just tap into creativity whenever you wanted.<\/p>\r\n\r\n<p>Speaking about creativity, what happens to all those great app ideas of yours? Let’s talk about that next: The Creative App Building Workflow. What happens <em>after<\/em> you’ve come up with a great idea?<\/p>\r\n\r\n<h2 id=\"thecreativeappbuildingworkflow\">The Creative App Building Workflow<\/h2>\r\n\r\n<p>I came up with this workflow a couple years back and it’s based on every app I built in the past 7 years. It’s the best process to get from idea to app, without running the risk of missing a critical step. <\/p>\r\n\r\n<p>Ready? This is it:<\/p>\r\n\r\n<ol>\r\n<li><strong>Research and Ideation<\/strong><\/li>\r\n<li><strong>Validation<\/strong><\/li>\r\n<li><strong>Design<\/strong><\/li>\r\n<li><strong>Develop<\/strong><\/li>\r\n<li><strong>Publish<\/strong><\/li>\r\n<\/ol>\r\n\r\n<p>Throughout the workflow you <em>do the marketing<\/em>. It’s incredibly important! Oh, and once you reach step five you continue with step one – <strong>iteration<\/strong>. <\/p>\r\n\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/04\/app_process_flowchart.jpg\" alt=\"\" \/>\r\n\r\n<p>Let’s look at the steps, one by one.<\/p>\r\n\r\n<h2 id=\"1.researchingandideatinggreatideas\">1. Researching and Ideating Great Ideas<\/h2>\r\n\r\n<p><em>Ideation<\/em> is just a fancy name for coming up with ideas. Often, the ideas you come up with are not very polished, like raw diamonds. Those ideas need to diverge and converge, you need to combine them with other ideas to make them great. <\/p>\r\n\r\n<p>Perhaps you’ve got an idea for a novel app, but turn that into a successful business you need to combine it with more traditional thinking. Ideation, divergent thinking and consolidating your idea – onto a single napkin – can help you with that.<\/p>\r\n\r\n<p>Did you get stuck with an idea? Take a walk, get a coffee, sleep on it. You can’t plan creativity.<\/p>\r\n\r\n<p><em>Research<\/em> is what you do after you’ve defined your idea. I like to think of research as a way to save time, to cheat, to cut corners. What’s already out there that you can copy, steal, or borrow? The greatest ideas aren’t necessarily the most novel or revolutionary, they often combine old things in new ways or new things in old ways.<\/p>\r\n\r\n<p>Here’s some possible research questions:<\/p>\r\n\r\n<ul>\r\n<li>Who is going to build this app? Do we have a coder and a designer? Where can we find ’em?<\/li>\r\n<li>What UI Kits, app templates, packages, libraries, open-source code can you use to build your app?<\/li>\r\n<li>Who are your potential competitors? What are they doing wrong? Improve upon it. What are they doing right? Copy that.<\/li>\r\n<\/ul>\r\n\r\n<p>Now that you’ve properly researched your idea, what’s next?<\/p>\r\n\r\n<h2 id=\"validation:whowantstopayforthis\">Validation: Who Wants To Pay For This!?<\/h2>\r\n\r\n<p>Forgive me for sounding like a broken record: <em>You should validate your business ideas!<\/em> I know, I know, it’s much more awesome to indulge yourself in playing startup and build the Next Big Thing, but… it’s all in vain if no one wants to buy what you’re selling. <\/p>\r\n\r\n<p><em>Validation<\/em> is the process of proving your business has potential for profitability. You find out whether people want to buy what you’re about to build, before you build it. Said differently, when you validate you’re trying to make your business fail as soon as possible, so you can move on to the next greater idea.<\/p>\r\n\r\n<p>Strategies for validation:<\/p>\r\n\r\n<ul>\r\n<li>Get out on the street with screenshots of your app, show it to random strangers, and ask if they want to buy the app for $ 1.99. Crazy, right?<\/li>\r\n<li>Talk to your greatest enemies. Don’t ask for feedback from friends, because they’re more likely to tell you your idea rocks just because they like you. Your enemies, on the other hand, will want to drag your idea through the dirt.<\/li>\r\n<li>Create a quick web-based sales page with <a href=\"http:\/\/strikingly.com\/\">Strikingly<\/a> or <a href=\"https:\/\/www.leadpages.net\/\">LeadPages<\/a> and send some traffic to it. Give visitors the option to buy or sign up, which puts them on an email list. When they “buy”, simply tell them you’re working on your app and ask them to become a beta member. You now have a direct line with a potential customer, so make sure you make good use of that by asking for feedback.<\/li>\r\n<\/ul>\r\n\r\n<p>So many want-to-be entrepreneurs and app makers spend six months in their ivory towers refining their app, only to find out no one wants it. It’s not entrepreneurship if you don’t come out that ivory tower, into the real world, and get real uncomfortable and <em>try to fail<\/em>.<\/p>\r\n\r\n<p>OK, now that customers want what you’re building, it is time for…<\/p>\r\n\r\n<h2 id=\"design:makeitpretty\">Design: Make It Pretty<\/h2>\r\n\r\n<p>Design serves a purpose: it gets apps from good to great. User interface design, graphic design, motion design, are all sides of the same coin: improving the user experience and usability of an app.<\/p>\r\n\r\n<p>Users take design seriously. With the switch from iOS 6 to 7, some time back, that became very tangible. Apple switched to “flat design”, an emerging trend, and suddenly all old iOS 6-styled apps looked old, ugly and outdated. It became a way for new up-and-coming apps to differentiate themselves from the crowd and the established apps got a wake-up call: app design matters.<\/p>\r\n\r\n<p>Where do you start with your app design? I’m a fan of using design kits and templates to offset the time it takes to come up with an original design. Especially if you’re bootstrapping your app you will have a future opportunity to re-do your design, so take that smartcut now. My favourite design kits: <a href=\"http:\/\/www.sketchappsources.com\/free-source\/1794-stitch-ui-kit-sketch-freebie-resource.html\">Stitch<\/a>, <a href=\"http:\/\/www.baianat.com\/resources\/stark\/\">Stark<\/a> and <a href=\"https:\/\/www.invisionapp.com\/now\">NOW<\/a>.<\/p>\r\n\r\n<p>In any case, make sure you’ve built a basic <em>mockup<\/em> of your app. It’s nothing more than a rough sketch, but it’s incredibly important to get the fundamentals right before you apply the design-sauce. An app I use (almost) daily is <a href=\"https:\/\/balsamiq.com\/products\/mockups\/\">Balsamiq Mockups<\/a>. They’ve got a great “Linking” feature, which allows you to add rudimentary interactions to your mockup as if it were a real app.<\/p>\r\n\r\n<p>Ready for the real deal? Choose from a wide range of designers, of all shapes and sizes, from project board websites like <a href=\"http:\/\/upwork.com\/\">Upwork.com<\/a> and <a href=\"https:\/\/www.freelancer.com\/\">Freelancer.com<\/a>.<\/p>\r\n\r\n<p>Done that? Continue with developing your app in the next step.<\/p>\r\n\r\n<h2 id=\"develop:makeitwork\">Develop: Make It Work<\/h2>\r\n\r\n<p>The next step is the most obvious one: build the app. Most app makers skip right ahead and start developing their app the minute they come up with the idea. Although development is an important step in The Creative App Building Workflow, it’s not the only step.<\/p>\r\n\r\n<p>Building your app means you either have to get your hands dirty yourself or hire a developer to build the app for you. Just like with your app’s design, you can have great successes with hiring freelancers from Upwork or Freelancer.com.<\/p>\r\n\r\n<p>When building your app it’s important to keep your minimum viable product in mind. What’s version 1.0 of your app? What’s version 2.0? Start with the features for 1.0 and make sure you don’t add any more features once you’ve decided on the basics of your app. That’s feature-creep: adding more and more features to your app. It’s a great way to never finish building your app…<\/p>\r\n\r\n<p>Check out these awesome tools and products that speed up the development timeline of your app: <a href=\"https:\/\/developer.apple.com\/xcode\/\">Xcode<\/a>, <a href=\"https:\/\/developer.apple.com\/xcode\/interface-builder\/\">Interface Builder<\/a>, <a href=\"https:\/\/developer.apple.com\/swift\/\">Swift<\/a>, <a href=\"https:\/\/balsamiq.com\/products\/mockups\/\">Balsamiq Mockups<\/a>, <a href=\"https:\/\/www.sketchapp.com\/\">Sketch<\/a>, <a href=\"https:\/\/fastlane.tools\/\">Fastlane<\/a>, <a href=\"http:\/\/www.swifttoolbox.io\/\">Swift Toolbox<\/a>, <a href=\"http:\/\/www.paintcodeapp.com\/\">PaintCode<\/a>, <a href=\"https:\/\/github.com\/ParsePlatform\/parse-server\">Parse Server<\/a>.<\/p>\r\n\r\n<p>Building an app can be tough, but it’s all worth it when you’ve finally release your creation into the world. It’s time to publish!<\/p>\r\n\r\n<h2 id=\"publish:maketheworldmoreawesome\">Publish: Make The World More Awesome<\/h2>\r\n\r\n<p>OH YEAH! You’ve made it. Your app is ready, your customers are dying to get their hands on it, and you’ve got enough future features lined up to go from ninja warrior app to ninja-warrior-with-laser-machine-guns-riding-dinosaurs app (i.e., 1.0 to 2.0…).<\/p>\r\n\r\n<p>JUST DO IT!<\/p>\r\n\r\n<p>Get your app out there. Upload it to the App Store and see what happens. Obviously, this step in the process is the shortest. What’s so important about publishing this step makes up one-fifth of the workflow?<\/p>\r\n\r\n<p><strong>Feedback and iteration<\/strong>. Use your published app to get in touch with new and existing customers. You can use ordinary email or fancy solutions like in-app messaging centers like <a href=\"https:\/\/www.intercom.io\/\">Intercom<\/a>. Make data-driven decisions by implementing features like analytics and behavior tracking. You can get as detailed and nitty-gritty as you want, or just ask a simple question: “How do you use what we’ve built?”<\/p>\r\n\r\n<p>Try not to ask yes-no questions when asking for feedback. Just a “yes” or a “no” is too shallow a data point, you want to get to the core of the issue. Do people like what you’ve built? Why not? How do they use your app? More often than not I’ve seen uses of my apps I never designed or intended. It’s up to you to find out and adapt.<\/p>\r\n\r\n<p>Adaption is what you find in <em>iteration<\/em>. It’s the last step of the process, to go back to where you begun with the knowledge and expertise you gained from the entire workflow. Rebuild your app, if you want, or simply make small pivots and changes. As all the greats will tell you: iteration is the key to becoming greater.<\/p>\r\n\r\n<p>Speaking about becoming greater, you know what’s awesome? Marketing.<\/p>\r\n\r\n<h2 id=\"thewildcard:continuousmarketing\">The Wildcard: Continuous Marketing<\/h2>\r\n\r\n<p>I like to think about marketing as an engineer. What can I build to win the hearts and persuade the minds of customers? Great sales pitches, compelling landing pages, carefully crafted content, it’s all <em>engineering<\/em>. An engineer takes raw material and works on it like a craftsman, refining characteristics until it’s ready. Marketers and engineers are more alike than you think.<\/p>\r\n\r\n<p>The entire workflow, up to this point, has been about engineering. Ideation, design, building, incorporating feedback – an engineers job. Marketing should be no different and it should be iterated, just like every other step in this workflow.<\/p>\r\n\r\n<p><strong>Marketing should be weaved through the engineering process.<\/strong><\/p>\r\n\r\n<p>When you’re thinking about features to add to your app, you’re thinking about what benefit the feature could have for your customers. When you’re designing your app you’re thinking about ways to add sharing and virality to it, so the utility of your app can spread to the people who might need it. Even when you’re asking for feedback, you’re increasing the exposure your app gets from new customers. We all want to see great apps succeed, so we talk about them.<\/p>\r\n\r\n<p>Ways you can engineer marketing:<\/p>\r\n\r\n<ul>\r\n<li>Think of sales funnels as a well-oiled machine. The machine has several cogs that turn. Your car is able to drive up a hill and speed up on the highway thanks to an ingenious machine called a <em>gearbox<\/em>. A sales funnel is like a gearbox. What steps can you take to amplify the effect of your sales funnel gearbox?<\/li>\r\n<li>Viral growth is a great driver of success. It simply means you tell your friend about an app, and your friends tells two of his friend, and they tell two friends, and so on. What features can you build in your app that facilitate and encourage sharing?<\/li>\r\n<li>A good sales pitch taps into a conversation that’s already happening in the head of a customer. With todays technology in social media, e-commerce and advertising a lot of conversations are happening. How can you use tools like Twitter, Facebook, forums, etcetera, to chime in on the conversation?<\/li>\r\n<\/ul>\r\n\r\n<p>The Creative App Building Workflow can help you get out of the idea phase and enter the production phase of your app, ultimately with a great end result. <\/p>\r\n\r\n<p>It’s awesome to see your ideas, your vision, come to life. Apply a continuous marketing effort and focus on research, validation, design, development to ultimately publish your app.<\/p>",
11 "thumbnail" : "https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/04\/app_process_flowchart_featured_image.jpg",
12 "author" : "Reinder de Vries",
13 "id" : 919,
14 "title" : "The Creative App Building Workflow",
15 "date" : "2016-04-27 15:24:34"
16 },
17 {
18 "excerpt" : "Does your app idea need to be unique to be successful? On the hunt for the next big app, we're overestimating the importance of uniqueness. Unique ideas are BS, but don't agree with me just yet... See for yourself!",
19 "permalink" : "https:\/\/learnappmaking.com\/3-reasons-your-next-app-idea-shouldnt-be-unique\/",
20 "categories" : [
21 "Guide",
22 "Marketing"
23 ],
24 "tags" : [
25
26 ],
27 "content" : "A while back I got a phone call from someone with an app idea. He had looked me up online, saw that I built iPhone apps for a living, and called me up to pitch his app idea.\r\n\r\nThe conversation went something like this: “Yes, hello, this is Zaphod [1]. I’ve got an idea for an app and I need your help.”\r\n\r\nOK, let’s hear it then, I said. What was he working on? Zaphod replies: “I’ve been thinking: It’s very annoying when you go over your country’s border and still get charged for mobile internet, because you forgot to switch off mobile data on your phone. My idea is an app that switches off your internet when you cross the country border.”\r\n\r\nHe continues: “I think it’s a great idea because it doesn’t exist yet. Can you build such an app for me?”\r\n\r\nI explain to him that his app idea already exists, it’s built into the Settings app of the iPhone, and that it’s probably not a great idea to build an app for it. Even if it truly doesn’t exist yet, I continue, it’s not worth it to pursue unless we would prove this is a real issue for smartphone users.\r\n\r\nOn multiple occasions, people come to me with an idea for the next big thing. Every single one of them claimed their idea was great, because it didn’t exist yet.\r\n\r\nIn this blog I would like to debunk the myth that great ideas must be unique – they don’t have to be.\r\n\r\n[clickToTweet tweet=\"Great ideas don't have to be unique\" quote=\"Great ideas don't have to be unique\"]\r\n<h2 id=\"greatideasarentuniquetheysolveaproblem\">Great Ideas Aren’t Unique,\r\nThey Solve A Problem<\/h2>\r\nLet’s talk about <em>invention<\/em>. Inventors like you and me, and inventors like Elon Musk, Nikola Tesla and Steve Jobs have one thing in common: we hunt for problems, and we live to solve them.\r\n\r\nSolving problems, as seemingly lackluster it may sound, is the pinnacle of an inventors work. Add a little salesmanship into the mix and you’re an <em>entrepreneur<\/em>, able of both inventing and making sure your inventions spawn profitable businesses.\r\n\r\nI think inventors are awesome!\r\n\r\nUnfortunately, from the outside it kinda looks like inventors make great ideas appear magically from a black hat. As an outsider you don’t see what’s going on inside the black hat.\r\n\r\nYou only see an invention, a product, that didn’t exist before. You see people want to buy it, therefore, you think that people will want to buy stuff that didn’t exist before. <em>Uniqueness!<\/em>\r\n\r\nSo what are inventions then? They’re <em>solved problems<\/em>. Often, great inventions are based on a <em>secret<\/em>.\r\n<blockquote>You think of inventions as things that haven’t been invented yet, when in fact, an invention is just a clever (not even new) way of solving a problem.<\/blockquote>\r\nUnique ideas are elusive, got it. But if your idea is truly unique, why shouldn’t you pursue it? Because…\r\n<h2 id=\"uniqueideasdonthavecompetitionorsotheywantyoutobelieve\">Unique Ideas Don’t Have Competition\r\n(Or So They Want You To Believe)<\/h2>\r\nUnique ideas don’t have competition. Awesome, right? You should build your unique app idea as soon as possible, before any competitors enter the market.\r\n\r\nFirst-mover advantage isn’t always a great thing.\r\n\r\nElectricity existed long before Edison found a way to bring it to your home. First-mover advantage proved a real challenge for him: the average person didn’t know electricity, didn’t know how to handle it, and frankly, got around fine with oil lamps.\r\n\r\n<img style=\"width: 500px;\" src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/04\/spork_patent.png\" alt=\"Spork: novel utensil or over-engineered feat?\" \/>\r\n\r\nImagine your app is as unique as a “spork” (a spoon + fork) and you need to teach people how to use it. Instead of simply marketing your app to an audience, you now have to educate them too, because your idea is <em>so<\/em> unique.\r\n\r\nThe great thing about competition is that the marketing message of your competitor educates your audience too. It’s especially helpful when your audience needs more information before they can buy your solution. As a first-mover, the absence of competition can be a disadvantage.\r\n\r\nUnique ideas have another downside. Inventors of unique ideas rarely research the ways a prospect customer is <em>currently<\/em> solving the problem the inventor is making a solution for. Let me explain.\r\n\r\nLet’s say you’re making a prototyping tool, a fancy user interface you can use to create mockups of an iPhone app. Back in 2011 I had the idea to combine such a tool with the ability to work on the same design together with multiple people.\r\n\r\nI tried to market it for creative professionals and I thought it was a truly novel invention, something that didn’t exist yet. The problem I wanted to solve was not being able to work on a prototype design or mockup together with colleagues or co-founders.\r\n\r\nUnfortunately, I failed to successfully launch the app, because I didn’t do enough research into finding out how my target audience was currently solving the problem I intended to solve. As a prototyping tool your competition isn’t the next best prototyping tool, it’s <em>pen and paper<\/em>!\r\n\r\nLater on, prospect customers I chatted with told me they would share their designs via Dropbox, or via Facebook Groups, or even via email. Their makeshift solutions weren’t great, but they <em>worked<\/em>.\r\n\r\nAs the inventor of a tool that didn’t exist yet I failed to realize there were already solutions out there, solving the problem I wanted to solve. My app was unique, but not as a solution, and the real competitors turned out to be pen and paper, Dropbox, and Facebook Groups. Uniqueness had clouded my judgement.\r\n\r\n[clickToTweet tweet=\"Inventions are not unique, just clever ways of solving a problem\" quote=\"Inventions are not unique, just clever ways of solving a problem\"]\r\n<h2 id=\"uniqueideasarelikethatcatyoucantcatch\">Unique Ideas Are Like That Cat You Can’t Catch<\/h2>\r\nAre all apps already invented? The App Store has millions of apps, and even though many of them are copies of Flappy Bird, I’m starting to think we’ve run out of unique ideas.\r\n\r\nHaving said that, I haven’t found an app yet that tells me in the morning what emails I should reply to. Also, I’m still looking for an app that can plan my route with public transport based on my calendar entries. Yeah, and what about that brain-computer interface app from <em>“Her”<\/em> [2]?\r\n\r\nIn the book <em>Zero to One<\/em> Peter Thiel [3] explains how great ideas are based on <em>secrets<\/em>. Secrets are all around us, hiding in plain sight. To give an example:\r\n<ul>\r\n \t<li>Elon Musk figured out how to build an affordable electric car. Cars, electric cars, battery technology – it all existed already.<\/li>\r\n \t<li>Bill Gates figured out how to put easy-to-use computing power into the hands of ordinary consumers (without building a single PC!). Computers, software, operating systems, it all existed already.<\/li>\r\n \t<li>Commercial spaceflight is still a secret. We already have rockets, launch pads, and so on. Doing it affordably? One big secret.<\/li>\r\n<\/ul>\r\nUnique ideas are hard to find, because they’re elusive. I’m doubting whether uniqueness still exist and I’m sure that when I find it, I don’t want it anymore. It’s much easier to go look for secrets, increasingly harder challenges, and solve those.\r\n<h2 id=\"sowhatnow\">So, What Now!?<\/h2>\r\nTrue great ideas are solutions to problems, as ubiquitous as bottled water and as tough to crack as commercial spaceflight. Don’t focus on finding unique ideas, because:\r\n<ul>\r\n \t<li>The fact that it doesn’t exist yet doesn’t make it a great idea<\/li>\r\n \t<li>Unique ideas have no competition and that’s a disadvantage<\/li>\r\n \t<li>Unique ideas often have competition from an unexpected angle<\/li>\r\n \t<li>Unique ideas are hard to find! Look for secrets instead<\/li>\r\n<\/ul>\r\nSo, what’s next then? Focus on an idea that solves a problem, then find customers willing to pay for the solution to their problem!\r\n\r\n[1]. Zaphod is not his real name, of course, but I’m sure <a href=\"https:\/\/en.wikipedia.org\/wiki\/The_Hitchhiker%27s_Guide_to_the_Galaxy\">he brought his towel<\/a>.\r\n[2]. <a href=\"http:\/\/www.imdb.com\/title\/tt1798709\/\">“Her” (2013)<\/a>\r\n[3]. <a href=\"http:\/\/www.amazon.com\/Zero-One-Notes-Startups-Future\/dp\/0804139296\">Zero to One, by Peter Thiel on Amazon.com<\/a>",
28 "thumbnail" : "https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/04\/unique_ideas.jpg",
29 "author" : "Reinder de Vries",
30 "id" : 917,
31 "title" : "3 Reasons Your Next App Idea Shouldn't Be Unique",
32 "date" : "2016-04-20 00:00:10"
33 },
34 {
35 "excerpt" : "Stelios and Petros, app makers from Greece, tell the incredible story of how Linkpack came to be. Since starting out the app has reached the front page of Hacker News, got a ton of upvotes on Product Hunt and was featured by several major media outlets. Read on to find out what motivates the founders of Evil Window Dog to do what they do.",
36 "permalink" : "https:\/\/learnappmaking.com\/app-success-how-linkpack-got-to-the-front-page-of-hacker-news\/",
37 "categories" : [
38 "App Success",
39 "Stories"
40 ],
41 "tags" : [
42
43 ],
44 "content" : "<p><a href=\"https:\/\/twitter.com\/stelabouras\">Stelios Petrakis<\/a>, an app maker from Thessaloniki, Greece, tells the incredible story of how Linkpack came to be. <\/p>\r\n\r\n<p>Since starting out as a “scratch your own itch” app, their app has reached the front page of Hacker News, got a ton of upvotes on Product Hunt and was featured by several major media outlets.<\/p>\r\n\r\n<p>Is that why Stelios and co-founder <a href=\"https:\/\/twitter.com\/petrakeas\">Petros<\/a> jump out of bed in the morning, inspired to get to work? No. <\/p>\r\n\r\n<p>Read on to find out what motivates the founders of <a href=\"http:\/\/www.evilwindowdog.com\/\">Evil Window Dog<\/a> to do what they do.<\/p>\r\n\r\n<p><strong>Note:<\/strong> <a href=\"https:\/\/www.linkpack.io\/\">Linkpack<\/a> is an app to save web links for later. You can save, read and share your links with their iPhone app or the Chrome extension (and soon Safari). Saved links are stored right on your computer, and synced to your devices via Dropbox. <a href=\"https:\/\/itunes.apple.com\/us\/app\/linkpack\/id953813916?mt=8\">Download and install Linkpack via the App Store<\/a>.<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/03\/linkpack.jpg\" alt=\"Linkpack\" \/>\r\n<figcaption>Linkpack<\/figcaption>\r\n<\/figure>\r\n\r\n<p><strong>How did you get started with Linkpack?<\/strong><br\/>\r\nI was a really heavy Instapaper user; I was saving all the articles there. Just looking at the list of articles was quite overwhelming, so I struggled to organize them all.<\/p>\r\n\r\n<p>So I started just drag-and-dropping URLs from my browser to my desktop. If you drag and drop a URL from your browser to you desktop, it creates a file. I organized those links into folders to keep them grouped into thematic categories. <\/p>\r\n\r\n<p>Then, I wanted to access them anywhere, so I placed the folders in my Dropbox account. Soon I realized that there was no easy way of reading those links from my iPhone, and that’s how Linkpack came to be.<\/p>\r\n\r\n<p><strong>Back then, did you know any other people that worked like this?<\/strong><br\/>\r\nActually no, I thought I was the only one who was doing this weird url-into-files kind of thing. I initially created the Linkpack app for myself back in the summer of 2013. Its development was going slowly because we had another project in the works, Horizon, which we launched in 2014.<\/p>\r\n\r\n<p>With Horizon’s launch, the Linkpack project was shelved so we could update and maintain Horizon. Last summer I started working on Linkpack again and we have decided to release it in January 2016.<\/p>\r\n\r\n<p><strong>Who is we? Do you work together with a team or co-founder?<\/strong><br\/>\r\nRight now, we are a company of two people, me and my co-founder Petros Douvantzis, called Evil Window Dog, and we’ve already created four mobile apps. Our main focus is creating apps for ourselves that try to solve an every day need, like shooting always horizontal videos (Horizon), finding the anagrams (Anagramma) or organizing your links (Linkpack).<\/p>\r\n\r\n<p>I want to add that for the Linkpack project we had a friend, Stavros Korokythakis, helping us with the server development.<\/p>\r\n\r\n<p><strong>Do you have any plans to monetize the Linkpack app?<\/strong><br\/>\r\nRight now, the app uses the freemium model. You can download Linkpack for free and if you want pro functionality, like reading progress, narration and a few extra features, you can purchase a $1.99 upgrade to unlock this mode.<\/p>\r\n\r\n<p>This doesn’t actually mean that this will remain the revenue model of the app in the future. We keep experimenting with things and based on the features we’ll add in the future, the revenue model might change.<\/p>\r\n\r\n<p><strong>Do you have a way to keep in touch with the users and the customers of your app?<\/strong><br\/>\r\nYes. The app features an email form that allows users to send us feedback. Most of the users actually used it in the beta to report features and improvements. We use those reports to create a backlog of things that we want to build for the next updates. There’s a lot of work to be done there, and we are really excited about what’s coming.<\/p>\r\n\r\n<p><strong>What kind of marketing effort did you do in recent months, to get downloads for the app?<\/strong><br\/>\r\nI can’t say that we run an aggressive marketing to be honest. We had a beta running for quite some time, where users were able to apply via our website and we managed to get Linkpack featured on BetaList which drove a large number of users to our website, and resulted in a pretty significant number of users wanting to know when the app was released. <\/p>\r\n\r\n<p>When the app was launched, we emailed a lot of journalists and issued a press release. The app got featured on LifeHacker and on some other international sites. Most of the traffic though came through Product Hunt and Hacker News.<\/p>\r\n\r\n<p><strong>What is the toughest problem you had to crack in terms of development, marketing and operations?<\/strong><br\/>\r\nThe toughest problem about Linkpack was working with the Dropbox SDK. Right now we are supporting one cloud provider and that’s Dropbox. Having this one cloud provider was well…weird, because at some point last year Dropbox announced that it would change a lot of APIs that we were using.<\/p>\r\n\r\n<p>So although we had to make some sacrifices at some point, everything was working alright in the end.<\/p>\r\n\r\n<p>Choosing to work with Dropbox was a really organic decision. As I have said it all started when I begun saving links on my computer as files. Moving those files to Dropbox let me access then from anywhere. But when I was on the move and wanted to read my saved articles, I couldn’t just use the Dropbox app for iPhone. So, I decided to make a prototype, and when that was working, I added more and more features like reading progress and Readability [distraction-free reading, ed.].<\/p>\r\n\r\n<p>It organically grew into something that right now is Linkpack. It wasn’t like “Let’s do this project, with such and such features" kind of thing. The features were being organically discovered as the application grew.<\/p>\r\n\r\n<p>A word of advice though: It is better not to base your whole company’s business logic on just one third party API, that might close down or change in the future. On most cases you can’t do anything about it. When Dropbox changes its API, or Facebook does the same thing, and you have developed an app based on those APIs, then as a developer you will find yourself in a really difficult position.<\/p>\r\n\r\n<p><strong>Speaking about Hacker News, how did you get on the front page of Hacker News?<\/strong><br\/>\r\nI really don’t know what the algorithm is to get to the front page of Hacker News! It wasn’t my first post on Hacker News, I do post links from time to time, for personal projects or for news but it is really hard to predict when you’re getting to the front page. I don’t have a clue on why it was picked up, but it drove a lot of traffic. <\/p>\r\n\r\n<p>A large number of users who read our post from Hacker News are also users that are willing to download and try new stuff, know how Dropbox works and they probably used a reader service in the past. The amount of conversions we had thanks to being featured was really high. Based on the statistics that Apple provides us, almost 50% of the people who viewed the App Store page downloaded the app, and that’s really great.<\/p>\r\n\r\n<p><strong>What’s your advice for aspiring app makers?<\/strong><br\/>\r\nIf you are a beginner app maker, I think, your focus must always be to ship something. <\/p>\r\n\r\n<p>You may have the one billion dollar idea in your head, but unless you release it in the world and receive real feedback on what you have built, it’s not worth anything in my opinion. <\/p>\r\n\r\n<p>Three things I keep in mind working on a project is build, ship and iterate. You build something, you ship it, you get feedback and then you go back to build and ship a new update, then build, ship and iterate again.<\/p>\r\n\r\n<p>That doesn’t mean it’s acceptable to release mediocre quality products. Unfortunately, in the way App Store works, with reviews and a star-based rating system, it’s really easy for your app to fall behind if it doesn’t provide an acceptable user experience. <\/p>\r\n\r\n<p>My advice would be to always also focus on user experience. Make it so simple, but so powerful, so the users can make sense of your UI without having to think twice about why certain elements exist or operate the way they do.<\/p>\r\n\r\n<p>It’s easy to think, from an outside perspective, that app development is really cool and it’s probably easy money. The reality is that you have to work really hard and most of the time it isn’t so rewarding financially, because you can’t expect your app to be the next Instagram.<\/p>\r\n\r\n<p>The way the press works is that they typically cover those successes and create the illusion that it’s really easy to take the first place on the App Store. It requires a lot of hard work. <\/p>\r\n\r\n<p>App making doesn’t always mean creating apps for yourself. There are all these companies looking for contractors or creators to create apps for their needs. There’s money to be made there. If you have the willpower to create apps, and you know that people might use them daily and their lives might get affected by them, I think that’s something that you must do. That’s how I’m waking up every morning, because I think that apps might change the way people live and think.<\/p>\r\n\r\n<p>It’s very rewarding to have built an app that is installed on the device of someone that’s across the globe, and he’s happy with it!<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/03\/steliospetros-2.jpg\" alt=\"Evil Window Dog founders, Stelios Petrakis and Petros Douvantzis\" \/>\r\n<figcaption>Evil Window Dog founders, Stelios Petrakis and Petros Douvantzis<\/figcaption>\r\n<\/figure>",
45 "thumbnail" : "https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/03\/linkpack.jpg",
46 "author" : "Reinder de Vries",
47 "id" : 908,
48 "title" : "App Success: How Linkpack Got to the Front Page of Hacker News",
49 "date" : "2016-03-08 20:20:32"
50 },
51 {
52 "excerpt" : "Let me tell you a story. It’s a story about Bob and Alice, both entrepreneurs and startup founders. Both Bob and Alice decide to launch an App Store business, two companies based on two separate smartphone apps. Bob uses a different launch strategy than Alice, and they measure their results after the launch. Who has the most successful launch?",
53 "permalink" : "https:\/\/learnappmaking.com\/how-great-ideas-fail-and-how-to-avoid-it\/",
54 "categories" : [
55 "Bob and Alice",
56 "Marketing",
57 "Stories"
58 ],
59 "tags" : [
60
61 ],
62 "content" : "Let me tell you a story. It’s a story about Bob and Alice, both entrepreneurs and startup founders. They’re both in their mid-twenties and can be regarded as professional successes in their startup careers.\r\n\r\nBoth Bob and Alice decide to launch an App Store business, two companies based on two separate smartphone apps. Bob uses a different launch strategy than Alice, and they measure their results after the launch. Who has the most successful launch?\r\n<h2 id=\"theunicorn:bobsmyrecipeapp\">The Unicorn: Bob’s My Recipe App<\/h2>\r\n<img class=\"alignright wp-image-895 size-medium\" style=\"float: right; margin: 15px;\" src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/02\/435-300x191.jpeg\" alt=\"Food\" width=\"300\" height=\"191\" \/>Bob is not new to the startup game and knows a lot of investors. One of his friends connects him to an investor, named Charles, and the two agree to meet. Bob prepares a stunning pitch deck (a fancy word for “PowerPoint presentation”) to give the investor a quick overview of his business.\r\n\r\nHe’s got it all figured out: the app, named My Recipe App, will send its customers a healthy dinner recipe every weekday for $ 15, paid as a monthly subscription. It’s distribution channels include food blogs, local collaborations with restaurant chefs and an online advertisement campaign.\r\n\r\nBob has a team of passionate individuals, including two app developers, an app designer and a <em>growth hacker<\/em>. The recipes will be bought in through a distributor, who provides for no up-front cost and a revenue share of 5%.\r\n\r\nBob estimates they can reach 100.000 individuals, who are interested in food, in a period of 3 months. If one percent sticks, they’ll have 1.000 initial customers and a basic monthly cashflow of $ 15.000. Bob estimates this is enough to keep one developer and one marketer on the payroll, after the launch.\r\n\r\nAll Bob needs is an investment of $ 100.000 to build and launch the app, and keep the company afloat for 6 months. The investor agrees to invest the money, for a 30% equity stake in the company. He still has to see whether the plan is going to work out, but given his portfolio of about 15 investments he’s certain one of them will be a winner in the coming years.\r\n\r\nOn paper, Bob is now founder and Chief Executive Officer of a company that’s worth $ 335.000 and has more than $ 100.000 in projected yearly revenue, with a salary his peers can only dream of. To celebrate, Bob orders Thai take-out and calls it a day. Not bad, right?\r\n<h2 id=\"thegrasshopper:alicesfitnessapp\">The Grasshopper: Alice’s Fitness App<\/h2>\r\n<img class=\"alignright wp-image-896 size-medium\" style=\"float: right; margin: 15px;\" src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/02\/406-300x200.jpeg\" alt=\"Sports\" width=\"300\" height=\"200\" \/>Alice is almost entirely new to the startup world. She worked for a successful startup before and launched her own <em>side hustle<\/em> selling specialty tea leaves via her blog. She quit her job and sold the tea blog for $ 10.000 to focus fully on her new app startup, My Fitness App.\r\n\r\nAlice is a bit nervous about launching her own app company and set aside enough money to pay rent and food. She put the money from the sale of the tea blog into a savings account, and decides only to access that money in case of emergencies. If she runs out of money, she’ll go back to her old job or find a new one.\r\n\r\nAlice is extremely motivated to make this new company work, after all, it’s her own money on the line. The thrill also excites her: it’s awesome to jump out of bed in the morning, getting to work on a business that’s truly your own.\r\n\r\nThe first thing Alice does is go to the gym. Perhaps that’s a weird thing to do when you’re a company CEO, but she figures her best chance of succeeding starts with emerging herself in the world of her customers. Alice asks a few people at the gym: <em>“Can I follow you around for an hour to see how you track your workouts?”<\/em>\r\n\r\nAlice tracks all sets and repetitions for her future customers, and writes down a few remarks about the process:\r\n<ul>\r\n\t<li>It’s annoying to carry a paper notepad and pen around in the gym<\/li>\r\n\t<li>Most men and woman who work out sweat, and that’s not good for paper<\/li>\r\n\t<li>Drawn paper spreadsheets get messy and chaotic real quick<\/li>\r\n\t<li>Some people already use an app, called My Sports Pal<\/li>\r\n<\/ul>\r\nNext, Alice tells the following to the men and woman she helped track their sets and reps: <em>“Give me $ 25 a month, and I’ll come here twice a week to track your fitness workout sets and reps for you. Moreover, I’ll send you a monthly statement with your progress.”<\/em>\r\n\r\nShe deliberately prices the service high, almost a little too high, to force the potential customers to make a conscious decision about the <em>value<\/em> of her service instead of letting them agree just because her service is cheap. If a customer declines, she tries to find out why, and if a customer agrees, she tries to find out what level of service they expect.\r\n\r\nAlice is incredibly tired. She woke up at 7 AM, got to the gym by nine, and now it’s almost twelve hours later. When she is about to leave the gym, one of the personal trainers approaches her: <em>“I see you’re walking around selling a service to people. You can’t do that here, company policy, but I appreciate the initiative. Can we make a deal?”<\/em>\r\n\r\nAlice suggests two kinds of deals, and the trainer says he’ll think about it.\r\n<ul>\r\n\t<li>Alice is allowed to sell her services to the customers of the gym, and gives the gym a 50% revenue share. In return, she gets access to the gym customer’s contact information.<\/li>\r\n\t<li>Alice won’t sell to the customers directly, but the gym hires her services in bulk to distribute among its personal training customers.<\/li>\r\n<\/ul>\r\nBack home Alice consolidates her findings. She also does a bit of research on that competitors app, My Sports Pal, and attempts to find what improvements she can make on their app. She tasks herself with trying out My Sports Pal next time she’s at the gym.\r\n\r\nThis is what Alice notes down, as the results for that day:\r\n<ul>\r\n\t<li>She found 3 reasons why using pen and paper is annoying and sub-optimal for recording workout sets and reps<\/li>\r\n\t<li>She sold 4 “fitness tracking services” for $ 25 each, which she considers a $ 100 investment in her business<\/li>\r\n\t<li>She made a deal with the gym itself, to either get access to their customerbase or let them buy in bulk from her<\/li>\r\n<\/ul>\r\n<img class=\"alignnone size-full wp-image-897\" src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/02\/1469.jpg\" alt=\"1469\" width=\"770\" height=\"513\" \/>\r\n<h2 id=\"wholaunchesthebetterapp\">Who Launches The Better App?<\/h2>\r\nNow you know the story of Bob and Alice. How does it continue? Summarizing, you could say that:\r\n<ul>\r\n\t<li>Bob follows the <em>Unicorn<\/em> approach to starting a business. His business is valued by how many users it can attract, and determines success using forward projections. It’s a good way to build a business, but it’s risky. The investor runs the risk of losing his money when My Recipe App fails. Bob relies on a great amount of stakeholders: his team, the investor, and the distributor.<\/li>\r\n\t<li>Alice follows the <em>Grasshopper<\/em> approach to starting a business. Her business is valued by how much money it makes in a certain amount of time. She determines her success by the amount of deals she can make, be it sales or partnerships. Alice also gathers tangible evidence for her business: issues, possible deals, competitors, reactions from people, etc. Alice only relies on herself as long as she can, and she doesn’t run a big financial risk.<\/li>\r\n<\/ul>\r\nBut… Alice doesn’t have an app! And… Bob has no customers? They will never live up to the expectations they have of their businesses! Let’s continue the story…\r\n<h2 id=\"whyshouldyouvalidateyourbusiness\">Why Should You Validate Your Business?<\/h2>\r\nThe story makes a clear distiction between the strategies of Bob and Alice. Bob projects his future gains, while Alice attempts to make gains <em>now<\/em> and bases her future business on that experience.\r\n\r\nIn other words, Alice <em>validates<\/em> her business before she invests in it. <em>Business Validation<\/em> sounds very boring, so let’s spice it up a bit:\r\n<blockquote>“You better check yourself, before you wreck yourself” ~ IceCube<\/blockquote>\r\nOne of the easiest ways to validate your business is to <em>launch before you build<\/em>. Instead of building a product and then attempting to find customers for it, you first find your customers and then build a product for them.\r\n\r\nThis is not about deceiving your customers by promising them a product that doesn’t exist yet, but instead about measuring how interested prospect customers are in your product or service. You shouldn’t overpromise and underdeliver.\r\n<blockquote>“If you build it, they will come”<\/blockquote>\r\n<em>Not true.<\/em>\r\n\r\nAlice could have built the My Fitness App before setting one foot in a gym, but that would have thwarted her attempt to validate the business. Instead of promising the full app, she worked with a replacement product that solves the same problem: <em>How can you most easily and efficiently measure your workout progress while working out?<\/em>\r\n\r\nThe medium doesn’t really matter here. In fact, it’s easier to validate a simple product that doesn’t involve complex technology. You can always re-enact or play out a tool that solves a problem.\r\n\r\nIf you’re building an information-based app (like the My Recipe App) you can distribute that information via the simplest means possible: email. <em>Send recipes via email, by hand.<\/em> You don’t need an app for that!\r\n\r\nSo why should you validate your business? Three reasons:\r\n<ol>\r\n\t<li>It’s less risky<\/li>\r\n\t<li>It’s scalable<\/li>\r\n\t<li>It doesn’t require a lot of capital<\/li>\r\n<\/ol>\r\nIt could take you 6 months to build an app, before you can be in business. A typical app costs between $ 50.000 and $ 500.000 to build, especially if it relies on advanced technology.\r\n\r\nBefore you’ve launched your product, you’re completely in the dark when it comes to its validity: Do your future customers actually want what you’re building? Perhaps you need to pivot your product after it launches; make a major overhaul. Once an app is built, you can’t make big changes without a considerable time investment.\r\n\r\nFor a validated business, it’s different. The risk is virtually the same as any business, validated or not, except that you place this risk very close to the launch.\r\n\r\nInstead of waiting out the time it takes to build, you launch and measure immediately. Working like this is very scalable: you can launch two business in a week, and when both fail you’ve only lost 40 hours of productive time instead of 6 months (960 hours). Moreover, you can find free channels to publish your product in, like going to the gym and talking to people.\r\n\r\nPerhaps you’ll want to try out paid advertising to get super fast feedback on your product. You can run a quick and effective Facebook Ad campaign for less than $ 100.\r\n\r\nAn often heard argument against business validation is this: <em>“I need capital to grow, I can’t build my million dollar company on the whimsy foundation of $ 100.”<\/em> It is true that you need capital to grow a company, especially when you’re going for fast growth. A self-funded company has to wait for money to come in before they can invest it themselves. At times it is quicker to work with investment capital.\r\n\r\nBefore you can grow, you need to know in which direction you want to grow. There’s nothing more whimsical than putting your ladder against the wrong wall, climbing it, only to find out at the top you put your ladder against the wrong wall. Even if you want to build your business with investors, make sure you validate and launch first.\r\n<h2 id=\"moneyisnttheonlythingyoucaninvest\">Money Isn’t The Only Thing You Can Invest<\/h2>\r\nMost aspiring app makers I meet with don’t work with capital investment or investors. Their business start as a <em>side hustle<\/em> and it grows from there.\r\n\r\n<em>Perhaps you’re in a similar situation, reader.<\/em>\r\n\r\nShould you validate your business if you’re working in evenings and weekends, next to your day job? Perhaps you have a co-founder, or you work solo. You have an app idea and you’re building it, but you haven’t really validated the business itself yet.\r\n\r\nIt’s important to understand time is an investment itself. Time is the scarcest commodity: we all have it, but we can only spend it once. You can think of time as a bank account that will run dry over time, or as a bank account that gets a transfer of $ 86.400 every day at midnight.\r\n\r\nWhen you work on your own, on your app business, it can feel like you’ve got nothing to lose. You would only read, play games, spend time with your family, go hiking, etcetera, instead of working on your app in the weekends, right? Spending time on your business means spending less time on other, equally valuable activities.\r\n\r\n<strong>How Much Money Do You Make?<\/strong>\r\nLet’s look at it from a money perspective. How much money do you make in a year, at a regular job? Working on a business that isn’t working, for an entire year, will make you lose that money. It’s money you never had, of course, but it’s also money you will never <em>have<\/em>.\r\n\r\nLet’s exaggerate the money perspective. How much money can you make with a successful App Store business. $ 10.000 a month? A million a year? You’ve seen other entrepreneurs do it, it’s possible, so you can do it too. Unless you think these entrepreneurs have a special trait, or opportunity, or skill you don’t have.\r\n\r\nEven if that’s true, which it isn’t, you should always strive to increase your chances of success the best you can. That’s a no brainer: no one starts a business wanting to decrease the chance of success.\r\n\r\nValidating your business increases the chance of success, and decreases the loss of investment. You can start a business in a matter of days, fail in a matter of days, but at least now you know this doesn’t work. You can try again, and fail <em>better<\/em>.\r\n\r\nA long-term failure is less scary in the short run, but it’s a thousand times worse to fail over the course of a year than to fail over the course of a couple of days.\r\n<h2 id=\"whathappenstobobandalice\">What Happens To Bob And Alice?<\/h2>\r\nLet’s get back to the story. Bob worked with an investor and future projections, and Alice self-funded her business and worked with tangible evidence and experience.\r\n\r\n<strong>Bob’s business didn’t take off.<\/strong> The production of the app had its struggles. One of the developers dropped out just before the launch of the app, so he had to find a quick replacement. The growth hacker didn’t live up to Bob’s expectations and failed to deliver the paid advertising campaign.\r\n\r\nAll of this could be accounted for, and it wasn’t the real problem. Bob couldn’t have known his developer would drop out, and of course he misjudged the growth hacker, but you can only go so far in hiring people. In the end, he managed to get the app out in time and they restarted the ad campaign successfully with a more experienced marketer.\r\n\r\nWhat Bob didn’t account for was the lukewarm response from the restaurant chefs. They’d rather have people eat at their restaurants, than work together with a dinner-at-home recipe app! Also, the response from customers was less enthousiastic than expected.\r\n\r\nIt turns out most customers had more problems with having the right ingredients to cook at home, than coming up with recipe ideas. Moreover, a few dozen recipe apps already existed and the My Recipe App wasn’t differentiating enough. The food blogs featured their apps and were happy with it, but there were just too much competitors.\r\n\r\nUltimately, the business failed. It limped on for a few months until the investment money ran out. They managed to get a fair bit of customers in, but not enough to continue the service. The investor wasn’t too happy, but overall is investment portfolio performed positive. Bob turned out to be the one heartbroken and deceived by his own optimism.\r\n\r\nBusiness validation would not have mitigated all of these risks, but it would have moved a few of them to right after the launch, would Bob have validated his business. He could have surveyed supermarket shoppers or gone door-to-door to ask people about their dinnertime experience. Moreover, he could have productively invested the $ 100.000 in a product that works!\r\n\r\n<strong>Alice’s business is a major success<\/strong>, even to this very day. The gym she surveyed at became her biggest partner. She made a deal with them: the gym would front the development cost of the app in exchange for unlimited distribution of the app among its members for a period of 2 years.\r\n\r\nInstead of using the money to build the app, she got a technical co-founder on board who built the app for a 50% equity stake in the company. The app lived up to its promises and the gym and its customers are still very happy with it.\r\n\r\nAlice used the money to advertise the app and get more customers who weren’t affiliated with one single gym branch. Also, she formed more strategic partnerships with gym franchises all over the country. Instead of trying to get one single customer, she got hundreds in bulk through the gyms for a discounted price.\r\n\r\nShe negated the risk of relying on one single type of distributor by growing her individual customer base, and branching out into yoga and pilates studios.\r\n\r\nTo this day Alice hasn’t touched her $ 10.000 emergency fund, and has more than 2.000 customers bringing in a monthly revenue of $ 30.000 of which she pays herself and her co-founder a minimal salary. The rest she invests back into her business.\r\n<h2 id=\"whatsnext\">What’s Next?<\/h2>\r\n<em>Do you want to be Bob or Alice?<\/em>\r\n\r\nThis blog article is the first in a series on <em>How To Launch A Killer App Before Building It<\/em>. Bob and Alice set the stage for your App Store business, and they’ll show you how you can build your own – perfectly validated – app-based business. Stay tuned!\r\n\r\nIf you build it, they <em>won’t<\/em> come, and you better check yourself before you wreck yourself. You think you can be a Unicorn, but the truth is… Unicorns don’t exist.",
63 "thumbnail" : "https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/02\/check.png",
64 "author" : "Reinder de Vries",
65 "id" : 894,
66 "title" : "The Story Of Bob And Alice: How Great Ideas Fail And How To Avoid It",
67 "date" : "2016-02-23 04:00:22"
68 },
69 {
70 "excerpt" : "\"He who asks a question is a fool for five minutes; he who does not ask a question remains a fool forever.\" Make sure you're no one's fool by learning from the questions of others in this MEGA Best of Quora blog post.",
71 "permalink" : "https:\/\/learnappmaking.com\/mega-post-best-of-quora-building-better-more-profitable-apps-with-swift-app-store-optimization-growth-hacking\/",
72 "categories" : [
73 "Marketing",
74 "Programming",
75 "Q&A"
76 ],
77 "tags" : [
78
79 ],
80 "content" : "<blockquote>\r\n<p>He who asks a question is a fool for five minutes; he who does not ask a question remains a fool forever - Chinese proverb<\/p>\r\n<\/blockquote>\r\n\r\n<p>It’s true! Ask questions, <em>be smarter.<\/em> And thanks to Quora, you learn learn from the questions of others.<\/p>\r\n\r\n<p>I’ve recently been chosen as a Quora Top Writer for 2016, which is a great honor. Every year Quora chooses approx. 1.000 members out of its > 100 million userbase and awards them the title of Top Writer. Top Writers are hand-selected and awards aren’t based on number of total answers, views or upvotes. Essentially, Top Writers <em>stand out<\/em>.<\/p>\r\n\r\n<p>In light of the award, and because I spend quite some time in the <em>App Development<\/em> and <em>App Marketing<\/em> categories, I’ve selected a few of my favourite Quora questions. I’m sure these questions, and the answers from the community, will help you build better and more profitable apps.<\/p>\r\n\r\n<p><strong>Note:<\/strong> Do you have a question? Feel free to <a href=\"https:\/\/www.quora.com\/profile\/Reinder-de-Vries\">send me an answer request on Quora<\/a>, or leave your comment at the bottom of this page.<\/p>\r\n\r\n<p><em>Enjoy!<\/em><\/p>\r\n\r\n<h2 id=\"buildingyourownapps\">Building Your Own Apps<\/h2>\r\n\r\n<p><strong>Is it possible to develop apps for iOS using a Windows or Linux PC?<\/strong><br\/>\r\nApple has always bundled their software exclusively with their own operating system and hardware. For Xcode, the program you use to build iOS apps, it’s no different: you can only develop iOS apps on Mac. <\/p>\r\n\r\n<p>Read the entire answer on Quora: <a href=\"https:\/\/www.quora.com\/Is-it-possible-to-develop-apps-for-iOS-using-a-Windows-or-Linux-PC\">Is it possible to develop apps for iOS using a Windows or Linux PC?<\/a><\/p>\r\n\r\n<p><strong>If Swift is just 5% of iOS development what’s the other 95% and how difficult is it to learn?<\/strong><br\/>\r\nYou can compare Swift with the engine of a car. Knowing how the engine’s internals work, doesn’t mean you have the skills you need to take the car out on a racetrack! Swift is only a small part of building apps for iPhone and iPad. What are other skills you need to master?<\/p>\r\n\r\n<p>Read: <a href=\"https:\/\/www.quora.com\/If-Swift-is-just-5-of-iOS-development-whats-the-other-95-and-how-difficult-is-it-to-learn\">If Swift is just 5% of iOS development what’s the other 95% and how difficult is it to learn?<\/a><\/p>\r\n\r\n<p><strong>What are the best resources for learning iOS development?<\/strong><br\/>\r\nThe ease at which you can get educated, especially online, has gotten greater in the past decade. 25 years ago you would have needed a degree to work with software and apps, nowadays you can go online and access a wealth of free, or relatively cheap, information. If you want to learn how to build your own apps, where can you find the best courses, blogs and videos to do so?<\/p>\r\n\r\n<p>Read: <a href=\"https:\/\/www.quora.com\/What-are-the-best-resources-for-learning-iOS-development\">What are the best resources for learning iOS development?<\/a><\/p>\r\n\r\n<p><strong>What is the average hourly rate for a freelance mobile app developer experienced on iOS, Android and Blackberry outside of the US?<\/strong><br\/>\r\nProvided you’ve learned how to code and build apps, how much money can you make as a freelance developer? It appears hourly rates greatly vary with skill and geographical location, but it’s very possible to make a decent income as a freelancer. Don’t want to trade your time for money? <em>Start a business instead.<\/em><\/p>\r\n\r\n<p>Read: <a href=\"https:\/\/www.quora.com\/What-is-the-average-hourly-rate-for-a-freelance-mobile-app-developer-experienced-on-iOS-Android-and-Blackberry-outside-of-the-US\">What is the average hourly rate for a freelance mobile app developer experienced on iOS, Android and Blackberry outside of the US?<\/a><\/p>\r\n\r\n<div class=\"ctabox centered\">\r\n<h5>Got an app idea?<\/h5>\r\n<p>Learning how to build your own apps for iPhone is incredibly easy. Get started today with the <strong>Pro Course<\/strong>. It teaches you everything you need to turn your idea into an actual app and publish it in the App Store. The Pro Course includes over 10 hours of narrated video screencasts, full text guides and four sample projects. Let's get started!<br>\r\n<a href=\"http:\/\/learnappmaking.com\/pro-course\" class=\"btn btn-large btn-yellow centered\">Learn More<\/a><\/p><\/div>\r\n\r\n<h2 id=\"marketingyourapps\">Marketing Your Apps<\/h2>\r\n\r\n<p><strong>What are the best practices for marketing an iPhone app?<\/strong><br\/>\r\nEyeballs. You need eyeballs, lots of them. How do you get people to see your app? <em>Go where your customers are already looking.<\/em> Marketing your app starts on day zero, even before you’re building the app. Solve a problem, come up with a solution, find people with that same problem, sell the solution, build it, profit. It’s as easy as that!<\/p>\r\n\r\n<p>Read: <a href=\"https:\/\/www.quora.com\/What-are-the-best-practices-for-marketing-an-iPhone-app\">What are the best practices for marketing an iPhone app?<\/a><\/p>\r\n\r\n<p><strong>What are great ways to promote an iOS app?<\/strong><br\/>\r\nOnce you’ve found your audience, how do you get them to notice you? It helps if your app is remarkable, and clearly has a benefit. Over 100 Quorians responded with ideas for this question, and it’s one of the most popular questions in the <em>App Marketing<\/em> category. (I’m a big fan of Ted Nash’s answer, who underscores the importance of launching before launching…)<\/p>\r\n\r\n<p>Read: <a href=\"https:\/\/www.quora.com\/What-are-great-ways-to-promote-an-iOS-app\">What are great ways to promote an iOS app?<\/a><\/p>\r\n\r\n<p><strong>What are the most important first steps in marketing a new iOS app?<\/strong><br\/>\r\nYou’ve got limited time and money. Where do you apply the most effort and how do you balance all your outreach activities? If you’ve read <em>Traction<\/em> by Weinberg and Mares, you’d know to optimize one or two channels. Your first step is identifying which channels to optimize. Any questions?<\/p>\r\n\r\n<p>Read: <a href=\"https:\/\/www.quora.com\/What-are-the-most-important-first-steps-in-marketing-a-new-iOS-app\">What are the most important first steps in marketing a new iOS app?<\/a><\/p>\r\n\r\n<p><strong>What are the top ranking ways to monetize an iPhone app?<\/strong><br\/>\r\nOK, let’s talk about money. You could get rich selling fresh air (yes, that’s a real business) or you could figure out how to monetize your apps. How? (Hint: it’s not advertising. It’s not charging for your app. In-app currency, neither…)<\/p>\r\n\r\n<p>Read: <a href=\"https:\/\/www.quora.com\/What-are-the-top-ranking-ways-to-monetize-an-iPhone-app\">What are the top ranking ways to monetize an iPhone app?<\/a><\/p>\r\n\r\n<h2 id=\"programmingwithswift\">Programming With Swift<\/h2>\r\n\r\n<p><strong>What do software engineers think about programming language Swift?<\/strong><br\/>\r\nThey LOVE it! Many software engineers were sceptical at first, when Apple introduced the language, but grew more excited over the past iterations of Swift. Language features like optionals, type inference, functional programming capabilities, and Swift’s elegance, turn coding with Swift in a house party. Everybody is Swift-fu fighting!<\/p>\r\n\r\n<p>Read: <a href=\"https:\/\/www.quora.com\/What-do-software-engineers-think-about-Swift-Apple-programming-language\">What do software engineers think about programming language Swift?<\/a><\/p>\r\n\r\n<p><strong>Is Swift a good language for a beginner to learn?<\/strong><br\/>\r\nYes. Definitely! Especially compared to Objective-C, Swift’s bigger brother, learning Swift is a good choice for an aspiring app developer. On top of that, an effect of Swift’s rise in popularity is the launch of several blogs and online courses about the language. The community recognizes Swift’s elegance and ease-of-use, resulting in experimentation. And that’s good for the beginner coder.<\/p>\r\n\r\n<p>Read: <a href=\"https:\/\/www.quora.com\/Is-Swift-a-good-language-for-a-beginner-to-learn\">Is Swift a good language for a beginner to learn?<\/a><\/p>\r\n\r\n<p><strong>Is Swift the easiest language to learn?<\/strong><br\/>\r\nSo Swift is an awesome language, we’re clear on that. But is it actually the easiest language to learn? It depends on what you compare it with. Once you’ve learned programming it becomes easier to pick up new languages. You <em>learn to learn<\/em>, which is an incredibly important skill if you want to become a better coder. Lua, JavaScript, Go, Sketch and even ActionScript all share features with Swift. Is one easer than the other? I doubt it.<\/p>\r\n\r\n<p>Read: <a href=\"https:\/\/www.quora.com\/Is-Swift-the-easiest-language-to-learn\">Is Swift the easiest language to learn?<\/a><\/p>\r\n\r\n<p><strong>How does Swift compare with other modern programming languages?<\/strong><br\/>\r\nNow that we’re talking about programming languages, how <em>does<\/em> Swift compare? Did Apple just reinvent the ways of old or is the language really novel? Well, if you ask programming language programmers – yes, programming languages are programmed too – they can point out quite a few modern features. <\/p>\r\n\r\n<p>Read: <a href=\"https:\/\/www.quora.com\/How-does-Swift-compare-with-other-modern-programming-languages\">How does Swift compare with other modern programming languages?<\/a><\/p>\r\n\r\n<h2 id=\"rankingyourappswithappstoreoptimization\">Ranking Your Apps With App Store Optimization<\/h2>\r\n\r\n<p><strong>What are the most promising companies in the app search optimization space?<\/strong><br\/>\r\nApp Store Optimization (ASO) isn’t as big as SEO (Search Engine Optimization), but it’s slowly turning into a similarly important business. It’s simple: How do you get your app to rank as high as possible in the App Store lists? Many businesses offer products and services to aid ASO. Which are the most promising?<\/p>\r\n\r\n<p>Read: <a href=\"https:\/\/www.quora.com\/What-are-the-most-promising-companies-in-the-app-search-optimization-space\">What are the most promising companies in the app search optimization space?<\/a><\/p>\r\n\r\n<p><strong>What are some of the best techniques for App Store Optimization?<\/strong><br\/>\r\nApp Store Optimization is tough. You can’t really know for sure how Apple’s ranking algorithm works, and they’re changing it all the time. What’s a sure-fire way to optimize your apps with all this uncertainty? Pro optimizers share their weapons of choice.<\/p>\r\n\r\n<p>Read: <a href=\"https:\/\/www.quora.com\/What-are-some-of-the-best-techniques-of-ASO-App-Store-optimization\">What are some of the best techniques for App Store Optimization?<\/a><\/p>\r\n\r\n<p><strong>How does the App Store search and ranking algorithm work?<\/strong><br\/>\r\n<em>How does it work?<\/em> Wouldn’t we all like to know… Unfortunately, the algorithm is secret and with good reason: if it became public, any engineer could figure out how to game the system which would tank the value of the ranking system. Fortunately, the folks at companies such as Sensor Tower keep an eye out for <em>what they think might work<\/em>.<\/p>\r\n\r\n<p>Read: <a href=\"https:\/\/www.quora.com\/App-Store-Optimization\/How-does-the-AppStore-search-algorithm-work\">App Store Optimization: How does the App Store search algorithm work?<\/a><\/p>\r\n\r\n<p><strong>What are the best examples of creative work for mobile app install campaigns?<\/strong><br\/>\r\nWith cost per acquisition (CPA) on an all-time high, it’s getting more and more expensive to get a new user to install your app. As an effect, app marketers have to get more creative to get high-quality leads for their apps. How do they do it?<br\/>\r\nRead: <a href=\"https:\/\/www.quora.com\/What-are-the-best-examples-of-creative-work-for-mobile-app-install-campaigns\">What are the best examples of creative work for mobile app install campaigns?<\/a><\/p>",
81 "thumbnail" : "https:\/\/learnappmaking.com\/wp-content\/uploads\/2015\/08\/best_of_quora_2.jpg",
82 "author" : "Reinder de Vries",
83 "id" : 893,
84 "title" : "[MEGA POST] Best of Quora: Building Better, More Profitable Apps With Swift, App Store Optimization and Growth Hacking",
85 "date" : "2016-02-16 18:46:38"
86 },
87 {
88 "excerpt" : "Oh no! Parse is shutting down it's Backend-as-a-Service. What now? Read on to find out how you can migrate your iOS app from Parse to Parse Server, and learn a ton about back-end services.",
89 "permalink" : "https:\/\/learnappmaking.com\/how-to-migrate-parse-app-parse-server-heroku-mongolab\/",
90 "categories" : [
91 "Guide",
92 "Programming"
93 ],
94 "tags" : [
95
96 ],
97 "content" : "<p>On January 28th <a href=\"http:\/\/blog.parse.com\/announcements\/moving-on\/\">Parse announced<\/a> it will be shutting down its service. They’re winding down the done-for-you Platform-as-a-service, fully retiring it on January 28, 2017.<\/p>\r\n\r\n<p>That’s bad news for over 500.000 developers who relied on the service since 2011. Parse was acquired in 2013 by Facebook for $ 85 million. Back then it was a risky acquisition, which Facebook needed to get a foothold in the mobile market. <\/p>\r\n\r\n<p>Facebook’s recent earnings report shows a growth in mobile advertising revenue of 52%, comparing Q4 of 2014 and 2015, which clearly shows they’ve landed in mobile. With the rise in competition of cloud services by the likes of Amazon, Microsoft and Google, you could argue Facebook doesn’t need Parse anymore.<\/p>\r\n\r\n<p>App developers that use Parse have several options to migrate. Alternatives include <a href=\"https:\/\/www.firebase.com\/\">Firebase<\/a>, <a href=\"https:\/\/www.built.io\/products\/backend\/overview\">built.io<\/a> and the new <a href=\"https:\/\/github.com\/ParsePlatform\/parse-server\">Parse Server<\/a> stack.<\/p>\r\n\r\n<p>This guide will show you how you can migrate your app from Parse to Parse Server by making use of the free Heroku and mLab services. The guide starts with the setup of the <em>Paws<\/em> app, a minimal Instagram-like iOS app (cat pictures!).<\/p>\r\n\r\n<p>You’ll set up the app, migrate it to mLab, then start a Heroku instance and connect it to the app. Prior I’ll explain a bit about the Parse and Parse Server architecture.<\/p>\r\n\r\n<p>This code guide can be used for app makers who want to migrate their app from Parse to Parse Server. It’s also suitable for app makers who have never used Parse (and don’t have a Parse account) and wish to set up a fresh Parse Server app.<\/p>\r\n\r\n<p>Let’s get started!<\/p>\r\n\r\n<h2 id=\"0.overview:whatingredientsdoyouneed\">0. Overview: What Ingredients Do You Need?<\/h2>\r\n\r\n<p>Parse is technically a Backend-as-a-Service provider. It hosts a service you can use to store structured information and provides you with an API endpoint you can use to create and edit your app’s data. Parse has many SDKs for platforms such as iOS, Android and NodeJS (JavaScript).<\/p>\r\n\r\n<p>In a diagram, this is what the Parse stack looks like (Figure 1):<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/overview.png\" alt=\"Figure 1, 2 and 3\" \/>\r\n<figcaption>Figure 1, 2 and 3<\/figcaption>\r\n<\/figure>\r\n\r\n<p>As an app maker, you only had to code your app’s client-side code and manage the data in a easy-to-use administration tool. No need to worry about scaling the back-end, building indices or managing your data at a microlevel. You could essentially tap your app into a spreadsheet, and never worry about it. Your app connected through the high-level SDK to Parse, and Parse managed its own databases.<\/p>\r\n\r\n<p>When migrating to Parse Server, the architecture is different (Figure 2). Instead of only working with the Parse SDK, you manage your own Heroku instance that runs Parse Server, and manage your own MongoDB database that connects to Parse Server. You’re responsible for scaling and maintaining your own back-end.<\/p>\r\n\r\n<p>If you map out different back-end architectures on a scale from “hard” to “easy”, and “unmanaged” to “done-for-you”, you end up with Figure 3. As you can see, it requires dedicated <em>sysops<\/em> time to run a bare-metal server or Virtual Private Server (VPS, or cloud server), while it takes zero effort for the app maker to run the Parse BaaS. Somewhere in the middle between VPS and Parse you’ll find Heroku and mLab (and equivalents), not as hard as maintaining a VPS, but not as easy as the original Parse.<\/p>\r\n\r\n<p>Parse strongly recommends you to migrate to Parse Server as soon as possible. In the diagram you see a dotted line, which indicates an intermediary state in which you still communicate with the Parse back-end, but in which Parse communicates with your self-hosted MongoDB database. <\/p>\r\n\r\n<p>This allows for a two-step migration:<\/p>\r\n\r\n<ol>\r\n<li>First, you set up a MongoDB database (on mLab, or equivalent) and let Parse send your data to it. Your current app clients don’t require a code change, because the Parse API endpoint doesn’t change.<\/li>\r\n<li>Second, you set up Parse Server (on Heroku, or equivalent) and connect it to your MongoDB database. You publish an update for your app that points to the new Parse Server API endpoint. App users that didn’t update will use the MongoDB database through the original Parse, and updated users will use the new Parse Server. In either case, your app will point to a single database. While the migration is taking place, Parse will keep track of additions and will sync them after the initial migration completes.<\/li>\r\n<\/ol>\r\n\r\n<p>Both steps are documented in this code guide. Even if you didn’t use Parse before today, you can use this code guide to learn how to set up a fresh Parse Server for your app.<\/p>\r\n\r\n<p>While it may seem like an obvious migration schedule, it’s important to take note of the changes in architecture. You can read more on this in the conclusion of this code guide.<\/p>\r\n\r\n<div class=\"ctabox centered\">\r\n<h5>Are you an app developer?<\/h5>\r\n<p>Get curated iOS app articles and resources <em>right in your inbox<\/em>. Stay up-to-date on Swift development, growth hacking and App Store Optimization. Trusted by 1000+ app developers and marketers. <em>Sent out weekly.<\/em><br>\r\n<a href=\"http:\/\/learnappmaking.com\/\" class=\"btn btn-large btn-yellow trigger-wbounce rs-modal-2 centered\">Yes, Sign Me Up!<\/a><\/p><\/div>\r\n\r\n<h2 id=\"1.gettingstarted:setupthepawsapp\">1. Getting Started: Set Up The “Paws” App<\/h2>\r\n\r\n<p>Alright, first lets get started with the original <em>Paws<\/em> app. The app is part of a code guide <a href=\"http:\/\/www.appcoda.com\/instagram-app-parse-swift\/\">originally published on AppCoda.com<\/a>.<\/p>\r\n\r\n<p>The Paws app is a minimal Instagram-clone that shows pictures of cats in a vertical timeline. Users can upvote a cat picture by double-tapping on its image. The project uses the <code>Parse<\/code> and <code>ParseUI<\/code> pods (with <a href=\"https:\/\/cocoapods.org\/\">CocoaPods<\/a>), and relies on the now shut down Parse. <\/p>\r\n\r\n<p>In this code guide, you’ll first set up the Paws project as if it were fully reliant on Parse (an “existing project migration”) and then two-step migrate it to Parse Server.<\/p>\r\n\r\n<h3 id=\"gettingthepawscodefromgithub\">Getting The Paws Code From GitHub<\/h3>\r\n\r\n<p>First, download the Paws Xcode project from GitHub at <a href=\"https:\/\/github.com\/reinderdevries\/Paws\">https:\/\/github.com\/reinderdevries\/Paws<\/a>. Download the ZIP and unzip it in a convenient location. If you have Git installed, you can of course also <code>clone<\/code> the project.<\/p>\r\n\r\n<p>Use <em>Terminal<\/em> to <code>cd<\/code> into the project’s root directory, like this:<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/Image_1.png\" alt=\"Terminal: cd into Paws directory\" \/>\r\n<figcaption>Terminal: cd into Paws directory<\/figcaption>\r\n<\/figure>\r\n\r\n<p>Next up, make sure you’ve got the latest versions of the pods used in the project. In the same root directory, type this on the command-line:<\/p>\r\n\r\n<pre><code>$ pod update\r\n<\/code><\/pre>\r\n\r\n<p><em>(Note: you can omit the <code>$<\/code>, it just indicates the code block above should be input on the command-line. Make sure you press the <code>Enter<\/code> key after you type in a Terminal command.)<\/em><\/p>\r\n\r\n<p>If you don’t have CocoaPods installed on your Mac, <a href=\"https:\/\/guides.cocoapods.org\/using\/getting-started.html\">follow the steps documented here<\/a> to install it.<\/p>\r\n\r\n<p>CocoaPods will now read the <code>Podfile<\/code>, which contains a reference to pods <code>Parse<\/code> and <code>ParseUI<\/code>, and attempts to download their latest versions. It also builds the pods and adds them to our <code>Paws.xcworkspace<\/code> workspace file. <\/p>\r\n\r\n<p>You’re likely to see something similar to the following output in <em>Terminal<\/em>:<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/Image_2.png\" alt=\"Terminal: pod update\" \/>\r\n<figcaption>Terminal: pod update<\/figcaption>\r\n<\/figure>\r\n\r\n<p>Next up, <strong>open the <code>Paws.xcworkspace<\/code> file.<\/strong> You can use Finder to locate the file, or open Xcode and then open the right workspace. It’s important you don’t open the <code>Paws.xcodeproj<\/code> file, but instead use the workspace file.<\/p>\r\n\r\n<p>Press the <code>Command-B<\/code> keys to build the project, and verify that the project doesn’t generate any errors. If you were to run the project in its current state on your iPhone or the iOS Simulator, it wouldn’t run, because the configuration parameters haven’t been set. We’ll do that in a minute!<\/p>\r\n\r\n<h3 id=\"uploadingtheappdatatoparse\">Uploading The App Data To Parse<\/h3>\r\n\r\n<p>Because we’re recreating an existing Parse project, we need to update the app’s data to Parse. We could of course import it right into the MongoDB database we are creating in the next step, but that would defeat the purpose of experiencing what it’s like to migrate an existing app.<\/p>\r\n\r\n<ul>\r\n<li>First, download the following file: <a href=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/paws_data_json.zip\">paws_data_json.zip<\/a>. It contains the data for the app, including the URLs of the cat photos, photo credit information, and the names of the cats.<\/li>\r\n<li>Second, unzip the file in a convenient location.<\/li>\r\n<\/ul>\r\n\r\n<p>Next up, go to <a href=\"https:\/\/www.parse.com\/login\">parse.com\/login<\/a> and log in with your account credentials. <\/p>\r\n\r\n<p><strong>Note:<\/strong> Unfortunately, if you don’t have an account already you can’t create a new one due to the shutdown of the Parse service. Don’t worry, you can still use Parse Server! Skip ahead of part 2, creating a MongoDB database with mLab, and follow the special instructions on importing the app data in mLab.<\/p>\r\n\r\n<p>On your <a href=\"https:\/\/dashboard.parse.com\/apps\">Parse dashboard<\/a>, click the <em>Create a new app<\/em> button. Name the app “Paws” and set its database type to <em>Parse Data<\/em>. Once the app is created, you’ll be taken to the <em>Browser<\/em>.<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/Image_3.png\" alt=\"Parse Dashboard\" \/>\r\n<figcaption>Parse Dashboard<\/figcaption>\r\n<\/figure>\r\n\r\n<p>Click on the <code>...<\/code> three-dotted button in the bottom-left of the interface (see image above), then choose <em>Leave Beta<\/em>. This will take you to the previous version of the Parse Dashboard UI. Why the change? Well, for some reason the new UI doesn’t have a button to <em>import<\/em> data into Parse…<\/p>\r\n\r\n<p>Next, locate your Paws app in the old UI and make sure to navigate to <em>Parse Core<\/em>. Your screen should now look like this:<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/Image_4.png\" alt=\"Old Parse Core\" \/>\r\n<figcaption>Old Parse Core<\/figcaption>\r\n<\/figure>\r\n\r\n<p>Next, do this:<\/p>\r\n\r\n<ul>\r\n<li>First, click the <em>Import<\/em> button. A dialog box appears.<\/li>\r\n<li>Then, click <em>Browse<\/em>. Locate the data file you previously unzipped. Make sure to upload the <code>.json<\/code> file, not the <code>.zip<\/code> file.<\/li>\r\n<li>Then, once the file is uploaded, choose <code>Custom<\/code> for <em>Collection Type<\/em> and name the collection <code>Cat<\/code>.<\/li>\r\n<li>Finally, click <em>Finish Import<\/em>.<\/li>\r\n<\/ul>\r\n\r\n<h3 id=\"connectingparsetothepawsapp\">Connecting Parse To The Paws App<\/h3>\r\n\r\n<p>Now, click <em>Switch to new Dashboard<\/em> in the bottom-left corner of the screen. In the new UI, open the <em>Paws<\/em> app once more, then go to <code>App Settings -> Security and Keys<\/code>.<\/p>\r\n\r\n<p>Locate the following two text strings. You’ll need them later to connect the Paws app to Parse.<\/p>\r\n\r\n<ul>\r\n<li><strong>Application ID<\/strong><\/li>\r\n<li><strong>Client Key<\/strong><\/li>\r\n<\/ul>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/Image_5.png\" alt=\"Parse: App Keys\" \/>\r\n<figcaption>Parse: App Keys<\/figcaption>\r\n<\/figure>\r\n\r\n<p>Next, open the Paws workspace in Xcode and open the <code>AppDelegate.swift<\/code> file. At the top there’s a couple of configuration code lines. Do this:<\/p>\r\n\r\n<ul>\r\n<li>First, uncomment (remove the <code>\/\/<\/code>) the first <code>Parse.setApplicationId(...<\/code> line.<\/li>\r\n<li>Then, replace the first <code>...<\/code> with the <em>Application ID<\/em> you located earlier.<\/li>\r\n<li>Then, replace the second <code>....<\/code> with the <em>Client Key<\/em> you located earlier.<\/li>\r\n<li>Finally, comment the entire <code>let config = ...<\/code> to <code>... Parse.initializeWithConfiguration(config);<\/code> code block. You’ll use it later.<\/li>\r\n<\/ul>\r\n\r\n<p>The first part of the code block now looks like this:<\/p>\r\n\r\n<pre><code>Parse.setApplicationId("<your application id>", clientKey: "<your client key>");\r\n\r\nParse.setLogLevel(PFLogLevel.Info);\r\n\r\n\/*let config = ParseClientConfiguration(block: { \r\n (ParseMutableClientConfiguration) -> Void in\r\n\r\n ParseMutableClientConfiguration.applicationId = "..."; \r\n ParseMutableClientConfiguration.clientKey = "..."; \r\n ParseMutableClientConfiguration.server = "..."; \r\n});\r\n\r\nParse.initializeWithConfiguration(config);*\/\r\n\r\nlet tableVC:CatsTableViewController = CatsTableViewController(className: "Cat"); \r\ntableVC.title = "Paws";\r\n\r\n...\r\n<\/code><\/pre>\r\n\r\n<p>Finally, run the app by pressing <code>Command-R<\/code> or by clicking on the <em>Run<\/em> button at the top-left of Xcode. Make sure you’ve selected an iPhone Simulator device, or connected your own iPhone or iPod Touch. The app should compile and run, resulting in a screen similar to this:<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/Image_6.png\" alt=\"Xcode: Running The Paws App\" \/>\r\n<figcaption>Xcode: Running The Paws App<\/figcaption>\r\n<\/figure>\r\n\r\n<p>OK, now imagine the following happens:<\/p>\r\n\r\n<ol>\r\n<li>You publish the beautiful <em>Paws<\/em> app on the App Store and amass a large number of monthly active users. You sit back and enjoy your app with its convenient Parse back-end.<\/li>\r\n<li>Parse announces it’s shutting down its service…<\/li>\r\n<li>You FREAK OUT! What now? I mean, you had two certainties in your life: Parse and taxes!<\/li>\r\n<\/ol>\r\n\r\n<p>Fortunately, the fine folks at Parse transmuted their Platform-as-a-Service in a well-coded <em>Parse Server<\/em> NodeJS\/Express package. You can essentially run the (almost) full Parse service on any webserver that supports MongoDB and NodeJS. Awesome!<\/p>\r\n\r\n<h2 id=\"2.creatingamongodbdatabasewithmongolab\">2. Creating A MongoDB Database With mLab<\/h2>\r\n\r\n<p>OK. We saw in the overview at the top of this article that Parse will now run on two new services: Heroku and mLab. Essentially, Heroku hosts and runs the Parse Server code and mLab hosts the app’s data in a MongoDB database. <\/p>\r\n\r\n<p>Let’s first set up the mLab service. At this point you’ve either recreated the Paws app with the original Parse, or you didn’t have a Parse account but still want to use Parse Server.<\/p>\r\n\r\n<h3 id=\"deployingthemongodbdatabase\">Deploying The MongoDB Database<\/h3>\r\n\r\n<p>First, make sure you have a mLab account by signing up at <a href=\"https:\/\/mlab.com\/\">mlab.com<\/a>. Then, log into your new account. <\/p>\r\n\r\n<p><strong>Note:<\/strong> you need to verify your email address before you can create any new deployments. Sign up, wait for the verification email to arrive in your inbox, click the link, then get back to the <a href=\"https:\/\/mlab.com\/home\">mLab dashboard<\/a>.<\/p>\r\n\r\n<p>On the dashboard, click the <em>Create New<\/em> button. On the page <em>Create new subscription<\/em> page that appears, do the following:<\/p>\r\n\r\n<ul>\r\n<li>First, choose <em>Amazon Web Services<\/em> as cloud provider.<\/li>\r\n<li>Then, choose <em>Amazon’s US East (Virginia) Region (us-east–1)<\/em> as location.<\/li>\r\n<li>Then, select the <em>Single Node<\/em> tab and choose the <em>Sandbox<\/em> option. This is mLab’s free tier, which has more than enough capacity for our app.<\/li>\r\n<li>Then, name the database <code>paws<\/code>.<\/li>\r\n<li>Finally, click <em>Create new MongoDB deployment<\/em>.<\/li>\r\n<\/ul>\r\n\r\n<p>The new database is created. You can of course choose different MongoDB options depending on the requirements of your app. Keep in mind that the original Parse service compressed your app’s data. Parse recommends to 10x the size of your Parse data when creating a new MongoDB database.<\/p>\r\n\r\n<p>If all went OK, you’ll be redirected to your mLab dashboard which shows the newly created database. Click on the database to open its detail screen. Note the <code>mongodb:\/\/<\/code> URL at the top, we’ll need it later.<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/Image_7.png\" alt=\"mLab: Database details\" \/>\r\n<figcaption>mLab: Database details<\/figcaption>\r\n<\/figure>\r\n\r\n<p>Next, do this:<\/p>\r\n\r\n<ul>\r\n<li>First, click the <em>Users<\/em> tab.<\/li>\r\n<li>Then, click <em>Add database user<\/em>.<\/li>\r\n<li>Then, in the dialog that appears, input <code>paws<\/code> as username and input a strong password, then click <em>Create<\/em>. Make sure to leave the <em>Make read-only<\/em> checkbox unticked.<\/li>\r\n<\/ul>\r\n\r\n<p>Make sure you note the <code>paws<\/code> username and its password somewhere safe. You will need it later.<\/p>\r\n\r\n<h3 id=\"synchronizingparsewithmongolab\">Synchronizing Parse With mLab<\/h3>\r\n\r\n<p><em>You can skip this step if you don’t have a Parse account. Continue with “Importing Data In mLab”.<\/em><\/p>\r\n\r\n<p>Copy the <code>mongodb:\/\/<\/code> URL you located earlier to a text file and replace the <code><dbuser><\/code> and <code><dbpassword><\/code> with the username and password you just created. The result should look something like this:<\/p>\r\n\r\n<pre><code>mongodb:\/\/paws:mypassword1234@ds033298.mlab.com:33297\/paws\r\n<\/code><\/pre>\r\n\r\n<p>Then, switch back to the <em>Parse Dashboard<\/em> at <a href=\"https:\/\/dashboard.parse.com\/\">https:\/\/dashboard.parse.com\/<\/a> and open your <em>Paws<\/em> app. Next, go to <code>App Settings -> General<\/code> and click on the <em>Migrate<\/em> button (in red).<\/p>\r\n\r\n<p>Then, paste the <code>mongodb:\/\/<\/code> URL in the input field and click <em>Begin the migration<\/em>. You’ll be taken to a screen that shows the process of the migration. Parse will now send all your data to mLab, which shouldn’t take long.<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/Image_8.png\" alt=\"Parse Migration\" \/>\r\n<figcaption>Parse Migration<\/figcaption>\r\n<\/figure>\r\n\r\n<p><strong>Note:<\/strong> the migration is essentially complete when the first bar turns green. Parse is still looking for new data that was entered since the migration, but because our Paws app isn’t used in a production environment,no new data is added.<\/p>\r\n\r\n<p>Once all the bars are green, and you’ve had the chance to manually verify the data, Parse will switch to using your self-hosted MongoDB database instead of the Parse hosted database. That’s pretty cool! Parse still takes in requests from your connected app clients (the one’s your users use), but instead of reading and writing to the Parse hosted database, it reads and writes from and to your own self-hosted database on mLab.<\/p>\r\n\r\n<p>OK, that’s it! This concludes the first part of the migration. You can skip ahead to <em>Deploying Parse Server On Heroku<\/em>.<\/p>\r\n\r\n<h3 id=\"importingdatainmongolab\">Importing Data In mLab<\/h3>\r\n\r\n<p><em>Only complete these steps if you don’t have a Parse account.<\/em><\/p>\r\n\r\n<p>OK, you don’t have a Parse account but still wanted to follow this code guide to learn how to deploy Parse Server. You’re essentially creating a fresh new <em>Paws<\/em> app, but directly deploying it on Heroku and mLab without using the original Parse.<\/p>\r\n\r\n<p><strong>Note:<\/strong> At this point, you need to have the Paws source code set up, have created a mLab account, created the <code>paws<\/code> MongoDB database, and created the <code>paws<\/code> database user. Make sure you’re logged into your mLab account and open your dashboard at <a href=\"https:\/\/mlab.com\/home\">mlab.com\/home<\/a>.<\/p>\r\n\r\n<p>In order to get the app data into your MongoDB database, you’ll need to import it with a JSON file. To do that, you need to have the MongoDB tools installed on your Mac’s OS X.<\/p>\r\n\r\n<p>Before you can install the tools, you need to install <a href=\"http:\/\/brew.sh\/\">Homebrew<\/a>. Homebrew is a package manager for OS X and you can use it to install several command-line tools Apple didn’t install by default on OS X. One of those tools is MongoDB.<\/p>\r\n\r\n<p><strong>Note:<\/strong> Read on <a href=\"http:\/\/brew.sh\/\">brew.sh<\/a> how to install Homebrew.<\/p>\r\n\r\n<p>Once you’ve installed Homebrew, run the following <em>Terminal<\/em> command to ensure you’ve got the latest version of Homebrew.<\/p>\r\n\r\n<pre><code>$ brew update\r\n<\/code><\/pre>\r\n\r\n<p>Next, install MongoDB with this command:<\/p>\r\n\r\n<pre><code>$ brew install mongodb\r\n<\/code><\/pre>\r\n\r\n<p>Next, run the following command to verify the toolset was installed correctly:<\/p>\r\n\r\n<pre><code>$ mongoimport --help\r\n<\/code><\/pre>\r\n\r\n<p>Next, download the following file: <a href=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/paws_mongodb.zip\">paws_mongodb.zip<\/a> and unzip it in a convenient location. Make sure the resulting unzipped directory is called <code>paws<\/code>.<\/p>\r\n\r\n<p>Next, go to your mLab dashboard, open the <code>paws<\/code> database and click the <em>Tools<\/em> tab. You’re now on a page that lists a number of CLI commands to work with MongoDB. <\/p>\r\n\r\n<p>Find the first one, right below <em>Import database<\/em>. It’s similar to:<\/p>\r\n\r\n<pre><code>$ mongorestore -h ds051645.mongolab.com:51645 -d paws -u <user> -p <password> <input db directory>\r\n<\/code><\/pre>\r\n\r\n<p>You have just installed this <code>mongorestore<\/code> command with Homebrew. The tool restores a MongoDB database, based on parameters, essentially entering data into the empty database you created previously.<\/p>\r\n\r\n<p>Before you can use the command, you need to configure the parameters. It’s easiest if you first copy the entire command from your mLab <em>Tools<\/em> page to a text file.<\/p>\r\n\r\n<p>Then, edit the parameters one by one:<\/p>\r\n\r\n<ul>\r\n<li>First, replace <code><user><\/code> with <code>paws<\/code><\/li>\r\n<li>Second, replace <code><password><\/code> with the password you entered earlier.<\/li>\r\n<li>Third, replace <code><input db directory><\/code> with <code>paws<\/code>.<\/li>\r\n<\/ul>\r\n\r\n<p>The entire command now looks similar to this:<\/p>\r\n\r\n<pre><code>$ mongorestore -h ds051645.mongolab.com:51645 -d paws -u paws -p password1234 paws\r\n<\/code><\/pre>\r\n\r\n<p>Don’t input the command in <em>Terminal<\/em> just yet. First, use <em>Terminal<\/em> and <code>cd<\/code> to navigate to the directory you unzipped the <code>paws_mongodb.zip<\/code> in. For instance, if you downloaded the ZIP file to your downloads directory at <code>~\/Downloads<\/code>, do the following:<\/p>\r\n\r\n<pre><code>$ cd ~\/Downloads\r\n<\/code><\/pre>\r\n\r\n<p>Once you’ve navigated to the right directory, copy and paste the <code>mongorestore<\/code> command from the text file into <em>Terminal<\/em> and press enter. The result in <em>Terminal<\/em> looks something like this:<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/Image_9.png\" alt=\"Terminal: Restore MongoDB Database\" \/>\r\n<figcaption>Terminal: Restore MongoDB Database<\/figcaption>\r\n<\/figure>\r\n\r\n<p>As you can see, I’ve unzipped the ZIP in <code>~\/Downloads<\/code> as subdirectory <code>paws<\/code> and restore that database to a MongoDB called <code>paws-test<\/code> with username <code>paws<\/code> and password <code>abcd1234<\/code>. <\/p>\r\n\r\n<p>Verify that the data import went OK by checking your MongoDB’s collections with the <em>Collections<\/em> tab in the dashboard.<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/Image_10.png\" alt=\"mLab: Collections OK!\" \/>\r\n<figcaption>mLab: Collections OK!<\/figcaption>\r\n<\/figure>\r\n\r\n<p>Alright! That’s it for migrating to MongoDB. Because the steps involved are quite complex, this is a high-level recap:<\/p>\r\n\r\n<ol>\r\n<li>Get a mLab account and log in.<\/li>\r\n<li>Create a <code>paws<\/code> MongoDB database (free tier on AWS, US East)<\/li>\r\n<li>Create a <code>paws<\/code> user, note the password somewhere.<\/li>\r\n<li>If you have a Parse account and want to migrate the app’s data:\r\n\r\n<ul>\r\n<li>Note the MongoDB URI<\/li>\r\n<li>Replace the <code><dbuser><\/code> and <code><dbpassword><\/code> with the right values.<\/li>\r\n<li>Go to Parse, choose <em>Migrate<\/em>, input the URI and start the migration.<\/li>\r\n<li>When it completes, verify the data and complete the migration.<\/li>\r\n<\/ul><\/li>\r\n<li>If you don’t have a Parse account and want to start a fresh app with Parse Server:\r\n\r\n<ul>\r\n<li>Install <em>Homebrew<\/em>, the MongoDB command-line tools, and verify <code>mongorestore<\/code> works OK.<\/li>\r\n<li>Go to the <em>Tools<\/em> tab of your database in mLab.<\/li>\r\n<li>Note the <em>Import database<\/em> CLI command, copy it to a text file, and change its parameters to reflect your values (username, password and directory).<\/li>\r\n<li>Use <em>Terminal<\/em> and <code>cd<\/code> to navigate to the right directory (<code>~\/Downloads<\/code> if you unzipped the ZIP data file in that directory.)<\/li>\r\n<li>Paste the <code>mongorestore<\/code> command from the text file in <em>Terminal<\/em> and execute the command.<\/li>\r\n<\/ul><\/li>\r\n<li>Finish!<\/li>\r\n<\/ol>\r\n\r\n<p><strong>Note:<\/strong> Remember that you can get your MongoDB URI from your mLab dashboard, you’ll need it later.<\/p>\r\n\r\n<h2 id=\"3.deployingparseserveronheroku\">3. Deploying Parse Server On Heroku<\/h2>\r\n\r\n<p>OK. Now that the MongoDB database is set up to contain your app’s data, we need something that hosts and executes the Parse Server code. <\/p>\r\n\r\n<p>Parse Server, the roll-your-own-Parse package, is a NodeJS Express application. That means you can run it on any server that’s capable of running NodeJS, such as an Amazon Web Services instance, a Digital Ocean or Linode VPS, and even Microsoft’s Azure. In this code we’ll be using <em>Heroku<\/em>.<\/p>\r\n\r\n<p>Heroku is a Platform-as-a-Service, just like Parse, AWS, Digital Ocean, etc. You read in the overview that Parse is a done-for-you, managed and scalable Platform-as-a-Service. <\/p>\r\n\r\n<p>If you would draw a line, put Parse on the right, and a bare-metal (or VPS) server on the left, you can place Heroku somewhere in the middle. You don’t have to manage your own virtual servers, but you still have to manage your own app instances. Parse did that all for you, which meant you essentially didn’t have to worry about scaling your back-end anymore. <\/p>\r\n\r\n<p>With Heroku you create <em>containerized<\/em> instances of your app. One container for every Parse Server app. You’ll connect the app with your MongoDB database, through a configuration parameter which you’ll set to that MongoDB URI you noted earlier.<\/p>\r\n\r\n<p>Let’s get started!<\/p>\r\n\r\n<h3 id=\"installingtheherokutoolbelt\">Installing The Heroku Toolbelt<\/h3>\r\n\r\n<p>Just like with MongoDB, much of the configuration of Heroku is done on the command-line. Before you have access to these CLI tools, you need to install them. <\/p>\r\n\r\n<p>In order to install, do this:<\/p>\r\n\r\n<ul>\r\n<li>First, go to <a href=\"https:\/\/toolbelt.heroku.com\/\">toolbelt.heroku.com<\/a>.<\/li>\r\n<li>Then, download the Toolbelt for Mac OS X (or other operating systems, if applicable).<\/li>\r\n<li>Then, once the download finishes, open the PKG file and follow the installation instructions.<\/li>\r\n<li>Finally, to verify the installation is complete, type into <em>Terminal<\/em> the command <code>$ heroku --help<\/code>. If you’re seeing the CLI command options, all is OK.<\/li>\r\n<\/ul>\r\n\r\n<h3 id=\"gettingtheparseserverexamplesourcecode\">Getting The Parse Server Example Sourcecode<\/h3>\r\n\r\n<p>In this code guide we’ll be working with the Parse Server example project. You can find it on GitHub: <a href=\"https:\/\/github.com\/ParsePlatform\/parse-server-example\">https:\/\/github.com\/ParsePlatform\/parse-server-example<\/a>.<\/p>\r\n\r\n<p>You now need to download the source code on your local computer. Do this:<\/p>\r\n\r\n<ul>\r\n<li>First, open <em>Terminal<\/em> and <code>cd<\/code> to your home directory: <code>$ cd ~<\/code>.<\/li>\r\n<li>Then, create a new directory called <code>heroku<\/code> with <code>$ mkdir heroku<\/code>.<\/li>\r\n<li>Then, <code>cd<\/code> into the new directory with <code>$ cd heroku<\/code>.<\/li>\r\n<li>Then, clone the <code>parse-server-example<\/code> with Git in the current directory. You do that by typing: <code>$ git clone https:\/\/github.com\/ParsePlatform\/parse-server-example.git<\/code>. Git will now download the source code and put it in a new directory called <code>parse-server-example<\/code>.<\/li>\r\n<\/ul>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/Image_11.png\" alt=\"Terminal: Cloning Parse Server Example Sourcecode\" \/>\r\n<figcaption>Terminal: Cloning Parse Server Example Sourcecode<\/figcaption>\r\n<\/figure>\r\n\r\n<h3 id=\"settingtheparseapplicationidandclientkey\">Setting The Parse Application ID And Client Key<\/h3>\r\n\r\n<p>Before the Paws iOS app can communicate with the Parse Server we’re setting up, it needs to authenticate itself with Parse Server. Authentication works sort of like a password and in our case, the password consists of an <em>Application ID<\/em> token and a <em>Client Key<\/em> token.<\/p>\r\n\r\n<p>Previously, Parse generated and kept these two <em>tokens<\/em> (random strings of text), but with Parse Server you need to set them yourself. <\/p>\r\n\r\n<p>In order to do that, open the file <code>index.js<\/code> in the <code>~\/heroku\/parse-server-example<\/code> directory with your favorite text editor. Use Finder to navigate to your home directory, then open the directory called <code>heroku<\/code>, then open <code>parse-server-example<\/code>, then open the <code>index.js<\/code> file.<\/p>\r\n\r\n<p>Locate the JavaScript code line that starts with <code>var api = new ParseServer({ ...<\/code>.<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/Image_12.png\" alt=\"Setting The Parse Application ID And Client Key\" \/>\r\n<figcaption>Setting The Parse Application ID And Client Key<\/figcaption>\r\n<\/figure>\r\n\r\n<p>With this code block, a new Parse Server is created with a number of configuration parameters. For instance, the <code>databaseURI<\/code> is set according to the environment variable we’ll set later in Heroku, <code>DATABASE_URI<\/code>. Also, the <code>appId<\/code> and <code>masterKey<\/code> are being set.<\/p>\r\n\r\n<p>At this point you need to generate three text strings of random characters. You can do that in two ways:<\/p>\r\n\r\n<ol>\r\n<li>Copying the tokens from your Parse Dashboard:\r\n\r\n<ul>\r\n<li>First, open your Parse Dashboard and go to your app, then go to <code>App Settings -> Security And Keys<\/code>.<\/li>\r\n<li>Then, Locate the three keys: <em>Application ID<\/em>, <em>Client Key<\/em> and <em>Master Key<\/em> (bottom, need to click <em>Show Master Key<\/em> first).<\/li>\r\n<\/ul><\/li>\r\n<li>If you don’t have Parse, generate three new tokens with <a href=\"https:\/\/www.random.org\/strings\/\">random.org<\/a>:\r\n\r\n<ul>\r\n<li>First, go to <a href=\"https:\/\/www.random.org\/strings\/\">https:\/\/www.random.org\/strings\/<\/a>.<\/li>\r\n<li>Then, set the strings to be 20 characters long and tick all the boxes for Numeric, Uppercase and Lowercase characters. Set the strings to be unique, then click <em>Get strings<\/em>.<\/li>\r\n<li>Then, pick three of the 10 random strings you just generated.<\/li>\r\n<\/ul><\/li>\r\n<\/ol>\r\n\r\n<p>If all went OK, you now have three random text strings. With the strings, do the following:<\/p>\r\n\r\n<ul>\r\n<li>First, get back to that <code>index.js<\/code> file in your text editor and locate the right code block again.<\/li>\r\n<li>Then, replace <code>myAppId<\/code> with one of the random text strings. Make sure you type the string between single quotes.<\/li>\r\n<li>Then, replace <code>myMasterKey<\/code> with one of the random text strings. Also between single quotes.<\/li>\r\n<li>Then, type a comma <code>,<\/code> at the end of the line that says <code>masterKey<\/code>.<\/li>\r\n<li>Then, put a newline after that comma, and type this: <code>clientKey: '<random text string>'<\/code>. Instead of <code><random text string><\/code>, type the third and last random text string you got earlier. (You’ve essentially appended one key-value item to the configuration dictionary.)<\/li>\r\n<li>That’s it!<\/li>\r\n<\/ul>\r\n\r\n<p>The entire code block now looks similar to this:<\/p>\r\n\r\n<pre><code>var api = new ParseServer({ \r\n databaseURI: process.env.DATABASE_URI || 'mongodb:\/\/localhost:27017\/dev', \r\n cloud: process.env.CLOUD_CODE_MAIN || __dirname + '\/cloud\/main.js', \r\n appId: '<random text string>', \r\n masterKey: '<random text string>', \r\n clientKey: '<random text string>' \r\n});\r\n<\/code><\/pre>\r\n\r\n<p>Awesome! You’ve readied the Parse Server code locally. Now let’s get it to Heroku.<\/p>\r\n\r\n<h3 id=\"settingupheroku\">Setting Up Heroku<\/h3>\r\n\r\n<p>Alright, at this point you need a Heroku account. Go to <a href=\"http:\/\/heroku.com\">heroku.com<\/a> and sign up for an account. Note your account username and password somewhere safe.<\/p>\r\n\r\n<p><strong>Note:<\/strong> You need to verify your account email address before you can use Heroku. Sign up, wait for the verification email to arrive, click the link, then sign back in to Heroku.<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/Image_13.png\" alt=\"Heroku\" \/>\r\n<figcaption>Heroku<\/figcaption>\r\n<\/figure>\r\n\r\n<p>Next up, make sure the Heroku Toolbelt knows who you are. Type the following in <em>Terminal<\/em>:<\/p>\r\n\r\n<pre><code>$ heroku login\r\n<\/code><\/pre>\r\n\r\n<p>When Heroku asks for it, input your username and password.<\/p>\r\n\r\n<p>Next, we’re going to deploy the local code of Parse Server to a Heroku instance. <em>It’s incredibly easy…<\/em><\/p>\r\n\r\n<p>First, make sure you’re still in the <code>~\/heroku\/parse-server-example<\/code> directory with <em>Terminal<\/em> (or the directory where you cloned your Parse Server example code).<\/p>\r\n\r\n<p>Then, type this on the command line:<\/p>\r\n\r\n<pre><code>$ heroku create\r\n<\/code><\/pre>\r\n\r\n<p>Heroku will now create an app for you, assign it a random name and add a Git “remote” to the repository. This is one of the powers of Heroku: you can deploy and update your app’s code with Git.<\/p>\r\n\r\n<p>The output at the command line will be similar to this:<\/p>\r\n\r\n<pre><code>~\/heroku\/parse-server-example $ heroku create \r\nCreating app... done, stack is cedar-14 \r\nhttps:\/\/vast-shelf-54389.herokuapp.com\/ | https:\/\/git.heroku.com\/vast-shelf-54389.git\r\n<\/code><\/pre>\r\n\r\n<p>Next up, you need to add the recent code changes (for the App ID and Keys) to your local repository. You changed the file, indeed, but these changes also need to be tracked in the Git repository. Input the following two commands in <em>Terminal<\/em>.<\/p>\r\n\r\n<pre><code>$ git add index.js \r\n$ git commit -m "Changed configuration values"\r\n<\/code><\/pre>\r\n\r\n<p>The <code>index.js<\/code> file is now added to the local repository, but the source code change is not uploaded to the Heroku instance we created. We’ll do this now. You’ll upload your Parse Server example code (called <em>pushing<\/em>) to the Heroku instance you created with <code>heroku create<\/code>. Heroku will then deploy the code for you on the Heroku instance.<\/p>\r\n\r\n<p>Type this in <em>Terminal<\/em>:<\/p>\r\n\r\n<pre><code>$ git push heroku master\r\n<\/code><\/pre>\r\n\r\n<p>If all goes OK, you’ll see a bunch of lines racing across your screen. If you dig a little deeper, you’ll see Heroku recognizes the NodeJS app, builds a whole bunch of <em>dependencies<\/em> (library code Parse Server uses), and then attempts to restart the app process (which doesn’t exist).<\/p>\r\n\r\n<p>At this time, the Parse Server code now resides with Heroku, but our Parse Server app hasn’t started yet!<\/p>\r\n\r\n<p>Next up, we need to set that environment variable that points to your MongoDB database instance. You’ll do that with the MongoDB URI. You can find it at the top of your mLab dashboard:<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/Image_14.png\" alt=\"Heroku Dashboard: mLab URI\" \/>\r\n<figcaption>Heroku Dashboard: mLab URI<\/figcaption>\r\n<\/figure>\r\n\r\n<p>Copy your mLab URI to a text file and then replace <code><dbuser><\/code> and <code><dbpassword><\/code> with your own username <code>paws<\/code> and password. <\/p>\r\n\r\n<p><strong>Note:<\/strong> Don’t use your account username and password, but use the username and password you created for the <code>paws<\/code> database. If you followed this guide, the username should be <code>paws<\/code> and the password something you set.<\/p>\r\n\r\n<p>Next, type in the following in <em>Terminal<\/em> on the command line (still in the same directory). Replace the <code>mongodb:\/\/...<\/code> part with your own MongoDB URI.<\/p>\r\n\r\n<pre><code>heroku config:set DATABASE_URI=mongodb:\/\/...\r\n<\/code><\/pre>\r\n\r\n<p>The entire command should look similar to this:<\/p>\r\n\r\n<pre><code>heroku config:set DATABASE_URI=mongodb:\/\/<dbuser>:<dbpassword>@ds051647.mongolab.com:51647\/paws\r\n<\/code><\/pre>\r\n\r\n<p>You can verify the environment variable was set correctly by going to your Heroku Dashboard, clicking on the name of your instance (mine’s called <code>powerful-dawn<\/code>) and then clicking on the <em>Settings<\/em> tab. Then, click on <em>Reveal Config Vars<\/em>. If you’ve set the <code>DATABASE_URI<\/code> right, it should show up.<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/Image_15.png\" alt=\"Config Vars\" \/>\r\n<figcaption>Config Vars<\/figcaption>\r\n<\/figure>\r\n\r\n<p>Alright, we’re almost there. Next up: starting the Heroku instance! In order to start the Heroku instance, type this on the command-line, still in the same directory:<\/p>\r\n\r\n<pre><code>heroku ps:scale web=1\r\n<\/code><\/pre>\r\n\r\n<p>And then:<\/p>\r\n\r\n<pre><code>heroku open\r\n<\/code><\/pre>\r\n\r\n<p>The first line starts a <em>process<\/em> for the Heroku app, and the second line opens your browser and shows the response from the Heroku app. If all went OK, it should say:<\/p>\r\n\r\n<pre><code>I dream of being a web site.\r\n<\/code><\/pre>\r\n\r\n<p>Awesome! Your Heroku instance is now complete.<\/p>\r\n\r\n<p><strong>Note:<\/strong> Normally, you’d manage your app’s processes with a <em>Procfile<\/em>. Also, you can see that “I dream of …” line show up in the file <code>index.js<\/code>. By the way, looking at the source code of <code>parse-server-example<\/code> you can’t help but notice it’s very small… Where’s all the source code? It’s in a dependency, the library is called <code>parse-server<\/code> and you can find it’s code at: <a href=\"https:\/\/github.com\/ParsePlatform\/parse-server\">https:\/\/github.com\/ParsePlatform\/parse-server<\/a>.<\/p>\r\n\r\n<h2 id=\"4.configuringthepawsapp\">4. Configuring The “Paws” App<\/h2>\r\n\r\n<p>Yessss, no more command line! Next up, we’re going to connect the Paws iOS app with the new Heroku web service – your own Parse Server instance!<\/p>\r\n\r\n<p>Start the <code>Paws.xcworkspace<\/code> in Xcode and open the <code>AppDelegate.swift<\/code> file. You’ve worked with this file before. Then, do this:<\/p>\r\n\r\n<ul>\r\n<li>First, comment (or remove) the first code line of the method <code>application:didFinishLaunchingWithOptions:<\/code> by placing <code>\/\/<\/code> at the beginning of the line.<\/li>\r\n<li>Then, uncomment the comment block you created earlier a couple of lines down around the <code>let config ...<\/code> block.<\/li>\r\n<li>Then, replace the <code>...<\/code> for <code>applicationId<\/code> and <code>clientKey<\/code> with their respective values. You can find those values in <code>index.js<\/code> of <code>parse-example-server<\/code>, if you forgot them. You don’t have to set <code>masterKey<\/code>.<\/li>\r\n<li>Finally, copy the URL of the web page that said <code>I dream of being a web site.<\/code>. It looks like this: <code>https:\/\/[app instance name].herokuapp.com<\/code>. Paste it for the <code>server<\/code> configuration in <code>AppDelegate.swift<\/code>. <strong>Make sure you type <code>\/parse<\/code> at the end of the URL!<\/strong><\/li>\r\n<\/ul>\r\n\r\n<p>Make sure you’ve got the Swift syntax right (no spaces, single quotes) and double check you’ve correctly copied and pasted the configuration values. Check out the following screenshot if didn’t get it right.<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/Image_16.png\" alt=\"Xcode: New Configuration\" \/>\r\n<figcaption>Xcode: New Configuration<\/figcaption>\r\n<\/figure>\r\n\r\n<p>Next up, the <em>piece de resistance<\/em>, let’s see if it actually worked! Run the app with <code>Command-R<\/code> on iPhone Simulator or your own device. It’ll probably take 5–6 seconds before you’re seeing cat pictures after the app starts, but if all went OK you should see them.<\/p>\r\n\r\n<p>Didn’t work? Bummer! Ask for help in the comments.<\/p>\r\n\r\n<p>Did it work? AWESOME! YOU ROCK!<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/Image_17.png\" alt=\"Aw yisss... cat pictures!\" \/>\r\n<figcaption>Aw yisss… cat pictures!<\/figcaption>\r\n<\/figure>\r\n\r\n<p>But… the result is the same as when you’d use the original Parse, right? I mean, that’s the point, but how can you make sure the app uses the right back-end?<\/p>\r\n\r\n<p>OK, testing that is easy. Note down the number of votes the first image has, and what the name of the cat is. For instance, <code>Azrael<\/code> and <code>6 votes<\/code>.<\/p>\r\n\r\n<p>Then, <strong>double tap the cat picture<\/strong>. A cat paw should pop up (cute!) and the vote count should increase to <code>7 votes<\/code>.<\/p>\r\n\r\n<p>Then, open your mLab Dashboard and click the <em>Connections<\/em> tab for your MongoDB database.<\/p>\r\n\r\n<p>Then, click the <em>Cat<\/em> collection. A rudimentary overview of the cat data should show up. In the list, find the <code>Azrael<\/code> cat (you can use <code>Command-F<\/code>). Locate the <code>votes<\/code> key for the item and check what the vote count is. Is it <code>7<\/code>? Awesome, it works!<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/Image_18.png\" alt=\"Check The Data\" \/>\r\n<figcaption>Check The Data<\/figcaption>\r\n<\/figure>\r\n\r\n<h2 id=\"conclusion\">Conclusion<\/h2>\r\n\r\n<p>Pfew… that was quite some work! Did it all work out? Well done. You’ve just successfully migrated from Parse to Parse Server on Heroku and mLab!<\/p>\r\n\r\n<p>Did you like this coding guide? <a href=\"https:\/\/learnappmaking.com\/pro-course\/\">Make sure to check out the Pro Course<\/a>, a solid online course that shows you how you can build and market your own apps.<\/p>\r\n\r\n<p>What’s next? Now you actually have to worry about indices, database size, and scaling up your back-end. Another day, perhaps…<\/p>\r\n\r\n<p>Parse has been a landmark for a large amount of app makers around the world and it will be missed. I reckon the migration is an education for many app makers, because it forces them to start thinking about back-end portability and reliability, while at the same time making them experience what it’s like to run your own back-end.<\/p>\r\n\r\n<p>You could argue about the effect of acquisitions of the Internet Big Five (Amazon, Google, Facebook, Microsoft and Apple) of small high-tech companies on the internet and app ecosystem as a whole. The “for app makers, by app makers” seems to fade quickly in the face of multi-million dollar acquisitions. Facebook is focusing on mobile advertisement and the next big thing: virtual reality, and left an in 2013 risky acquisition (almost) for dead.<\/p>\r\n\r\n<p>Perhaps now a decade starts in which the authentic Platform-as-a-Service underdog will remain in competition with the Big Five, instead of being incorporated by it. <\/p>\r\n\r\n<p>I remember trying to get a spare Pentium II to run a web service 15 years ago. A lot has changed since then, especially the speed of change. With one thought, I’m a big fan of done-for-you services because they aid rapid prototyping. On another thought, I’m also a fan of tinkering and showing my peers how to tinker with technology. Maybe we got a little lazy, because the tools we relied on got too easy to use.<\/p>\r\n\r\n<p>Your contingency for a change in technology, and its reliability, is to never unlearn how to <em>tinker<\/em>.<\/p>\r\n\r\n<h2 id=\"furtherreading\">Further Reading<\/h2>\r\n\r\n<p>There’s much more to find out!<\/p>\r\n\r\n<ul>\r\n<li>Looking for a quick Parse replacement? Try <a href=\"https:\/\/nodechef.com\/\">NodeChef<\/a>, NodeJS server and MongoDB database service in one. Easy to set up!<\/li>\r\n<li><a href=\"https:\/\/www.firebase.com\/docs\/quickstarts.html\">Firebase Quickstart Guides<\/a><\/li>\r\n<li><a href=\"https:\/\/parse.com\/docs\/server\/guide\">Parse Server Guide<\/a><\/li>\r\n<li><a href=\"https:\/\/documentation.onesignal.com\/docs\/getting-started\">Getting Started With OneSignal (Push Notifications)<\/a><\/li>\r\n<li><a href=\"https:\/\/devcenter.heroku.com\/articles\/getting-started-with-nodejs\">Heroku: Getting Started With NodeJS<\/a><\/li>\r\n<li><a href=\"https:\/\/news.ycombinator.com\/item?id=5614187\">Ask HN: Parse Alternatives<\/a><\/li>\r\n<li><a href=\"http:\/\/bits.blogs.nytimes.com\/2016\/01\/28\/facebook-to-shut-down-parse-its-platform-for-mobile-developers\/\">NY Times: Facebook To Shutdown Parse<\/a><\/li>\r\n<li><a href=\"https:\/\/github.com\/mrvautin\/adminMongo\">AdminMongo, a NodeJS-based MongoDB admin tool<\/a><\/li>\r\n<li><a href=\"https:\/\/github.com\/jeromelebel\/MongoHub-Mac\">MongoHUb, a native Mac OS X admin tool app for MongoDB<\/a><\/li>\r\n<\/ul>\r\n\r\n<div class=\"ctabox centered\">\r\n<h5>Are you an app developer?<\/h5>\r\n<p>Get curated iOS app articles and resources <em>right in your inbox<\/em>. Stay up-to-date on Swift development, growth hacking and App Store Optimization. Trusted by 1000+ app developers and marketers. <em>Sent out weekly.<\/em><br>\r\n<a href=\"http:\/\/learnappmaking.com\/\" class=\"btn btn-large btn-yellow trigger-wbounce rs-modal-2 centered\">Yes, Sign Me Up!<\/a><\/p><\/div>\r\n",
98 "thumbnail" : "https:\/\/learnappmaking.com\/wp-content\/uploads\/2016\/01\/migrate_parse.png",
99 "author" : "Reinder de Vries",
100 "id" : 874,
101 "title" : "Guide: How To Migrate Your Parse App To Parse Server With Heroku And mLab",
102 "date" : "2016-01-31 14:35:17"
103 },
104 {
105 "excerpt" : "Good question! How can you produce killer coding guides without investing a ton in expensive gear? Here's how.",
106 "permalink" : "https:\/\/learnappmaking.com\/qa-how-do-you-make-video-coding-guides\/",
107 "categories" : [
108 "Guide",
109 "Q&A"
110 ],
111 "tags" : [
112
113 ],
114 "content" : "<p>Last week a blog reader asked me a pretty good question: “How do you make your coding guide videos?” I figured it’s a common question, so I wrote up a short Q&A-style blog post on the tools I use to create coding guides and videos. <\/p>\r\n\r\n<p>You can use it as a starting point for producing your own screencasts and step-by-step guides.<\/p>\r\n\r\n<h3 id=\"videorecording\">Video Recording<\/h3>\r\n\r\n<p>One of the best tools for recording screencasts (recordings of your Mac or PC screen display) is <a href=\"http:\/\/www.telestream.net\/screenflow\/overview.htm\">Screenflow<\/a>. I’m using Screenflow 5 to record my Mac display in tandem with a voice recording. Often, I also record short blurbs of face-to-face video.<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2015\/12\/screenflow.png\" alt=\"Screenflow\" \/>\r\n<figcaption>Screenflow<\/figcaption>\r\n<\/figure>\r\n\r\n<p>When exporting, I use these settings:<\/p>\r\n\r\n<ul>\r\n<li>Screen Size: the native resolution of my MacBook Air, <code>1440x900<\/code>.<\/li>\r\n<li>Encoding: H.264 at 1.2 Mbit\/s with AAC audio at 256 kbit\/s (relatively high).<\/li>\r\n<li>Framerates are set to Automatic, which means a key frame is made for every significant change in the frame and\/or every few frames.<\/li>\r\n<li>As for H.264, I’m using the “Main Profile” which is similar to the standard definition digital TV MPEG–4 format. If I’m making a video that’s largely facetime or needs a lot of color, I’d use the “High Profile” format.<\/li>\r\n<\/ul>\r\n\r\n<p>Generally, a bit of ghosting and color loss occurs. Given that most videos are 80% screen recordings, that’s OK.<\/p>\r\n\r\n<h3 id=\"physicalrecordinggear\">Physical Recording Gear<\/h3>\r\n\r\n<p>It’s not all software, quality comes down to physical gear too. This is what I use:<\/p>\r\n\r\n<ul>\r\n<li>A MacBook Air, late–2013 model. <a href=\"https:\/\/learnappmaking.com\/what-to-do-when-your-macbook-breaks-down-on-a-tropical-island\/\">Read here how my most important piece of equipment broke down, one time…<\/a><\/li>\r\n<li>A <a href=\"https:\/\/secure.logitech.com\/en-roeu\/product\/hd-pro-webcam-c920\">Logitech HD Pro C920 webcam<\/a>. It has great quality and an easy mount screw.<\/li>\r\n<li>Two generic brand softboxes for diffuse lighting. This is key for recording naturally-looking videos. Put one on 1–1.5 meter on both sides of your face.<\/li>\r\n<li>A <a href=\"http:\/\/www.rode.com\/microphones\/smartlav-plus\">Røde SmartLav+ lapel microphone<\/a>. This is key for clear audio and voice recordings.<\/li>\r\n<li>A <a href=\"https:\/\/griffintechnology.com\/us\/imic\">Griffin iMic<\/a>. This is technically just a USB soundcard, but it’s making a huge difference in audio quality. Analog jack inputs don’t really work well in MacBooks, too much noise interference from the laptops internals. Using an external soundcard clears that up. And a plus: music quality is definitely better with an iMic!<\/li>\r\n<\/ul>\r\n\r\n<p>This is how I remember text I need to say…<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2015\/12\/autocue.jpg\" alt=\"Poor-Mans Autocue\" \/>\r\n<figcaption>Poor-Man’s Autocue<\/figcaption>\r\n<\/figure>\r\n\r\n<p>I’ve had some trouble getting the SmartLav+ to work with my MacBook Air. It turns out the TRRS jack doesn’t work, and it’s output voltage is too low for the MacBook to pick up. I think this only happens in some models, though. Ultimately, I got the iMic and a TRRS-TRS converter and it all worked out fine.<\/p>\r\n\r\n<h3 id=\"writingcodingguides\">Writing Coding Guides<\/h3>\r\n\r\n<p>A ton of coding guides on Swift are published every day, but 90% of them is garbage because the coder wasn’t thinking from the reader’s perspective. Here’s my Quality Assurance checklist for creating killer coding guides:<\/p>\r\n\r\n<ol>\r\n<li>Make sure you explain everything in great detail. Write an “aside” that explains theory next to the practical step-by-step coding guide.<\/li>\r\n<li>Explain how every line of code works. Don’t skip any code lines, and don’t assume the reader knows immediately what you mean. Use diagrams if needed, and repeat yourself if needed.<\/li>\r\n<li>Use the correct terminology. It may seem boring at first, but you can’t just call everything “stuff”. Plus: if the reader wants to Google “nil-coalescing operator” you’re glad you didn’t name it “?? thingie”.<\/li>\r\n<li>Create clear screenshots. I use <a href=\"https:\/\/evernote.com\/skitch\/\">Skitch<\/a> for that; it’s got pretty cool quick-add-an-arrow-here-and-here features.<\/li>\r\n<li>Sit down and make a video. It’s a ton of work (about 2 days for a 10.000 word guide), but it’s much easier to follow than just a written guide. That said, I think a text guide in tandem with a video makes the best programming learning experience.<\/li>\r\n<\/ol>\r\n\r\n<p>This is the workflow I use from idea to published guide:<\/p>\r\n\r\n<ol>\r\n<li>Build the app or feature I want to create a guide of. Make it as simple as possible, but not simpler.<\/li>\r\n<li>Write the coding guide itself. Cut into comprehensible parts. Make screenshots, diagrams, etcetera. Usually, I end up building the app for the second time.<\/li>\r\n<li>Attempt to follow the guiding guide myself. Refine the steps where necessary.<\/li>\r\n<li>Record a video of the guide. Usually, I do this in one sitting because it takes time to set up and tear down.<\/li>\r\n<li>Edit the raw video footage. Depending on the amounts of eh’s and err’s, this takes about one hour per 15–20 minutes of footage.<\/li>\r\n<li>Upload the video, publish the guide. DONE!<\/li>\r\n<\/ol>\r\n\r\n<p>Over time, and depending on feedback, I rewrite part of the guides and restructure them. Also, quite often I have to update guides because parts became obsolete thanks to changes in Swift.<\/p>\r\n\r\n<h3 id=\"concludingwith:thesecretingredient\">Concluding With: The Secret Ingredient<\/h3>\r\n\r\n<p>Want to know the secret ingredient for making awesome guiding guides?<\/p>\r\n\r\n<p>…<\/p>\r\n\r\n<p>Electronic Dance Music! I’m a big fan, and listening to a solid beat definitely gets me into the productivity groove. Check out: <a href=\"https:\/\/soundcloud.com\/oliverheldens\">Oliver Heldens<\/a>, <a href=\"https:\/\/soundcloud.com\/3LAU\">3LAU<\/a>, <a href=\"https:\/\/soundcloud.com\/whitepandamusic\">White Panda<\/a> and <a href=\"https:\/\/soundcloud.com\/platform\">Boiler Room<\/a>.<\/p>\r\n\r\n<p>Get started on your own video guide: download Screenflow, put your face in front of the camera, and start screencasting!<\/p>",
115 "thumbnail" : "https:\/\/learnappmaking.com\/wp-content\/uploads\/2015\/12\/autocue.jpg",
116 "author" : "Reinder de Vries",
117 "id" : 845,
118 "title" : "How Do You Make Video Coding Guides?",
119 "date" : "2015-12-09 13:44:04"
120 },
121 {
122 "excerpt" : "Is your app secure? Make sure it doesn't leak your users' data by installing a free certificate from Let's Encrypt. Read on to find out why and how.",
123 "permalink" : "https:\/\/learnappmaking.com\/lets-encrypt-just-what-app-makers-need-to-secure-their-apps\/",
124 "categories" : [
125 "Guide",
126 "Programming"
127 ],
128 "tags" : [
129
130 ],
131 "content" : "<p>It’s a rainy afternoon and one of your app’s users, let’s call her Alice, is having a coffee in a café. She’s using your app for communication with her research supervisor. Unaware of a gaping security hole in your app she uploads recent changes to her paper via your app. Before she could send them over to her supervisor, the app synced her address book over an insecure HTTP connection. It’s all for the sake of convenience: now Alice can use her phone’s contacts in your desktop web-app too.<\/p>\r\n\r\n<p>Convenient for the hacker sitting at the table next to her. He’s got a “Pineapple” WiFi sniffer in his backpack. Every coffeeshop visitor thinks they’re secure on the password protected WiFi, but unfortunately the hacker has that password too. Without effort he intercepts Alice’s address book, her paper, pictures of the party last night, and a whole bunch of digital loot.<\/p>\r\n\r\n<p>If only the app makers had encrypted their app’s network communications with SSL! Their decision to not use HTTPS came from “convenience”: SSL certificates are hard to set up, often expensive, and on occasion even insecure.<\/p>\r\n\r\n<p>Thanks to Let’s Encrypt, that’s going to change.<\/p>\r\n\r\n<h2 id=\"whatisssl\">What Is SSL?<\/h2>\r\n\r\n<p>SSL is a standard security technology for establishing an encrypted communication link between a server and a client. In your case, as an app maker, the server is your online API and the client is your app. Communication with a web resource without an SSL (Secure Sockets Layer) certificate cannot be considered safe and secure. <\/p>\r\n\r\n<p>For this reason SSL is considered an integral part of any webserver or web resource. Particularly for public web APIs that transport personal information such as names, addresses, mobile phone numbers, and credit card information. SSL helps protect against hackers who try to gather information about an app’s users.<\/p>\r\n\r\n<p>SSL works by encrypting the data that’s being sent. On the internet you can’t control which nodes send and receive your data, so you can’t be sure someone is reading it. It’s like sending that secret message across the classroom. You ask your friend to give your message to Alice, but now Bob’s got hold of it and the whole classroom knows you’re secretly in love with Alice.<\/p>\r\n\r\n<h2 id=\"whyshouldyoucareaboutssl\">Why Should You Care About SSL?<\/h2>\r\n\r\n<p>So how can your app keep your users’ information secret? SSL encrypts the communication with an algorithm and only you and the receiver can decrypt it. It’s been an online standard for many years and although cumbersome to work with, it’s incredibly safe.<\/p>\r\n\r\n<p>Whether you’re an online business owner or app maker, you need to secure your data transport with SSL\/HTTPS encryption. If you’re working with a custom REST API, public file transfers or a Platform-as-a-Service that doesn’t have SSL, you need to encrypt your data. It helps keeping your customers’ data safe and avoids it falling into the hands of hackers. It’s your responsibility to keep your data secure. But what about all those pricey and overly complex SSL certificate providers?<\/p>\r\n\r\n<p>That’s where <a href=\"https:\/\/letsencrypt.org\/\">Let’s Encrypt<\/a> comes in. Let’s Encrypt is one of the first open certificate authorities (CA) that operates with the benefit of the public in mind. Run by the Internet Security Research Group (ISRG) and backed internet heavy-weights including Mozilla, EFF and CISCO, it’s the first sane approach to encrypting the internet for the rest of us. <\/p>\r\n\r\n<p>Using Let’s Encrypt has several advantages:<\/p>\r\n\r\n<ul>\r\n<li><strong>It is free.<\/strong> Let’s Encrypt is available to anyone who owns a domain. You can request a certificate for your domain at no cost.<\/li>\r\n<li><strong>It is automatic<\/strong>. Enrolling is a hassle-free and fast process, because Let’s Encrypt can install and configure itself on its own. Renewing automatically occurs in the background.<\/li>\r\n<li><strong>It is transparent.<\/strong> The great thing about Let’s Encrypt is that they provide all of their certificate issuance and revocation records for anyone who’d like to inspect them.<\/li>\r\n<li><strong>It is open.<\/strong> Let’s Encrypt provides an open standard for automated issuance and renewal protocols.<\/li>\r\n<li><strong>It is cooperative.<\/strong> Let’s Encrypt is composed of a team of individuals working hard to provide their services to the public. Instead of one single authority keeping all the secrets, there’s a transparent team of experts to ensure reliability.<\/li>\r\n<li><strong>It is secure.<\/strong> The best part about Let’s Encrypt is that it provides a secure platform for modern day security practices in the online world.<\/li>\r\n<\/ul>\r\n\r\n<h2 id=\"letsencryptistrusted\">Let’s Encrypt Is Trusted<\/h2>\r\n\r\n<p>By upholding their ideals for a secure internet, Let’s Encrypt has received cross-signatures from IdenTrust. Major browsers trust the certificates of IdenTrust, which is a big advantage.<\/p>\r\n\r\n<p>Compared to major certificate providers, Let’s Encrypt makes it incredibly easy for app makers to obtain a certificate and secure their webserver. With the help of some command-line magic you can install and activate HTTPS encryption for your web API. There is no need for editing a complicated configuration file or jumping through ten hoops to get a validation email. You don’t have to worry about renewing your certificates on time, because that’s all taken care of. <\/p>\r\n\r\n<p>Fun fact: the website <a href=\"https:\/\/letsencrypt.org\/\">letsencrypt.org<\/a> uses a certificate they issued themselves!<\/p>\r\n\r\n<p><a href=\"https:\/\/letsencrypt.org\/howitworks\/\">Installing and activating your SSL certificates is all explained on this page<\/a>, but the process is roughly as follows:<\/p>\r\n\r\n<ol>\r\n<li>Install the <code>letsencrypt<\/code> tool on your server. It’s currently only available on GitHub as a private beta (public beta from December 3rd 2015 on).<\/li>\r\n<li>Execute the <code>letsencrypt run<\/code> command to configure a certificate for your web server. Currently, Nginx and Apache are supported. Additionally, you can manually request a certificate with the <code>letsencrypt -d example.com auth<\/code> command.<\/li>\r\n<li>Renewing is done automatically, but you can prompt a renew by executing <code>letsencrypt renew --cert-path example-cert.pem<\/code>.<\/li>\r\n<li>Revoking certificates is a matter of running <code>letsencrypt revoke<\/code>.<\/li>\r\n<\/ol>\r\n\r\n<p>It’s that easy!<\/p>\r\n\r\n<h2 id=\"howtogetstarted\">How To Get Started<\/h2>\r\n\r\n<p>As of September 2015, Let’s Encrypt has become available to the public as a private beta. The first certificate has been issued, which was a big milestone for the non-profit. Just a few months after and they were able to obtain their cross-signature from IdenTrust. Up until now over 11.000 certificates have been issued. On December 3rd 2015 Let’s Encrypt entered a public beta, which means anyone can request certificates and use them on their servers!<\/p>\r\n\r\n<p>Let’s Encrypt is big news for app makers. It simply means it’s has become easier than ever to encrypt your server to app communication. There’s no reason to not do that: Let’s Encrypt is free, easy to use, trusted and open. Make sure to tune into their blog to stay updated, and read up on the exact technology they use on <a href=\"https:\/\/letsencrypt.org\/\">LetsEncrypt.org<\/a>.<\/p>\r\n\r\n<p>And what happened to Alice? Thanks to Let’s Encrypt her data is secure. Hacker Bob’s out of luck: even if he intercepted the data, he wouldn’t have the computing power to decrypt it.<\/p>\r\n\r\n<h2 id=\"furtherreading\">Further Reading<\/h2>\r\n\r\n<ul>\r\n<li><a href=\"https:\/\/letsencrypt.org\/2015\/12\/03\/entering-public-beta.html\">Let’s Encrypt: Entering Public Beta<\/a><\/li>\r\n<li><a href=\"https:\/\/letsencrypt.org\/2015\/11\/09\/why-90-days.html\">Why ninety-day lifetimes for certificates?<\/a><\/li>\r\n<li><a href=\"https:\/\/letsencrypt.org\/howitworks\/technology\/\">Technical Overview Of Let’s Encrypt<\/a><\/li>\r\n<\/ul>\r\n\r\n<p>Image credit: <a href=\"https:\/\/www.flickr.com\/photos\/jakerust\/16844922351\">GotCredit \/ jakerust<\/a><\/p>",
132 "thumbnail" : "https:\/\/learnappmaking.com\/wp-content\/uploads\/2015\/12\/16844922351_5455b8e181_k.jpg",
133 "author" : "Reinder de Vries",
134 "id" : 837,
135 "title" : "Let's Encrypt: Just What App Makers Need To Secure Their Apps",
136 "date" : "2015-12-09 01:00:53"
137 },
138 {
139 "excerpt" : "Learning how to build your own apps can be intimidating at first, but once you get started it's incredibly easy. In this blog post I've set out 9 tips and best practices for building your first killer app. It's a step-by-step framework for getting from idea to app!",
140 "permalink" : "https:\/\/learnappmaking.com\/quick-tips-killer-app\/",
141 "categories" : [
142 "Guide",
143 "Q&A"
144 ],
145 "tags" : [
146
147 ],
148 "content" : "<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2015\/12\/2_green.png\">\r\n\r\n<p style=\"margin-top: 50px;\"><em>Do you have an app idea but no clue how to get started?<\/em><\/p>\r\n\r\n<p>Learning how to build your own apps can be intimidating at first, but once you get started it’s incredibly easy.<\/p>\r\n\r\n<p>In this blog post I’ve set out 9 tips and best practices on getting started with your app. It’s a step-by-step framework for getting from idea to app!<\/p>\r\n\r\n<p>Each of the 9 tips and best practices are applicable, whether you’re just starting out with apps or more experienced. It doesn’t matter if you’re looking to learn iPhone development, or you want to just design your own app – these tips will help you, definitely!<\/p>\r\n\r\n<p>A quick overview:<\/p>\r\n\r\n<ol>\r\n<li><a href=\"https:\/\/learnappmaking.com\/quick-tips-killer-app\/#what-tools\">What tools do you need to build apps?<\/a><\/li>\r\n<li><a href=\"https:\/\/learnappmaking.com\/quick-tips-killer-app\/#meet-app-makers\">How can you meet like-minded app makers?<\/a><\/li>\r\n<li><a href=\"https:\/\/learnappmaking.com\/quick-tips-killer-app\/#poor-design\">No million dollar app idea has a poor design<\/a><\/li>\r\n<li><a href=\"https:\/\/learnappmaking.com\/quick-tips-killer-app\/#ideation-validation\">Find out what your target audience wants<\/a><\/li>\r\n<li><a href=\"https:\/\/learnappmaking.com\/quick-tips-killer-app\/#discover-tools\">Discover the best tools for the job<\/a><\/li>\r\n<li><a href=\"https:\/\/learnappmaking.com\/quick-tips-killer-app\/#low-tech\">Try out your app with low-tech pen and paper<\/a><\/li>\r\n<li><a href=\"https:\/\/learnappmaking.com\/quick-tips-killer-app\/#beta-testers\">Test your app with beta testers<\/a><\/li>\r\n<li><a href=\"https:\/\/learnappmaking.com\/quick-tips-killer-app\/#unique-app\">Don’t try to be unique!<\/a><\/li>\r\n<li><a href=\"https:\/\/learnappmaking.com\/quick-tips-killer-app\/#aso\">Leverage your app’s traction with App Store Optimization<\/a><\/li>\r\n<\/ol>\r\n\r\n<p><em><strong>NOTE:<\/strong> Don’t miss the free <strong>“Build Your First iPhone App”<\/strong> video guide at the end of this post. It will show you how to build your first iPhone app in just one hour.<\/em><\/p>\r\n\r\n<h3 id=\"1.whattoolsdoyouneedtobuildapps\">1. What Tools Do You Need To Build Apps?<\/h3>\r\n\r\n<p><a name=\"what-tools\"><\/a><\/p>\r\n\r\n<p>iPhone apps are made with these tools:<\/p>\r\n\r\n<ul>\r\n<li><strong>Xcode and Interface Builder<\/strong>. Both are Mac-only software programs you use to code and build your app.<\/li>\r\n<li><strong>iTunes Connect and the Apple Developer Program<\/strong>. iTunes Connect is used to manage your app in the App Store. Purchasing the Developer Program ($ 99 a year) is required before you can do so; it’s a license. Don’t worry: you can run your app on your iPhone without the Developer Program!<\/li>\r\n<li><strong>Swift<\/strong>. That’s the language you use to code apps. Learning how to code is incredibly easy – you don’t need to be a math prodigy. Several online websites offer courses on learning how to code, including the <a href=\"https:\/\/learnappmaking.com\/pro-course\">Pro Course<\/a>.<\/li>\r\n<\/ul>\r\n\r\n<p>Who’s using these tools, then?<\/p>\r\n\r\n<h3 id=\"2.howcanyoumeetlike-mindedappmakers\">2. How Can You Meet Like-Minded App Makers?<\/h3>\r\n\r\n<p><a name=\"meet-app-makers\"><\/a><\/p>\r\n\r\n<p><em>Networking<\/em> is important for any business, including your business as an aspiring app maker.<\/p>\r\n\r\n<p><a href=\"http:\/\/meetup.com\">Meetup.com<\/a> is active in any city. It’s a platform for get-togethers on any topic you can imagine: cooking, foreign languages, beer tasting, graphic design, board games and of course… building apps! One of the more popular iPhone and app making meetups is <a href=\"http:\/\/cocoaheads.org\/\">CocoaHeads<\/a>, active in over 100 cities around the globe.<\/p>\r\n\r\n<p>At a meetup you can meet other app developers and marketers. Usually a meetup has a formal presentation or keynote and informal networking after the keynote. <\/p>\r\n\r\n<p>Many meetups also host <em>hackathons<\/em>: a day or weekend to work on your own project in a co-working environment or to invent something new with other <em>hackers<\/em> (the good kind). <\/p>\r\n\r\n<p>Hackatons help you to refine your app making skills, discover new ways of building your projects, and meet like-minded people. But above all: it’s incredibly fun and exciting!<\/p>\r\n\r\n<p>Multiple million dollar apps started at a hackaton…<\/p>\r\n\r\n<h3 id=\"3.nomilliondollarappideahasapoordesign\">3. No Million Dollar App Idea Has A Poor Design<\/h3>\r\n\r\n<p><a name=\"poor-design\"><\/a><\/p>\r\n\r\n<p>It’s true: would you install an app that has a poorly designed graphics? <em>Design matters!<\/em><\/p>\r\n\r\n<p>It’s often said that coders aren’t good designers, and designers aren’t good coders. However, the fact that many people specialize in just one thing, doesn’t mean they only must do that one thing! <\/p>\r\n\r\n<p>As an app maker you can learn anything, be it marketing, programming or design. You live in a world of abundance, where it’s easier than ever to pick up a new skill online. Many websites are devoted to teaching you how to become a master of your craft.<\/p>\r\n\r\n<p>A coder’s superpower is analytical thinking and solving problems. Designers’ superpowers are creativity and the ability to see the world through the eyes of a user. <em>Why wouldn’t you mix the two?<\/em><\/p>\r\n\r\n<p>Make sure you learn about design, and not only about programming – and vice versa. A successful app maker is proficient in three disciplines: coding, design, and marketing.<\/p>\r\n\r\n<p>Speaking about marketing…<\/p>\r\n\r\n<h3 id=\"4.findoutwhatyourtargetaudiencewantsanditeratetowardsit\">4. Find Out What Your Target Audience Wants And Iterate Towards It<\/h3>\r\n\r\n<p><a name=\"ideation-validation\"><\/a><\/p>\r\n\r\n<p>Ideation, validation and iteration are key to your app’s success. Here’s why.<\/p>\r\n\r\n<p>Back when I still studied we worked in group projects as part of the curriculum. Usually we would apply the management method known as “Waterfall Management”. <\/p>\r\n\r\n<p>It goes like this:<\/p>\r\n\r\n<ul>\r\n<li>You get started on the project<\/li>\r\n<li>The designer in you starts making up wild designs<\/li>\r\n<li>The coder in you starts coding a cool feature of the app<\/li>\r\n<li>The marketer in you starts dreaming up assumptions and future app deals<\/li>\r\n<\/ul>\r\n\r\n<p>You don’t manage your time, prioritize features and everything you do is based on possibly false assumptions. That’s no way to build a successful app business!<\/p>\r\n\r\n<p>The proper way to run your own app project is this:<\/p>\r\n\r\n<ul>\r\n<li>First, start with an initial idea or problem you want to solve. Ideally, you find your target audience first and then survey them for potential app ideas second. You base your app idea of off a solution to a problem. This step is called <em>ideation<\/em>.<\/li>\r\n<li>Then, you build a simple sales page or product offer. You put it in front of your audience (with content marketing, advertising, outreach, etcetera) and measure how your potential customers respond. Are they signing up for your offer or do you need to refine your app idea? This step is called <em>validation<\/em>.<\/li>\r\n<li>Finally, if the validation is a success, you start working on the actual app itself. Build your way from mockup to graphic design to development to publishing your app.<\/li>\r\n<\/ul>\r\n\r\n<p>Don’t start building “blind” without testing what your market wants first. It’s a waste to spend time on building an app no one wants! Yet “Build it and they will come” is a popular myth among beginner app makers.<\/p>\r\n\r\n<p>When you’ve built the first iteration of your app, you start with step one again. Find out what your current and potential customers want, and then build it. This way you don’t have to build a feature-heavy app before you get some traction, which greatly reduces the investment you need to make before you see results.<\/p>\r\n\r\n<p>You can reduce the time you spend on building your app even more by using the right tools for the job.<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2015\/12\/tips_killer_app_1.jpg\" alt=\"An App Sales Page\" \/>\r\n<figcaption>An App Sales Page<\/figcaption>\r\n<\/figure>\r\n\r\n<p><strong>If you like this post… you’ll love this free video guide… check it out below.<\/strong><\/p>\r\n\r\n<div class=\"ctabox centered\">\r\n<h5>Build your first iPhone app in 1 hour. Its super easy!<\/h5>\r\n<p>Sign up for the free video course to get started on your first app. Learn about app ideation and validation, and build an iPhone game in one hour. No coding experience required!<br>\r\n<a href=\"http:\/\/learnappmaking.com\/\" class=\"btn btn-large btn-yellow trigger-wbounce centered\">Yes, Show Me How!<\/a><\/p><\/div>\r\n\r\n<h3 id=\"5.discoverthebesttoolsforthejob\">5. Discover The Best Tools For The Job<\/h3>\r\n\r\n<p><a name=\"discover-tools\"><\/a><\/p>\r\n\r\n<p>When you walk into a craftman’s workshop, what do you see? All kinds of tools and material, carefully laid out in an organized system. When the craftsman isn’t working, he keeps is shop clean and tidy. Moreover, he doesn’t use a hammer to get screws into a wall, right?<\/p>\r\n\r\n<p>Even though you have a digital workshop, it doesn’t mean your workshop shouldn’t be kept neat and clean. The fact that you’re starting out with apps for the first time, shouldn’t mean you’re “just winging it”. Discover and use the right tools!<\/p>\r\n\r\n<p>Some ideas:<\/p>\r\n\r\n<ul>\r\n<li>Use <a href=\"https:\/\/balsamiq.com\/products\/mockups\/\">Balsamiq Mockups<\/a> to create a mockup, a rough sketch, of your app.<\/li>\r\n<li>Get <a href=\"https:\/\/www.sketchapp.com\/\">Sketch<\/a> to graphically design your app’s user interface. Big plus: it’s much cheaper than Photoshop!<\/li>\r\n<li>Begin with a user interface template, instead of starting your design from scratch. Download these free UI kits: <a href=\"http:\/\/www.baianat.com\/resources\/stark\/\">Stark UI<\/a>, <a href=\"https:\/\/facebook.github.io\/design\/ios9.html\">iOS 9 GUI for iPhone by Facebook<\/a>, <a href=\"http:\/\/www.invisionapp.com\/now\">NOW UI Kit by Invision<\/a>.<\/li>\r\n<li>Instead of building a custom back-en, hit the ground running with <a href=\"http:\/\/parse.com\">Parse<\/a>, a cloud-based data storage provider. Oh, and they’ve got Push Notifications too!<\/li>\r\n<\/ul>\r\n\r\n<p>Scout around to discover new tools. There’s always something out there that makes your job easier. <\/p>\r\n\r\n<p>It’s said that Google employees get to spend 1\/5th of their time on personal projects. Why doesn’t an app maker do the same? Spend some time during your weekend to discover and try out new technology.<\/p>\r\n\r\n<p>It’s not all high-tech, though…<\/p>\r\n\r\n<h3 id=\"6.tryyourappwithlow-techpenandpaper\">6. Try Your App With Low-Tech Pen And Paper<\/h3>\r\n\r\n<p><a name=\"low-tech\"><\/a><\/p>\r\n\r\n<p>OK, this is actually a lot of fun to do. <\/p>\r\n\r\n<p>Did you build a mockup of your app? Print it out on a big sheet of paper (A3 or bigger) and cut out all the individual screens and lay them out on your desk.<\/p>\r\n\r\n<p>Then, do this:<\/p>\r\n\r\n<ol>\r\n<li>Find the first screen of your app; it’s the user interface your app’s user sees first.<\/li>\r\n<li>Tap on a button or UI element of the screen with your finger. Yes, it’s imaginary! Come on, tap it, try it out…<\/li>\r\n<li>What happens now? You, the user, is most likely taken to another screen. Move over to that screen on your desk, and tap on another UI element. What happens now?<\/li>\r\n<li>Continue until you’ve played out all the screens of your app.<\/li>\r\n<\/ol>\r\n\r\n<p>So, what did you just do? You’ve effectively played out the <em>flow<\/em> of your app with a technique that’s called <em>paper prototyping<\/em>. You’re literally making an app out of paper. It doesn’t work, but you can make it work with your imagination.<\/p>\r\n\r\n<p>This exercise is great for optimizing parts of the flow of your app. Although the exercise happens in your mind, it’s incredibly <em>real<\/em> to see your app played out in reality.<\/p>\r\n\r\n<p>Don’t want to use paper? Most mockup tools, including Balsamiq Mockups, have a feature to make on-screen mocked-up buttons <em>clickable<\/em>.<\/p>\r\n\r\n<p>Oh, and it’s fun to try your paper app with friends, colleagues, and even your app’s financial investors…<\/p>\r\n\r\n<h3 id=\"7.testyourappwithbetatesters\">7. Test Your App With Beta Testers<\/h3>\r\n\r\n<p><a name=\"beta-testers\"><\/a><\/p>\r\n\r\n<p>Sometimes your app isn’t used in the way you intended. <\/p>\r\n\r\n<p>Humans can be weird and quirky. Although you designed your app with the most care and thoughtfulness, some users just don’t “get it”. Right?<\/p>\r\n\r\n<p>No, on the contrary. You don’t get it! <\/p>\r\n\r\n<p>If you didn’t test your app with real-life users, you cannot be sure your users understand how your app works! It’s not a disaster, though.<\/p>\r\n\r\n<p>It’s never too late to test and optimize. Gather friends, colleagues and family and put your iPhone in front of them. Say you want to test your app with them. Launch your app, but don’t say anything about it. <\/p>\r\n\r\n<p>Watch closely and make notes. You can record the testing session on camera or ask your test subject to speak their thoughts out loud during testing. Your goal is to get an understanding of how your users use your app, and if they understand it’s purpose and user interfaces.<\/p>\r\n\r\n<p>Look for the following two “mistakes”:<\/p>\r\n\r\n<ul>\r\n<li><strong>Quick fixes.<\/strong> What’s easy to fix and doesn’t take too much time?<\/li>\r\n<li><strong>Obvious fixes.<\/strong> What mistakes make your jaw drop, say “Aha!”, or face-palm?<\/li>\r\n<\/ul>\r\n\r\n<p>Why are they clicking there and not <em>there<\/em>!? Testing your app definitely makes it a better product.<\/p>\r\n\r\n<p>Speaking about making the best app ever…<\/p>\r\n\r\n<h3 id=\"8.donttrytomakeauniqueapp\">8. Don’t Try To Make A Unique App<\/h3>\r\n\r\n<p><a name=\"unique-app\"><\/a><\/p>\r\n\r\n<p>Creating a unique app is the bees knees, the pinnacle of perfection. <\/p>\r\n\r\n<p>When you create a unique product, customers will flock to you and go crazy begging you to sell them your app. It’s what they say: be remarkable, and people will see you. Right?<\/p>\r\n\r\n<p>Sure, they’ll see you. <\/p>\r\n\r\n<p>Have you ever bought a purple cow just because you saw one? <\/p>\r\n\r\n<p>Being unique and remarkable might get a potential customer interested in you, but it won’t convince them your app is what they need. Great ideas aren’t based on uniqueness, but on usability and an end benefit for your customers.<\/p>\r\n\r\n<p>An inventor once made a wireless kettle, the iKettle. You can control it with your smartphone; set the temperature, and even schedule it to automatically turn on in the morning.<\/p>\r\n\r\n<p>This is what it doesn’t do:<\/p>\r\n\r\n<ul>\r\n<li>Pour itself into a cup and make tea.<\/li>\r\n<li>Walk to your bedroom, instead of you to the kettle.<\/li>\r\n<li>Put water into the kettle before boiling.<\/li>\r\n<\/ul>\r\n\r\n<p>Yes, that’s right! It doesn’t really solve anything! The only problem it solves is <em>turning on the kettle<\/em>, which is an action that literally takes one second to do.<\/p>\r\n\r\n<p>The iKettle is extremely unique: no one has thought of it, and no one has made one before it was invented. Unfortunately for the makers, no one wants it either because it has no real use. The pain point it solves isn’t worth the $ 100 price tag.<\/p>\r\n\r\n<p>Yes, you’re paying $ 100 to get out of bed in the morning because your WiFi-enabled kettle is done boiling water you put into it yourself…<\/p>\r\n\r\n<p>Don’t try to create a unique product. Invent an app your customers can benefit from, a product they want to use. Solve a problem, instead of desperately attempting to create something no one has ever seen before.<\/p>\r\n\r\n<p>Then, assuming you’ve gained <em>traction<\/em>…<\/p>\r\n\r\n<figure>\r\n<img src=\"https:\/\/learnappmaking.com\/wp-content\/uploads\/2015\/12\/tips_killer_app_2.jpg\" alt=\"A Purple Cow by Richard Elzey\" \/>\r\n<figcaption>A Purple Cow by <a href=\"https:\/\/www.flickr.com\/photos\/elzey\/5967239803\/\">Richard Elzey<\/a><\/figcaption>\r\n<\/figure>\r\n\r\n<h3 id=\"9.leverageyourappstractionwithappstoreoptimization\">9. Leverage Your App’s Traction With App Store Optimization<\/h3>\r\n\r\n<p><a name=\"aso\"><\/a><\/p>\r\n\r\n<p>Every day 300+ new apps get published in the App Store. All the app stores together hold over 4 million apps. <\/p>\r\n\r\n<p><strong>4.000.000<\/strong> apps fighting over a user’s attention…<\/p>\r\n\r\n<p>The majority of those apps does not have one single rating or review. These apps are called <em>app rot<\/em>, and you do not want to become one of them. <\/p>\r\n\r\n<p>The App Store is a full and very crowded place. Every app, useful or not, is preying on the attention of potential users.<\/p>\r\n\r\n<p>With App Store Optimization (ASO) you can stand out from that crowd. Using ASO tactics and strategies, you can speak to your target audience in a clearer voice. Moreover, with ASO you can find out what tactics <em>convert<\/em> into paying customers.<\/p>\r\n\r\n<p>Ideas to get started:<\/p>\r\n\r\n<ul>\r\n<li><strong>Pick a good name<\/strong> for your app and create an identifiable icon for your app. The best app names are short, memorable, and include a keyword that describes your app’s purpose.<\/li>\r\n<li><strong>Create good app screenshots<\/strong>. The App Store search results page shows two screenshots for your app, so make them count. Make sure to include a caption above the screenshot that highlights a pain point and your app’s solution for it.<\/li>\r\n<li><strong>Write a compelling App Page description<\/strong> and do keyword research into the kind of words your users use and search for. One of the best tools for ASO is <a href=\"http:\/\/appannie.com\">AppAnnie<\/a>.<\/li>\r\n<\/ul>\r\n\r\n<h2 id=\"recap:whatsyournextstep\">Recap: What’s Your Next Step?<\/h2>\r\n\r\n<p>Turn your app idea into a profitable business. Here’s a quick recap on how to get started:<\/p>\r\n\r\n<ol>\r\n<li>What tools do you need for the job? Start with Xcode and Swift.<\/li>\r\n<li>How can you meet like-minded app makers? Find a meetup with Meetup.com.<\/li>\r\n<li>Make a stunningly beautiful app design!<\/li>\r\n<li>Don’t forget to validate your app idea. Is this what your users want?<\/li>\r\n<li>Discover the best tools and save time with done-for-you templates.<\/li>\r\n<li>Try out your app with the low-tech pen and paper exercise.<\/li>\r\n<li>Put your app in front of beta testers to find out what doesn’t work.<\/li>\r\n<li>Don’t try to make a unique app!<\/li>\r\n<li>Leverage your app’s traction with App Store Optimization.<\/li>\r\n<\/ol>\r\n\r\n<p>Now that you’ve set up a solid plan for <em>crushing it<\/em> in the App Store, what about building your first app for iPhone?<\/p>\r\n\r\n<p><strong>If you like this post… you’ll love this free video guide… check it out below.<\/strong><\/p>\r\n\r\n<div class=\"ctabox centered\">\r\n<h5>Build your first iPhone app in 1 hour. Its super easy!<\/h5>\r\n<p>Sign up for the free video course to get started on your first app. Learn about app ideation and validation, and build an iPhone game in one hour. No coding experience required!<br>\r\n<a href=\"http:\/\/learnappmaking.com\/\" class=\"btn btn-large btn-yellow trigger-wbounce centered\">Yes, Show Me How!<\/a><\/p><\/div>",
149 "thumbnail" : "https:\/\/learnappmaking.com\/wp-content\/uploads\/2015\/12\/tips_killer_app_2.jpg",
150 "author" : "Reinder de Vries",
151 "id" : 839,
152 "title" : "How-To: 9 Quick Tips To Build Your First Killer App",
153 "date" : "2015-12-07 18:49:06"
154 }