How Would You Do This?
(I hope I'm posting this in the right place...)
Recently, a task fell upon a co-worker and I to come up with a somewhat complex project (complex for me, anyway). I am honestly at a loss as how to proceed with it, so I'm asking experienced developers for their input and advice.
Here's the project:
Create a web interface for displaying multiple variables visually, like on a map.
The variables would come from a database, i.e. MySQL or something similar. The user would select whichever options they would wish to see, such as GPS coordinates plotted out over a timeframe of several days. Once selected, an on-screen map would show these points plotted along with additional details specific to that point, either as a pop-up rollover or in a sidebar (similar to GMaps where they list various options on the side).
Since this will also include multiple user data, another option would allow users to see things such as crowd or traffic density in the form of a color range map overlayed onto a regular map. Again, the user may choose various options, such as time of day, etc, to pinpoint specific moments in time.
There are other options, but this is pretty much the jist of it. If you need more information please feel free to ask. However, because of the nature of this project I may not be able to answer questions with specific details. Don't worry, I do not work for the NSA. :p
Thanks in advance for any of your feedback!
Caveat: I am by no means God's gift to the software architecture world. Anyway...
Divide and conquer. Break the application down into separate components that you think can be developed individually. Decide which components seem to be the highest risks (complexity, importance, etc.) and start analyzing them, possibly breaking them into sub-components. Look to see if there are already solutions out there you can use (libraries, complete applications, web-base APIs, whatever) to see if you can avoid reinventing each and every wheel.
Always look to implement loose-coupling between components, so that changing one does not impact others. Let the requirements drive what technology you choose (language, framework, database, etc.), not the other way around. Whichever existing apps/libraries you find that support your needs may help you to decide which underlying technologies to use.
Thanks for the reply. Indeed, divide & conquer is a great idea...surprised I didn't realize that earlier (course, given the scope of this project it all seemed very overwhelming at first).
What language would you recommend for the server-side? I'm seeing PHP as being the more commonly used language out there, but I'm also seeing PERL and ASP being an option.
Thanks again for all of your input!
IMO, which server-side language to use is more a matter of personal preference than technical merit. All web servers are fast these days, with plenty of memory and disk space, so language performance is rarely an issue. Again, if you find an existing solution out there for one or more of your critical components that uses JSP and you're comfortable working with that, it might be the way to go. If, on the other hand you find a decent Ruby solution and a decent PHP solution, but you're good with PHP and have never used Ruby, PHP might be the way to go (unless your schedule and budget permits you to use this as an excuse to learn Ruby ;) ).
If you are planning on hiring any new people to work on this, you might want to find out what their preferences and strengths* are before locking yourself into one solution.
* If you hired me, I'm sure I'd tell you PHP with a PostgreSQL database is the way to go. :)
Thanks again for your reply!
I'll definitely have to keep doing some research on this, but your advice has at least pointed me in the right direction, and given me some ideas on how to proceed.
Again, thanks so much!