Skip to content

Software Development Blogs: Programming, Software Testing, Agile Project Management

Methods & Tools

Subscribe to Methods & Tools
if you are not afraid to read more than one page to be a smarter software developer, software tester or project manager!


How to start your own requirements company – Part I

Software Requirements Blog - - Thu, 04/17/2014 - 12:30
In 2000, I worked for a .com during the .com boom. I left my safe, secure job with Schlumberger, the biggest oil services company at the time, to try to make my fortune in the wild wild west of internet companies. After my new company went public, the stock price kept climbing and I was […]

How to start your own requirements company – Part I is a post from:

Categories: Requirements

Requirements Management Tool Review – Blueprint

Software Requirements Blog - - Wed, 04/16/2014 - 12:48
One of the perks of working for a consulting company is that we get to work with a variety of tools and resources depending on the needs/desires of our clients. I have been working on a project to select a requirements management tool for one of our clients. For the project itself, we are using […]

Requirements Management Tool Review – Blueprint is a post from:

Categories: Requirements

Unspoken Assumptions

Software Requirements Blog - - Tue, 04/15/2014 - 12:34
Fundamentally, assumptions are facts that we tentatively decide to accept as true so we can continue to make progress, even though we know those assumptions might end up being wrong. Assume standard temperature and pressure, or assume a frictionless plane, or assume a spherical cow. Rather than measuring exact temperatures and pressures, or coefficients of […]

Unspoken Assumptions is a post from:

Categories: Requirements

Monoidal Event Sourcing

Think Before Coding - Jérémie Chassaing - Fri, 04/11/2014 - 03:34

I Could not sleep… 3am and this idea…


Event sourcing is about fold but there is no monoid around !


What’s a monoid ?


First, for those that didn’t had a chance to see Cyrille Martaire’s  fabulous explanation with beer glasses, or read the great series of post on F# for fun and profit, here is a quick recap:


We need a set.

Let’s take a simple one, positive integers.


And an operation, let say + which takes two positive integers.


It returns… a positive integer. The operation is said to be closed on the set.


Something interesting is that 3 + 8 + 2 = 13 = (3 + 8) + 2 = 3 + (8 + 2).

This is associativity: (x + y) + z = x + (y + z)


Le last interesting thing is 0, the neutral element:

x + 0 = 0 + x = x


(N,+,0) is a monoid.


Let say it again:

(S, *, ø) is a monoid if

  • * is closed on S  (* : S –> S > S)
  • * is associative ( (x * y) * z = x * (y * z) )
  • ø is the neutral element of * ( x * ø = ø * x = x )

warning: it doesn’t need to be commutative so x * y can be different from y * x !


Some famous monoids:

(int, +, 0)

(int, *, 1)

(lists, concat, empty list)

(strings, concat, empty string)


The link with Event Sourcing


Event sourcing is based on an application function apply : State –> Event –> State, which returns the new state based on previous state and an event.


Current state is then:

fold apply emptyState events


