I am taking up a small-scale freelance project and need some help from experienced developers.
My background: I have decent experience with Core Java in the past but have been working in C++ for the last 2 years. I have received training in some Java EE concepts/frameworks like struts, servlets etc. My knowledge of available technologies is severely limited, but fundamental programming ability is high.
The project: I am building an ERP system from the ground up for a 30 person organization in the trading sector. The system will be built module (like CRM, inventory management etc) by module, and will be quite simple in terms of functionality. The true challenge is in building a product for very novice users and understanding their requirements correctly.
Approach so far: Since most of the use-cases can be solved by using the MVC approach, given my past familiarity Java (plus how easy it was to use), and the familiarity most people have with browsers, I want to build a web application that will be hosted within the company's intranet. This is the only design decision so far.
Questions: 1) This is the first time I'm embarking on an individual project like this, any advice is greatly appreciated.
2) What set of technologies (Java frameworks?) are a good fit for this project? My front-end skills are very low, and I want to minimize the efforts there.
3) The product will be incrementally delivered. How can I achieve this? How to design to support upgrades?
4) My knowledge of packaging an application for release and installation is almost null. Any resources for learning this? Specifically, a DB like MySQL will be required on the host machine, how to package this?
5) One of the biggest challenges is that the users are not at all tech-savvy and will not be able to deal with failures. How can I guarantee a very robust end-product, with minimal number of outages that require them to contact me (and lose access to their ERP in the time being) ?
6) How do I select a server (tomcat? JBoss?) to be well-suited for this project?
7) I remember ORM being powerful but difficult to implement. Is it really important? Or should I just use JDBC method calls to execute queries?
8) Any thoughts on creating back-ups (to prevent loss of business data) and logging?
I took up this project to learn and because I am passionate about this giving customized solutions (want to turn this project into a reusable product and build a career out of it). Please share your expertise on the above questions and any concerns that my inexperience could have caused me to overlook. Also, any relevant resources that would be really useful.
Well, you certainly have a basic handle on the different issues you'll be facing. What you wrote shows both your inexperience and the kind of attitude you'll need to overcome the challenges you face because of it.
Let's start with the positives:
1. You realize that this needs to be delivered incrementally.
2. You are asking some good questions
3. You are willing to admit your lack of experience
4. You are passionate
Causes for concern:
1. You need to revisit your understanding of ORM (Object-Relational Mapping). JDBC and ORM are not mutually exclusive. If you use straight JDBC, you are basically doing ORM manually as opposed to doing it with a framework like Hibernate.
2. ERP systems are complex and complicated. Sure, you may think it's simple at first but that view will be quickly shattered when you start full-blown development.
3. A DB like MySQL already comes packaged. You need to install it on a host machine. You have to do this as part of your deployment.
4. Selecting a server: depends on how much money you want to spend and what kind of features you need on the server. Also, what level of experience/expertise do you have with installing, configuring, securing, maintaining that particular product?
5. Technologies: I like the Spring Framework. It's very comprehensive and mature. I definitely recommend a build and continuous integration system. Build: Maven or Gradle. CI: Hudson/Jenkins. Monitoring and stats: Sonar. Version control: Git or Subversion.
6. Front end development: Spring Roo or Grails might be options to consider. There will be a learning curve.
7. Thoughts about backups: Yes, definitely needed.
8. Logging: SLF4J and Logback
Last but not least: for Pete's sake, get someone to help you! This kind of undertaking is not for the faint of heart and it has the potential to either launch your career or scuttle it before you've even left the dock.