Peopleware: Productive Projects and Teams - Book

April 10th, 2017


Overall 7/10 - May have been more revolutionary when first released but large parts of the book would now be common knowledge

The book has 6 parts:

  1. Managing the Human Resource
  2. The Office Environment
  3. The Right People
  4. Growing Productive Teams
  5. It’s supposed to be Fun to Work Here
  6. Son of Peopleware

On first read-through I struggled with this book, perhaps it’s not ideally suited for a straight read from start to finish. There is no single narrative or clear progression from chapter to chapter. It’s more of a , here’s rough hidings and these two software guys are going to rant and deliver wisdom in this general area. On first read the points they made seem a very mixed bag of common sense, useful, interesting and some parts..impractical. It’s like two hardcore software guys got in a room and said, oh man if we could do this perfect what, how would we run things.

It was only when I reflected back that a more coherent picture came together, that I couldn’t fault most of what they said and I had an increased if begrudged respect for the book. Maybe the world just isn’t ready to embrace as high a quality of software as they suggest nor the lovely self-chosen offices. I feel like I’d love to apply their ideas to places I’ve worked but that the distance between ideal and current standard company policies are too great. I do think I would re-read this book every few years and see if I can nudge places I work towards some of those ideals that I hope are true.

My Reading Notes:

Managing the Human Resource

We are not making burgers, mistakes will happen, in fact there should be an error quota and projects/attempts get canned. A project in steady state is dead but not all things requested should be done, think about them and if they should even be started.

ch4 Quality if Time Permits

Quality far beyond that required by the end user is a means to higher productivity. “. “Quality is free, but only to those willing to pay heavily for it.” How many projects have we seen get bogged down with technical debt, have low morale and slowly die due to porr quality. Question is knowing what level of quality where. The book proposes always letting the builders decide.

“We all tend to tie our self-esteem strongly to the quality of the product we produce–not the quantity of the product, but the quality.” Even if the project would benefit from a huge amount of mediocre work, morale will suffer. They accept that the market does not need or want quality as much as the builders but that “Quality, far beyond that required by the end user, is a means to higher productivity.”

Parkinsons Lay - “Work expands to fill the time alloted”. Book claims this law is entirely wrong. That given knowledge work and high calibre employees that people want to complete stuff. Also makes a good point that bad estimates can demoralise. e.g. Didn’t make the last three sprint goals well 23 never make it so who cares. Small dataset shows builders most efficient setting goals themselves.

The Office

To me, half this chapter is obvious but useless within very large companies where avoiding cube farms is all but impossible. Some points it makes are:

  • Most offices are designed by furniture police that want neat layouts, optimising most people per room
  • Raises a fun meme you do hear a lot “Never get work done between 9-5″. I’ve worked with some offshore people that loved when everyone else went home.
  • An employee costs X, office costs fraction of X. Attempting to save $1 of office costs risks productivity of employee.
  • Data from their wargames showed quiet area with sapce essential. Space important as noice increases exponentially to volume.
ch10 - Brain vs Body Time

Consider how useless/sloppy time recording systems are. They don’t even account for what matters, FLOW. Interesting formula presented:

Efficiency-Factor = (uninterrupted hours) / (body present hours)

Books suggests some obvious but difficult things: dont answer phones, bring back small offices with doors, allow workers to organise office space.
ch13 Taking Umbrella Steps - basically says offices should be grown organiccaly and end up looking like university campuses, with many small focussed areas and lots of small offices with windows looking out at open areas. This is a far cry from most banking offices!


Managers unlikely to change employees personality in any major way. For short work duration, people unlikely to change. How they are at start is very similar to how they are when they leave. I personally have seen a few people change but yes it’s been the minority, this suggests hiring people is crucial step.

ch15 - Hiring a juggler .. then ask to see him juggle. Don’t just ask the theory. Favour auditions/small pieces of work with the team to see if he fits in. Rjecting people can also be a team bonding experience as it lets a good team realize how elite they are. Can you afford not to hire the best? What message would that send to your current team? This isn’t so terrifying as you’d think, you want the best for the team not necessarily smartest self centred person.

ch16 - happy to be here

What’s your annual employee turnover rate? How much does a replacement cost?

