2015/05/18

Communication Breakdown

G+ Polls are really very useful for a quick; if not terribly scientific, survey and I recently asked "How do you typically share solution designs?" on the IT Pros community given the variety I see from day to day.

Screen Shot 2015-05-18 at 21.20.17

That presentations are top and models are bottom is sadly unsurprising. I'm in two minds over documents and wikis as effective forms of communication - the former quickly gathers dust though at least provide a snapshot of what was intended at one point in time, the latter decays rapidly into a confusing contradiction of opinions in which the truth is a long lost fairy-tale.

But the really surprising thing for me was the number of votes for whiteboard + photos + email (and/or some online post). We all do it and it's a excellent way to frame a discussion and share ideas. Does it really end there though? Personally I need to take the output of these sessions and work it into something more cohesive and focused which often yields insights which were not uncovered during the rabbit hole exercise that whiteboarding can become.

Truth be said, I still hunger for a good model and the liberating constraints of UML. Unfortunately it seems I need to both improve my PowerPoint and drawing skills instead.

2015/05/08

Electoral Load-balancing

I can't help but think that I'd not get away with load-balancing of resources assuming an equal prioritisation of requests as the British political system allows with votes. No doubt the Tories got the most seats and should rightly be charged with forming a government. However,  based on raw votes the distribution is unequal and the system is weighted in favour of the main two parties...  and the emergent SNP! The table below is based on UK elections result data from The Guardian assuming you get the number of seats relative to the number of votes cast.

Suppressing minorities or mitigating extremities? Or a bit of both... It should not though be for the incumbents; and the system is a product of them, to decide. Perhaps our electoral system could do with an updated load-balancing strategy.



































































































PartyActual
Seats
Proportional
Seats
Benefit
of the
System
Conservative331240+91
Labour232198+34
Scottish National Party5631+25
Liberal Democrat851-43
Democratic Unionist Party84+4
Sinn Fein440
Plaid Cymru34-1
Social Democratic and Labour Party32+1
Ulster Unionist Party220
UK Independence Party182-81
Green124-23
Independent12-1
Alliance01-1
Trade Unionist and Socialist Coalition01-1
Traditional Unionist Voice000

 

2015/05/02

Woke up this morning...

... annoyed!

Been hearing some daft comments recently like "cost is a secondary concern" and "we shouldn't worry about cost"... wtf!?

You need a vision. You need  a goal. You need to know what the hell it is you're trying to achieve!

But! The most important thing once your have the vision is how the hell you're going to get there. Time and money thus become primary concerns and if you ain't got the money or you ain't got the time then you ain't going there and you need to adjust your expectations!

Hell, I want to go to the moon for a vacation but that isn't going to happen anytime soon.

And as Hemingway said, "It's good to have an end to journey toward; but it's the journey that matters, in the end".

2015/04/27

Nanoseconds

I've been doing a little performance prototyping and my usual technique of logging milliseconds spent doesn't quite cut it as the result fluctuates between 0ms and 1ms - not enough granularity to allow for any useful comparison. Switching to nanoseconds does the trick - case A is a little over 0.6ms slower than case B in my test... Cool!

What's the difference between a nanosecond(10−9) and a microsecond(10−6)? Grace puts it in perspective... but I'm talking milliseconds(10−3)... so that'd be just shy of 300km per ms or 180km longer in A compared to B. What a waste...

https://www.youtube.com/watch?v=JEpsKnWZrJ8

2015/04/22

update-alternatives --config java

Perhaps I'll remember this time...

update-alternatives --config java


or more recently appears to have changed to:


alternatives --config java

2015/04/12

Waterfall v Agile v Reckless

I was recently asked when I would use an agile instead of waterfall methodology to which I don't think I gave a very good answer at the time. These things tend to dwell in the mind; in this case at 3am!, and though thoughts at such a hour aren't necessarily too be trusted, here goes.

"Quality, time, cost - pick any two", is an often quoted project management notion which I'll not go in to. A similar triplet can be used to identify which methodology to choose - functionality, time and cost.

The idea goes like this - you can prioritise any two of functionality, time or cost and doing so will tell you which method to use:

Prioritise functionality & cost over time - use waterfall. You know what you want so you can plan it all out up-front, minimise technical-debt, reduce redundancy and keep costs down. It may though be that it takes longer than you really want before you see anything go live. Good for fixed-price work, anything where the scope is well defined and time is less of a concern and some package implementations (package customisation to be avoided (as a general rule!)).

Prioritise cost & time over functionality - use agile. You want something out there soon, at minimal initial cost (think MVP) and can limit the functionality that's delivered within these time/cost constraints. You can define short delivery cycles, size these accordingly and constrain the functionality that gets delivered within them. Good for T&M projects and anything where the vision/scope or requirement priorities are less clear or subject to change - i.e. most projects.

Prioritise functionality & time over cost - use the reckless approach. This essentially says you don't give a damn about the money but you want it all and you want it now! If you ever hear a customer claim "money is no object!" run away. Ok, there are a handful of cases; usually government and compliance projects, where this happens but these projects are rare and typically indicative of failings elsewhere in an organisation. In all other cases the customer has frankly lost the plot. Essentially the reckless approach is one where you start trying to deliver all the functionality ASAP without much concern for anything else. You will likely throw out a lot of testing, ignore non-functional requirements, use whatever tools are to hand; whether they're right for the job or not, and ignore any corporate processes/procedures and standards on the way. Hell, it can work! But most often it leads to unforeseen costs late in projects, excessive rework and; if you do go live with it, a lot of tech-debt and long-term costs which needs to be paid back.

It's just unfortunate that the reckless approach is used so often when it should be so rare. It's also unfortunate that those that deliver reckless projects often get promoted (they delivered on-time) without the long term cost being fully understood - a corollary with the quarterly focus issues many large corporations suffer.

So agile should be most common, then waterfall, then reckless. I'd also suggest waterfall should be used sparingly as there's a tendency for the project to disappear into dark-room for many months before resurfacing and being "not what I wanted" due to poor requirements definition and lack of a good feedback loop. Agile keeps the customer much more engaged on a day-to-day basis which provides that feedback loop and minimises such waste.

It should also be noted that neither agile or waterfall say anything about the work-products needed to deliver them. They don't say "don't do requirements definition", "don't do design" or "don't test", far from it, they just do it in different ways (user-stories v consolidated requirements definition for example). You also need to have an understanding of the long term vision, scope and dependencies within an agile project to avoid excessive tech-debt; or at least be conscious of the implications of short term decisions. From an architectural perspective you still need to identify the building blocks, do the design (logical and physical), establish non-functionals, identify key decisions and dependencies etc. But whilst you may go into all the detail up-front in waterfall you can spread this out in agile with a relatively shallow but broad scope solution outline up-front (essentially identifying the key building blocks and non-functionals) and go into depth as and when needed. To believe you can avoid such work is to make assumptions and to; consciously or otherwise, adopt the reckless approach...

2015/04/03

My big fat hairy....

... so I've just been told the most important thing about a computer is the number of "pouce" it has (thumbs to you and me). Humm... well, ok. Mine generally has two at most and I get angry if it's got any more. My father in-law has 15.6 of them. Wow! That's one powerful machine (I guess)!?

Voyaging dwarves riding phantom eagles

It's been said before... the only two difficult things in computing are naming things and cache invalidation... or naming things and som...