Engage

Posted in:

I am a full-time consultant who is available to engage with clients remotely or onsite anywhere in the world (I currently hold dual-citizenship between Australia and the United States).

To discuss your specific needs, please call me on +1.650.336.5877, or email me at craig@craigsdickson.com, or use this Contact form, or download a copy of my resume from this page.

The following is an overview of the services I provide to clients:

Software Development Process Improvement

  • Coaching for Agile process evaluation, adoption or improvement, including Scrum, Lean, Kanban and Extreme Programming (XP)
  • Definition, refinement and documentation of team processes and practices
  • Definition of Quality Assurance and Quality Control standards
  • Integration of defect tracking systems with other tools and processes
  • Engagement with customers and requirements elicitation

Software Development Team Management

  • Job Description authoring
  • Salary range and benefits package definition
  • New candidate acquisition and screening
  • Team workspace design and office space evaluation
  • Skills assessment of existing resources
  • Collaboration strategies for teams

Vendor Management

  • New vendor discovery and screening
  • Vendor proposal reviews
  • Offshore vendor management, including onsite visits and reviews
  • One throat to choke multiple vendor management

Software Configuration Management (SCM)

  • Introduction of an SCM system to teams not already using one (Subversion, Git, CVS etc)
  • Subversion and CVS training
  • Subversion and CVS server installation and configuration
  • SCM process definition and documentation, including branching and merging processes
  • SCM system migration, particularly CVS to Subversion

Build Management

  • Implementation of Apache Maven and Apache Ant based build systems
  • Automation of builds, particularly in relation to a Continuous Integration system like CruiseControl or Hudson
  • Management and versioning of produced code artifacts, particularly in relation to an Artifact Repository like Nexus or Artifactory
  • Release numbering strategies and Alpha and Beta customer release programs

Software Architecture & Design

  • Enterprise-level system architecture definition, existing architecture reviews
  • New database design and existing database design review
  • Formal UML based architecture definition

Enterprise Java Development

  • Specialist in full-stack JavaEE development
  • Public API design and documentation for ISVs
  • Web service development and integration
  • Code reviews and performance tuning
  • Service Oriented Architecture (SOA) design and implementation

Web Development

  • HTML, JavaScript and CSS development
  • Integration of AJAX style JavaScript libraries including GWT, JQuery and ExtJS
  • Integration of Adobe Flash and Flex components

Automated Testing Strategies

  • Introduction of tools like JUnit and Sellenium to teams that currently do not do any automated testing
  • Integration of tests into automated build scripts and generation of metrics
  • Static analysis of codebase quality

Mobile Development

  • iPhone application design and development, specializing in integration to JavaEE based back ends
  • Web based mobile development

Social Media Strategy

  • Specializing in small to medium business that do not have dedicated in house Social Media resources
  • Evaluation of current Social Media presence
  • Recommendations for Social Media platforms based on particular business needs and goals
  • Evaluation of Location based services in relation to business needs and goals

Once again, to discuss your needs and to find out how I can help you, please contact me by phone on +1.650.336.5877, by email at craig@craigsdickson.com, or simply use this Contact form. If you would like more detailed information regarding my experience and qualifications, you can download a current copy of my professional resume from this page.

JavaOne 2009 – (Mostly) Important Questions (Mostly) Answered

Posted in: Enterprise Java

A few days before JavaOne I posted some questions that I was looking forward to finding out the answers too. Here is what I found out.

Has Hudson Killed CruiseControl?
I saw a couple of presentations on Hudson. I also saw Kohsuke Kawaguchi at the Thirsty Bear and he was drinking the good beer, so clearly Hudson is verging on world domination under his guidance.

I never saw Cruisecontrol mentioned anywhere. Not in the conference catalog and not in the pavilion.

I am now even more convinced that Hudson is the way forward for open source Java Continuous Integration.

What Will Be The Volume Of The Twitter Noise Coming From Inside The Conference?
There was definitely a strong stream of Tweets around the #javaone keyword all week. I was able to get a different perspective during the General Sessions by watching the Twitter stream go by as people Tweeted about what was being said on stage.

But what I will say is that I was able to keep up with the volume of Tweets. I mention this because I started to try and follow the #wwdc keyword this week as the Apple conference was going on and I simply could not keep up, not even close. Every time my TweetDeck was refreshing, I was getting more than 100 Tweets during the opening keynote. I gave up in the end and turned the live search off.

Also, while I saw some people Tweet about “is there a Tweetup?“, I never actually saw anyone take the bold step to be the organizer of one.

So definitely more Twittering going on, but nothing earth shattering. I was also hoping to see a vendor try and use Twitter as a medium for some kind of viral promotion during the conference, but I didn’t see anything that creative unfortunately.

