I'm going to write a web application that, if it is successful, will need to be "enterprise-level" -- that is, robust, secure, and extensible. Given the limitations of my current skills, what can I do to minimize design errors? Lots more inside.
Here's the deal: I'm writing a web application with a partner that is essentially a tracking and accounting program. My CS skills are primarily self-taught (I've only had the very basics of a CS education in college before I dropped out of the program), and I realize that this will mean that the design of the application will be less than perfect. The project is no-budget, so hiring experienced programmers and designers is not an option at the moment, however, in the future, I'd like to be able to bring professionals in to extend the code.
Simply, I want to build a functional proof-of-concept that will have as much reusable code as possible.
With that in mind, here are the specific questions I have in mind:
1.
Is writing such a project in PHP a foolish undertaking? PHP is currently the language I know best. I don't anticipate us needing much more power than what the language is capable of -- since it's mostly storing form data in a DB and recovering it -- but I'm concerned because I've seen other potentially successful web apps fall victim to their own popularity. I'm mainly thinking of Friendster in this case, and how seemed to fall over under the weight of its own codebase (and it's lengthy rewrite), and I want to avoid this. Is it worth the potential code mistakes I'll make writing this in something that other people consider a more "proper" language but with which I am not familar-- like Python, for example? I'm planning to use MySQL as a backend because that's what I'm most familar with (and I don't think we will need more power).
2.
Should I consider using existing libraries? For example, in a lot of the work I've done already, I've avoided using stuff in the PEAR repository because it doesn't meet the specific requirements I have. Is this a bad way of doing things? Should I instead base modules on existing libraries and extending them where they do not meet my needs? In short, is hand-rolling everything a mistake?
3.
Can you recommend some good books that will help me avoid stupid design mistakes? I've already read a lot of the Joel on Software stuff (which seems more about software PM), and I don't really think I need to read about process (or do I?). Here's what I'm planning to do: get up a barebones proto as fast as possible and have some of the audience who's going to be working with this software evaluate it and give us advice for future iterations. The spec is going to be developed by the person I'm working with who is familar with the industry, so my knowledge of the "what" that the app needs to do is taken care of, but I'll be highly involved in the "how" -- that is, developing a good and very simple (essential for our product) UI.
4.
What do I look to for security best practice? I want to take all precautions possible to make sure that the private data remains private. Backup, etc, I'll consider an IT problem, but I want to make sure that do things that are difficult to change later (like user authentication) right there first time. What's the best way to make sure passwords are encrypted in the DB and that cookies are difficult to spoof?
How do I make sure my authentication routines are secure AND not sluggish?
5.
Besides good documentation and modular structure, what's the best way to make sure that other people can work on code that I've (possibly badly) developed? I don't know if it'll be possible or smart to throw the codebase away after the prototype is completed -- if you think otherwise, please let me know.
Is it ever a good idea to just write something as a prototype (that is destined to be thrown away)?
6.
Everything is going to live on one server -- should I plan for an eventual distribution of server duties? Is this something a developer even needs to worry about? I've really never had to deal with this before, so I can't elaborate on this question.
Thanks, I'm sure I'll think of tons of questions later as answers come in. Unfortuntely, I can't really entertain any ideas of just having someone else do it because that would pretty much eliminate my participation in this project (which I don't want to do). It's not realistic either that I'll be able to somehow get enough education to meet the skillset of someone with a B.S. either, so although I appreciate responses advising that I gain some more academic experience before undertaking this project, they aren't useful for my current situation.
Anecdotal experience involving your own web application development (and business ventures!) is welcome.
posted by fishfucker at 11:27 PM on July 11, 2006