(for those using C# Linq, fold is the same as .Aggregate)


Which is great because higher level functions and all…


But fold is event more powerful with monoids ! For integers, fold is called sum, and the cool thing is that it’s associative !


With a monoid you can fold subsets, then combine them together after (still in the right order). This is what give the full power of map reduce: move code to the data. Combine in place, then combine results. As long as you have monoids, it works.


But apply will not be part of a monoid. It’s not closed on a set.


To make it closed on a set it should have the following signature:


apply: State –> State –> State, so we should maybe rename the function combine.


Let’s dream


Let’s imagine we have a combine operation closed on State.


Now, event sourcing goes from:


decide: Command –> State –> Event list

apply: State –> Event –> State



decide: Command –> State –> Event list

convert: Event –> State

combine: State –> State –> State


the previous apply function is then just:

apply state event = combine state (convert event)


and fold distribution gives:


fold apply emptyState events = fold combine emptyState (map convert events) 


(where map applies the convert fonction to each item of the events list, as does .Select in Linq)


The great advantage here is that we map then fold which is another name for reduce !


Application of events can be done in parallel by chuncks and then combined !


Is it just a dream ?


Surely not.


Most of the tricky decisions have been taken in the decide function which didn’t change. The apply function usually just set state members to values present in the event, or increment/decrement values, or add items to a list… No business decision is taken in the apply function, and most of the primitive types in state members are already monoids under there usual operations…


And a group (tuple, list..) of monoid is also a monoid under a simple composition:

if (N1,*,n1) and (N2,¤,n2) are monoids then N1 * N2 is a monoid with an operator <*> ( (x1,x2) <*> (y1,y2) = (x1*y1, x2¤y2)) and a neutral element (n1,n2)…


To view it more easily, the convert fonction converts an event to a Delta, a difference of the State.


Those delta can then be aggregated/folded to make a bigger delta.

It can then be applied to a initial value to get the result !



The idea seams quite interesting and I never read anything about this.. If anyone knows prior study of the subject, I’m interested.


Next time we’ll see how to make monoids for some common patterns we can find in the apply function, to use them in the convert function.

Categories: Architecture, Requirements

Using Key Performance Indicators (KPI) and Features in Project Success Measurements

Software Requirements Blog - - Wed, 04/09/2014 - 12:27
As I pointed out in a prior post on project success measurements, overall project success and the success of the related IT development effort can be mutually exclusive of each other.  A business can achieve the objectives for a certain initiative regardless of whether the related IT effort succeeds or not.  Similarly, an IT initiative […]

Using Key Performance Indicators (KPI) and Features in Project Success Measurements is a post from:

Categories: Requirements

Software Development Mantra

From the Editor of Methods & Tools - Mon, 04/07/2014 - 14:51
We believe developers should have a particular attitude when writing code. There are actually several we’ve come up with over time – all being somewhat consistent with each other but saying things a different way. The following are the ones we’ve held to date:Avoid over- and under-design. Minimize complexity and rework. Never make your code worse (the Hippocratic Oath of Coding). Only degrade your code intentionally. Keep your code easy to change, robust, and safe to change.Source: “Essential Skills for the Agile Developer – A Guide to Better Programming and Design”, Alan Shalloway, Scott ...

Business Analyst Tip: CIOs are People, Too

Software Requirements Blog - - Fri, 04/04/2014 - 12:38
Like most of us, I’m working in an environment where there is too much to do and not enough people to do it. We recently received a request for a new project which didn’t make sense to me—it would only be used short-term and the need met by the project was already satisfied. So, I […]

Business Analyst Tip: CIOs are People, Too is a post from:

Categories: Requirements

Welcoming Changing Requirements

Software Requirements Blog - - Thu, 04/03/2014 - 12:35
The Agile Manifesto is based on twelve principles (I’ve highlighted a couple – 2 and 12 – that are of the most interest for this post): Customer satisfaction by rapid delivery of useful software Welcome changing requirements, even late in development Working software is delivered frequently (weeks rather than months) Working software is the principal […]

Welcoming Changing Requirements is a post from:

Categories: Requirements

Requirements for Business Analytics follow-on with more ideas

Software Requirements Blog - - Wed, 04/02/2014 - 12:28
I recently gave a webinar on Requirements for Analytics Projects and had a few interesting questions come up during it. I thought I’d share some of the Q&A here, since we didn’t get to cover them all in the webinar. You can listen to the webinar here. Here are some of the questions and answers. […]

Requirements for Business Analytics follow-on with more ideas is a post from:

Categories: Requirements

2-Minute Models Part II: Decision Tables Video

Software Requirements Blog - - Tue, 04/01/2014 - 12:45
This is the second part of a two-part video, describing how to use and create the Decision Table model. 2-Minute Models Part II: Decision Tables Video is a post from:

2-Minute Models Part II: Decision Tables Video is a post from:

Categories: Requirements

Being a Great Software Development Manager

From the Editor of Methods & Tools - Thu, 03/27/2014 - 15:33
Any manager, when goals are not being met, identifies the impediments and whenever possible removes them. A good manager goes further by identifying and removing potential impediments before they lead to the goals not being met. A great manager makes this seem easy. Tony Bowden, Socialtext Source: Managing the Unmanageable, Mickey W. Mantle & Ron Lichty, Addison-Wesley

Software Development Conferences Forecast March 2014

From the Editor of Methods & Tools - Tue, 03/25/2014 - 14:04
Here is a list of software development related conferences and events on Agile ( Scrum, Lean, Kanban) software testing, programming (Java, .NET, JavaScript, Ruby, Python, PHP) and databases (NoSQL, MySQL, etc.) that will take place in the coming weeks and that have media partnerships with the Methods & Tools software development magazine: Big Data TechCon, March 31-April 2, Boston, USA Software Testing Analysis & Review Canada Conference, April 5-9 2014, Toronto, Canada Agile Adria Conference, April 7-8 2014, Tuheljske Toplice, Croatia Optional Conference, April 8-9 2014, Budapest, Hungary GOTO Amsterdam 2014, ...

Done & Retrospectives in Scrum, Software Architecture in Methods & Tools Spring 2014 issue

From the Editor of Methods & Tools - Mon, 03/24/2014 - 16:05
Methods & Tools – the free e-magazine for software developers, testers and project managers – has just published its Spring 2014 issue that discusses how to be bone in Scrum; why, when and how to perform successful retrospectives; Why it is better to chop onions instead of layers for a improved software architecture. Methods & Tools Spring 2014 contains the following articles: * The Principles of Done * Doing Valuable Agile Retrospectives * Chop Onions Instead of Layers in Software Architecture * Ranorex – Automated Testing Tool for Desktop, Web & Mobile Applications 40 pages of ...

The Anatomy of a User Story

Software Requirements Blog - - Fri, 03/21/2014 - 12:36
User stories, a requirements format utilized in Agile software development, are typically formatted with the following template: As a (type of user), I want (some goal), so that (some reason). This template can be modified to suit a project’s need. In this post, we’ll show how user stories themselves can be broken down into tables […]

The Anatomy of a User Story is a post from:

Categories: Requirements

Once upon a time, there was a Business Analyst who wished she could write software programs…

Software Requirements Blog - - Wed, 03/19/2014 - 12:31
When I was in first grade, my class participated in a financial education program. We learned about banks, saving money, credit cards, and how to write checks. I have always remembered this experience and thought it was absurd that they taught these things to 6 year olds, but I have always remembered it. I know […]

Once upon a time, there was a Business Analyst who wished she could write software programs… is a post from:

Categories: Requirements

NoSQL Databases Adoption Survey Results

From the Editor of Methods & Tools - Tue, 03/18/2014 - 14:20
NoSQL databases (MongoDB, Couchbase, Riak, Cassandra, etc…) are getting more and more visibility in software development discussions and conferences. The last Methods & Tools survey wanted to know if organizations were using NoSQL databases. The results are mixed. On one side, 60% of the participants answered that their organization was not using at all this technology, with 20% that are even unaware of their existence. On the other side, more than 25% of the organizations had NoSQL-based applications in production, which is not so bad for a relatively new technology largely ...

Software Development Linkopedia March 2014

From the Editor of Methods & Tools - Wed, 03/12/2014 - 17:06
Here is our monthly selection of interesting knowledge material on programming, software testing and project management.  This month you will find some interesting information and opinions about Agile values, roles in Scrum, unit testing mistakes, managing projects, Agile testing, using the MongoDB NoSQL database, software metrics, using programmer anarchy for organizing projects and specifications by example. Web site: Agile Coach Camps Blog: Agile Is Dead (Long Live Agility) Blog: Beyond Roles in Scrum Blog:5 Unit Testing Mistakes Blog: Are comments always wrong? Article: Cutting a Monster Project Down to a Manageable Size Article: When Scrum Uncovers Stinky ...

Requirements Elicitation Technique – Tools of the Trade

Software Requirements Blog - - Tue, 03/11/2014 - 14:23
As a BA, I’m always looking for tools that can help me with my job…anything to make my life just a bit easier!  I’m always curious about the latest requirement management tools that come out, and I love to play with new diagraming tools! But sometimes, it’s the low tech tools that can provide the […]

Requirements Elicitation Technique – Tools of the Trade is a post from:

Categories: Requirements

Software Architecture Articles of 2013

From the Editor of Methods & Tools - Wed, 03/05/2014 - 15:21
As the software infrastructure get more complex with pieces of applications running on server, mobile or cloud locations, the discipline of software architecture is more important than ever. The Agile approach has done its part to bring the software architects down from an ivory tower, but some developers have also started to believe that you didn’t have to think about software architecture anymore. This is a big mistake. Here are nine articles on software architecture published last year that can help you understand the current trends in software architecture: Agile, Cloud, ...

2-Minute Models Part I: Decision Trees Video

Software Requirements Blog - - Fri, 02/28/2014 - 13:24
I’m a big fan of visual models. So much so that I decided to make a visual representation of discussing decision tree models (instead of typing up a wordy blog post). Hope you enjoy!     My Part II video for 2-Minute Models will cover decision tables. Be on the look out for that post […]

2-Minute Models Part I: Decision Trees Video is a post from:

Categories: Requirements