So you have an idea but you can’t code(yet) and you don’t have a budget to hire someone to build it. Perhaps you’ve tried to find a developer with a passion for the same ideas/problems as you but you’ve found it difficult to find someone willing to work for free; let me tell you, you’re not alone. The chances that you’ll find someone willing to spend time working on your idea for free is highly unlikely, especially if all you have to show for it is a few words or a sketch on a napkin.
If you’re serious about your project and want to make progress, it’s time for you to learn to code.
Log and develop your ideas
Add to and refine your ideas constantly. Every time you think of a new idea or something that might make a specific product or solution work better add it to your notes. Everything should be logged; you never know when you’ll be able to put an idea into production or turn it into a business.
Choose your first project
It’s important that your first project is achievable, this means it should not be overly complex. The purpose behind coding up your first project is to gain experience and learn the core skills required to build software.
A key principle to remember here is that done is greater than perfect.
The first step towards building your functional software is figuring out how your system is going to look and how it’s going to work from an information flow and user perspective.
Start mapping out the user interface. You could use paper and pen or get a design program, anything to help you visualise your idea better or explain it to someone else. I personally like Omnigraffle and Sketch. You could also try Visio, Inkscape, Balsamiq Mockups or any other design program you feel comfortable using.
It’s important to map out how you think the system will work, to help you figure out what fields you need to cater for and what buttons need to go where. Remember it’s all just digital data so it can be changed later and you’ll always have better ideas once you’ve started actually coding and seen it come together.
Get intimate with version control
Most people would probably tell you to jump into code, before you do that I’m going to recommend you learn about version control. Git and Mercurial are popular forms of DVCS. You can find lots of really cool open source projects on GitHub and BitBucket so make sure to sign up for accounts on both platforms. Once you’ve signed up, it’s time to set up your first repository. I recommend you use BitBucket in the beginning as it offers unlimited private repositories. Make sure to check out Gitflow.
You’ll never know everything about programming, so you might as well accept that now, but that is not an excuse for you not to try cram as much knowledge and coding related information into your brain as possible.
Start building the interface
Spend as much time as you can learning each day, do tutorials, watch tutorial videos while eating breakfast and dinner and practice writing basic code. Build up a library of personal code snippets.
Once you’ve worked through the basics it’s time to start building the screens of your app. Take your mocked up designs and convert them into plain HTML and CSS. Search as you go and learn how to make the static HTML and CSS do what you want it to on a desktop, tablet and mobile. Get friends and family to look at it and give you feedback.
Design the database
Once you’ve coded up your interface and got it working in a browser it’s time to start designing your database. Use the fields on your screens as a guide to determine what fields you need to cater for. Spend some time learning about SQL and NoSQL databases as well as database engines. Do some research into MySQL, Postgre, MS SQL, Mongo and CouchDB.
For purpose of your first project I recommend you work with MySQL as it is supported on most major hosting platforms so you should be able to pick up a cost effective package for production and/or testing.
Make sure to spend some time learning about normalisation but don’t over architect at this stage, you’re aiming to get something finished, you can always refine it later if you want to.
Let’s get functional
Now that you’ve got your screens coded up and your database designed it’s time to start converting the static files into functional code. Remember the code can always be changed so the point is not to be perfect but to get functional as quick as possible so you can start iterating and refining the system.
I recommend you start off learning PHP and then consider experimenting with Node.JS and Ruby on Rails. PHP is a great gateway language to get into coding. You can build some really cool projects with it and there are a lot of really great open source projects running on it.
You’re essentially going to be building a collection of CRUDs. As you get more comfortable with coding you can start to leverage frameworks, learn about object orientated programming and MVC based methodologies.
Don’t be overwhelmed by what needs to be done. Make a list and start building functionality, one piece of functional code at a time. It probably won’t work at first and that is ok, JFGI and you’ll learn how to fix it. Make no mistake you’ll need to read through a lot of content to find the articles that are relevant to your problem and this is how your general programming knowledge will improve. Through this process you’ll learn more about real life programming than any university will teach you.
Testing is critical, you need to make a habit of testing your code and making sure it will works across all browsers.
Should you be building for production?
I don’t personally code on our projects. This has pros and cons. I rely on my team to deliver projects — this is a con because it means I’m dependant on someone else. I can spend my time working on bringing in new work and building the business, which is obviously something I can’t delegate so in this case me not coding is a good thing. Sometimes when we’re under a tight deadline, I really would like to just finish off a feature myself but long term it’s not the solution strategically.
I recommend you learn as much as you can about development, not to become the core developer on your team but to know and understand the limits of technology, even if only broadly. This will help you shape your product’s vision. You’ll be able to detect a bullshitter much easier when you’re on the look out to hire developers or technical staff. Your team will respect you because you’ll be able to talk to them in their language and keep track.
In the beginning, being able to build something yourself really helps a lot as it’s sometimes easier to build a prototype than to explain what you’re thinking in words.
Long term, a partnership might be the way to go but for this to work you need to know what you’re bringing to the table and what you need from the partner.
In some cases it might be better for you to hire a junior developer to work with you and follow your instructions. Your rate of development will not be as fast as it would be if you had a senior team but your costs will be low and you’ll have a lot more control over your company/product in the long term. You could find a university graduate willing to work on projects for a really good rate and as you make money out of the project you can pay them more. The other alternative is to use your prototype as a means of explaining your requirements to an outsourced development agency, like MyEcommerce. :)
Here’s a list of resources to get you started
Image production, manipulation or mockups: (Different strokes for different folks)
Text editors: (everyone has different taste)
Server side Languages:
http://www.python.org/ (for advanced cross platform programming)
http://www.php.net/ (server side scripting language)
Browsers: (it’s good to test locally in as many browsers as possible)
http://www.mozilla-europe.org/en/firefox (make sure to check out Firebug)
http://www.google.com/chrome (make sure to check out DevTools)
http://www.csszengarden.com (some really cool stuff)
http://www.w3.org (web standards and resources for learning)
Content Management Systems: (either use as is, modified or learn from them, they’re opensource)