Your goal should be to instil that this is the best place to work and you would be crazy to leave. Turnover = more turnover as creates a “passing-through” mentality. If people are treated disposably, then they act like they are. You must trust people to get to know one area well and that way many will actually stay.

Self-Healing System

Methodolgies seek to enforce conformance through statute. Better to achieve convergence using:

  • Training - teach certain methods = they use it as they know it best
  • Tools - automated aids encourage use
  • Peer Review - Spreads training and tools people may have missed and encourages using same methods

Growing Productive Teams

ch18 Sum of the whole is greater than the parts

A jelled team works towards a SHARED COMMON GOAL. That goal may be arbitrary or boring (100% test coverage) but its essential to have. Notice that goal may not correspond to firms overall goal e.g. icnreased profits Q4. A jelled team will have: strong ssense of Identity and Eliteness.

Teamicide - things that Destroy Teams
  • Buracracy
  • Physical Separation
  • Fragmentation of Peoples Time
  • Defensive Management - trust your team
  • Quality Reduction of Product
  • Phoney Deadlines
  • Clique Control
ch23 - Chemistry for Team Formation
  1. Cult of Quality
  2. Provide Lots of satisfying Closure
  3. Build a sense of Eliteness
  4. Encourage Heterogenity
  5. Preserve and Protect Teams
  6. Provide Strategic not Tactical Direction

It’s supposed to be Fun to Work Here

ch24 - Chaos and Order - People crave some disorder and unexpected fun. Suggestions include: hackathons, wargames, pilot projects.

ch30 Making Change Possible

How change happens:


People emotionall hate change and react in number of ways:

  1. Blindly Loyal and follow
  2. Believers but Questioners - Sceptics, passive, opposed due to fear
  3. Militantly Opposed (and will undermine)

Only the “believers but Questioners” are worth trying to affect and intellectual arguments will not win out. You must celebrate “old way” as helping change happen. Point out that “You never improve, if you can’t change at all”.

Later chapters had some interesting points:
- Middlemanagement is only palce where learning can happen AND change be implemented.
- Learning is limited by Orgs ability to keep its people

book , , , ,

The Phoenix Project - Book

February 28th, 2017


Overall 9/10 - Highly engaging easily-read book for software developers.

Interesting book that uses a story about an IT manager getting promoted and being responsible for a team as a way to explain lean/agile concepts. Working in IT a relatively long period now I guess most the scenes are basically from somewhere I’ve worked which is nice that it’s realistic but perhaps shows the book would be more useful for those newer to software development.

Small Topics

The book covers a wide range of topics in varying levels of detail. While quite succcessfully tying them together into one story.

  • Incompetent management - Few bad employees making trouble. USeful to hear of scenarios but characters were shallow though served their purpose.
  • Issue prioritization - kanban and prioritize issues that fix the bottleneck only. Bill re-discovers kanban from manual post-it note creation. How to decide whether a project is worthwhile, the company projects should return >10% rate of return in time period.
  • Releases - Bad change release procedures, continuous deployment
  • Change Management - Allow all minor/low risk automatically, only monitor medium and require manual intervention of high risk items. Else you’ll never survive.
  • SDLC/Kanban - Things are only done when deployed, anything else is WIP that should be avoided. Smaller iterations = lower risk
  • One Genius - How to reduce reliance on 1/2 great developers and spread work over a team
  • Types of Work - Business projects, Internal Projects, Changes and Unplanned Work! Last one is very dangerous as it throws off planning.
  • Dev vs Ops - Shouldn’t be separate but working together.
  • Teams - Need trust and mutual respect.
  • Minimizing WIP is essential - Nice analogy of a factory with parts and Work In Progress building up showing how taht actually can slow progress.

Key Takeaways for Me

The Three Ways

  1. left to right flow of work - small batch sizes, never pass defects downstream and constantly optimize for global goals. Limit work in progress.
  2. right-to-left - have constant fast feedback to ensure to prevent problems. Stop the production line if going wrong.
  3. Foster a good culture - Encourage constant experimentation and risk taking. But understand that practice and repetition pre-requisite to mastery. High trust is essential.

Percent Busy and Waiting Times

We’ve all relied on a chain of people/teams or systems and wondered why simple changes take so long. This graph goes some way to explaining it:

