Say you are hanging out with a fellow developer one day and the two of you come up with a really cool application idea that could be useful to a lot of people.... Something that is definitely a medium to large-sized application project.
What hard, tangible steps do you take from that point on as soon as you get back home?
Do you research to see if the idea already exists? If it does, do you investigate or perhaps download the existing application and find its weak and strong points?
Do you open up a Word document and start jotting down notes?
Do you begin coding without fully understanding what it is that is needed?
What do you do if there is a specific area of the program that is required that you have never dealt with before? Do you create a small program just to learn that area?
Walk us through your process of investigating a problem, finding a conceptual solution, and then transmitting that into a software application. Try to specify timeframes as well.
Josh Montgomery
web developer
In my case, most often than not, someone else has already done it. So the very first thing to do is to Google the thing down and track how many other people have thought of the same idea or at least have touched on it.
I usually end here. Someone else would have had their full attention and time on it. This changes if it is open source. IF it is an open source project (or I do get to find an open source alternative) and I REALLY like and believe in the project, then I see how I can help. Programming starts as soon as:
a) I know I can help out (i.e. it is in a language I know and am proficient at) b) I can easily set the project in my local machine
Now, if for some reason no one has done the idea yet or it is not available in the country I am at, then I start looking for holes in it. Why has no one done it? How hard is it to setup? Is this really going to change stuff?
In my current project, I have answered those questions and the next step was to make a prototype of the unknowns. "I don't know how to do X with Y", or "Not sure if it's possible to do G". To answer those, a prototype is needed. I set out to do exactly that one thing I don't know about. Nothing more, nothing less.
When I got to prove the prototype, I then started a Gitlab project and discussed with my partner on what we need to do etc. Then I start a Kanban board of the features that are only absolutely needed (a.k.a. the MVP or the Minimum Viable Product). That should just number under 10 issues in Gitlab then I set out to do them in order by priority.
I am currently at that stage, but I reckon in the future it's more of just launching the MVP and see if it succeeds, iron out bugs, and adding more features etc.
If it's big then code is the last thing I write. First I draw a mental map of the project [probably also a whiteboard map]
I'll need answers to:
Filling in a Wiki/Project plan is probably the next step along with a whitepaper outlining goals and non-goals.
[To Be Continued]
Great question!
If this is a money venture, my first task would be to research the idea and see how it's been done before, and then I would analyze how it could be made better. If I feel it can be done better, then I just completed my first step: research.
If I'm using this for learning purposes (and even if it's for $$), my first couple of steps would be to first write out overall specs on basic features I'd like to see built in. These would be based off of more research, keeping in mind things ARE going to change (nobody gets the specs right the first time). Now that I have an overall idea of what I want, I start thinking about architecture. What language(s) do I use? Do I want to use something that's quick and dirty, and get an MVP stood up as soon as possible? Or do I want to learn a new technology? Perhaps time is on my side and I want to do everything "right" the first time through...What's the best database to use? Once the general technologies are chosen, that's when I begin the coding process.
TL;DR - Research is the most important thing to me when diving into a new project. The more knowledge you have, the easier it'll be to do the actual work :)