Will AJAX Presentations Be THE Place To Be Seen For A 3rd Year Running?
So there were definitely a lot of AJAX based presentations. There were also a lot of REST presentations, which (at least in my experience) seem to always stray over into the AJAX world.

But there were also probably an equal number of JavaFX presentations. Although I would take the amount of JavaFX presentations and other buzz with a grain of salt as it is Sun’s pet project and it was their conference.

There was even an AJAX vs JavaFX presentation to round things out on that front.

But I do think my prediction of all topics related to the cloud as being the hot topics of the conference was probably correct – probably only outnumbered by speculation related to the whole Sun/Oracle situation. There was a track on the Monday morning related to the cloud, there was an unconference on the Monday afternoon called “Cloud Camp”, Sun showed off cloud related provisioning in the Tuesday morning keynote and there were a whole pile of regular sessions either related to new cloud topics, or just repositioning old topics to add the buzzword cloud to their repertoire.

What Will The Oracle Presence Be?
So a bit of a mixed bag on this front.

As most people who care already know, Larry Ellison made an appearance at the keynote on Tuesday morning. I was actually rooting for him to not show up at all – I think that would have been the best play for Oracle. I think McNealy played it well, but it was obvious that both men were a little uncomfortable and they stumbled on some awkward topics during the time they shared the stage. I don’t actually think Larry really cleared any of the FUD related to the situation even though he tried to reassure people that Oracle “likes” Java.

Beyond Larry’s appearance though, Oracle’s presence was actually less than previous years. Most notably, Oracle had absolutely zero presence in the pavilion this year. You can speculate to heart’s content as to why that was. I believe there was at least one session from Oracle personnel, but I did not make it to that one.

I didn’t see any Oracle signage around the conference, it pretty much was business as usual from that standpoint.

What Will The Reaction To The Microsoft Keynote Be?
This turned out to be a dud when compared to the chatter leading up to it.

There was little reaction from the crowd, although from my quick eyeballing of the room, it seemed to be the smallest attendance for keynote during the week.

Basically Microsoft told us that integration is import – wow, thanks for that, welcome to the party. The rest of it was a thinly veiled marketing pitch, which never goes over well at a technical conference.

Will Jonathon Schwartz Look As Uncomfortable And Awkward As Usual?
Believe it or not, I actually think Schwartz did a reasonable job on the Tuesday morning. It didn’t feel quite as stiff as usual. His interaction with partners etc. was still a little cumbersome but nothing worse than I have seen elsewhere.

I was super happy to see Scott McNealy make an appearance – it was clearly the highlight of the keynote. I also think Sun made the right call to have McNealy be the one to address the elephant in the room. The standing ovation he received when he left the stage I think was evidence of that and was also the highpoint of the whole keynote.

Will James Gosling’s Toy Show Seem Overly Long And Desperate Again?
The toy show was the same old story as expected. I sat through it and there are some interesting niche type Java things going on, but I still left the session with overwhelming sense of “meh”.

I think the most interesting part of the Friday morning keynote was the fact that there was absolutely no acknowledgment of the Oracle/Sun situation at all, nor was there any acknowledgment that this was probably the end of JavaOne, at least as we know it today. I had predicted the Friday morning keynote to be somewhat emotional with a bunch of farewells and look-backs, but as it turns out, the Tuesday morning keynote was the one that had the emotion in it.

Will The Lunch Lines Be Under Control?
Nope, lunch lines were ridiculous as usual.

I am always impressed at how megalomaniacal the event staff get at Moscone during these big conferences.

Will It Be Crazy Cold in Yerba Buena Gardens on Thursday Night Again?
I was way off on this one.

The weather was forecast to be horrible on Thursday and so the event staff moved the party to the ballroom at the Marriott on 4th street. As it turns out it was perfectly dry on Thursday and it could have easily been held outside, but it was certainly cold.

The party was actually pretty good and the band was excellent for the setting IMHO and the food was significantly better than last year’s corn dogs and popcorn.

Will The Bookstore Be Given More Space?
Nope, exactly the same space, exactly the same pushy-shovey experience trying to browse the books.