Wait Time vs Percent Busy

Imagine a chain of 6 resources. If each resource is 95% occupied the waiting times between each one is significant. Only by having some less than 80% could you really ensure quick response times.

Forward Looking KPIs

Not sure the equivalent in IT but they have an interesting idea. If on-time delivery is a business KPI. Try to get a forward looking KPI that ensures the business deliverable. e.g. Median Time since Vehicle Maintenance - by ensuring regular maintenance, avoid breakdowns and help deliver business KPI. Are there similar forward looking KPIs on the IT side to ensure business value delivery?

book , , , ,

Ever wanted a Java Scratchpad or a way to run Java Snippets?

February 3rd, 2016

I quite often find myself wanting to write quick snippets of java. Similar to little bash scripts.

This usually means I have to:
- launch eclipse
- start a new project
- create a new class
- write public static void main
- try to remember why I started eclipse…..

Well no more. I decided we could do things better. I present:

JPad - It lets you run little snippets of java code and instantly see the result rendered (hopefully) beautifully as either html tables or in a console mode..

Let me know what you think? Do you find it useful? Can we make it better? Definitely!

Apologies but there’s lots of bugs and we need to improve result presentation)


Julia Programming Language

November 22nd, 2015

Recently I’ve been looking into Julia, below are my somewhat random jumbled thoughts so far. I’ve also put together a function listing for julia that should help beginners. I should mention upfront that I actually really like the idea of Julia and that it has a lot of promise.

1. The long time taken for packages/recompilation is annoying and it failed on me a few times.

2. It just annoys me that the index starts at 1 - different than most other languages.

3. One of the most successful modules in python is pandas. Why not take this further and make DataFrames a full part of julia i.e. Make nulls, dataframes and DataArray the builtin for all vectors. If julia is going to be for manipulating data, there are always going to be nulls. Why have the duplication between julia arrays and DataFrames, make them one and the same.

4.Has a number of builtin functions that duplicate functionality available in just as short a form:


They add little and pollute the global namespace. Ken Iverson gives a wonderful talk on reducing a language to the minimal core here:

5. There are many small bugs, inconsistencies and irritations such as:

Should super()/subtypes error on anything? because it does.

julia> super(bb)
ERROR: MethodError: `super` has no method matching super(::Regex)
julia> subtypes(bb)
ERROR: MethodError: `subtypes` has no method matching subtypes(::Regex)
julia> super("2")
ERROR: MethodError: `super` has no method matching super(::ASCIIString)

cd silently fails and isn’t cross platform.

julia> cd("/temp/")
julia> homedir()

It should at least throw an error. Even better would be if julia supported forward slashes regardless of platform. Ensuring julia scripts are cross platform.

run(pipe(`echo world` & `echo hello`, `sort`))

The run command is weird, not like other languages at all. It uses backtick to enclose the command, supposedly to allow easy copy pasting
but what’s the point of that when you cant use piping within a single command, so you will need to break out each command separately anyway. Rather than this string interpolation I could just have used join() myself and have less surprise. This interpolation will also possibly cause issues with user entered commands. (A bit more browsing reveals there is a significant number of people find this a more powerful technique)

Writing to a file isn’t visible. This is very non-intuitive:

julia> f = open("a.txt", "w")
IOStream(<file a.txt>)
julia> write(f, "hello!")
julia> readall(f)
julia> f = open("a.txt")
IOStream(<file a.txt>)
julia> readall(f)

If possible I’d prefer not to have to even specify “w”, rather when its used by a function,
depending if its read or write, those functions handle the underlying details.


Html Documentation Generator for JOpt

April 18th, 2014

JOpt Simple is a Java library for parsing command line options. If anyone else is looking for an html documentation generator for jopt here it is

We use it in sqlChart - our sql database command line chart generator.

Option (* = required) Description
-?, --help Display a help message and exit.
-D, --database <db_name> The database to use.
-H, --height <output_height> Set the height of the chart output (default: 300)
*-P, –port <port_num> The TCP/IP port number to use for the SQL Server connection.
-W, --width <output_width> Set the width of the chart output (default: 400)


Books: Of Mice and Men, Wild, Out of Sight

