A collection of thoughts, ideas and rants inspired by my career as a tech consultant in the finance industry.

Keep Everything in Source Control

Me: Why is this report different to the one in production? SysAdmin: Dunno. I guess they must have fixed it production and forgot to check it back into source control. If I had a dollar for every time I’ve had that conversation I’d be a rich man. It is usually the result of some late-night troubleshooting and finally the system is working as expected and everyone goes to bed. [Read More]

Successful teams

There’s nothing that beats the feeling of being part of an exceptional team and yet it is strangely difficult to define exactly what makes one team great and another team not-so-great. Google recently set out to learn how to build the perfect team and came up with some interesting, albeit previously discovered, answers. To summarize their findings, Google’s Project Aristotle concluded that on good teams: All team members spoke roughly the same amount, and Team members were empathetic towards each other Harvard Business School’s professor Amy Edmondson described this as “a sense of confidence that the team will not embarrass, reject or punish someone for speaking up”. [Read More]

On Agile Transformations

I’ve been pushing large enterprises to adopt agile development practices for years so I was very excited when I began seeing many of them embarking upon ambitious Agile Transformation projects where they attempt to not only change the way they build software, but completely revolutionise the entire IT process from inception, finance, HR, delivery and operations. But they rarely discuss culture. “Culture” in this context is used to broadly describe how people behave in the company. [Read More]

Back To XP

Agile has gained a lot of traction in large enterprises in recent years but I’m concerned about the specifics of how teams are implementing it. I’ve seen everything from traditional eXtreme Programming (XP) practices to Scrum, but nothing scares me more than the teams that self-identify as “agile” but do nothing more than hold a daily team meeting. Agile means different things to different people, but it doesn’t matter which methodology is used as long as the principles outlined in the Agile Manifesto are adhered to. [Read More]

Broken Build

I have used automated build tools on all my projects since 2000. Back then it was CruiseControl in all its XML-configuration glory. Today it is usually Jenkins, or sometimes TeamCity, and I recently tried out ThoughtWorks Go. The user interfaces have generally improved over time, and now there is probably a “plugin for that” thing you used to script manually, but overall not much has changed in the last 15 years. [Read More]

DRY Configuration

Externalizing application configuration values into a properties file is a common pattern in enterprise applications, because it gets the environment-specific settings out of the code and avoids the need for environment-specific builds. Being able to deploy the same binary to multiple environments (Dev, QA, UAT, Production) is a Good Thing. I came across an interesting quirk in an application recently. I needed to change the port of the application server for one of the app’s components, and the port value was wired up via Spring using some code that looked like this: [Read More]

Trust Me

The question of location comes up a lot in software consulting. Will the work be done on the client’s premises, or the consultant’s? There’s no right answer. Some clients don’t have the office space to accommodate an entire development team. Others already have a large IT department and want the consultancy’s team co-located with their existing staff. Working at the consultancy’s office may afford certain perks like a relaxed dress code and flexible hours (are there still inflexible hours? [Read More]

Good Advice

A thread appeared on Hacker News recently about how successful people operate. The comment below really struck a chord with me. Don’t waste time. Be mission/vision focused. Be polite to everyone always. Be helpful whenever possible. Be insanely organized. Seek and respond to constructive feedback on your work. Do the shit work without whining. All of this will build human capital with other people in the organization, which will both practically give you more resources of help from others to draw on in your work requirements, but also increases your visibility with people who aren’t on the front lines doing the work (e. [Read More]

Git baffles

I’ve been using DVCSs for more than four years and I love them. Both Git and Mercurial are excellent source control tools, each with their strong points and their warts. The biggest difference between the two is the learning curve. I was very comfortable with Mercurial after only a few weeks and the same has held true wherever I’ve introduced it. It took me about six months to get to the same comfort level with Git. [Read More]

Netezza: failed to create external table for bulk load

I came across an interesting problem recently in some JDBC code that was inserting rows into a Netezza database. The Java code was doing something like this: Statement stmt ... for( SomeObject o : listOfObjects) { String sql = "INSERT INTO tbl(col1, col2) values (?,?)"; ... stmt.addBatch(sql); } stmt.executeBatch(); On the “executeBatch()”, a SQLException was being thrown that said “failed to create external table for bulk load”. What? But it wasn’t a bulk load. [Read More]