The beginner’s mind: To BIY, you must learn how to code and choose the right tools
This is the second post in a new series by serial entrepreneur Chris Heuer. Follow along as he learns to code, design, and build prototypes to create a Minimum Viable Product (MVP), transforming his startup idea into the app “Relyable” using IBM Bluemix® and more. Catch up by taking a moment to read his first post.
The last few weeks have been very challenging on a number of fronts, just as any new beginning or period of transition is going to be. I am truly FEELING the resistance, pain, and fear of the path on which I have embarked, especially in such a public way. But I’ve made a commitment to do just a little every day and take a big step each week, so that is what I have continued to do, even though some days I take smaller steps than others.
As I have been ramping up my effort to grasp the fundamentals of coding and light the path for other entrepreneurs, I have faced a huge number of decisions, many of which have consequences I can barely comprehend. It can seem overwhelming (because it is), especially without the proper guidance and focus on the right issues. I will do my best now and in the weeks ahead to explain why I am making particular decisions and what the key consequences are as a result.
It takes more than just learning to code
I’ve also realized that taking this journey to build it yourself (BIY) is not just about learning to code. It’s about app development, user experience, design, business planning, server architecture, AND learning to code. I have a strong base of experience upon which to build. I usually don’t like picking a technology until I understand the full job requirements and needs at hand. Thankfully, I have a broad understanding of what I am trying to do, and I have a lot of these decisions already made based on prior experience and a great kickoff call with my representatives from IBM’s Bluemix, Watson, and Global Entrepreneur programs.
Over the course of this journey, I hope to set you up with not only the knowledge that you need to decide and execute on your app plans, but also set you up with suggestions for the tools that you should use to build it. This set of decisions can be daunting even for someone like me. Every person/company is different and has different needs and different preferences.
Just now, I was following up on a story about Sketch exporting to InVision for easier prototype creation, one of many tasks on my long list. I am a 22-year Adobe Photoshop/Illustrator user, so I had never even heard of Sketch before. Sketch looks awesome, but it is another learning curve for which I don’t have time. This made me realize that having an idea and wanting to learn to code… well, that wasn’t the only thing some of you are going to need to learn. I am fortunate to have spent a lifetime as the “business guy” inside technology startups, leading the requirements development, design, and architecture of application development — everything but the coding. So despite my challenges, I have a really strong foundation upon which I am building.
From my many years of experience, I can tell you that it is important to get informed and make decisions fast; you can’t do this well or quickly and be struck by analysis paralysis. Good is good enough — you will learn more from your failures while doing than you will by reading all of this. Seek the experience of others, but make the decisions for yourself about the best setup/path. One of the key values that you need to support in your decision-making on this journey is to stick with what you know where you can so you don’t overly clutter the learning path ahead. If you have to learn too many different things at once, it will be overwhelming and you won’t be able to successfully complete this journey with me (or it will take a lot longer).
To BIY, you need to build up your knowledge and skills, which can only happen through continual effort, iteration, and failure.
Choosing your development tools
There are a plethora of tools from which to choose to move us forward in this journey and enable you to build applications, each with their own learning curve, some easier than others. So today, while we are still working on foundational understanding of coding principles, I want to share my toolbox with you. If you already have a favorite tool for doing one of these functions for you, then by all means use it, but if you don’t, you might want to check out these Mac OS tools that I will be using.
The Individual Development Environment (IDE) is usually a suite. Enterprise users often go with the free Eclipse setup, or those with more advanced needs might choose a Rational® IDE. My local laptop configuration, which two of my Alynd Advisors, Moiz Raja and Neeraj Mathur helped me configure, uses several different pieces of software, some free and some bought. The practical use for the IDE is essentially in its name: it refers to the tools you have set up to develop an application on your local, individualized computer.
For those of you who are truly beginners, you might just skip this and use the Bluemix Web IDE for managing all the code and files that make up your application.
If you have some understanding of the command line, have used Terminal on a remote server before, or are willing to dive into learning this too, here is what I am using and what I am using it to accomplish:
- XCode: This is the core Mac OS development package that everyone developing on a Mac needs to install. You install this from the Apple App Store on your laptop.
- Homebrew: More core application management tools. According to the open source project website, this is all the stuff that is missing from the Apple packages. I wish I could tell you more, but in short, this keeps the local server running and manages the file updates. I used this extensively when testing Alynd as a Ruby on Rails app. I don’t know if it will be helpful (or how much) now.
- Sublime: This is my primary text editor for writing code. It has some great WYSIWYG color coding that assists with ensuring the code syntax is done properly (in other words, it helps to prevent bugs during the code writing process).
While Bluemix manages the app code as one of its core services, you need to make some decisions about code management to ensure persistent versioning and synchronization between your server and local IDE. Trust me, you want to manage the code in a GitHub repository (repo) to ensure its integrity and to make it easy for other people to collaborate on the app with you in the future. It also keeps a record/log of all the changes that have been made so that other team members can see the path taken to the current state of the code (and maybe how to get back out of whatever bugs you might have made).
If you are just starting out, you should use IBM’s GitHub service so you can learn it and benefit from the easier integration. Click the ADD GITHUB button and enter the configuration variables from the Bluemix console for your application.
In my case, I’d like to use my existing GitHub account so I can also build onto my portfolio to show others my work in the future. This wasn’t immediately obvious because there is an IBM GitHub offering, so I will be looking into setting this up to use my GitHub account to further build my portfolio and a ledger of my coding experiences.
A simple aspect of application development planning, which is so important to do now, is to decide where to store your code locally (as well as in a GitHub).
For code storage I suggest:
- Creating a master CODE folder in Documents and including it in your regular Time Machine backups as an extra precaution.
- Within that folder, create master folders for each app/project.
- Within that, you want to create space for two versions of the code: development-local and staging. You do not need a production code space really as the MASTER branch that is running on your production server will be managed by GitHub. Once you have tested a particular branch on your development server and it is approved, you simply move (push) that code to the production server.
- Keeping everything in its place is an essential skill, worthy of the time investment required to do it right.
App planning and design
For developing the application plan and prototype, I am using the following tools and services. Get the free accounts if you’d like to learn them.
- Mindjet: I am a big fan of using mind maps for sorting through my thoughts and organizing them for planning almost everything. Even this blog post started for me in a mind map. So for the business idea, the app user experience, and even my learning path, I do it all using this app. There are free options out there like FreeMind, but I paid for the more expensive Mindjet long ago and can highly recommend it despite the price tag.
- Mural.ly: This service is free for 30 days trial and then $29 per month afterwards. You likely don’t need it unless you have a startup team, in which its great for sharing and collaborating on empathy maps and other sorts of documents. I like it a lot for a number of reasons. You can do just as well using an empathy map template like this one originally designed by my friend, colleague, and advisor Dave Gray.
- Balsamiq: There are several different design/mockup tools out there. I first learned on Balsamiq, so that is what I am using today. I use this for building screen mockups, which I then import into…
- InVision: A free service for prototyping, InVision lets me import the Balsamiq mockups and then turn them into clickable prototypes that I can share with others to get feedback and which I can use in usability testing for low fidelity prototypes.
I will be getting into this and why I made these decisions in more detail in the weeks ahead. But if you want to start working now, here are the core coding decisions and server configurations I have chosen.
- Cloud Foundry: There is less server work for me to do with this choice, which basically is a mostly automated server setup. For someone who is not really an engineer, using Containers or a virtual private server (VPS) would be fairly difficult with a super steep learning curve. If you are interested in learning more about these other options though, there is plenty out there to read about them.
- PHP: All my engineer friends love Python as a more powerful coding language, but PHP is simply easier to learn, there are more materials available online, and a great deal of sample code to build upon out there. I just as easily could have chosen Ruby, but the Bluemix team suggested PHP would be best for learning to code on Bluemix, so I am following their advice on this.
- Cloudant NoSQL: Did you know that SQL stands for Standard Query Language? It’s essentially how data is stored in a relational table (like Excel somewhat). NoSQL is used for many purposes, but particularly when you don’t know what your exact database structure will look like. There are also performance advantages, but for now, without a clear SQL schema, this is the best choice as we go through the iterative agile development process on our new app where we don’t have a fully detailed plan of what is being built.
Now we are really getting started
You know, learning to code is one of those things that truly is easier said than done. But it is possible if you have the passion and are willing to invest the effort in learning all of this. I’ve collected a lot of understanding about the logic and frameworks of app development from my time as a product manager/marketer, but I wouldn’t be here without being able to reach out to some knowledgeable folks to ask. So while I am focused on enabling more people to BIY, I am not advocating for embarking on this journey alone. That’s where the Internet and this series comes in, to provide more guidance and support to each other. I hope the insights on some of my foundational decisions is helpful, but please let me know here in the comments if you have any questions I might be able to answer.
Read my first post in the series “When all else fails, build it yourself! (BIY)” and let me know what you think.