Agile: Limitations of Scrum

Based on some recent experiences and conversations, I wanted to explore a couple limitations of Scrum that have come up recently.

1) Limitations of the Standup

Long-time readers will know that I’m a strong advocate of the 5-minute daily standup.

Where 5-minute daily standups are weak is in any discussion of the larger picture. If you try to have a reasonable discussion about the larger picture during a 5-minute standup, this will take far more time, and most of your group will have tuned out by the time you’re done. Conversely, under normal operation, your 5-minute daily standup is great at firefighting issues with currently open tickets, and seeing what is not being worked on, but unless you’re paying active attention, it’s easy to miss someone being semi-blocked or not speaking up to say that they’re blocked. This can happen often due to pride or embarrassment, often with inexperienced or new team members.

Proper use of one-on-ones is probably the best way to deal with this. But if your team member is shy and embarrassed about issues they’re having (especially if they feel technically inadequate), you may need to do some serious digging and active listening to ferret this out. This will require, but also help gain trust of your team member.

Another method is to have regular demos, perhaps daily or weekly, as part of your cadence, which will very quickly show who is having issues (or who does not know how to demo).

2) Limitations of having many small tasks

Organiation and prioritization can be difficult and time-consuming. It can often be easier to delegate all of it to the Product Owner (after all, they have final say on prioritization). However, they may not be the expert on which items should be split into smaller items, or they may try to determine too much of the ‘how’, instead of focusing on the ‘what’ and especially the ‘why’.

What this can cause is a disconnection between the ‘why’ and all of the rest of the team. The work can start to feel like an endless stream of little unimportant tasks, rather than a cohesive whole.

My tactic to deal with this would be to have a planning and prioritization session with everyone attending, so the entire team can be and feel involved, and so the entire team understands the why of each of the items (and can influence which ones will be done and not done!)

I was talking to a manager from another company earlier this week, and they had (I thought) a good idea for dealing with this type of issue. I would typify it as being somewhat orthogonal to Scrum, perhaps somewhat orthogonal to Agile. The concept is to give each member of the team a project of their own, where they are completely in charge. This way, they have complete ownership, and ostensibly will be much more engaged. I like this idea, and it helps a lot with the next point:

3) Scrum works well when team members are well-fungible