January 4th, 2014

Of Mice and Men - John Steinbeck


7/10 Good book though more of a short story really. Not sure why the book is so well known. It would open discussion for a lot of topics, mental health, loneliness, aspirations, maybe a good reading group book or for kids in school.

Cheryl Strayed - Wild

Wild Cheryl Strayed


I’ve often wanted to hike the Appalachian Trail which is what made me read this book. It’s actually more a journey of self discovery for a trouble lady that lost her mum. But it is really funny and when I looked it up, it turns out the author was reunited with her half sister when her sister read the book!

Out of Sight - Elmore

6/10 Not a thought provoking book but an above average crime/romance page turner. Was actually turned into a hollywood film with Geroge Clooney, unfortunately near the end I realised that I had seen the film before so kind of spoiled the ending.


Kdb Training

February 25th, 2013

We’ve been working really hard on new video guides to Kdb which covers briefly some of the topics available in the kdb training courses. Some of the articles to help learning kdb include:

Feedback or questions on the articles is more than welcome.

KDB , , , ,

Signing exe and jars in an ant build

February 19th, 2013

Easiest way to sign your java jars and exes from ant:

1. First some prep to speed things up:
- set your domains whois information to match your business
- register with a phonebook company: or
This means when they ask for it later, you already have it done.

2. Cheap keys are available at tucows author:
This article details the steps and downloading the key (use IE at all times):

3. Once you have it, use these instructions to export it as a file:

4.For signing jars:
This guide steps you through:

5. For signing .exes get JSign and add it’s ant task.

java , , , ,

Best Method of Creating Windows Installer for Java Programs.

January 23rd, 2013


  • Installer that adds link to start menu and file associations to windows
  • Running program appears as an exe and has its’ own file name in windows task manager
  • Use the built in JRE where possible or ask user to download if not available (bundling considered too large)

The finished installer can be seen at


The best solution I found was launch4j and innosetup


Launch4j was the only wrapper I found that let me keep a jar and have multiple exe’s that pointed to the same jar. Allowing me to have two programs but not double the size. One config to keep in mind when doing this is to use the chdir option with . to ensure paths work out properly.


the tricky part with inno setup was getting the file associations to work. Here’s what I used:

Name: "{group}\qStudio"; Filename: "{app}\qStudio.exe"
Name: "{group}\sqlDashboards"; Filename: "{app}\sqlDashboards.exe"
Name: qAssociation; Description: "Associate .q extension"; GroupDescription: File extensions:
Name: kAssociation; Description: "Associate .k extension"; GroupDescription: File extensions:
Root: HKCR; Subkey: ".q"; ValueType: string; ValueName: ""; ValueData: "qKDBsource"; Flags: uninsdeletevalue; Tasks: qAssociation 
Root: HKCR; Subkey: ".k"; ValueType: string; ValueName: ""; ValueData: "qKDBsource"; Flags: uninsdeletevalue; Tasks: kAssociation 
Root: HKCR; Subkey: "qKDBsource"; ValueType: string; ValueName: ""; ValueData: "q KDB source"; Flags: uninsdeletekey;
Root: HKCR; Subkey: "qKDBsource\DefaultIcon"; ValueType: string; ValueName: ""; ValueData: "{app}\QFILE.ICO"
Root: HKCR; Subkey: "qKDBsource\shell\open\command"; ValueType: string; ValueName: ""; ValueData: """{app}\qStudio.exe"" ""%1"""

Combining into an ANT script

You want to

  1. Compile your JAR
  2. Create exes for both programs that point to the jar
  3. Place the exe’s into an installer

Like so (you need to install inno setup):

<launch4j configFile="src/main/resources/launch4j-qstudio.xml" />
<launch4j configFile="src/main/resources/launch4j-sqldashboards.xml" />
<exec dir="." executable="${INNO.SETUP.DIR}">
	<arg line="/cc '${basedir}\src\main\resources\windowsInstall.iss'" />
</exec >

Finished Installer

Can be found at

java , , , , , ,

Onto New Things

January 23rd, 2013

Very excited to move onto new work at
Working on a GUI for KDB called qStudio
I’ll try to post more java stuff here but I’ll hopefully be doing a lot more q article posting on on TimeStored.