A collection of thoughts, ideas and rants inspired by my career in the fintech and banking industry.

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]
Career 

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]
Git 

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]

Bi-temporal Data Model

A bi-temporal data model is a fancy way of saying that all tables have 2 pairs of dates: business from/to, and audit from/to. The business dates track expected day-over-day changes in business data such as the varying quantities of widgets in stock. The audit dates are used to track when the data was loaded into the database, and any data fixes applied by IT. In essence, every table contains the current record as well as the full log of all the changes that were ever made to that record. [Read More]

Throwing Under The Bus

Throwing somebody under the bus (ref) is a cowardly act, and one that particularly irks me. Nobody likes to be humiliated in front of others. I’ve seen this happen countless time when a developer will point out a bug or error of another developer and use it as an excuse for not delivering on their own work. “I couldn’t load the data because of a bug in Johnny’s code”. Bullshit. If you were a team player then you would have pulled up a chair next to Johnny and tried to fix the bug so that the project could move forward. [Read More]

Thoughts on Netezza

I’ve been using Netezza for a few months now and this post captures my opinions based on my limited experience. For context, I’m populating a Netezza database for a client. The database schema is managed by the client, and Netezza was selected prior to my involvement. Netezza is their data warehouse, but they’re also using it a little like an application database. They’re using a bi-temporal model, but that’s a subject for another post. [Read More]

He who estimates, implements

I’ve been over the high-level requirements and think it’ll probably take 8 weeks with 2 developers, so you should be able to deliver this by X. Well, that’s great. Can I presume that you’re one of the two developers working on it? I didn’t think so. Nothing irks me more than being handed a batch of work along with the timeline for delivering it. If you want to estimate my work for me, then you can also go ahead and build it. [Read More]