A lot of Agile and Scrum especially assumes that team members are reasonably fungible, sometimes almost to ‘Mythical Man-Month’ levels. If you have team members who have vastly different specializations (like Valve’s ‘T-shaped individuals'[1]), your prioritization may be greatly limited by their inability to map to your team members’ strengths.

The tactic mentioned above, where you give each team member a small (or large!) project of their own can help a lot here, but depending on how much of a disconnect you have between the composition of your team and what your organization requires, you may need to hire some people.

[1]If you have not read Valve’s Employee Handbook, go and read it now. I’m talking above about their description of employees who are ‘T-shaped’, which means that they have a broad set of skills, but are exceptionally deep in one area.

Peep-to-Peep Computing

[chirrp][chirrp][cheeerp](whirring noises)[chrrreeep][cheeerp]

It started out as a humorous RFC, something that you would share with your friends and have a quick chuckle over.

[chbeep][chrsssssh][weeooweeoo][bloooop?]

But then the solar flares started. They only caused small problems at first, a little more static on your VOIP call, your conference calls became a little more annoying.

[maaa][maaaa]

Soon, it was all they could do to keep the electrical infrastructure in place. It would have to all be refit, and that would take years, if not decades. A different solution had to be found. Luckily, someone had managed to cross pigeons with mockingbirds.

[booooeyp][booooeyp]

You were limited to the speed of sound, but with creative sampling and filtering, you could train the ‘Mimidae Columbida‘ (or MimiCos, as they were called) to only listen for specific types of sound, and to re-chirp them as soon as they heard them.

[beeyooop][chiiiip?]

Many things became simpler. When you could only send data at 300 baud, IRC and MUDs flourished again. Twitter shortened its character limit to 100, then 50 characters. Emoji encodings became even more compact. People became adept at ‘hearing’ the messages before they were decoded, some were even forgoing the decoding stage, and speaking only ‘beakspeak’.

[yeeebeep!][gshhhhh][yeeeniiip]

Oh, that’s an urgent message coming through! Gotta run! [yeeeneepneep!]

#internetofbirds

From S

Onomatopoeia and Silly Noises

So, this one time, many years ago, S and I are sitting in the hospital. She’s mostly unconscious on pain meds, I’ve been sitting there beside her for the last few hours, amusing myself reading a book[1] or whatnot, and the nurse comes in, to kindly bring her her supper.

The nurse brings over the mobile table-tray thing, and rotates it into place.

“Ruuuuuik.”

The nurse moves it back.

“Iuuuuur.”

“It’s him.” S says, from her mostly dazed state. “He’s doing it.”

I had apparently been semi-consciously making sound effects. “Making the world come alive” as S puts it.

[1]Probably my phone.

Fruit Pancakes

When I was growing up, we had a weekend tradition, making fruit pancakes. It was the thing I remember my dad making most often in the kitchen[1].

I also remember helping my mom with baking and other various food prep, but pancakes were the first thing that I learned to make myself, with no recipe.

The recipe is very forgiving, and probably helped me a lot with my nalysnyky.

Fruit Pancakes, 1 batch:

Ingredients:
– 1 overfull cup of Pancake mix (we always used Aunt Jemima buttermilk pancake mix, you can only get it ‘complete’ now, which doesn’t require milk or eggs, but we add them anyway…vegans or those lactose intolerant should see if they can find the non-complete version, or make this part from scratch)
– 2 large eggs (vegans can omit this, but I don’t know how it will work)
– 1 cup milk (vegans or those lactose intolerant can use water here)
– Butter, 1/2 to 1 stick
– Fruit to taste (2 bananas, 2 handfuls of cherries or blueberries, 1/2 can of peaches, some people like apples in pancakes, but I don’t…apples I would peel before use)
– Maple syrup (optional)

Kitchen tools:
– Medium to large mixing bowl
– Stirring spoon
– Ladle (optional)
– Butter knife
– Measuring cup or mug (a normal sized mug is fine…all you need is something that will be the same size each time)
– Skillet

Instructions:
– Turn on your skillet to 375 degrees F. You may need to experiment to figure this out. It should be the temperature where butter will crackle and turn brown (eventually), but not burn
– Crack the eggs into the mixing bowl. Remove any shell that accidentally got in.
– Add the fruit. Cut bananas into 6, then slice, cut peach slices in 3
– Add 1 heaping cup of pancake mix
– Add about half of the cup of milk
– Stir. You’re looking for the lumps to disappear, and to see the popping bubbles from the baking soda and baking powder in the pancake mix
– Stir while adding more of the milk. You will probably end up putting bout 3/4 of the cup in
– Stir until there are no more lumps, and the mix is the correct consistency (the easiest way to test this is by buttering the skillet and putting a pancake on the skillet. It should be about 0.7-1.0cm thick. This part will likely be trial and error.)
– Butter up your skillet! Especially with the first pancakes of a batch, you want to make sure there’s lots of butter on the skillet. I usually cut off a piece with the butter knife, stab[2] the piece, and swab it around the skillet. You want to make sure the pancakes won’t stick, and incidentally also be filled with buttery flavour goodness.
– Pour one half ladle’s worth or three tablespoons’ worth of pancake batter for each pancake you want to make. A large square skillet will hold four pancakes, most frying pans can only hold three or fewer.[3]
– Watch the underside of the pancackes. This is not the easiest thing to do. You want to flip them when they look cooked on the bottom. You can also tell from the top when the top starts to dry out and become pockmarked.
– Flip the pancakes
– Watch them, don’t let them burn
– When the pancakes are cooked on both sides, spatula them onto a serving plate and start the next batch. You will want to at least partially re-butter the skillet
– Serve with syrup or butter, to taste, or eat them plain!

Serves 2-3 per batch. Can be easily multiplied by multiplying all ingredients above. Note that the milk should still be added only until the mix has the correct consistency, or you will get something close to crepes (very thin pancakes) with strange large fruit-shaped lumps.

Enjoy!

[1]I also remember him making toasted meat sandwiches and jam, but I was never really involved in that.

[2]It’s a butter knife.

[3]Advanced: The little spatters of batter are called ‘crunchies and munchies’, and you can make sure to add a bit of extra butter and put little bits of batter in it

Seeing the Assembly Through the Cs

People always say that one of the important attributes of the C programming language is that you can look at the code and very clearly see the assembler that the compiler will produce.

But (I think) ever since I did assembler in class, no matter the language, I could see/map it to how the compiler would translate it to assembler.

In fact, it bothered me to no end. When I was learning Perl, it was very difficult at first to learn to trust the interpreter to take care of large swathes of the task, to let go of control. I could see all of the horribly inefficient things it must be doing behind the scenes (‘what do you mean, dynamic typing?!?’), and for a long time, my Perl would read very much like my C[1].

But then I discovered regex.[2] And learned about premature optimization.

Now my bash commands read like my Perl.

[1]It probably still does, but it’s starting to bleed back now. I’m now reminded of the dangers of buffer overflows whenever I use scanf.

[2]If you are reading this, you likely will have seen Regex Golf, or the first (that I saw) Regex Crossword. (LOOK THEY MADE MORE. THIS IS AMAZING.)

BOF VII: More Vignettes:

(Some mild editing to protect the more innocent.)

Belleville, Day2.
Science question:
Irritating life partner #1 is going “Aaaugh”.
Irritating life partner #2 is going “Pffftbbbbr” at a 45 degree angle.
At what angle does the associated weather pattern emerge, and which irritating life partner grows more damp as a result?

“The person who rebuffs you… Are they already shiny?”
S, D, and L like this.
GW: wait… if they’re rebuffing you, isn’t it you that was/is shiny?

“Post-modern Rube Goldberg machine. Discuss.”
MC: Facebook? The most convoluted advertising mechanism every built. Founded upon our natural narcissism and need for attention.
Me: Kind of like gossip/tabloids 2.0?

Me: Sherriff = Shire + Reeve. Huh.
K and D like this.
SED: Shire = village, reeve = protector. You’ll never guess where “fireplace” comes from!
Me: A type of fish that lives in fir trees?
RG: Yes that’s right.
AK: Neat. Word etymologies are fun for the whole family. I use this site, which seems pretty nifty: http://www.etymonline.com/
Also, “spitfire” used to be more profane: http://www.etymonline.com/index.php?term=spitfire
– Etymonline, a map of the ‘wheel-ruts’ of English.

Me: Do you get your money back when you return an error code?
You, P, and S like this.
IM: Yes, but in bitcoin
DR: yes but…in counterfeit bills?
IM: Or error bills– collectors’ items

Outside

Why does outside feel like outside?

You walk outside, you take a breath of fresh air. It smells different. It feels different. Why?

Is it the fact that the air is moving? Is it the plants? Is it the fact that homeostasis becomes easier because air is moving?

Is it the feeling that you can see the sky?

For me, a day always feels better when I’ve been able to get outside. I’m sure some of it is the sun, as getting outside during the day is better than at night, but even getting outside at night feels better than being inside.

So, what could it possibly be? Let’s go over the options:

1) Light

