What are the bad features of Java

Overview When you first learn to develop you see overly broad statements about different features to be bad, for design, performance, clarity, maintainability, it feels like a hack, or they just don’t like it. This might be backed by real world experience where removing the use of the feature improved the code. Sometimes this is because the developers didn’t know ...

Read More »

Can DevOps(Sec) make Software more Secure?

There was a lot of talk at RSA this year about DevOps and security: DevOpsSec or DevSecOps or Rugged DevOps or whatever people want to call it. This included a full-day seminar on DevOps before the conference opened and several talks and workshops throughout the conference which tried to make the case that DevOps isn’t just about delivering software faster, ...

Read More »

Lessons Learnt Translating 25k line of C# into Java

For various reasons I’ve recently completed a project converting a complex financial application from C# to Java. The reasons for the port were for the most part non-technical, rather, it was a strategic move for the business concerned. It was an interesting experience and I learnt a few lessons along the way that might be useful to share.   1. ...

Read More »

You Won’t Believe What These Five Lenses Can Show You About Your Product

Fundamentally, product management requires you to assess, synthesize, and prioritize the needs which drive the creation of your product in the context of three main objectives: desirability, viability, and feasibility.  While laudable, these objectives are too abstract to be actionable.  That’s where the five lenses come in (I could not resist the Buzzfeed-styled title). The Product Strategy Grid Steven Haines wrote The ...

Read More »

Distribute your applications with Docker Images

Since I started this blog, I had the need to develop a couple of sample applications to showcase some of the topics I have been covering. Usually, some kind of Java EE application that needs to be deployed in a Java EE container. Even by providing instructions on how to setup the environment, it can be tricky for a newcomer. ...

Read More »

Cheating with Exceptions – Java 8 Lambdas

Cheating with Exceptions – Java 8 Lambdas Leaving aside the religious debate about Checked vs Runtime exceptions, there are times where due to poorly constructed libraries, dealing with checked examples can drive you insane. Consider this snippet of code which you might want to write: public void createTempFileForKey(String key) { Map<String, File> tempFiles = new ConcurrentHashMap<>(); //does not compile because ...

Read More »

Validating Class/Package Dependencies with Classycle

Classycle is a very nice analyzer and dependency checker for class and package dependencies. It lets you define package groups (components, layers) and express unwanted dependencies such as cycles, or dependencies between particular packages. For example you can specify that you want no package cycles and no dependencies from com.foo.domain.* on com.foo.api.*. All using a very human-friendly, concise format. Then ...

Read More »

The Precious Feature Design Meetings

As we know, meetings is where work goes to die. Discussion about the point of meetings aside, there is one type of meetings that I love. It has many names, depending on who you ask – design review, design overview, feature design. And I see it as the most important meeting in software engineering. What is it? Let’s start with ...

Read More »

BDD is – BDD is not

“I’m the smartest man in Athens because I know that I know nothing.” —Socrates 470-399 BC What BDD is (for me) 1. Conversations BDD is about conversations The conversations help us understand what we are trying to build and identify the behaviours of our application The conversations help us share the knowledge about what we are building Through the conversations we deliberately discover the behaviour ...

Read More »