Commentary on Outsourcing Enterprise Java

Some comments on Yakov Fain's viewpoint in the February/2006 issue of JDJ.

What CIOs Should Know About Outsourcing Enterprise Java
— Your manager Frank started the meeting by saying that the budget for the new project had been approved, but half of the project will be outsourced to a great team from overseas. Can you imagine, their rates for Java programmers can go as low as $15 an hour!


First, there are some legitimate reasons why a CIO chooses to outsource a software development project. If a software project needs more resources than what is available in house, or if it requires skill sets that are not available in house, then outsourcing it may be a good option. Even if there are resources in house, a CIO has to consider outsourcing if it can shorten the development cycle or if it can complete the job at lower costs. This is all part of the CIOs responsibilities.

The CIO also must consider and present the risks in areas of security, IP protection, and yes, software quality. In addition, there are different project risks for outsourced projects vs. inhouse ones. The problem with these risk areas is that they are very difficult to quantify and even more difficult is the task of comparing the risks of an inhouse vs outsourced implementation. Bottom line is, senior management expects that the CIO can mitigate risks w/ whatever direction he/she sponsors for a project. Very often, the choices come down to successes and failures of previous projects. If the in house team is largely successfuly, then the CIO won't have to look outside. If the team is very strong at managing outsourced projects, then the CIO will lean in that direction.

In terms of project costs, CIOs typically leave these calculations to the project managers that will lead the project. The CIO is ultimately responsible for the business deliverable and for the full cost of the project including the 'hidden' costs that Mr. Fain lists in his article and many other costs. So, it's their job to review these costs and make sure (sometimes with the help of others....) accuracy and integrity. If a CIO represented a project's cost/timeline as 'the cost/time it takes for the offshore team to develop and deliver the code', he/she is going to have a lot of angry business managers.

If your Manager or CIO decides to outsource a project, my suggestion to Developers is to be a team player and do your best to make the project succeed. If you're a team player, your managers are going to give you more responsibilities and challenges. In Mr. Fain's article 'John' reports that there are significant code issues. The problem is - this issue surfaces at month 6 which is way too late. Why hasn't John reported this earlier? Why didn't Frank present coding standards to the outside team and institute regular code reviews earlier in the process? While the outside team may have bad coding practices, these examples also point to problems with the inhouse team's ability to manage outsourced projects and possibly other collaboration and communication issues.

I've managed several offshore projects. There are definitely challenges involved. It's not smart for all organizations or all types of projects, but it is something that businesses need to consider. So are software developers going to adapt to this type of globalization? More on this in future blog entries!
continue reading "Commentary on Outsourcing Enterprise Java"

Designing Table Joins

Table joins are on my mind today.

The site I'm working on, TripConnect, allows users to click on places that they've visited. When you register you're presented with a page listing out aprox 1000 locations that you can click on and say I've been there. The site is a travel advice network, so when you click on a location, you're essentially telling people in your network that you've been to the location and may be able to provice advice. Other pages on the site let you rate these places and add travel reviews.

Here's a link to my travel profile so you can see what I mean.

Anyway, it turns out that users love this feature and click on lots and lots of places. But this poses somewhat of a technical challenge. We have users in one table and the locations they clicked on in a related table. If we have N users and each user clicks on M locations, the table that stores the locations for each user will have N*M rows. Trust me, this is getting to be a big number!

This is just one example of the many:many joins that I deal with and I'm still wrestling with good ways to design the structures and associated queries for this type of data. Feel free to comment here if you have some ideas!
continue reading "Designing Table Joins"

Two Great Firefox CSS Plugins

Here are two extensions that we use in our Dev enviroment to simplify CSS editing and testing

View formatted source - will allow you to view any page and see the full CSS definitions for any HTML element. Great for debugging and discovering the source of a style definition.

Note: The download won't work in FF1.5+. To get around this issue, download the extension and save locally. Then, open the extension with a Zip extractor and edit the .rdf file. You'll see a param for the max FF version. Modify this to the latest version (or higher if you want to protect yourself from having to repeat this exercise) and save back into the .xpi file. Then, load this extension.

I have no issues running this extension in FF1.5.

EditCSS - Great tool to edit the CSS file for any live page. It opens as a sidebar.
continue reading "Two Great Firefox CSS Plugins"

Top 5 Eclipse Features for Java Programmers

This is not a comprehensive list. The best part of Eclipse is that its a great 'learn as you go' IDE, so this blog entry is great for beginners. If you haven't tried using one of these features, I strongly recommend giving it a shot!

1. Content Assist and Parameter Hints
This is a commonly used feature, so I won't elaborate. V3.X has support for this in JSP editing

2. Snippets

Snippets can be used to create small code templates. Try using this for headers of JSP files, try/catch blocks, or other code templates.

3. Making the most out of search

Use F3 'Open Declaration' to find the declararion of a method or use Ctrl-Alt-H for Open Call Hierarchy'. Great tools to help you refactor code.

4. Synchronization with CVS

This is a big feature in itself, but the best part is that CVS exploring, checking in, and cvs diff are all integrated into Eclipse.

5. Refactoring -

Again, this is a big feature. Try using Eclipse to Generate Getters/Setters or Create Constructors as a standard practice.
continue reading "Top 5 Eclipse Features for Java Programmers"

JavaScript, CSS, and Ajax

It amazes me how relatively crude the combination of css, javascript, dhtlm, and now Ajax really are as a development platform for dynamic web based interfaces. That is, especially when you compare these technologies to the IDEs used to build thick client interfaces.

I'm not going to go ranting into specifics but I'm sure all of you have you're favorite gotchas, tricks, browser hacks, and prized workarounds.

I was happy to see the annoucement of some form of standard IBM spearheads AJAX tools at Eclipse for plugging in Ajax platforms into eclipse.

Then again, my prediction is that both Microsoft and Google (and possibly others) are moving toward a thicker client browser. The development languages may still be javascript/css/ajax, but they could build a higher layered UI library directly into the browser. If they do this property, it would make it much easier to build web based thick client business application that use the browser as a front end. If anyone chooses to do this, I really hope they make this a standard and open source library.

Until then, it's back to tinkering!
continue reading "JavaScript, CSS, and Ajax"
Share

About Isaac Sacolick

Isaac Sacolick is President of StarCIO, a technology leadership company that guides organizations on building digital transformation core competencies. He is the author of Digital Trailblazer and the Amazon bestseller Driving Digital and speaks about agile planning, devops, data science, product management, and other digital transformation best practices. Sacolick is a recognized top social CIO, a digital transformation influencer, and has over 900 articles published at InfoWorld, CIO.com, his blog Social, Agile, and Transformation, and other sites. You can find him sharing new insights @NYIke on Twitter, his Driving Digital Standup YouTube channel, or during the Coffee with Digital Trailblazers.