As anyone who’s ever used a full-spectrum light box knows, they can be incredibly powerful and useful in changing one’s mood and awakeness state. There could also be something to do with Vitamin D, even a placebo effect during the winter. (It is suggested that the human need for sunlight-created Vitamin D might be sufficient to explain much of the variation of human skin colour.)

2) Something in the air

Something about the outside just feels fresher. I don’t think inside air really has concentrations of CO2 or O2 that much different from that outside (if it really built up that quickly, you would probably suffocate), but there might be other impurities either missing or in higher concentrations inside.

3) …or something in the way it moves…

If you’ve ever seen a cat react to a window being opened on the other side of the apartment, you know that they can detect air currents. I know that I love the breeze on my face (at least during the non-winter).

4) Sounds

The rustling of leaves, the chirping of birds. They make me feel more relaxed. Like I’ve come out of my cave and I’m alive again? Even the sound of the wind…

5) Not having something overhead

Again with leaving the cave. There’s something uniquely oppressive about having something overhead that close all the time. It makes you feel like you’re hiding all the time? So, why do trees not trigger any fear of something jumping out of them at you? Have humans been apex predators that long? Or is it something that is trained into you, like hearing Lancasters flying overhead?

Expanding Your Horizons

“Expanding your horizons”

Stop for a second and really think about what that phrase means…