Will Enough People Use me As A Reference So I Can Get The Better Swag?
Unfortunately no. :(

Why are the A’s and Giants both playing away all week?
The MLB has declined to comment on this obvious conspiracy.

JavaOne 2009 – (Mostly) Important Questions

Posted in: Enterprise Java

JavaOne 2009 starts in 5 days. Here is a list of questions I am looking forward to finding out the answers too.

Has Hudson Killed CruiseControl?
Seems like it has based on the number of mentions of Hudson vs CruiseControl in relation to the content at JavaOne. I lost my interest in CruiseControl when ThoughtWorks spun a for-profit version out of it. The only company I have seen be successful at this strategy is JBoss/RedHat where they develop the open-source version first and then roll the for-profit version out of that. The other times I have seen this attempted, all of the effort goes into the for-profit version and the open-source version ceases to progress. There is something fundamental about that 2nd pattern that just smells bad and doesn’t really seem to be in the spirit of open-source.

What Will Be The Volume Of The Twitter Noise Coming From Inside The Conference?
I have been tracking the hashed keywords related to the conference for a couple of weeks now. The volume has been slowly increasing and took a big jump on Tuesday morning when everyone got back from the long weekend in the US. I expect it to keep building up until Tuesday morning, but then what? Does it slow down because everyone is busy, or does it kick into a whole new gear and my trusty Twitterberry will just meltdown in the middle of the opening keynote?

Also curious to see what ad-hoc social activities get incubated in the Twitterverse during the conference?

Will AJAX Presentations Be THE Place To Be Seen For A 3rd Year Running?
The last 2 years have seen crazy interest in anything AJAX related. With Ben Galbraith and Dion Almer (spelling from memory there) being the focal point in their always entertaining presentations. But it feels a little like AJAX is getting to be slightly old news, at least in this forum.

My guess is that anything cloud related is going to be the hip place to be seen this year.

What Will The Oracle Presence Be?
AFAIK, the Oracle/Sun deal has not gone through yet, so technically Sun is still an independent entity. But of course I am also not naive enough to think Oracle won’t be pushing to start getting their hands on the “goods” at this conference. Will there be an Oracle presence in the keynotes that are traditionally Sun’s (the 2 on Tuesday and the 1 Friday morning)? What about signage around the conference? Oracle always has a booth in the pavilion, but will it be bigger, better positioned etc. this year?

What Will The Reaction To The Microsoft Keynote Be?
So the Twittervese exploded earlier this week when it was announced Microsoft will be presenting the Thursday morning keynote. Anyone who has been playing with Java long enough knows that Microsoft has not really been Java’s best friend. So, will the Java community accept Microsoft on the main stage? It would be nice to think that there will be some passionate reaction, either outrageous clapping or hateful booing, whatever, as long as there is some definitive reaction I will be happy. I fear the Java faithful might not be the kind to wear their hearts on their sleeves quite that much though.

Does the Oracle deal have something to do with Microsoft’s presence? Why does Oracle not have a keynote instead? Curious indeed.

Will Jonathon Schwartz Look As Uncomfortable And Awkward As Usual?
I will admit upfront that I am a Scott McNealy fan. He was passionate, and engaging to listen to on a stage. I was not happy when he was ousted from the top of Sun.

But even if I temper my anger over that situation, can anyone really be interested in listening to Schwartz talk? His stage presence is awful and he is robotic in his delivery of obviously scripted lines when guests are on stage. And don’t get me started on the pony tail, sport coat and jeans look! Bring back McNealy for the last one please!!!!

Will James Gosling’s Toy Show Seem Overly Long And Desperate Again?
I have a lot to thank James Gosling for. Most of my career is based on the technology he invented. I would like to have a beer with him at some point no doubt. But man, he is only marginally better than Schwartz on stage.

And I do not really understand the point of the Toy Show in the Friday morning keynote. You are at THE Java conference, and so the audience has self selected itself as resoundingly pro-Java. So why do we need a 3 hour carnival of Java applications trying to prove to us that Java is cool. We already think it is cool, that is why we are there. A lot of it just feels like they are pleading with us to please, please keep thinking Java is cool for another year until the next conference.

Will The Lunch Lines Be Under Control?
Getting your “free” lunch at JavaOne is an exercise in forgoing your basic right to not be hearded like livestock and yelled at by over zealous minimum wage event staff. It is like they are surprised by the number of people that show up for lunch each day, like there was no way they could possibly have guesstimated how many people might want to eat that day. Seriously, it is your last chance to get it right, please make an effort.

Will It Be Crazy Cold in Yerba Buena Gardens on Thursday Night Again?
Why is the Thursday night party outside now? I can’t possibly imagine it is much cheaper is it? It is San Francisco, it is cold on the hottest day of the year. I froze my ass off last year. The long range weather forecast looks like we are in for the same again.

Will The Bookstore Be Given More Space?
Doubt it. There is a whole convention center, and the bookstore gets jammed in a 10 by 30 square. Why? Why do you hate people who like to read?

Will Enough People Use me As A Reference So I Can Get The Better Swag?
I know 3 people who did, I think I need 2 more. I will even buy you a beer. My number is W1302019. Go ahead and earn yourself some karma points.

Why are the A’s and Giants both playing away all week?
A big boo to the MLB for having both teams out of town this week. It has become somewhat of a tradition for me to take my team to the baseball during JavaOne and you have destroyed that cherished pastime. Shame on you Bud Selig.

See you in San Francisco!

The Problem with Maven Releases and Continuous Integration

Posted in: Enterprise Java

I mentioned in a meeting recently that I would like to find a better way to make releases with Maven by leveraging CruiseControl (or another CI tool) to save us work and as a result time.

The main problem currently is created because of the flexibility of using Maven’s SNAPSHOT dependency mechanism. Currently when CC does a build, it just creates a simple SNAPSHOT build and does not change the pom file at all. This is a good thing, as it pushes the latest code out to the shared repository and then when developers do their next build they automatically get the latest code, even if they are not working directly on that project.

The down side is that the builds created by CC are not formal releases and so are not ready to go to QA or production. When we do want to move something to QA we have to stop and do a manual release, and then a second manual release for Production. This is caused by a few reasons:

  1. Currently when CC does a build there is no tag applied to our CVS repository to mark the build, which means the build is not repeatable. This is intentional currently, since there is really no need to be able to repeat a SNAPSHOT build. This can easily be solved though, we can have CC apply a tag, but that still leaves the next issue which is more significant.
  2. Because CC is making a Maven SNAPSHOT build, it does not resolve the SNAPSHOT dependencies to other projects, so the build is still not repeatable, even if we had a CVS tag applied.
  3. The QA releases are tagged/named with suffixes like 1.0.0-rc## (for release candidate) or 1.0.0-beta## (where the #s are numbers indicating iterative releases to QA are being made) to clearly indicate they have not passed QA yet.
  4. Because the QA releases are tagged/named in such a way a whole second release needs to be done to clean up the tag/name to just something like 1.0.0

Here is what I think needs to happen instead:

  1. We continue to have CC create and publish SNAPSHOT builds to the shared repository, just as it does now, no changes.
  2. We add an extra step to the CC build that (on a successful build) tags CVS, then creates a branch based on that tag.
  3. It then does a checkout on the newly created branch.
  4. It then updates all of the pom.xml files where SNAPSHOT versions are used in dependencies to other projects/plugins etc. More on these updates in a second.
  5. It then checks those updated poms back into the branch.
  6. It then does a proper Maven release on that branch and publishes that to the shared repository. That is the end of life for that branch, it only exists to allow the release to be made, nobody would ever use this branch directly.

So, for regular development work, nothing changes, you would continue to use SNAPSHOT versions where appropriate. But, we now no longer need to do a special release when we go to QA, and in addition, if a QA build gets approved, it can go straight to production, we do not need to do a special production build anymore.

This all sounds good, but the tricky part is the “updates the poms” part that I mentioned above in the 4th bullet point. I do not think this functionality exists today in Maven.

So here is how I think it would work:

  • We change to use build numbers that look like this “<major version>.<minor version>.<micro version>.<build number>” – the big difference is the “build number” part. Whenever there is a successful CC build, this number gets incremented. One of these releases with a unique build number will be given to QA. If QA approves that build number, that same build number goes to production.
  • Once a build goes to production, the major, minor and/or micro version numbers get incremented (just like we do now), and the build number automatically rolls back to zero.
  • When CC does a build, it examines the pom file of the project for dependencies to other projects/plugins that are SNAPSHOT versions. It then looks in the shared repository for the latest build number of those artifacts and changes the pom to depend on that specific build number instead of the SNAPSHOT. For example, if CC finds a dependency to version 1.0.1-SNAPSHOT of artifact-X, CC goes to the shared repository and finds that the highest build number for that release is 1.0.1.0064, so it changes the dependency in the pom to be that release number.
  • CC continues until there are no SNAPSHOT dependencies left.
  • Now CC checks in the updated pom (or poms plural if it is a multi-module project) into the branch.
  • Now CC just does a normal Maven release based on the branch and deploys the release to the shared repository. However, it needs to determine the correct build number for the main project being released. Basically this is the same algorithm used to determine the highest build numbers for all of the dependencies that we just finished. Except this time when we find the highest existing build number, we add 1 to it and use that for the release process.
  • The Maven release process finishes with the project in question being released with an incremented build number based on a branch in CVS. The trunk is unchanged, hence the normal SNAPSHOT releases continue as before.

That’s it.

Now I see the Maven release plugin has had some updates in recent releases with features like the non-interactive build now being possible by passing build numbers on the command-line. But I do not see any mention of the type of functionality I outlined above.

Am I just missing it, or is there a project out there for us to sink our teeth into?