Mashooq Badar

Mash is a software craftsman with extensive experience in developing innovative solutions and running large scale enterprise projects. For many years he was a Principal Consultant leading some of the most diverse projects for clients in Government, Media and Finance. Before Codurance Mash was a Director at UBS leading a 4 million pounds a year project with 6 development teams situated in London and Krakow. He started the project from scratch, building the teams a developer at a time.

Mash is an associated organiser for LSCC, involved since the beginning helping with organisation and running hands-on sessions. Mash has a passion for developing; teams that are skillful and passionate, solutions that are innovative and simple, and software that is aligned to it's business and flexible to change.


Blogs

Thinking in Abstractions

Thinking in Abstractions

Recent issues of the [Clojure Gazette](http://www.clojuregazette.com/archive.html) have been discussing abstractions, and it's got me thinking. I am wary of needless abstractions and have seen many codebases, some of them I contributed to, that are essentially a mindless mess of half-backed abstractions. Here’s what I’m thinking...


AWS Lambda with API Gateway

AWS Lambda with API Gateway

In a [previous post](/2016/05/11/aws-lambdas) I showed you how to create and deploy an AWS Lambda. We will continue that work and look at updating just the code for that lambda. We will also add a REST endpoint to the AWS Lambda using [AWS API Gateway](https://aws.amazon.com/api-gateway)....


Initiative Circles

Initiative Circles

We have been trying to encourage decentralised decision making at Codurance. To that effect, everyone within the company understands that they have the power to make any decision they need to make so long as they seek advise from the people that may be impacted....


AWS Lambda for Beginners

AWS Lambda for Beginners

AWS Lambda is a compute service from Amazon. It makes deployment and provisioning very simple and fits very well with microservices based architecture. You can find out more about AWS Lambda [here](http://docs.aws.amazon.com/lambda/latest/dg/welcome.html). Currently supported platforms are JVM, Node JS and Python. The programming model for...


Premature Microservices

Premature Microservices

Building your app from the very start as microservices is not a great idea! Their deployment is complex - regardless of how good your microservices infra is. They create boundaries in your application that resist change. Software applications are complex systems and complex systems are...


Clojure VIM Environment

Clojure VIM Environment

The [Cursive](https://cursive-ide.com/) plugin for Clojure is now out of its beta testing phase. I have been using it throughout its beta program and, I must say, it is pretty good. Sure, the refactoring capabilities are not quite on a par with those of IntelliJ for...


Clojure (Prismatic) Schemas are Swagger

Clojure (Prismatic) Schemas are Swagger

Recently, I decided to include Swagger documentation to our time sheet application. Although Swagger provides tools to help clients integrate with your REST API the most powerful feature, in my opinion, is that it acts as "living documentation" for the API. Adding Swagger to my...


Appropriate Rigour

There are many metaphors to software development that make sense within different contexts but not others. When we talk about craftsmanship as a metaphor we are referring to the attitudes that the craftsman embodies in terms of dedication to customer satisfaction, quality and endless pursuit...


Big Data Skills Spectrum

Big Data Skills Spectrum

Big Data has been a hype for many years. I’ve seen a few “Big Data” projects start in the past with a lot of fanfare and promise.The promise has always been that “we will start getting a holistic picture of our departmental silos and gain...


Project Sizing

Project Sizing

Sizing a project is one of the most important things we do and it is often the first thing we need precisely when we have the least amount of information. During a pre-sales meeting the client will usually ask for a "ballpark" figure so that...


Impact Mapping

We had the pleasure to visit a client who asked us to facilitate a workshop. The aim was to create a plan for their investors in order to release the next round of funding for a social media website. They had a product backlog that...


Tell don't ask

Tell don't ask

**Tell don't ask** we have all heard it. Yet it is one of the most violated principles. It is also one of the most important principles to follow if you want a design that is flexible to change. I have often heard people say, **"......


Queue Based Synchronisation

Queue Based Synchronisation

The first rule of using locks for thread synchronisation is, **"Do NOT use them!"**. Recently I saw an implementation that made heavy use of locks to synchronise access to a shared cache between two threads. The overall approach is explained in the diagram below: ![Lock...


Keeping the domain in the core

Keeping the domain in the core

Inspired by Alistair Cockburn's excellent [article](http://alistair.cockburn.us/Hexagonal+architecture) on Hexagonal Architecture, on our current project we have kept the core domain of our application independent of the infrastructure by taking the simple decision to divide our code into two main sections (higher level packages): infrastructure and core....


Resist the

Resist the "Just in Case"

Of all the projects I have worked on a big regret has been; adding complexity where it was not needed. I was recently reminded of, how easy it is to fall into that trap. We are in the process of developing a new feature for...


Project Documentation

Project Documentation

Our project has a number of places where we keep documentation. To name but a few we have a Wiki, Sharepoint Site, Jira etc. When I want to know something that is specific to my project the first place I look is my e-mail archive...


Spring Integration based Dispatcher-Worker with Worker Queues

Spring Integration based Dispatcher-Worker with Worker Queues

In the back-office world the central concept in most of the systems is one of a Trade. A Trade has many events (e.g. Inception, Amend, Novation, Termination). Generally events from different trades can be processed in parallel because they have no interdependencies, however, events from...


Speed Reading

Speed Reading

It's not often you read a book that changes your perceptions. Speed Reading by Susan Norman/Jan Cisek is one of them. I've always loved reading books but had felt that I read very slow. According to the book reading has many types and you employ...


The Spirit to Improve

The Spirit to Improve

This week in our weekly design committee, on of the developer demonstrated how to use the Saxon Injectors to create mock XQuery functions for unit testing. It's been one of the biggest problem with our use of XQuery and the developer solved it in his...


Encouraging Collaboration via Design Committee

Encouraging Collaboration via Design Committee

Agile process promotes the view that system design emerges and evolves throughout it's life. It is a result of continuos discussions and decisions by the teams. On large projects with multiple teams, the ideal of involving everyone in design discussion becomes very cumbersome. Even if...


Encouraging Collaboration via Review Branches and Pull Requests

Encouraging Collaboration via Review Branches and Pull Requests

I have always advocated the use of a small well balanced team for projects rather than many less experienced ones. However this is not always possible. Some time projects require a very fast ramp up with a much larger set of teams where achieving a...


Musings on Zero Downtime Deployment

Musings on Zero Downtime Deployment

I've been thinking about Zero Downtime Deployment for the past few weeks. I even raised it as a discussion topic in our [LSCC](http://www.meetup.com/london-software-craftsmanship/) Roundtable. Here are the key points discussed. Obviously the feasibility/suitability completely depends on the application and platform architecture. Also this is not...


Saxon XQuery With Multiple Documents

Saxon XQuery With Multiple Documents

Saxon is a wonderful API for XML processing. It provides complete support for XPath, XQuery and XSLT. Although I'm always baffled with it's lack of adoption compared to Xalan and Xerces. Having said that the online documentation can definitely do with some improvement.  The following...


The difference between UI Designer and UI Developer

The difference between UI Designer and UI Developer

In a previous post I talked about developers distinguishing themselves as specialists in a particular part of the application e.g. server side, gui, database etc. This kind of specialisation is counter productive to creating good software. However, there are roles where the specialisation is important. One such...


The legacy of misplaced Testing

The legacy of misplaced Testing

Recently I've been exposed to a number of projects that have been going on for a few years. As you'd expect they are at a stage where the cost of change is phenomenal. The codebase is large, convoluted and very difficult to understand. However, there are a lot...


Design aligned to the Problem Vs Design aligned to the Technology

Design aligned to the Problem Vs Design aligned to the Technology

Lets develop a web app from start: Well I know Java pretty well so it's going to be Java and then the de facto design is Spring + Hibernate with Spring MVC. I know I'll push the boat out get some AJAX in the mix....


Defining and Prioritising a Backlog

Defining and Prioritising a Backlog

What is the best way to review a backlog? How do you ensure that it is "complete"? How do you ensure that the prioritisation reflects the business vision and goals? When first faced with a backlog, you are often overwhelmed by the long list of...


Naming your Unit Tests

Naming your Unit Tests

Often I see Unit Tests with the test methods that have the same name as the method under test prefixed with the word "test" e.g. `testSubmitApplication`. This provides no extra information on which "flow" of the mothod is being tested. Other test method names provide...


Approach to Performance Tuning

Approach to Performance Tuning

Performance issues in a application manifest as bottlenecks in one or more of the following 4 layers: * **Application**: Application is not designed, developed or configured properly. * **Platform**: The platform that the application runs under (e.g. App Servers, Databases etc.) is not setup and...


The relationship between Product Owner, Business Analyst and Tester

The relationship between Product Owner, Business Analyst and Tester

In an Agile/Scrum team the Product Owner manages the Product Backlog, a Business Analyst may help further elaborate the backlog. Acceptance Criteria is "one of the" or the output of that elaboration. A Tester may futher define the Acceptance Criteria and write test scripts to...


JVM Profiling: Thread Dumps

JVM Profiling: Thread Dumps

Thread dumps are possilby the most useful tool in diagnosing concurrancy related issues. You can get a thread dump at any time by sending a break signal to the JVM. In Windows it's `CTRL-Break` and in Unix/Linux it's `kill -3 ` The possible issues to...


Maven Mutli-Project Thoughts and Guidelines

Maven Mutli-Project Thoughts and Guidelines

Maven multi-project stucture can get quite difficult to manage once you have a relatively deep hierarchy and more than a few projects. Looking at one such complex structure I found that much of this complexity can be avoided by carefully looking at the relation between...


Find the jar file containing a class

Find the jar file containing a class

I often need to know which jar file contains a particular class and I'm sure most people have that problem at some point. You can use [jarFinder](http://www.jarfinder.com) but it's not always up-to-date or the class might be in a jar private to your organisation. You...


Creating and using a maven archetype

Creating and using a maven archetype

The best way to create a maven archetype is to start with an existing project. In the maven project (simple or multiple-module) directory execute:

 mvn archetype:create-from-project 
The archetype is created under `target/generated-sources/archetypes` with the following directory structure: +---src...


Using JIRA for Agile Project Management (without Green Hopper)

Using JIRA for Agile Project Management (without Green Hopper)

[Jira](http://www.atlassian.com/software/jira/) from Atlassian  is a very popular issue tracking software and can be quite effectively used for Agile Project Management. Jira has a plugin (Green Hopper) that allows for creation of a backlog, iterations and tasks.  However, with help from the free Mylyn plugin for...


Configuring a WAR project in Eclipse & Setting up Jetty to Run/Debug

Configuring a WAR project in Eclipse & Setting up Jetty to Run/Debug

Generate eclipse project: mvn eclipse:eclipse Import the project into eclipse In Eclipse - Create a new Run/Debug config - Set main class toorg.codehaus.classworlds.Launcher Go to the argument tab: - Set Program arguments to jetty:run - Set VM arguments to -Xmx512M -Dclassworlds.conf=${M2_HOME}/bin/m2.conf -Dmaven.home=${M2_HOME} Go to the...


Userstories and when enough is enough

Userstories and when enough is enough

Perfection in software is impossible. Software developement is subject to the Law of Diminishing Returns . So how do you decide when enough is enhough? In a recent presentation Al Goerner discussed catagorising stories. Two of the more interesting catagories were "New feature" and "Feature...