How exactly would one expand one’s horizons? If you’re down a well, the horizon would appear to be a small circle far above you, but if you’re at ground level, and outside, your horizon is pretty fixed.

Really, the way to expand your horizon if you’re outside is to remove all obstructions. Mountains? Mountains only block your horizons. Skyscrapers? They only block the sky[1].

The other way to expand one’s horizons is to be higher off the ground, so you can see further. The Burj Khalifa’s upper floors are so high up off the ground that a daily fast will last 2-3 minutes longer because your
horizon has expanded and you can see the sun further into the evening[2].

Perhaps ‘expanding your horizons’ means increasing the number of dimensions you’re looking at? Yes, a 4-D hypersphere would have a 3-D horizon, or event horizon in the case of a 4-D black hole, which is one theory for how the Big Bang started our universe[3].

So, it turns that to expand your horizons, you must first invent the universe[4].

[1]They don’t even scrape it. Really, there’s no way to scrape the sky. It’s not a solid. Technically, you could take air in the upper atmosphere and freeze and condense it such that it would be scrapeable, but your building would probably crack at that temperature anyway.

[2]Thanks, Neil deGrasse Tyson!

[3]This is so very cool. Read the article!

[4]“If you wish to make an apple pie from scratch, you must first invent the universe” – Carl Sagan

Tax Freedom Day

Note: I am choosing to engage the concept of ‘Tax Freedom Day’ on a methodological basis rather than commenting on the fact that it focuses on costs rather than doing a cost/benefit analysis. If you want more on that topic, comment below!

*****

Tax Freedom Day. A popular phrase and concept, but what is it really measuring?

In Canada, it is published by the Fraser Institute. You can read their report from 2013 here[1].

On its face, it seems like a totally reasonable thing. There are lots of hidden taxes, manufacturing taxes, the employer portion of CPP, QPP, and EI, etc…

They also make the (I think reasonable) statement that the total tax burden on businesses ultimately expresses itself in the goods and services they sell:

“Although businesses pay these taxes directly, the cost of business taxation is ultimately passed onto ordinary Canadians.”

Leaving the main purpose of these taxes as social engineering, implementing the decisions we have made as a society as to how to incentivize people to spend their money. (But then, all taxation decisions do this, and that is a much larger topic.)

They even say nice things like “Most Canadians would have little difficultly determining how much income tax they pay; a quick look at their income tax return or pay stub would suffice.”

1) Capital gains (unknown number of days)

But here’s the catch. They compare ‘Cash Income’ with tax from all sources. For example, they include ‘Income tax’, including all taxes on income, which includes all taxes on capital gains, but not the income from capital gains, or as they put it, in their own words:

“…total income before taxes includes deferred incomes such as investment income accumulated by pension plans, interest accumulated on insurance policies, and corporate retained earnings. While these types of incomes are accumulated, they are not paid to Canadian families in the current year, and thus should not be considered as part of their income for Tax Freedom Day calculations.”

So their conclusion is that any time shifting of income qualifies it as ‘not income’.

Anyways, the point is that their methodology includes capital gains taxes, but not capital gains income.

2) ‘Average’ vs. ‘Median’ (11 days)

The Fraser Institute notes that the ‘Average’ (arithmetic mean) family income is $97,254, and ‘pay[s] a total of $42,400 in taxes’. Note that this is 43.6%. This will be important later.

Combining the report with StatsCan data:

