Content-Type: application/http; msgtype=response

WARC-Type: response

text:
A Short History of Tractors in Ukrainian Review

Hull Truck Theatre – until 14 October.  Reviewed by Catherine McWilliams

This excellent production at Hull Truck theatre fairly zipped along, taking our emotions from highs to lows, with a good sprinkling of humour.

On the surface this is a story of Nikolai, an elderly Ukrainian widower living in the East of England who marries a much younger Ukrainian woman, much to the displeasure of his daughters. It is much more though, taking us through the history of the family and Ukraine itself and making us consider those who seek a new life through immigration. Family secrets are divulged as the daughters argue with their father.

The play has been skilfully adapted by Tanika Gupta from the novel by Marina Lewycka. She has introduced the mother Ludmilla as the narrator, who provides a calm voice in the midst of madness and chaos.

The cast play a variety of roles as they tell the story and flashback to family history. We had joyful Ukrainian dancing and singing at one moment and were faced with the horror of a Nazi labour camp later. All the cast played their many roles well. Ruth Lass played Nadezdha superbly as the younger daughter who really struggled with her relationship with her father.

Geoffrey Beevers was particularly outstanding as Nikolai, who could not quite understand why his daughters might be distressed by his actions. The twinkle was there to see at times, together with his distress when things went awry. However this “poet engineer” never gave up hope.

The set mainly consisted of suitcases and a large tree, but never seemed to be just suitcases but cleverly added to the story telling.

I thoroughly enjoyed this production but was left with the question what would I do to ensure a future for my child? And as for the tractors – well go and see the play and find out for yourself!

Leave a comment

Your email address will not be published. Required fields are marked *

