I am a fulltime independent consultant and I am available to engage remotely or on-site anywhere in the world. My experience extends from small ISV startups to multi-national Fortune 500s and I enjoy engaging with clients that are anywhere on that spectrum.
The following is a sample 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
To discuss your needs and the possibility of engaging with me, please contact me on +1.650.336.5877, however please keep in mind that I am usually onsite with clients during regular working hours, so I will return your call at the earliest possible moment. Alternatively, consider sending an email to craig AT craigsdickson.com, or simply use this Contact Me form, either of which will give me the possibility of responding after hours.
In Part 1 of this series I described the characteristics that make up a good Automated Test. Here in Part 2 of this series I will explore all of the benefits you will enjoy by creating those good tests and why the time spent on making good tests is a no-brainer investment.
Continue reading »
The adoption of Automated Testing strategies and tools, both in Agile and traditional teams, has been patchy – some teams and communities have embraced it, but many organizations still perceive it as a burden that just slows down development. Those that see the writing and execution of tests as an additional, costly and separate task from development have missed seeing some of the main benefits of an expertly manicured test suite.
Continue reading »
Robert C. Martin, during his keynote at QCon London 2010, tried to figure out why there is so much bad code written. He offers advice on writing good code talking about a bad code example, Boy Scout rule, functions, arguments, craftsmanship, TDD, continuous integration, pairing, small cycles, patterns, engineering, certification, and other elements contributing to qualitative code.
http://www.infoq.com/presentations/Robert-C.-Martin-Bad-Code
The following image is available on the Oracle website currently (original URL):

For me personally the 2 biggest questions about the whole deal have always been What happens to MySQL? and What happens to Java?
MySQL has always been open source and Java has been creeping slowly towards open source over the last few years.
Can Oracle really kill either of these technologies if they chose too? Probably not outright, but they could certainly damage their reputation and community support. People can fork code bases and start again, but it would take time (many years) to build back up to the flagships they are today.
The above image from Oracle is interesting in that it does call out MySQL but does not mention Java at all.
Perhaps Oracle sees more value in MySQL than Java and is attempting to protect it better. Or perhaps Oracle believes Java needs less protection than MySQL, after all, much of the debate over the Oracle/Sun deal has surrounded MySQL and not Java.
Wednesday is the day when some of these questions will hopefully begin to answered.
Why do you think Oracle called out MySQL and not Java?
In my previous article (Performance Tuning Resources For Web Clients) I discussed why you should care about the performance of your web client and then listed out some of the better places to go on the web to find information on how to go about tweaking your web clients to get that better performance. In this article I am going to dig a little deeper and call out specifically what I think are the Must-do-No-excuse-not-to-do-them-You-are-really-being-unprofessional-if-you-are-not-doing-them tweaks that you should be performing on every single one of your web development projects.
Continue reading »
Recently I have been doing some research on tweaking websites to make them faster (either in reality, or at least in appearance to the client). Specifically the research has been focused on the actual client tier interaction – requesting the page, downloading the assets and rendering the page in the browser. In this post I will document some of the better resources I have found, focusing on client-side tweaks, so these resources should be relevant no matter if you are a Java, PHP, .Net or any other flavor of developer.
Continue reading »
In a previous post (Apple MacBook Pro Memory Upgrade) I detailed the reasoning behind choosing to perform some upgrades on the MacBook Pros in my family instead of buying new ones. In this post I will go over the process needed to upgrade the hard drives to give us a little more room to move for the next couple of years and hopefully some performance improvements as well.
Continue reading »
When I buy a tech gadget, whether it be a cell phone or a laptop for example, it always costs me twice as much as everyone else. No matter how good a deal I try to find, it always ends up costing me exactly twice as much as everyone else. Does this happen to you?
It is caused by Geek Wife Gadget Purchasing Syndrome, wherein I cannot buy any cool technology without also getting the same thing for my wife because she also covets cool gadgets.
We had planned to update to the latest MacBook Pro this coming January, as that would mark 3 years since we purchased our current identical in every way MacBook Pros. However, in these turbulent economic times and because of the syndrome mentioned previously, we decided to explore alternatives.
In the end we decided the laptops were not too bad and we could probably squeeze another couple of years out of them, but we had to do something about hard drive space and RAM. So this post details the RAM upgrade and I will detail the hard drive upgrade in another post.
Continue reading »
A colleague of mine forwarded an article to me during this last week, which he prefaced with the following statement …
guys, I’ll write it in all caps and bold:
I AM NOT PROMOTING OR IN AGREEMENT OF ANY OF THE POINTS THE ARTICLE MAKES.
… which begs the question, why did he send it not only to me, but an entire team of people? I choose to believe it was because he is an enlightened soul that understands that the best way to reinforce your own beliefs is to read more of the opposing point of view, not more of the view you already have. I am lucky to have a few of these souls working for me right now.
Continue reading »