The StatCan Income by Decile:

We can intuit that the median 2+ person ‘economic family’ as an annual cash income of $72,300, or about 7.55% of the total, and pays about 6.85% of the tax burden or about $29,065, or about 40.55% of their ‘cash income’ in taxes. This is a difference of 11 days.

(Compare with the Fraser Institute report table 9 on page 9, note that unlike the provincial comparison table (table 7, page 7), it does not include the income levels of the deciles)

Looking at their own table 9, their usage of ‘average’ income means that the ‘tax freedom day’ is overstated for roughly 65% of the population.

3) ‘Economic Families’ of two or more people vs. those living alone. (8 days)

This is a smaller point, but in table 6 on page 6, they show that the ‘families with two or more individuals’ tax rate of 43.6% (their headline number), when ‘unattached individuals’ are included is reduced to 42.4%

If they weren’t trying so hard to convince people that taxes are high, it would feel like they’re making the social judgement that families of two or more are the default, and anything else is odd.

Bottom line: Don’t believe everything you read. With very little work, I’ve shaved 19 days off the headline number used by any number of mainstream news publications. I’m sure there’s a lot one could say in addition on this topic, about income redistribution and income sources.

The Fraser Institute has a very specific agenda that they are pushing, however much they proclaim otherwise. Caveat Emptor.

Note: Incidentally, whoever decided that copy-paste from .pdf files should break all the formatting and insert all kinds of line breaks should be made to manually fix all of the files by hand.

[1]I’m using 2013 as a basis, because I can easily find the 2013 StatsCan decile data. If you want to read the 2015 Fraser institute report, you can read it here:

<tags and `tags

Note: We went to see Neil deGrasse Tyson speak today, so you get more random musings on tags today!

There are a few previous entries in this series (and maybe more in the future once you read this!). You can find them all using WordPress’ snazzy search function:

http://nayrb.org/~blog/?s=TAGS

So, back to tags:

<tags are showing that your comment was less than something else. Examples:

“I rode a horse” <Clydesdale

or

“I trained my cat today” <successful

>tags are for showing the opposite, namely:

“I rode a horse” >pony

or

“I felt good today” >yesterday

“tags are substituting for the subset of #hashtags denoting quotations, or to substitute for quotation marks in very character starved tweets, such as:

Live long and prosper “Yoda

‘tags are for inner thoughts, sometimes quoting someone else, sometimes yourself[1].

Live long and prosper “Yoda ‘reallySpock

or

Live long and prosper “Yoda ‘neversaidthatdidI

The last one for the day is the infamous `backticktag, invented by people who love programs like the infamous bash fork bomb:

:(){ :|:& };: [2]

`backticktags are used for when you’re meant to take the previous comment and process it through the `backticktag as program code (as opposed to the |pipetag, where you’re supposed to take the previous comment as data)[3].

Examples of `backticktags:

:(){ :|:& };: `bash

or

10 PRINT “LOOK AROUND YOU” 20 GOTO 10 RUN `bbcbasic

[1]For an exciting treatise on this topic, check out this Slate article!

[2]I recommend you do not try running this unless you are your own sysadmin and you know what you’re doing. Indicentally, Wikipedia has a very nice writeup on how this works, copied below:

:(){ :|:& };:
\_/| |||| ||\- ... the function ':', initiating a chain-reaction: each ':' will start    two more.
 | | |||| |\- Definition ends now, to be able to run ...
 | | |||| \- End of function-block
 | | |||\- disown the functions (make them a background process), so that the children    of a parent
 | | |||   will not be killed when the parent gets auto-killed
 | | ||\- ... another copy of the ':'-function, which has to be loaded into memory.
 | | ||   So, ':|:' simply loads two copies of the function, whenever ':' is called
 | | |\- ... and pipe its output to ...
 | | \- Load a copy of the function ':' into memory ...
 | \- Begin of function-definition
 \- Define the function ':' without any parameters '()' as follows:

[3]If you’re playing with a universal turing machine[4] that can intermingle these, all bets are off.

[4]Or Lisp.