I have taken on a job as a contract developer where I am having difficulty learning the application, and I feel that I'm in over my head. I've discussed this with my client/employer and he is, none the less, interested in trying out the relationship to see how it works out. My client is a small business with around 100 employees, the application is critical to the business operation and I am the only developer.
I am posting here in hopes of getting opinions on the sanity of the environment and application. Is my inability to pick up the workings of this application due just to my own ignorance, or does this application and/or its environment have too many tell-tale signs of an unmaintainable app?
First, a little about may abilities: ------------------------------------
I am an intermediate level developer having several years experience in VBA for MS Access, Cold Fusion and PHP.
In the Java world, I have intently studied Java and GWT at home for the past year, but have no production experience with Java. I am comfortable with Eclipse and can import or create fairly complex Java projects (from books, tutorials, etc), get them compiled and running on Tomcat. I have a proven ability to learn and apply from books, web sites, etc.
Some of the Java books I have studied:
Head First Java Head First OOA&D Head First Design Patterns Google Web Toolkit Applications Pro Web 2.0 Application Development with GWT Spring Recipes Google Guice SCJP Study Guide
The first two above I found to be easy, but informative. I only skimmed HF Design Patterns, but I expect this would fairly easy as well.
The GWT, Spring and Guice books were more difficult. I am able to get the example apps working and make some sense of the code, but the finer design points necessary to building my own apps with the ideas presented are still somewhat beyond my reach. I found the SCJP Study Guide surprisingly difficult.
The application: ----------------
The application is built on Appfuse version 1 http://raibledesigns.com/wiki/Wiki.jsp?page=AppFuse using Spring, Struts version 1. and Hibernate. The application uses many JSPs pre-compiled using Xdoclet and has a browser based AJAX UI built with Prototype and Scriptaculous.
The app has 420 classes and 105 .xml files and Runs on Apache Tomcat. Most of the configuration data is contained in .xml or .properties files, some is contained in the database and some is hard coded into the Java source.
The app is compiled by a complex Ant script, on the production server. I have copied the source on a local Eclipse installation but have not been able to get it to compile there due to problems getting Eclipse to pre-compile the JSP's.
There are no design or requirements documents, and no end user documentation. I do have a 16 page document that details some of the internal class/method/Spring Bean relationships and work flow.
The app runs on Tomcat 5.0 under Ubuntu Linux on a virtual machine. I see no evidence that any software patching/updates have ever been done. There is no working development/testing environment and no backup of the production application(!). An IT support person was hired two months ago and he is working on application backup/continuity, but this seems to be a low priority project, his time pretty much consumed supporting end users.
The app interacts with a commercial accounting system on a database level and downloads data from a manufacturer's web site using a complex series of wget calls. This app also builds a dynamic series of web pages which it automatically loads onto the business web site. The pages are in a master list/detail relationship and are auto generated from information contained in the app's database plus data and images automatically downloaded and processed.
The developer who designed and built this app has not been with the company for 2 years and is no longer available, The machine he used to develop the app is no longer available. I am the only developer at the company.
The task for which I was hired is to add features to this application. These features will extend the UI and Data Model in small ways and export new records to the accounting system. The problem here is that access to the accounting database is not supported (or documented) by the accounting vendor, so adding new records may be anywhere from difficult to unwise or even impossible.
Sanity check please: --------------------
Does the above sound like something that might be successfully maintained by an intermediate level developer new to JEE? Do you see any serious red flags in what I have written.
a) take it as a challenge and understand system to add functionalities. b) quit
There must be a strong reason why you couldn't learn application, is it because you are not interested or you are tired? you need to fix this first. To me it looks like the application is using common j2ee technologies and you need to spend some extra hours to understand it.
The factor which decides success/failure is 'attitude'. Have positive attitude and it works. I had worst nightmares learning sick frameworks and content management systems, however having positive attitude gives strength to fight and succeed.
Hope this helps. [ January 01, 2009: Message edited by: Sai Surya ]
Sai Surya, SCJP 5.0, SCWCD 5.0, IBM 833 834
http://sai-surya-talk.blogspot.com, I believe in Murphy's law.
This is tough since you have no professional experience with Java or Object technologies. It is a wonder why the employer does not look for someone more qualified. This may be a negative sign of the employer. Small business owners usually have trouble with recruiting the right staff to match their needs.
Since the employer seems to like you, you should probably start to think of convincing him/her to get another consultant (probably 2 or 3) to come in and help reengineer the application. Someone with more experience will be required. Make sure that you learn deeply, the business functions of the applications, focus on understanding the business requirements and build trust with the employer that you can manage the hiring of senior technical staff. You will then be more of technical project manager and will work with other consultants as they redesign the application. Have them teach you what they are doing and then you will be good to go in time.
Good luck! [ January 02, 2009: Message edited by: James Clark ]
Joined: Mar 12, 2007
Thank you both for your insightful reply. It is encouraging to have two very different perspectives arriving at essentially the same conclusion: "Make the most of the opportunity!"
I, too was concerned about why I was chosen for this position, I know they were looking for at least two months and that was only because their previous developer moved out of the area.
Having heard from both of you that the issues apparently to be considered are not centered around faults in the technology gives me encouragement to study all aspects of the application, including the role it plays in this business.
My guess: 400 classes ~ 20 packages ~ 10 packages actually used
Those with experience can conceptualize 20 components in their head.
I agree that this company wants to keep you on board. So save some grief and contract someone with 5+ years experience to refactor/document. After 1 week, this person should be able to explain every class and it's purpose.
I started with PHP too before Java and I must say the learning curve was steep. But hang in there, you're on the right track. When you get to the point where you skim through the "teach yourself in 21 days" books and understand everything, then that's when you've arrived. Now you can start to learn Java
I frequently have this problem because contracting just plain bytes. Management doesn't understand coding or engineering processes unless it is a software or engineering company. Organizations that do, rarely hire contractors and the bar is quite high for these.
Nobody writes Unit tests for these because management won't pay for what it doesn't understand the value of. Your computer will be Flintstonian which is to say a stone box with a bird in it and he's frankly no Einstein either. At first glance, doing development the right way seems exorbitantly expensive to them and that is as deep as management's interest goes. In response to this specific problem you will find:
1. Analysts? That's you. Programmer/Analyst is your job title. Because they don't want to hire Analysts, you get to do two jobs badly instead of one job well. Because there is no Analyst, your feature requests will be wildly disorganized and poorly thought through.
2. There's virtually no documentation. What documentation there is has been poorly maintained.
3. Because nobody is doing documentation, everything has to be done in a meeting. You'll often find yourself in such a meeting when it has nothing to do with you or your work, JUST IN CASE a question comes up. <sarcasm>It's not like you should be working or anything.</sarcasm>
4. Assuming you are not the only person on the project, someone will be able help you set up the Dev environment but if you ARE the only one on the project, what you should do is start working on your Monster.com resume.
5. Tests? Ch'ya, right. Forget it. There will be few if any unit tests and NO SoapUI tests.
6. Statistically 90% of projects that fail do so because of mismanagement. It's not hard to guess that the grand majority of these are contracts.
7. All of this is 100x worse if you have to work with an offshore. Since there's no documentation and everything has to be done in a meeting you will be up all night and then sleep deprived and stupid in the morning. Now try to code something. Management will treat any mistakes made as if they were your fault.
@James Collings: excellent rant! You just described pretty much every job I've had in 25 years as a contractor or permanent employee. Sadly this thread is 5 years old, so I fear your insights may be wasted in this case!
No more Blub for me, thank you, Vicar.
Joined: Sep 21, 2006
chris webster wrote:@James Collings: excellent rant! You just described pretty much every job I've had in 25 years as a contractor or permanent employee. Sadly this thread is 5 years old, so I fear your insights may be wasted in this case!
Thanks. I worked for an Engineering firm that wasn't a software organization once. They understood Engineering though and as a consequence the place was pure heaven by comparison.
James Collings wrote:I worked for an Engineering firm that wasn't a software organization once. They understood Engineering though and as a consequence the place was pure heaven by comparison.
Yeah, I worked for a software house that had a strong engineering bias for a few years and it was great. Smart and helpful colleagues and tech-aware managers, very little corporate BS, and great working conditions (it was in Germany). I'll never have as good a job again!