warcinfo:
isPartOf: CC-MAIN-2018-51
publisher: Common Crawl
description: Wide crawl of the web for December 2018
operator: Common Crawl Admin (info@commoncrawl.org)
hostname: ip-10-148-6-181.ec2.internal
software: Apache Nutch 1.15 (modified, https://github.com/commoncrawl/nutch/)
robots: checked via crawler-commons 0.11-SNAPSHOT (https://github.com/crawler-commons/crawler-commons)
format: WARC File Format 1.1
conformsTo: http://iipc.github.io/warc-specifications/specifications/warc-format/warc-1.1/


WARC-Identified-Payload-Type: text/html

text:
Casa Roja
Casa Roja
General Information
Population:185 (175 temporary legionnaires, 10 permanent merchants)
Notable Individuals:Pancho Mendoza (temporarily)
Factions:La Legión de la Gente
Notable events:Battle of Casa Roja
Current status:Contested outpost of La Legión de la Gente

A former summer villa for a wealthy Mexican family, Casa Roja, or Red House in English has served as a trading post for caravan trade on the former border between Mexico and the United states for close to a century and since the reign of Rey Mateo Segundo of the Kingdom of Mexico it has served as a base for military forces from La Ciudadela until very recently when in the summer of 2281 it was seized by communist partisans and revolutionaries under the banner of Pancho Mendoza and La Legión de la Gente who are currently using the outpost as their forward operating base to use in their war against Rey Cristobol and his reino.

Casa Roja was built in 2045 by a wealthy Mexican advertising tycoon as a vacation home for him and his family just seven miles from the Rio Grande and eleven miles from Rio Bravo where he lived. The house was a two-story villa on a hill with close to thirty rooms, meant for a vacation house and for hosting large and lavish parties for him, his family, his friends, and his business partners and clients. Built on one acre with a ten-acre parcel of land surrounding it, Casa Roja was right off the highway and cost two and a half million American dollars, land included.

After thirty-two years the house was still regularly used and in the hands of the same family when the bombs fell, they were in Rio Bravo and killed by atomic fire. The house, however, fared better than its residents and survived. It would be left vacant for decades until in the 2130s when it was mostly looted clean of all valuables by scavengers. Comanchero raiders would use the mansion as a hideout on several occasions until in 2156 when a caravaneer decided to take up residence in the new mansion with his caravan of five men and three pack brahmin. He set up a trading post and rented rooms in the spacious mansion and set up a moonshine still in the basement to sell liquor. In the case of comanchero raids, the residents would hold up in the mansion and seal the doors while firing rifles from the windows.

Casa Roja was a stop for caravans going north into Texas and continuing further south into Mexico for over a century as residents came and went. Trade increased when Rey Valentino established El Reino de Mexico and opened up his vault to the outside world, establishing La Ciudadela. By the 2220s most of the traders passing through Casa Roja were headed to La Ciudadela to trade or headed from La Ciudadela to turn a profit for the nobles. However, the comancheros who pestered the former U.S.-Mexico border plagued the area around Casa Roja and savaged many caravans.

Rey Mateo Segundo

Rey Mateo Segundo, who annexed Casa Roja.

This changed when after waging war against comancheros in the area for six years, Rey Mateo Segundo sent troops to Casa Roja in 2263, making Casa Roja the first and to date the only territorial expansion of the Kingdom of Mexico. The annexation was greeted without much resistance from the people of Casa Roja who welcomed an increase of activity at their small outpost by catering to soldiers and an added level of safety from raids by comancheros. The garrison at Casa Roja was used to launch escorts for caravans headed for Texas and to launch hunting parties for comanchero raiders.

When Rey Cristobol took power in 2270, the outpost fell under his control and soon he used it as the front line in La Guerra de la Ciudadela, when Pancho Mendoza's People's Legion declared war on him. For over ten years, Casa Roja repelled hit and run attacks and marked the border between legion infested countryside and kingdom controlled land. This changed in the Battle of Casa Roja when in May of 2281, heavily armed legionnaires led by legion support unit, Los Hermanos de Sangre assaulted Casa Roja and killed the sixty-man garrison after a nine-hour siege of the mansion on a hill, using snipers and machine gun emplacements to weaken up the defensive structure of the house before storming the hill and engaging in bloody melee combat. When news that the outpost had been captured reached the rey, he sent one hundred men out to reclaim Casa Roja, which they did.

They found the outpost deserted and looted of supplies and then received radio orders to head back to La Ciudadela where Pancho Mendoza had personally lead the burning of corn and wheat fields. The force left ten men to guard the mansion and ran back to La Ciudadela to fight Mendoza, who was headed back to Casa Roja off the main road. "The Ride Around Cristobol" as it was called was humiliating to the rey and when it was over the legion had retaken Casa Roja and had burned most of La Ciudadela's food supply.

Since the battle, Casa Roja has served as the forward operating base of the People's Legion were close to one hundred and seventy-five legionnaires are garrisoned. Mendoza himself personally commands the operation and is using Casa Roja as his final stop before attacking La Ciudadela, plotting his attack and anticipating a kingdom attack every day.

For most of its history, the "government" of Casa Roja was the people who lived there. Since it was inhabited after the war, there were never more than fifteen people operating the trading post and living in the mansion. They generally got along quite well as had no real need for a government or police force as the settlement was so small it would have been redundant, instead for security the merchants who lived at Casa Roja protected themselves with their own weaponry and settled their own disputes, forming a small militia if comancheros came too close.

This worked with such a small settlement until 2263 when Rey Mateo Segundo took over Casa Roja and kept a garrison there. From that point on the government was the garrison of soldiers from La Ciudadela, who collected tolls for caravans passing through, made sure that no crime was committed by caravaneers, residents, or soldiers, and who escorted caravans financed by Citadel nobility to the Rio Grande. This government was also quite simple, yet effective for such a small settlement.

After The Battle of Casa Roja, the legion allowed the residents of the trading post to stay and took over enforcing law in the relatively crime-free outpost with the exception of collecting greater tolls from caravans, confiscating all goods from nobility financed caravans, and allowing no caravan carrying food, guns, or medical supplies to go into Rey Cristobol's territory before having such trade goods confiscated as they could aid the war effort against Pancho Mendoza's communist militia.

When the legion moves on it is likely that Casa Roja will continue to remain under the control of the victorious side in the Citadel War, it doesn't matter to most of the ten or so permanent traders at Casa Roja who wins as they don't expect trade to be hindered either way. However if given the choice, all would prefer to stay under Rey Cristobol's banner than Pancho Mendoza's.

The economy of Casa Roja is quite small, however so is Casa Roja and its population itself. Since it was founded as a trading post, Casa Roja has made money by acting as a trading post for caravaneers to pick up supplies, spend the night, get a good meal and a drink or two, and maybe play a little game of cards, at times prostitutes, have lived in some of the rooms of Casa Roja. However, there has not been one in the post since 2276 when she became collateral damage in a raid by communist partisans with the legion.

Since Casa Roja was annexed in 2263, its economy benefited the Kingdom of Mexico by collecting customs from all caravans, cattle drives, brahmin drives, and travelers that pass through, though the customs were nominal the traffic that passes through Casa Roja gave Rey Cristobol's government a tidy little profit. Casa Roja's small economy only improved when Rey Mateo Segundo annexed the post as the increased safety the soldiers provided drew additional traffic.

Since May of 2281 when Pancho Mendoza took Casa Roja after his "Ride around Cristobol" La Legión de la Gente, The People's Legion has controlled the post. This has obviously discouraged any merchant activity bound for La Ciudadela from passing through and had a noticeable impact on the economy of the post, however, due to how little the traders made anyway they haven't noticed it greatly. The customs for passing through Casa Roja have also been increased and now caravans or merchants carrying supplies that could aid Rey Cristobol merely traveling in his direction are subject to confiscation of their goods and sometimes execution as an enemy agent, ensuring that legion control has not been as fruitful as the hands-off approach that Kingdom forces took.

Casa Roja is located between La Ciudadela and the Rio Grande on the route from La Ciudadela to Hidalgo. It is eleven miles north of La Ciudadela, seven miles south of the Rio Grande and Hidalgo, and twenty-three miles to the southeast of Cresta Confederada. It has historically marked the border between the territory controlled by the People's Legion and The Kingdom of Mexico.


WARC-Identified-Payload-Type: application/xhtml+xml

text:
6 Things Every Beginner Gardener Should Know

If you want a flower garden but don’t have a clue where to start, help is here!

By FamilyTime

Even with only a small plot of land, you can have a garden. A garden beautifies your property and brings tranquility to your life. Plus, it provides an outlet for creativity and energy.

If you plant vegetables, you have the added bonus of eating your harvest!

Gardens can be all consuming, or they can demand only a few hours a week of your time. It does not take much to plant a small one, which over time will develop and mature. As it does, you as a gardener will grow, too.

The best way to learn is to get dirty! Here are six aspects of successful gardening:

1. Soil
Soil is a living organism that nurtures plants and as such is critical to a thriving garden. Decide on a good spot for the garden and then dig in! Chop up and remove all grass and weeds. With a hoe, shovel, or metal rake, loosen the soil, turning it and pulling out rocks, sticks, and other matter.

Loamy soil is what you want. It is a combination of sandy soil, which is loose and dry, and clay soil, which is nutrient rich but heavy and dense. If you think you have sandy or clay soil, take a sample to the garden center and ask what you should add to it for loam.

For most beds, dig down six to eight inches into the soil so that the earth is nice and loose. Work additives into the soil, such as manure, peat moss, and, if you have it, compost. These enrich the soil and prepare it for planting, and all are sold at garden centers.

2. Light
Depending on the size of your yard and how it is situated, you may not have much choice when it comes to light. Don’t worry; there are plants suitable for every degree of light.

If your garden gets at least six hours of full sun every day, you can plant vegetables and flowers requiring full sun. If you get sun in the morning and shade in the afternoon, buy plants that do well in half, or partial, shade.

Buy plants that grow in light shade if your garden gets fewer than three hours of sunlight a day, and those for deep shade if there never is direct sun on the garden.

In general, gardens that face south have sun all day, while those that face north have no direct sun. Consider trees, buildings, and fences, all of which can block sunlight.

3. Plants
Flowers fall into two general categories: annuals and perennials. Annuals last only for the season, while perennials come back season after season, going dormant during the freezing winter and then poking up in the spring. Biennials last for two seasons.

As a rule, annuals bloom all summer and perennials have shorter blooming seasons. Annuals, which include flowers such as petunias, impatiens, begonias, and marigolds, require more water than perennials but reward you with bright color.

Perennials take some planning. Plant some that bloom in the spring, others that flower in July and August, so that the garden has color all summer. Use annuals to fill out perennial beds with lasting color.

Buy small, dense, leafy plants and avoid any that are leggy or have yellowing leaves. Lift them from the plastic cups and gently untangle the roots without disturbing the dirt ball too much. The roots need to be loosened so that they can find new footholds in the garden.

Plant flowers with enough room between them to spread. They will, as the summer progresses.

Vegetables tell a different story. Most need good sun and plenty of room to grow. If you plant flowers and herbs around the edges of the vegetable patch, the garden will be prettier and some flowers even deter some pests.

4. Water
All gardens need water. Unless you live in the dessert or rain forest, your garden will need about an inch of water a week during the growing season. Water the garden at least three times a week, giving it a good soak.

A hose with a watering wand is effective for small gardens. For larger spaces, a sprinkler that oscillates is a good idea. Soaker hoses, which lie flat in the beds, take longer and only cover a narrow swatch, but they can be very effective. These are great for vegetable gardens.

Water in the cool parts of the day, such as the morning and evening. When the sun is hottest, the water evaporates quickly and does your garden very little good.

5. Fertilizer
Flowers and many vegetables benefit from monthly fertilizing. Fertilizers add nutrients including the two most crucial for a garden: nitrogen, which promotes leaf growth, and phosphorous, which helps with root health.

Chemical fertilizers are efficient and powerful, but organic fertilizers do a good job, too, and have the added benefit of doing more to improve the soil over the long term.

Sprinkle the fertilizer over the dirt and scratch it into the soil with a rake or fork.

6. Mulch
Every good gardener extols the virtues of mulch. You can buy mulch, usually as wood chips, or make your own from grass clippings and leaf litter. Most gardeners use the former when the garden is active and the latter during the cold, dormant months of winter.

Mulch holds in moisture and inhibits weed growth. Once the garden is planted, spread mulch so that it’s an inch or two deep. Take care not to mulch up against plant stems but leave some air around them so that they don’t rot.

Be realistic when you plan your first garden. Start small; you can always expand later in the summer or next spring. Pull weeds when you spot them, water regularly, fertilize during the growing season, and then sit back and enjoy the fruit of your labor.

How does your garden grow? Very nicely!


text:
Back to main page Search for:

FamousPoetsAndPoems.com / Poets / Sir John Suckling / Poems
Popular Poets
Langston Hughes

Shel Silverstein

Pablo Neruda

Maya Angelou

Edgar Allan Poe

Robert Frost

Emily Dickinson

Elizabeth Barrett Browning

E. E. Cummings

Walt Whitman

William Wordsworth

Allen Ginsberg

Sylvia Plath

Jack Prelutsky

William Butler Yeats

Thomas Hardy

Robert Hayden

Amy Lowell

Oscar Wilde

Theodore Roethke

All Poets

See also:

Poets by Nationality

African American Poets

Women Poets

Thematic Poems

Thematic Quotes

Contemporary Poets

Nobel Prize Poets

American Poets

English Poets

Sir John Suckling Poems
Back to Poems Page
A Ballad upon a Wedding by Sir John Suckling
I tell thee, Dick, where I have been,
Where I the rarest things have seen,
O, things without compare!
Such sights again cannot be found
In any place on English ground,
Be it at wake or fair.

At Charing Cross, hard by the way
Where we, thou know'st, do sell our hay,
There is a house with stairs;
And there did I see coming down
Such folks as are not in our town,
Forty at least, in pairs.

Amongst the rest, one pest'lent fine
(His beard no bigger, though, than thine)
Walked on before the rest:
Our landlord looks like nothing to him;
The King (God bless him!) 'twould undo him,
Should he go still so dressed.

At course-a-park, without all doubt,
He should have first been taken out
By all the maids i' th' town:
Though lusty Roger there had been,
Or little George upon the Green,
Or Vincent of the Crown.

But wot you what? the youth was going
To make an end of all his wooing;
The Parson for him stayed.
Yet, by his leave, for all his haste,
He did not so much wish all past,
Perchance, as did the maid.

The maid (and thereby hangs a tale),
For such a maid no Whitsun-ale
Could ever yet produce;
No grape that's kindly ripe could be
So round, so plump, so soft, as she,
Nor half so full of juice!

Her finger was so small the ring
Would not stay on, which they did bring;
It was too wide a peck:
And to say truth (for out it must),
It looked like a great collar (just)
About our young colt's neck.

Her feet beneath her petticoat,
Like little mice, stole in and out,
As if they feared the light:
But oh! she dances such a way,
No sun upon an Easter Day
Is half so fine a sight!

He would have kissed her once or twice,
But she would not, she was so nice,
She would not do 't in sight:
And then she looked as who should say
"I will do what I list today,
And you shall do 't at night."

Her cheeks so rare a white was on,
No daisy makes comparison,
(Who sees them is undone),
For streaks of red were mingled there,
Such as are on a Catherine pear,
(The side that's next the sun).

Her lips were red, and one was thin
Compared to that was next her chin, -
(Some bee had stung it newly);
But, Dick, her eyes so guard her face,
I durst no more upon them gaze
Than on the sun in July.

Her mouth so small, when she does speak
Thou'dst swear her teeth her words did break,
That they might passage get;
But she so handled still the matter,
They came as good as ours, or better,
And are not spent a whit.

If wishing should be any sin,
The Parson himself had guilty been,
(She looked that day so purely);
And, did the youth so oft the feat
At night, as some did in conceit,
It would have spoiled him surely.

Just in the nick, the cook knocked thrice,
And all the waiters in a trice
His summons did obey.
Each servingman, with dish in hand,
Marched boldly up, like our trained band,
Presented, and away.

When all the meat was on the table,
What man of knife or teeth was able
To stay to be entreated?
And this the very reason was,
Before the parson could say grace,
The company was seated.

The business of the kitchen's great,
For it is fit that man should eat;
Nor was it there denied.
Passion o' me, how I run on!
There's that that would be thought upon,
I trow, besides the bride.

Now hats fly off, and youths carouse,
Healths first go round, and then the house:
The bride's came thick and thick;
And when 'twas named another's health,
Perhaps he made it hers by stealth.
And who could help it, Dick?

O' th' sudden, up they rise and dance;
Then sit again and sigh and glance;
Then dance again and kiss.
Thus several ways the time did pass,
Whilst every woman wished her place,
And every man wished his!

By this time all were stolen aside
To counsel and undress the bride;
But that he must not know;
And yet 'twas thought he guessed her mind,
And did not mean to stay behind
Above an hour or so.

When in he came, Dick, there she lay
Like new-fallen snow melting away
('Twas time, I trow, to part).
Kisses were now the only stay,
Which soon she gave, as one would say,
"God-be-with-ye, with all my heart."

But, just as Heavens would have, to cross it,
In came the bridesmaids with the posset:
The bridegroom ate in spite;
For, had he left the women to 't,
It would have cost two hours to do 't,
Which were too much that night.

At length the candle's out, and now
All that they had not done they do;
What that is, who can tell?
But I believe it was no more
Than thou and I have done before
With Bridget and with Nell.
View Sir John Suckling:  Poems | Biography | Books

Home   |   About Project   |   Privacy Policy   |   Copyright Notice   |   Links   |   Link to Us   |   Tell a Friend   |   Contact Us
Copyright © 2006 - 2010 Famous Poets And Poems . com. All Rights Reserved.
The Poems and Quotes on this site are the property of their respective authors. All information has been
reproduced here for educational and informational purposes.


text:
Famous Quotes Online ...

This quote is from: Ed Byrne

    The industry is certainly one of the sectors that our government believes has the potential to drive our economic development in the near-and long-term future, particularly because of the impact it has on the rural regions of our province,

go back


text:
(1) A British Smial

A smial of the Tolkien Society located in Belper, Derbyshire, England. Fl. early 80s. It published the Crickhollow Gazette.

(2) A Branch of the Mythopoeic Society

A branch of the Mythopoeic Society founded in the mid-70s by Joanne Bennett in the region around Sparks, Reno and Carson City, NV. Fl. 1976-89.

This is a club page. Please extend it by adding information about when and where the club met, when and by whom it was founded, how long it was active, notable accomplishments, well-known members, clubzines, any conventions it ran, external links to the club's website, other club pages, etc.

When there's a floreat (Fl.), this indicates the time or times for which we have found evidence that the club existed. This is probably not going to represent the club's full lifetime, so please update it if you can!


text:
Buy 10 get 1 FREE!
On Great Canadian Dog Food

Visit us today to set up your card.
pet food

Farmers Plus carries Country CatPardner and L'il Red Cat and Kitten for cats,

and Country Maintenance, ProPet, Big Red Dog and Puppy, and Great Canadian Dog Food for dogs.

The Great Canadian Pet Food Company is based in Moorefield, Ontario, and is working with Farmers Plus to keep your dogs happy and healthy, and to save you money!

Together we offer these great programs:

Frequent Buyer ProgramGreat Canadian  Buy 10 bags of Great Canadian Dog Food and receive the 11th bag free!  Cards available at the checkout.  (Free bag based on smallest size purchased.)

Share your story with other Great Canadian Dog Food lovers!  Submit a testimonial and receive a free bag of dog food. (Testimonials can be sent to Farmers Plus or directly to Great Canadian Pet Food Company, see below for link.)

Kennel Program
Register your kennel with the Great Canadian Pet Food Company to receive special pricing and free puppy packs!

For more information on any of these programs, please call Farmers Plus or visit the Great Canadian Pet Food Company website at   www.thegreatcanadiandogfood.ca


text:
Thursday, August 9, 2012

Most Creative Portfolios & Resumes

Want to get noticed? Check out these creative portfolio and resume ideas, get inspired. Make something memorable and set yourself apart. Tell a story, inject personality, demonstrate expertise, entertain and leave your recipients wanting more.
Editorial CV
Woodworking Portfolio
Infographic Resume
Chocolate CV
CV Website
Poster CV/Mailer

For more information click on the link below:

No comments:

Post a Comment


text:
Tuesday, July 17, 2012

Shop Boho Belts Johnny Was Serenity Obi Belt

The perfect accessory to finish your Boho style is a boho belt. Boho belts is at its best at Johnny Was. Check out one of JWAS boho belts - The Serenity Obi Belt is a year-round must-have accessory. Any outfit will benefit from this boho chic pop of color. So shop Boho belts at Johnny Was today and channel your inner boho.

No comments:

Post a Comment


text:
Thursday, 14 June 2012

No Need to Save....Ever

Everything. Saved. All the time.

Surely you have to save stuff?

No it happens automatically, all the time.

What? Like autosave?

No, not really, this saves everything, all the time. You never need to press save and if you have a crash, you don't lose anything.

It's fucking awesome!

No comments:

Post a Comment


text:
Freedom of Information

Freedom of Information

The National Federation was assigned responsibility by the Department of Health & Children to oversee implementation of the Freedom of Information Act 1997 in the Intellectual Disability Sector.  All statistical information for the FOI Central Policy Unit in the Department of Finance and for the Information Commissioner's office is processed though the Secretariat office.

The National Federation networks operate at regional level and interface with local HSE Area networks.

Full details of all FOI information/legislation - e.g. Freedom of Information Act 1997 and Freedom of Information (Amendment) Act 2003 - are available on the FOI Central Policy Unit of the Department of Finance website.

The HSE website also provides a link to their staff guide which is designed to explain the main provisions of Data Protection and Freedom of Information legislation.  There is also a section in the guide on Administrative Access, that is, how to obtain personal information in a routine and informal way.

Office of the Information Commissioner

The Information Commissioner's main function is to conduct reviews of decisions made by public bodies under the Freedom of Information Acts.  Emily O'Reilly, the Information Commissioner, also reviews the operation of the Freedom of Information legislation and works to foster an attitude of openness across public bodies.  The website of the Office of the Information Commissioner also provides information on the Freedom of Information Act in general and, in particular, on the role of the Office.  The website also allows an individual to make an appeal to the Information Commissioner on-line.

Procedures for Inquiry Officers under the Disability Act 2005
The Disability Act 2005 provides that the head a public body must draw up and publish procedures for the making and investigation of complaints in relation to the failure of that body to provide accessible services in accordance with that Act. The Information Commissioner has now pubished procedures for her Inquiry Officers under that Act.

Data Protection Commissioner

The Data Protection Commissioner aims to protect the individual's right to privacy by enabling people to know, and to exercise control over how their personal information is used, in accordance with the Data Protection Acts, 1988 & 2003.   The website of the Data Protection Commissioner also outlines the standards which must be complied with by individuals and organisations in handling personal data.

Further Information

For further information, please contact Caroline Looney.

© 2018 National Federation of Voluntary Bodies,
  • Oranmore Business Park Oranmore Galway Ireland.
  • Phone: +353 91 792316
  • Fax:
  • Email:
Website Last Updated: 29/11/2018 Web Design by Webtrade

Search - Use spaces to separate your keywords
Welcome to the National Federation of Voluntary Bodies


WARC-Identified-Payload-Type: application/atom+xml

text:
Func(Of Inspiration) – Joshua Lewis's Blog Half-baked, stream-of-consciousness musings on software development philosophy 2018-01-25T17:48:05Z Joshua Lewis <![CDATA[The Essence of SAFe]]> 2017-09-27T06:17:48Z 2017-09-24T03:53:05Z Scaled Agile Framework (SAFe) can look quite complicated and intimating at first glance. However the essence of SAFe is pretty simple:

  • Fractal Plan-Do-Check-Act feedback loops (Team- and Program-level)
  • Fractal levels of work filtering and prioritisation
  • Priority alignment at scale (i.e. across a large number of people)

Around 6 months ago I got trained in Scaled Agile Framework (SAFe) and became certified as a SAFe Program Consultant (SPC) for SAFe 4.0. Before doing the training, I had a somewhat negative opinion of SAFe, as well as other scaling frameworks, e.g. LeSS, DAD etc. I can now say that my former opinion was based on very little understanding of what SAFe is and how it works, and was without a doubt an uneducated opinion. I admit to being somewhat ashamed for having the views I held then. Anyway, since the training, I have coached almost full-time in an organisation practicing SAFe, and have done a fair amount of thinking, training and speaking on SAFe. The following is what I believe to be the essence of SAFe. (Disclosure: my training and certification is in SAFe 4.0. SAFe 4.5 was released relatively recently. I have not yet caught up with 4.5, though I believe my thoughts remain valid and accurate.)

Fractal feedback loops: SAFe has 2 main Plan-Do-Check-Act feedback loops. At the team level, Scrum (or Kanban), and at the program, or team-of-teams level, the Program Increment. A Program Increment (PI) is analagous to a sprint in Scrum, that is a timebox wherein a group of people plan, execute, reflect and adjust together. The differences between a PI and a sprint are that a PI involved more people, is longer lived (typically 4-5 sprints), and has ceremonies designed for the level of scale. Note that although a plan is made at PI Planning, this plan is not set in stone. It is revisited frequently during execution of the PI, much the same way a Sprint plan is revisited every day at a Daily Stand-Up or Daily Scrum (HT to Kevin Shine for reminding me about this point).

Fractal work filtering and prioritisation: Kanban is used at various levels (portfolio, value stream and program levels in SAFe 4) to filter and prioritise the work that the people in the teams do. This is to ensure as far as possible that we don’t waste time and effort working on the wrong things. This is similar to how work gets filtered and prioritised in Scrum. The feedback loops mentioned above provide a limit to the length of time the teams work on anything before getting feedback from stakeholders.

Priority alignment at scale: An Agile Release Train is a way of making sure that everybody, across the organisation, required for work to happen has the same single list of priorities. That is, all the necessary people are dedicated solely to this set of priorities. This is analagous to cross-functional teams in Scrum. When everyone has the same priority, we have much less coordination overheard and much less waiting for each other compared to being dependent on people with other priorities.

SAFe does have a lot of roles and moving parts, there is no doubt. However I believe that the three things mentioned above form the core and essence of the framework. I certainly believe that most organisations, certainly those I’ve worked in, would benefit from all three of these structures and practices.

Kent Beck is fond of saying:

Work on the most important thing until either its done or its no longer the most important thing

If you look closely at the three things above, you might find that they’re simply ways of doing just this, when there are a large number of people working together on the same thing.

Joshua Lewis <![CDATA[That’s Not Agile!]]> 2017-09-20T05:37:08Z 2017-09-20T05:00:01Z TL;DR People spend a lot of time arguing whether things are ‘Agile’ or not. ‘Agile’ has become the tail wagging the dog and asking that question misses the point. The question we should be asking is “Does X help us (or our client) achieve the outcomes they desire?”

I recently spoke at a community meetup on the topic Agile Release Trains: Agile, or not so much?. The talk had 2 parts, the first explaining what Agile Release Trains are; the second part discussing whether the question But is it Agile? is a useful question to ask. In my previous post (What is ‘Agile’), I discussed my current interpretation of the Manifesto for Agile Software Development and what I believe ‘Agile’ means.

I no longer believe that there is much value in discussing whether something, e.g. Agile Release Trains, is Agile or not. The term ‘Agile’ has become a misnomer, a red herring. It has become the tail wagging the dog. In his Agile Africa 2015 Keynote, Kent Beck used the analogy of dogs and small children looking at the pointed finger, instead of what the finger is pointing at, to describe Agile. Alistair Cockburn, another Manifesto signatory has launched his own ‘new branding’: Heart of Agile. I assume this was because he was frustrated by what Agile had become.

Agile has become a goal in its own right, and has moved away from its origins as a guideline for a way of operating. Instead of asking “does this help me (or my client) achieve the outcomes we seek?”, we’re so caught up in debating what agile is or isn’t, and spend a lot of time in No True Scotsmen arguments.

Who cares if its agile? Are we moving in the direction of continuous improvement or not? Do we even know what continuous improvement means for us in our context? What would imrovement look like? How would we measure it? Would we know it if it bit us in the backside? The next time you hear, or say, “That’s Not Agile!”, stop. Ask yourself what’s really being said and why.

For what it’s worth, my opinion is that any operating model that follows the 4 value statements described in the Manifesto is, by definition, agile.

Joshua Lewis <![CDATA[What is ‘Agile’?]]> 2017-09-19T03:08:45Z 2017-09-19T03:08:45Z TL;DR Agile is a way of operating wherein the decisions we make are guided primarily by 4 trade-off statements expressed as value statements in the Agile Manifesto. Following this guidance is believed to lead to improved ways of developing software.

Recently I have again started to question what is meant by ‘Agile’ (I make no distinction between ‘Agile’ and ‘agile’). I have asked this question at a few conferences, Lean Coffees etc. This is my current interpretation of ‘Agile’, as informed by the Manifesto for Agile Software Development, specifically the first statement and the four value statements:

We are uncovering better ways of developing software by doing it and helping others do it. Through this work we have come to value:

Individuals and interactions over processes and tools
Working software over comprehensive documentation
Customer collaboration over contract negotiation
Responding to change over following a plan

That is, while there is value in the items on
the right, we value the items on the left more.

These statements provide guidelines for trade-off decisions we should be making. If you’re in a situation where you can choose between working on either working software or comprehensive documentation, rather choose working software, especially if you don’t yet have working software.

If you’re in a situation where you have a plan but have discovered that the plan no longer makes sense, you can choose between either following the plan (even though you now know it no longer makes sense to do so), or responding to the change, the guidance from the Manifesto is to rather respond to the change. (I personally prefer adapt to learning over responding to change but that’s another story.)

The same thinking applies to the other two value statements: should you have to choose either contract negotiation or customer collaboration, rather choose the latter. If you need to choose between processes and tools and individuals and interactions, again rather choose the latter.

The original authors and signatories of the Manifesto believed, based on their collective experience, that if you follow these decision making guidelines, you will become better at developing software. I certainly don’t disagree with them.

Joshua Lewis <![CDATA[Test Trade-Offs]]> 2017-02-17T10:16:20Z 2017-02-15T09:11:03Z TL;DR: Software developers often decide what tests to write based on technical considerations. Instead they should decide what tests to write based on what feedback is missing. The Test Trade-Offs Model can be used to make better decisions around what tests to write. Useful dimensions to use when deciding what type of tests you should write are primarily: speed of feedback, coverage and variation.

The current thinking in the software development industry is to have a lot of low-level unit tests, fewer integration tests, and even fewer higher-level tests like system or end-to-end tests. The Test Pyramid, shown below, is a common model used to describe the relative amounts or ratios of the different types of tests we should aim for.

Traditional Test Pyramid

This kind of thinking generally focuses on how quickly the tests run – i.e. speed of feedback – and also how easy it is to write the different types of tests. Both of these are technical considerations. The problem I have with this thinking is it ignores the primary reason we have tests in the first place – to get feedback about our system. If technical considerations govern the types of tests we have, there may be a large number of tests we will never write, and thus a lot of feedback we’re not getting. For example, having lots of low-level unit tests doesn’t give us any information about how the system works as a whole. Evidence of this phenomenon is the multitude of memes around unit testing not being enough. Some of my favourites (click the pictures for the original Tweets):

Unit testers be like

Focusing on technical considerations only leads us to make blind trade-offs: we’re not even aware of other dimensions we should be considering when deciding which tests to write. The Test Trade-Offs Model was developed so that teams trade-offs when deciding which tests to write, by making other trade-of dimensions explicit. The model is predicated on the idea that different tests are valuable to different audiences at different times, for different reasons.

The dimensions currently in the model are:

  • Speed: How quickly does the test execute? How long do we have to wait to get the feedback the test gives us?
  • Coverage: How much of the system (vertically) does the test exercise? In general, the higher the coverage, the more confident we are about the behaviour of the system as whole, since more of the system is being exercised. Coverage is also known as scope or depth.
  • Variation: How many near-identical variations of the test are there? E.g. if a test has lots of inputs, there may be very many combinations of inputs, with each combination requiring its own test. (This article is useful for more on this idea.)

In an ideal world, our tests would execute instantaneously, cover the entire system, and would deal every combination of inputs and states as well. Therefore, the ideal test would score very highly in all dimensions. Unfortunately this is not possible in the real world since some of the dimensions have an inverse affect on others. The image below is a causal loop diagram showing the causal relationships between dimensions.

Causal Loop Diagram
  • An increase in Coverage generally leads to a decrease in speed of feedback. This is because the more of the system covered by the test, the longer the test takes to run.
  • An increase in Variation typically leads to a decrease in coverage. With high variation, there is usually a very high number of tests. If the suite of tests is to complete running in a reasonable timeframe, we usually decrease the coverage of these tests.

As the model shows, no test can ever maximise for all dimensions. Any test will compromise on some of the dimensions. We therefore need to choose which dimension to prioritise for a test. This is the trade-off. Each test should prioritise one of the dimensions. The trade-off of priorities should be based on what feedback about the system we need.

For example, if we need tests that give us information about the behaviour of the whole system, which will be valuable for a long time, we’re most likely willing to compromise on speed of execution and variation. The trade-off is now explicit and deliberate. Traditionally we would have ruled out such a test immediately because it would take too long to run.

The way I’d like to see the model being used is for teams to decide what system feedback they’re missing, decide what trade-offs to make, and then what kind of tests to write.

I believe this to be the the first iteration of the model, I expect it to evolve. I’m certain there are other dimensions I haven’t yet included, perhaps even more important dimensions. What dimensions do you use when deciding what type of tests to write? What dimensions do you think should be added to the model?

I would like thank Louise Perold, Jacques de Vos and Cindy Carless who helped me refine my thinking around this model and who helped improve this article.

Joshua Lewis <![CDATA[The States, Interactions and Outcomes Model]]> 2017-02-10T09:15:28Z 2017-02-10T09:13:26Z TL;DR: The States, Interactions and Outcomes model provides a way for cross-functional teams to collaboratively explore, specify and document expected system behaviour.

Specification by Example (SbE) and Behaviour-Driven Development (BDD) can be an incredibly effective way for teams to explore and define their expectations for the behaviour of a system. The States, Interactions and Outcomes Model provides a set of steps, and a lightweight documentation structure for teams to use SbE and BDD more effectively. The best way of conveying the model is through a worked example.

Worked example
To demonstrate the model and the process, I will take you through applying it to a problem I use frequently in coaching and training. Imagine we are creating software to calculate the total cost of purchased items at a point of sale. (This problem is inspired by Dave Thomas’ Supermarket Pricing Kata and here.) You walk up to a till at a supermarket, hand the check-out person your items one-by-one, and the checkout person starts calculating the total of the items you want to purchase. The total is updated each time the checkout person records an item for purchase.

We would like to include a number of different ways of calculating the total price for purchased items, since the supermarket will want to run promotions from time to time. Some of the pricing methods we would like to include are:

  • Simple Pricing: the total cost is calculated simply by adding up the cost of each individual item recorded at the point of sale.
  • Three-for-Two Promotion: By three of any particular item, pay for only two. This promotion is specific to the type of item being sold. For example, buy three loaves of Brand-X bread, pay for only two.
  • Combo Deal: A discount is applied when a specific combination of items is purchased.
  • Bulk Discount: A discount is applied when more than a specific number of a particular item is purchased.

In this article I will deal with only ‘Simple Pricing’ and ‘Three-for-Two Promotion’. I will deal first with ‘Simple Pricing’ completely, and then start with ‘Three-for-Two Promotion’.

Simple Pricing

  • System boundaries: We are concerned only with the way the total for the purchased items is calculated. We are not concerned with things like how the cost of an item is acquired (e.g. barcode scanning), accepting payment etc.
  • Types of inputs: For Simple Pricing, the only input is the price of the item being recorded – item price.
  • Types of state: What affects calculating the total price besides item price? For Simple Pricing, the total after recording an item – the new total – is determined by both the price of the captured item, as well as the total before the item is captured. Therefore state consists of current total.
  • Outcome dimensions: For Simple Pricing, the outcome consists only of the total calculated as a result of capturing an item – new total.
  • Possible values for state types: Current total is an integer, which can be negative, 0, or positive.
  • Possible values for inputs: Item price is an integer, which can be negative, 0, or positive.

Expected outcomes for combinations of state and inputs:

State Interaction Outcome Scenario Name
Current total Capture item that costs New total Error
0 0 0 Free first item
0 10 10 First item
10 10 20 Second item
0 -10 ERROR – item price can’t be negative First item with negative price
10 -10 ERROR – item price can’t be negative Second item with negative price
10 ABCDEF ERROR – invalid input Text input

Three-for-Two Promotion

  • System boundaries: The system boundaries don’t change compared to Simple Pricing.
  • Types of inputs: For Three-for-Two Promotion the type or name of the item is now also required as an input – item type.
  • Types of state: The outcome is now also affected by two other types of state: the types of items already captured – already captured items; and the type of Promotion currently active – Active Promotion.
  • Outcome dimensions: For Three-for-Two Promotion, the outcome consists of new total, as well as the new list of items that have been captured – new captured items.
  • Possible values for state types: Current total is an integer, which can be negative, 0, or positive. Active Promotion is a complex type. It can be ‘none’ or a promotion for a specific type of item, e.g. ‘Buy 3 Cokes, pay for 2’.
  • Possible values for inputs: Item price is an integer, which can be negative, 0, or positive. Already captured items specifies the quantity and types of items already captured.

Expected outcomes for combinations of state and inputs:

State Interaction Outcome Scenario Name
Active promotion Current total Items already captured Capture That costs New total New captured items Error
20 2 Cokes Coke 10 30 3 Cokes 3rd item with no promotion
Buy 3 Cokes pay for 2 20 2 Cokes Coke 10 20 3 Cokes 3rd qualifying item with 3 for 2 promotion
Buy 3 Cokes pay for 2 20 1 Coke, 1 bread Coke 10 30 2 Cokes, 1 bread 3rd item doesn’t trigger promotion

There are several interesting things about the specifications above to which I’d like to draw particular attention:

  • All the words and concepts used are domain-level words and concepts. There are no implementation or software-specific words.
  • The specification describes the transactions and outcomes only, not how the work should be done.
  • The things that determine the outcome of a transaction are super-obvious and explicit. This makes it easier to detect and discuss edge cases.
  • Invalid states and interactions are easy to see.
  • The path to any particular state is clear and obvious
  • Should we want to, it would be easy to automate the verification of a system which should satisfy these specifications.

As mentioned above, I developed and use this model during my coaching and training. It has proven very effective for quickly exploring and documenting system behaviour. In some BDD Bootcamps, we have explored and specified legacy systems running in productions in about 3 hours. One of the ways this has proven useful is people in the bootcamp who have not worked on those particular systems gained a very thorough high-level overview of the intention of the system.

The worked example above follows these steps:
1. Explicitly define and bound the system under specification. What is included, what is excluded?
2. What are the different inputs to the system?
3. What are the types of state that the system can have? Another way to ask this: Besides the inputs, what can affect the outcome of an interaction?
4. What constitutes system outcome? Is any output returned to the user? Note that an outcome must, by definition, include all states as identified above. Outcome can also include error conditions.
5. For each type of state, what are the possible values?
6. For each type of input, what are the possible values?
7. For each combination of state and interaction, what is the expected outcome (including all dimensions)?

The Thinking Behind The Model
The idea behind the model is that the outcome of a system interaction is a function of the interaction and the state of the system at the time of interaction. We can develop a complete and comprehensive specification of expected system behaviour by describing the expected outcome for every possible combination of state and interaction.

Specification by Example and Behaviour-Driven Development
The model and the steps are largely based on the concepts of Specification by Example and Behaviour-Driven Development. Specification by Example (SBE) is the practice of specifying expected system behaviour using concrete values instead of natural-language descriptions. For more on Specification by Example,you can’t do better than Gojko Adzic’s book. Behaviour-Driven Development (BDD) uses SBE. One of the reasons I use SBE is that it allows us to work with something tangible, instead of ‘invisible ideas’. Some of the benefits of using BDD and SBE are:

  • Getting feedback on the work from a wider audience earlier in the process.
  • Making edge cases more obvious.

Ordinarily, we would need to write some software to achieve these things. By using BDD and SBE we can get these benefits before writing any software. However it is not always easy to get started with these techniques.

A common challenge teams face when they start using BDD and SBE is the need to make every aspect of expected externally-observable system behaviour completely explicit. That is, all the factors which affect the behaviour of the system must be identified and made explicit. If any of these factors are missing or unknown, we cannot specify expected system behaviour completely and comprehensively – we will have gaps. It is difficult to develop a successful software product if there are gaps or inconsistencies in what we expect the software to do.

Understanding systems
The steps above are designed to help a team understand the system they’re dealing with. The simplest way we can understand the behaviour of a system is as a simple transaction: some entity is stimulated or exercised in a particular way, and the entity does some work. The simplest way of modeling a transaction is by stating that the input to a system determines the output.

In this view, the system output is determined only by the input to the system. I have come to use the terms ‘Interaction’ and ‘Outcome’ instead of ‘input’ and ‘output’ respectively, because they are closer to the way most people think about working with software products: “I interact with a system to achieve some outcome”.

However, it is important to understand that the outcome of an interaction with a system is determined not only by the interaction, but also by the state of the system at the time of the interaction.

The introduction of state into the picture often causes some challenges. The first challenge is differentiating between interaction and state. The easiest way to distinguish between them is by asking the question What determines the outcome of an interaction besides the input?.

The next challenge is understanding that system state is generally not described by a single value. System state is typically made up of multiple dimensions or types, and therefore must be expressed as a set of concrete values, one value per dimension. The same applies to values supplied to the system as part of an interaction.

Once a team begins thinking in terms of states, interactions and outcomes, they’re generally able to have more effective conversations around what behaviour they expect from their system.

Joshua Lewis <![CDATA[Lean Coffee: Lessons Learned Hosting & Facilitating]]> 2016-12-09T09:32:02Z 2016-12-09T09:32:02Z TL;DR: Lessons learned from hosting and facilitating Lean Coffees at public meetups, within companies and at conferences.

I have been hosting and facilitating Lean Coffee for a number of years now, for the Lean Coffee JHB Meetup, at companies where I’ve worked, and at several conferences I’ve attended. Along the way I’ve learned a few things about hosting and facilitating. Quite frequently people ask me for advice on starting a Lean Coffee. These are the lessons I’ve learned.

Lean Coffee
Lean Coffee is a lightweight structure for an informal gathering where the participants decide the agenda at the start of the gathering in a just-in-time way. The aim is to have many shallow discussions about a broad range of topics instead of deeply discussing only one or two topics. All you need for a Lean Coffee is somewhere to gather (hopefully with either good coffee or beer), someone to invite people, and someone to facilitate (after a while the gatherings become self-facilitating).
The discussion around each topic is time-boxed, so that we don’t spend too much time on a single topic. Lean Coffee was originally developed to discuss Agile/Lean coaching, but you can discuss anything. You as a host decide if there are boundaries to the topics which can be discussed.

Its very easy to host a Lean Coffee, all you need to is:

  • Secure a space for the event. This may or may not need to be booked. For public events, we usually just show up at a coffee shop, sometimes without warning them. The venue should be appropriate for the number of people you’re expecting (see Group Size below).
  • Invite people. Get the word out there. Most public Lean Coffee groups I know of use which works well. For conferences, getting Lean Coffee added to the official conference program works well, as does Twitter, and getting conference hosts to announce it.
  • Secure stationery for the gathering. This might entail bringing it yourself or asking other people (or a sponsor) to provide it. Generally all you need is a few pads of sticky notes, and some pens and/or markers. If at a conference, there’s likely to be some stationery around that you can use. You may want a whiteboard or flipchart too depending on type of venue and number of people (see Facilitating below).
  • Make sure there’s a supply of good coffee and/or beer. Its ok for people to pay for their own coffee at a public Lean Coffee (sponsorship is always great though). Try make sure there’s decent stuff.

Facilitating means you’re holding the space and managing the flow of the event. You can think of it like directing the traffic at the gathering. Facilitating typically includes the following:

  • Dealing with any rudeness, conflict, hostility, high emotions etc if they occur. We’re allowed to disagree but we’re not allowed to disrespect each other.
  • Create a flow board (otherwise known as a Kanban board or Personal Kanban board), with ‘To Do’, ‘Doing’ and ‘Done’ columns. The board is used to keep track of where we currently are in the event.
  • Explaining the flow of Lean Coffee (see Flow below). This includes when you will retrospect and end. I have a set of laminated cards I use on the flow board to demonstrate the flow.
  • Moving the cards and topic sticky notes on the flow board as the event progresses.
  • Mention the Sticky Note Tips (see below) before the brainstorm.
  • Reading out the proposed topics one by one, in any order you like, prompting the proposer to pitch their idea.
  • Explain dot voting procedure when its time to vote for topics.
  • Read out the new topic again at the start of each new discussion
  • Keeping time and indicating when its time for the silent thumb vote (see Flow below).
  • Deciding whether to keep the current topic or move on to a new one based on the number of votes.
  • Moving on to a new topic if discussion dies down before the timebox has ended.
  • Making sure that once a new topic has started, people stop discussing the old topic and move on to the new one.
  • Stopping timeously to retrospect and running the retrospective.

The flow of Lean Coffee is:

  1. Explain: Explain what Lean Coffee is, especially for first-timers. The Lean Coffee section above should be useful for this. Use the points below to describe the flow.
  2. Introduce: Everyone gives a 20-second, 2-sentence introduction of themselves. The content of the introduction should be germane to the theme of the Lean Coffee, especially if it is bounded. You might want to skip this step if there are a lot of people at the gathering.
  3. Brainstorm: Each person, silently, writes a brief summary of the topics they’d like to discuss on a sticky note (see Sticky Note Tips below). A topic can be anything, usually a question the proposer has, or something they’ve been thinking about. Unless there’s a theme, I tell people they can propose anything, since the group will vote on what they want to discuss anyway.
  4. Pitch: The facilitator goes through the proposed topics one at a time, sticky by sticky, in whatever order they like, and reads out the topic summary. The topic proposer then gives a quick spoken pitch of the topic. The pitch should be just long and deep enough to allow everyone to vote on which topics they want to discuss.
  5. Vote: Everyone votes on which topics they’d like to discuss. Voting is done with dots (i.e. dot voting). A vote is created by making a dot on a sticky with a pen or marker. The vote doesn’t count unless the person says ‘ping’ loudly while marking the sticky. Everyone gets a certain number of dots for voting, typically 2 or 3. The number is determined by the number of participants.
    A person can distribute their votes in any way, all votes on a single sticky, or one each on as many stickies as there are votes. Topic proposers can vote for their own topics. Once voting has finished, the facilitator orders the stickies in most to fewest votes, and places the stickies in the ‘To Do’ column of the flow board. The facilitator decides how to handle stickies with the same number of votes.
  6. Discuss: This is the meat of the event. The group start discussing the topics, starting with the topic with the most votes. The topic proposer starts the discussion, usually with the summary, and maybe a little more depth. The discussion continues until a time limit is reached. The time limit is usually decided by the facilitator or group at the beginning of the event. I usually use 5 minutes. I have also heard of 8 minutes and 15 minutes.
    Once the 5 minutes are up, a silent thumb vote is held, where each person signals whether they think discussing the current topic is valuable, or a new topic should be chosen. Intent is shown by a thumbs-up or thumbs-down gesture. People may abstain by using a horizontal thumb. It is important that everyone understands what thumbs-up and thumbs-down means, since different Lean Coffee groups have their own conventions. My convention is: thumbs-up = I’m still interested, same topic; thumbs-down = I want a new topic. The idea of voting with thumbs is that it is silent and doesn’t intrude on the discussion.
    If there are enough ‘same topic’ votes, the discussion for this topic is extended, but is again timeboxed. My ‘extension’ timebox convention is 3 minutes. I’ve also heard of 5 minutes. I’ve also heard of not allowing extensions. My convention is to allow up to 2 extensions (with another silent thumb vote after the first extension). If a discussion is really animated and entertaining, with shouting and fist fights, I may decide to allow a discussion to continue as long as I want. You can decide on how many extensions you want to have. Once the discussion of a particular topic has ended, whether through ‘all extensions used’, enough ‘new topic’ votes, or if the discussion ends before the end of the timebox, the next topic is discussed. If you run out of time or topics, then you start the retrospective.
  7. Retro: How was the gathering? What can be improved next time its run so that it will be a better, more valuable, more rewarding experience? A lot of the content of this article has come from retrospectives.

Sticky Note Tips
There are a few things to remember which improve the usage and utility of sticky notes. They seem simple, but they’re easy to forget. I’ve made all of these mistakes at one time or another.

  • Write on the non-sticky side.
  • Write with the sticky strip on the top of the sticky.
  • Write only one idea per sticky.
  • Don’t peel stickies off the pad, pull or sheer them off. They stick better this way. Peeling leads to curling.
  • Write large enough so that the writing can be seen from a reasonable distance.
  • Try write with a colour that can be seen on the sticky colour.

Group Size
Group size is probably the factor that affects the hosting and facilitating of Lean Coffee the most.

  • Fewer than 4 people: When there are so few people, I usually discard the Lean Coffee structure and have a regular conversation. At this size venue doesn’t really matter.
  • Up to about 8 people: The public Lean Coffees I attend are usually around this size. Everyone can fit around a single table or a few small tables pushed together. Sound doesn’t need to travel as far. For these reasons venue is not too important at this size. The flow board can be created on the table(s) around which everyone sits.
  • Up to 20-25 people: This size is quite typical for conference and internal Lean Coffee. At this size it becomes difficult to fit everyone at a single table, and for everyone to see the flow board if it is on a table. Therefore you’ll probably need either a large room like a boardroom with a large table, or a room with several tables. At this size you want a room with doors that can close, especially if the venue is adjacent to a noisy area, like the registration or refreshments area at a conference. This is because everyone’s voice should be within hearing everywhere in the room.
    At this size, its not feasible to have the flow board on a table, so I usually use a convenient wall or whiteboard for the flow board. At conferences I usually use a flipchart for the flow board, and a second flipchart to hold the topic stickies before, during and after voting.
  • More than 20-25 people: I don’t have much experience with this group size. A pattern I’ve heard about a few times is splitting the large group into two or more smaller groups, which have their own discussions then ‘reconvene’ afterwards and brief each other on their discussions and learnings.

Internal Lean Coffee
For internal (private company-specific) Lean Coffee, its a good idea to announce at the beginning that everything said in the event is private and confidential and shouldn’t leave the room. This is to make a safe space so that people can open up more.
At one company we tried a few invitation mechanisms:

  • Single invitations for recurring meetings scheduled through Outlook/Exchange. Easy to create and administer, but declined once and forgotten about forever.
  • A ‘private’ group on This didn’t really gain any traction.

And, eventually,

  • A single invitation email per event, sent about a week before the time. This was a bit more admin, but I solved that by copying and pasting the email content and mailing list. This option worked the best. Be warned that people might get tired of your ‘spam’ 🙂

At this same company, people saw it as a something for people involved in software development only, and thus didn’t arrive. It turned out the name ‘Lean Coffee’ was the main reason behind this. I changed the name to ‘Coffee & Conversation’, and in my emails explicitly mentioned that it was for everyone. This increased attendance and diversity.

For internal Lean Coffee, try get your company or department to sponsor some refreshments. Coffee, donuts, sandwiches etc. This is a relatively cheap but effective crowd puller.

Try book a meeting/board room that is very visible and has a lot of foot traffic so that people see you as they walk past. Generate interest and curiosity.

One thing you should be aware of is that the presence of managers (or people to whom other people report) will have an effect on how safe people feel and therefore what they’ll be prepared to talk about. I’ve also seen the presence of senior managers change the conversation into questions that should be part of ordinary operations (this is fine if its the aim of you Lean Coffee but it wasn’t the aim of this one).

* Lean Coffee
* A nice slideshow I found explaining Lean Coffee
* Gerry Kirk’s One Page Intro which I’ve used a lot in the past. I usually have one or two laminated print-outs of this sitting on tables when I facilitate.
* Another great article on Lean Coffee
* Jo’burg Lean Coffee Meetup Group: My ‘home’ Lean Coffee, and where I first learned about it.
* Modus Cooperandi’s Lean Coffee material Modus Cooperandi is Jim Benson’s company. Jim Benson created Lean Coffee.

Please offer your Lean Coffee thoughts, tricks, tips, hacks and resources in the comments!

Joshua Lewis <![CDATA[Issues I’ve seen with Jira (and other similar tools)]]> 2016-11-22T15:22:17Z 2016-11-22T15:14:11Z TL;DR: Jira (and similar tools) is great for keeping track of bugs, and for tracking, coordinating and auditing work. It is a terrible way to communicate and collaborate across a team. Don’t use it as a communication tool. Rather speak in-person and then document your shared understanding in a tool like Jira, if such documentation is required.

There are some common anti-patterns I’ve seen in organisations that use Jira (and other similar tools). This is what I’ve experienced in several environments: A team goes into Backlog Refinement and/or Sprint Planning and the Product Owner (or whomever is responsible for documenting requirements) projects Jira onto the screen in the boardroom. One by one, each work-item is opened individually and the PO reads through what he or she has written. There’s a little bit of discussion, the delivery team decides they’re ready to play planning poker, they do so and provide an estimate for the work-item, which is captured, and then they move on to the next work-item.

Instead of having a conversation about what problem we’re trying to solve and what outcome we want to achieve, what often happens is everyone just reads what’s been written down. Yes, there is some discussion and a few questions, but fundamentally the conversation is framed (and limited) by what the PO had written down previously (however long ago that was). “We don’t need a conversation because all you need to know is in Jira, just read it.”

Because there is a lot of content, and because the PO clearly took a lot of time and effort to write all of this content, there is a tendency to avoid asking difficult question. “It must be the correct solution, right? The PO must have thought of everything, right?” How likely is the PO to be open to suggestions around solving the problem in a different way? (This is true for everyone, not just POs. Programmers are notorious for being attached to previous work.)

The opportunities for and likelihood of achieving shared understanding in this scenario are severely diminished. “There is so much written down, ‘communication’ must have taken place, right? We all understand what we’re trying to achieve, right?” The likelihood of coming up with a good solution to the problem is also severely diminished.

What typically happens is during development of the feature, there will be multiple ad-hoc face-to-face conversations between the delivery team and the PO (assuming the PO is available to the delivery team), when it is discovered that the written content in Jira is deficient or defective in some way.

What would happen if instead of the PO creating all the requirements documentation and then passing it to the delivery team, the parties had a real conversation, communicated effectively and gained shared understanding. If it is necessary to document this shared understanding, it can then be stored with a tool like Jira. This mitigates a lot of the pitfalls outlined above. I do also think tools like Jira can be very useful for attaching artifacts to work items, like screenshots, designs, wireframes etc.

Another big problem with Jira and similar tools is tool enslavement. Instead of making the tool work for us, we begin to work for the tool. I’ve seen much time and effort wasted through configuring and troubleshooting things like Jira workflows. I’ve seen things like Team A’s Sprint being closed because Team B’s Sprint was correctly closed, and the Sprints happened to have the same name (based on the date). Guess how much fun that was to resolve.

In conclusion, Jira was originally created as a bug/work tracking tool, and its best use is as a tool to plan, coordinate and audit work, not as a communication medium. If you need to document shard understanding, or what work was done when by whom, experiment with capturing this information post-fact, instead of up-front.

Joshua Lewis <![CDATA[Finding my Tribes and Leveling Up]]> 2016-09-26T12:39:35Z 2016-09-26T12:28:43Z TL;DR: There are many channels available for leveling-up and for finding your tribe, some of them less ‘traditional’. These are some that I use:
– In-person gatherings (meetups, conferences etc)
– Twitter
– Instant messaging (Slack/HipChat/Jabbr/Gitter/IRC etc)
– Websites (MSDN/Stack Overflow etc)
– Podcasts

This post was prompted by several things: My interview for Source; a conversation I had with two developers I am coaching, who had been thrown into the deep-end on a project with new, unfamiliar technology, and very little support from their company; a conversation with an acquaintance about resources available for leveling up.

A number of years ago, I felt very lonely and misunderstood as a professional developer. I care deeply about my craft and self-development and self-improvement, but struggled to find people with a similar outlook and experience. Part of my frustration was not having anyone with whom to discuss things and soundboard ideas.

I’m glad to say that today my life is totally different. I belong to several tribes, both in meatspace and virtual, have access to a lot more people and resources, with lots of different experiences and points of view. In fact I could probably spend my days only in debate and discussion now, without doing any other work. Besides the communities and resources discussed below, I’m extremely fortunate to be working at nReality where I have amazing colleagues, as well as access to a broad range of people through my training and coaching work.

The resources I use the most these days to level up are
– Meatspace Events
– Twitter
– Slack

Meatspace events are great for many reasons, including: you learn at a lot during the talks; you get to meet awesome, like-minded people and have stimulating conversations. There are a number of great in-person events. The best place to find them is

Of particular significance is DeveloperUG (Twitter) which has monthly events in Jo’burg and Pretoria/Centurion. I owe a massive debt to the founder and past organisers of DeveloperUG, Mark Pearl, Robert MacLean and Terence Kruger for creating such an amazing community.

I am involved in running or hosting these meatspace communities:
Jo’burg Lean Coffee
Jo’burg Domain Driven Design

These meatspace communities are also valuable:
Scrum User Group Jo’burg
Jozi JUG
Code & Coffee
Code Retreat SA
Jo’burg Software Testers

Conferences that I’ve attented and spoken at include
Agile Africa
Scrum Gathering
DevConf, and
Let’s Test SA

I haven’t yet had the opportunity to attend others, like JSinSA, RubyFuza, ScaleConf and others, but I know the same applies to them as well. Pro-tip: Getting accepted to speak or present a poster at a conference usually gets you in free, sometimes the conference also pays for your travel and accommodation costs.

As important as meatspace events and communities are, virtual communities provide access to people in other locations. My current way of connecting is finding people and conversations on Twitter, then using Slack to have deeper, ‘better’ conversations. I do have good conversations via Twitter, but its a bit clumsy for a few reasons, and Slack often works better for real conversations.

Twitter and Slack are great for connecting with people for a number of reasons:
– public & discoverable
– low ceremony
– no strings attached

This means that its very easy to start a conversation with anyone, and they’re more likely to respond since its easy to (low ceremony), and they’re not making any kind of commitment (no strings attached).

I’ve been lucky enough to have conversations with some of my idols, like Kent Beck, Uncle Bob, Woody Zuil, Tim Ottinger etc, some on Twitter, some on Slack, some on both.

I belong to these open-to-the-public Slack communities:
– ZADevelopers – South African Developers (invitation on request)
Legacy Code Rocks – All things Legacy Code (technical debt, TDD, refactoring etc)
ddd-cqrs-es – Domain-Driven Design, CQRS, Event Sourcing
Software Craftsmanship – Software Craftsmanship
– Coaching Circles – Coaching, especially Agile, Lean etc (invitation on request)
WeDoTDD – Test-Driven Development
Testing Community – Testing (I joined very recently)

What resources do you use to level up and connect to communities of interest? Let me know in the comments!

Joshua Lewis <![CDATA[How I do TDD]]> 2015-12-08T09:27:29Z 2015-12-08T09:20:16Z TL;DR: The specification I write are based on domain-level Ubiquitous Language-based specifications of system behaviour. These spec tests describe the functional behaviour of the system, as it would be specified by a Product Owner (PO), and as it would be experienced by the user; i.e. user-level functional specifications.

I get asked frequently how I do Test-Driven Development (TDD), especially with example code. In my previous post I discussed reasons why I do TDD. In this post I’ll discuss how I do TDD.

First-off, in my opinion, there is no difference between TDD, Behaviour-Driven Development (BDD) and Acceptance-Test-Driven Development (ATDD). The fundamental concept is identical: write a failing test, then write the implementation that makes that test pass. The only difference is that these terms are used to describe the ‘amount’ of the system being specified. Typically, with BDD, at a user level, with ATDD, at a user acceptance level (like BDD), and TDD for much finer-grained components or parts of the system. I see very little value in these distinctions: they’re all just TDD to me. (I do find it valuable to discuss the ROI of TDD specifications at different levels, as well as their cost and feedback speed. I’m currently working on a post discussing these ideas.) Like many practices and techniques, I see TDD as fractal. We can get the biggest ROI for a spec test that covers as much as possible.

The test that covers the most of the system is a user-level functional test. That is, a test written at the level of a user’s interaction with the system – i.e. outside of the system – which describes the functional behaviour of the system. The ‘user-level’ part is important, since this level is by definition outside of the system, and covers the entirety of the system being specified.

Its time for an example. The first example I’ll use is specifying Conway’s Game of Life (GoL).

These images represent an (incomplete) specification of GoL, and can be used to specify and validate any implementation of Conway’s Game of Life, from the user’s (i.e. a functional) point of view. These specifications make complete sense to a PO specifying GoL – in fact, this is often how GoL is presented.

These images translate to the following code:

public void Test_Barge()
    var initialGrid = new char[,]
        {'.', '.', '.', '.', '.', '.'},
        {'.', '.', '*', '.', '.', '.'},
        {'.', '*', '.', '*', '.', '.'},
        {'.', '.', '*', '.', '*', '.'},
        {'.', '.', '.', '*', '.', '.'},
        {'.', '.', '.', '.', '.', '.'},

    var game = CreateGame(initialGrid);
    char[,] generation = game.Grid;

    Assert.That(generation, Is.EqualTo(initialGrid));

public void Test_Blinker()
    var initialGrid = new char[,]
        {'.', '.', '.'},
        {'*', '*', '*'},
        {'.', '.', '.'},

    var expectedGeneration1 = new char[,]
        {'.', '*', '.'},
        {'.', '*', '.'},
        {'.', '*', '.'},

    var expectedGeneration2 = new char[,]
        {'.', '.', '.'},
        {'*', '*', '*'},
        {'.', '.', '.'},

    var game = CreateGame(initialGrid);

    char[,] actualGeneration = game.Grid;
    Assert.That(actualGeneration, Is.EqualTo(expectedGeneration1));

    actualGeneration = game.Grid;
    Assert.That(actualGeneration, Is.EqualTo(expectedGeneration2));

public void Test_Glider()
    var initialGrid = new char[,]
        {'.', '*', '.'},
        {'.', '.', '*'},
        {'*', '*', '*'},

    var expectedGeneration1 = new char[,]
        {'.', '.', '.'},
        {'*', '.', '*'},
        {'.', '*', '*'},
        {'.', '*', '.'},

    var expectedGeneration2 = new char[,]
        {'.', '.', '.'},
        {'.', '.', '*'},
        {'*', '.', '*'},
        {'.', '*', '*'},

    var game = CreateGame(initialGrid);

    char[,] actualGeneration = game.Grid;

    Assert.That(actualGeneration, Is.EqualTo(expectedGeneration1));

    actualGeneration = game.Grid;
    Assert.That(actualGeneration, Is.EqualTo(expectedGeneration2));

All I’ve done to make the visual specification above executable is transcode it into a programming language – C# in this case. Note that the tests do not influence or mandate anything of the implementation, besides the data structures used for input and output.

I’d like to introduce another example, this one a little more complicated and real-world. I’m currently developing a book discovery and lending app, called Lend2Me, the source code for which is available on Github. The app is built using Event Sourcing (and thus Domain-Driven Design and Command-Query Responsibility Segregation). The only tests in this codebase are user-level functional tests. Because I’m using DDD, the spec tests are written in the Ubiquitous Language of the domain, and actually describe the domain, and not a system implementation. Since user interaction with the system is in the form of Command-Result and Query-Result pairs, these are what are used to specify the system. Spec tests for a Command generally take the following form:

GIVEN:  a sequence of previously handled Commands
WHEN:   a particular Command is issued
THEN:   a particular result is returned

In addition to this basic functionality, I also want to capture the domain events I expect to be persisted (to the event store), which is still a domain-level concern, and of interest to the PO. Including event persistence, the tests, in general, look like:

GIVEN:  a sequence of previously handled Commands
WHEN:   a particular Command is issued
THEN:   a particular result is returned
And:    a particular sequence of events is persisted

A concrete example from Lend2Me:

User Story: AddBookToLibrary – As a User I want to Add Books to my Library so that my Connections can see what Books I own.
Scenario: AddingPreviouslyRemovedBookToLibraryShouldSucceed

GIVEN:  Joshua is a Registered User AND Joshua has Added and Removed Oliver Twist from his Library
WHEN:   Joshua Adds Oliver to his Library
THEN:   Oliver Twist is Added to Joshua's Library

This spec test is written at the domain level, in the Ubiquitous Language. The code for this test is:

public void AddingPreviouslyRemovedBookToLibraryShouldSucceed()
    RegisterUser joshuaRegisters = new RegisterUser(processId, user1Id, 1, "Joshua Lewis", "Email address");
    AddBookToLibrary joshuaAddsOliverTwistToLibrary = new AddBookToLibrary(processId, user1Id, user1Id, title, author, isbnnumber);
    RemoveBookFromLibrary joshuaRemovesOliverTwistFromLibrary = new RemoveBookFromLibrary(processId, user1Id, user1Id, title, author, isbnnumber);

    UserRegistered joshuaRegistered = new UserRegistered(processId, user1Id, 1, joshuaRegisters.UserName, joshuaRegisters.PrimaryEmail);
    BookAddedToLibrary oliverTwistAddedToJoshuasLibrary = new BookAddedToLibrary(processId, user1Id, title, author, isbnnumber);
    BookRemovedFromLibrary oliverTwistRemovedFromJoshuaLibrary = new BookRemovedFromLibrary(processId, user1Id, title, author, isbnnumber);

    Given(joshuaRegisters, joshuaAddsOliverTwistToLibrary, joshuaRemovesOliverTwistFromLibrary);
    AndEventsSavedForAggregate(user1Id, joshuaRegistered, oliverTwistAddedToJoshuasLibrary, oliverTwistRemovedFromJoshuaLibrary, oliverTwistAddedToJoshuasLibrary);

The definitions of the Commands in this code (e.g. RegisterUser) would be specified as part of the domain:

public class RegisterUser : AuthenticatedCommand
    public long AuthUserId { get; set; }
    public string UserName { get; set; }
    public string PrimaryEmail { get; set; }

    public RegisterUser(Guid processId, Guid newUserId, long authUserId, string userName, string primaryEmail)
    : base(processId, newUserId, newUserId)
        AuthUserId = authUserId;
        UserName = userName;
        PrimaryEmail = primaryEmail;

Again, the executable test is just a transcoding of the Ubiquitous Language spec test, into C#. Note how closely the code follows the Ubiquitous Language used in the natural language specification. Again, the test does not make any assumptions about the implementation of the system. It would be very easy, for example, to change the test so that instead of calling CommandHandlers and QueryHandlers directly, HTTP requests are issued.

It could be argued that the design of this system makes it very easy to write user-level functional spec tets. However these patterns can be used to specify any system any system, since it is possible to automatically interact with any system through the same interface a user uses. Similarly, it is possible to automatically assert any state in any boundary-interfacing system, e.g. databases, 3rd party webservices, message busses etc. It may not be easy or cheap or robust, but it is possible. For example, a spec test could be:

GIVEN:  Pre-conditions
WHEN:   This HTTP request is issued to the system
THEN:   Return this response
AND:    This HTTP request was made to this endpoint
AND:    This data is in the database
AND:    This message was put onto this message bus

This is how I do TDD: the spec tests are user-level functional tests. If its difficult, expensive or brittle to use the same interface the user uses, e.g. GUIs, then test as close to the system boundary, i.e. as close to the user, as you can.

For interest’s sake, all the tests in the Lend2Me codebase hit a live PostgreSQL database, and an embedded eventstore client. There is no mocking anywhere. All interactions and assertions are outside the system.

Joshua Lewis <![CDATA[Why I do TDD]]> 2015-11-27T10:24:35Z 2015-11-25T09:47:11Z People give many reasons for why they do Test-Driven Development (TDD). The benefits I get from TDD, and thus my reasons for practicing it, are given below, in order of most important to least important. The order is based on whether the benefit is available without test-first, and the ease with which the benefit is gained without a test-first approach.

1. Executable specification

The first step in building the correct thing is knowing what the correct thing is (or what it does). I find it very difficult to be confident that I’m building the correct thing without TDD. If we can specify the expectations of our system so unambiguously that a computer can understand and execute that specification, there’s no room for ambiguity or misinterpretation of what we expect from the system. TDD tests are executable specifications. This is pretty much impossible without test-first.

I also believe Specification by Example, which is necessary for TDD, is a great way to get ‘Product Owners’ to think about that they want (without having to first build software).

2. Living documentation

The problem with most other forms of documentation is there is no guarantee that it is current. Its easy to change the code without changing the natural-language documentation, including comments. There’s no way to force the documentation to be current. However, with TDD tests, as long as the tests are passing, and assuming the tests are good and valid, the tests act as perfectly up-to-date documentation for and of the code, (from an intent and expectation point of view, not necessarily from an implementation PoV). The documenation is thus considered ‘living’. This is possible with a test-after approach but is harder than with test-first.

3. Focus

TDD done properly, i.e. true Red-Green-Refactor, forces me to focus on one area of work at a time, and not to worry about the future. The future may be as soon as the next test scenario or case, but I don’t worry about that. The system gets built one failing test at a time. I don’t care about the other tests, I’ll get there in good time. This is possible without test-first, but harder and nigh-impossible for me.

4. As a design tool

This is the usual primary benefit touted for TDD. My understanding of this thinking is thus: in general, well-designed systems are decoupled. Decoupling means its possible to introduce a seam for testing components in isolation. Therefore, in general, well-designed systems are testable. Since TDD forces me to design components that are testable, inherently I’m forced to design decoupled components, which are in general considered a ‘better design’. This is low down on my list because this is relatively easy to do without a test-first approach, and even without tests at all. I’m pretty confident I can build what I (and I think others) consider to be well-designed systems without going test-first.

5. Suite of automated regression tests

Another popular selling point for TDD is that the tests provide a suite of automated regression tests. This is absolutely true. However I consider this a very pleasant by-product of doing TDD. A full suite of automated regression tests is very possible with a test-after approach. Another concern I have with this selling point is that TDD is not about testing, and touting regression tests as a benefit muddies this point.

Why do you do TDD? Do you disagree with my reasons or my order? Let me know in the comments!


text:
Exploring the Seams, features work by four Maine College of Art Fashion and Textile Program thesis students, Meg Hudson, Nicole Waller, Ariana Faria, and Justin Desper.

The only program of its kind in America, Textile and Fashion Design at MECA teaches the design and fabrication of textiles, study of the field of apparel, and exploration of creative expression through the medium of fashion. The curriculum features garment design and pattern drafting as well as classes in machine knitting, textile printing, weaving, and millinery.

This exhibition showcases the thesis projects of the program’s four graduating seniors. Each student’s senior thesis is a collection of five looks that they take from concept to completion and present on the runway at the annual MECA fashion show. The garments progress from sketch to paper pattern, to muslin, to fashion fabric throughout the course of the spring semester. Students are encouraged to include textile techniques such as machine knitting, hand painting, pleating, or structural frames in their collections.

This year the graduating seniors show a wide range of design sensibilities. Meg Hudson has created a collection knit and sewn garments which feature the colors and textures of 5 locations on the Maine coast. Ariana Faria took inspiration from her semester in Florence, Italy to design classically feminine looks that feature a modern take on the corset. Nicole Waller used her fantasy-inspired style to explore the emotional and physical symptoms of anxiety. Justin Desper has included technology in his garments as a commentary on Transhumanism and the future relationship between humans and machines.

Exploring the Seams also includes Transforming, an installation by York-artist Gayle Fitzpatrick which ties together Biddeford’s textile and garment industry and broader community concerns about domestic violence. The opening evening, on May 26, will include the PussyCATWalk, a runway show featuring original work by Woolwich artist Martha Miller benefitting Planned Parenthood.

The opening on May 26 will run from 5-8:30pm at Engine, 128 Main Street in Biddeford, and coincides with the Biddeford+Saco ArtWalk. Exploring the Seams and Transforming will run through June 24.

Comments are closed.