Rob Smyth

Monday 8 June 2020

Has the pandemic spawned and opportunity for virtual osmotic communications?

Has the pandemic opened our experiences to make  a new type of meeting "Virtual Forum" a possibility?

Meetings, pre-pandemic, require us to get up and go to a meeting room. Some bring a laptop and continue other work, others bring their lunch. Those with their laptops remain "semi-passively present" while still achieving a level of base workflow productivity (PPWP). They strive to benefit from the meeting osmotic communication while still doing their base work.

For most it is difficult or inappropriate to achieve PPWP, the meeting is an interruption to other work. Inhibitors to PPWP are:
  • A software developers role  - Physically relocating (and the interrupting time it takes) is an inherent interruption to a software developer's flow state.
  • Not all staff have a laptop (a laptop may not be appropriate as a prime work box).
  • Less senior people may feel a responsibility to appear attentive in the meeting.
  • Not everybody works well in an osmotic environment. For them osmotic equals noise.
But what if the meeting's rules of engagement where:
  • Participants are not expected to exhibit active participation.
  • Active greeting on joining is not expected and should be the exception (treated as an interruption to the joiner's work).
  • Passive participation while doing other work (PPWP) is not only OK but the expected norm.
  • The meeting can invoke the attention of a particular participant for input.
It challenges my concept of a "meeting". So perhaps it is a virtual forum. So much value in a name to let participant know how they are expected to engage and use the forum/meeting.

I think Virtual Forums might enable:
  • Code review pit forums
  • Technical review panel sessions/forums
  • Problem solving forums
What I'm wondering is .... rather than just inviting those who you know need to be engaged, but everybody. Make passive engagement with minimal interruption OK. It enables a new type of collaboration.

Tuesday 25 June 2019

Telerik PropertiesGrid - Only show properties with attributes

To show only properties that have an explicit Display attribute in a Telerik PropertiesGrid (aka RadPropertisGrid) ...

Firstly, add the property gird with AutoGeneratePropertyDefinitions set to true and the AutoGeneratingPropertyDefinition event handler:

    <telerik:RadPropertyGrid AutoGeneratePropertyDefinitions="True"
                             Item="{Binding Selected}"

In the code behind:

    private void OnPropertyGridPropertyDefinition(object sender, AutoGeneratingPropertyDefinitionEventArgs e)
        var attributes = e.PropertyDefinition.PropertyDescriptor.Attributes;
        foreach (Attribute attribute in attributes)
            if (attribute is DisplayAttribute)
                e.Cancel = false;

        e.Cancel = true;

In the view model:

    public class MyViewModel : NodeViewModelBase
        Display(Name = "Name", GroupName = "Documentation", Description = "An optional name for this function block.", Order = 0)]
        public string Name { get; set; }

Sunday 8 April 2018

What is an unstable build?

Software management build systems like TeamCity or Jenkins provide automated build and testing on software team commits. If it cannot build the code ... well the build has failed as there are no binaries to test or even install. A complete no starter. But what if the binaries are built but a test failed? Is that a fail, or is that something less? Some build systems report a build with failing tests as "unstable". A useful clarification or a damaging depreciation of the build process?

What does "unstable" mean? Go on ... "make my day"?

Unstable tells the team that the team that the thing that did not pass (aka failed), does not really matter ... go on ignore it. Sure ... I'm busy ... I'll ignore anything that is not a fail.

That the code can be compiled to binaries (or whatever) is great. It means that the team has complied with the coding language but does not give any indication of what the code does. Useful, necessary, but not sufficient.

If the tests fail, is it useful to indicate it as 'unstable' rather than failed? Useful clarification of status?

So what does a test failure mean?
  • System/application test failure

    • The application has failed to meet a specification and therefore a requirement.
  • Unit test failure

If the application does not meet specification/requirement - that is a fail, not unstable.

If a code element has been altered outside of intent then then that is a fail, the application, or the code's maintainability, is compromised. That is not unstable, a developer has lowered code health and may well have broken the application.

Treat your tests like your application. A failure is a failure. "Unstable" just means ... "you may may be able to ignore".

Recliner workstation

I like the look of this Altwork station. They describe it as "the world’s first workstation designed for high-intensity computer users".

Focus position.

I like the way it converts from seat to recline. If the base could be made a little less 'industrial' it would be perfect.

Thursday 10 August 2017

Grow up Java developers - there is space, it exists, and is empty

It seems every day I loose time inserting underscores for spaces and it seems every time to be a Java application .... what is the problem handling spaces?

This one is courtesy of Thoughtwork's GOCD. Come o.n guys ... give me a break ... spaces exist. Get over it.

Kinda related ... why do Java applications usually look and feel like Java applications? Is that an indication of a language/framework or culture attribute?

Thursday 6 April 2017

Violet - A dog's life well lived and loved

Our 5th Airedale 'Violet'' died late last year. She was an awesome dog. From the start Violet had dignity and her own self-worth. An independent dog who, like most Airedales, obeyed when it suited her. But was always loving, if she got a pat!

When Rowan died, and she had a puppy 'Golley' to contend with, she finally to share her toys!

A wonderful dog with self-dignity. At 14 years her arthritis finally got to her (she never liked the cold).

A life well lived with dignity.

Tuesday 21 February 2017

Magnetic buttons for magnetic persons

For the team status/task board you can create custom magnet buttons for team members on Zazzle. You an upload images whatever. I just created a few buttons for me ...


Zazzle's navigation is difficult. Look for keywords like 'round', 'magnet', 'custom'.

Team Pit Swarm Hub

Rather than mob programming or pair programming a team may setup a swam hub/desk in its pit for quick / ad-hock swarming. Not pair programming, not mob programming but a setup that allows for something in between.

In my case we have the classic corner desks. Nice for individuals but no so great for teamwork. So add a couple of TVs/monitors (so cheap now), a central team table, a wireless keyboard and mouse and you have a team pit swarm hub/portal.

To swarm a team member can slide to the central desk and remote desktop to their environment appears on the large team TVs/monitors. Now the whole team can discuss / collaborate / swarm. Quick, easy, ad-hock.

When done, close the remote desktop and the monitors return to their team status / virtual wall duties.

A way to turn up the volume on team collaboration? An ad-hock solution? A coaching crucible? An incremental step toward pair programming or mob programming .... dunno.

Tuesday 9 August 2016

Magnetic custom team scrum sprint/story cards

A team's sprint board needs to radiate information about how the sprint is going. Fridge magnets for use on a team's magnetic sprint whiteboard can be custom printed. The trick is to print "business card fridge magnets" for only ~AU$10 for 10-20 cards. Vistaprint (I have no commercial benefit) provides a great service of uploading your card image (e.g PNG) and printing it.

I've found these magnetic card reusable using whiteboard markers. For magnetic tags like "BLOCKED" or team member names, create a card with many tiles and cutout the tiles when delivered (See example below).





Revitalizing Legacy Code - Properties returning concrete types

You have a legacy code base that has properties returning concrete types. This makes unit testing (UT) very difficult. To change the signature to use an interface requires lot or refactoring and therefore risk of an error refactoring. Here is an approach to incrementally refactor these properties out of the code base.

To provide an alternative add another property to the type with a suffix like "I" that returns the appropriate interface. This become the base property with the concrete property referencing this new property. This enables new or code being changed to migrate to the new property incrementally. Once the old property is no longer used it will be deleted.

Legacy code:

  public class WidgetA
     public WidgetB PropertyB
        // whatever stuff done here
        // does other stuff here

Testable (incrementally) legacy code:

  public class WidgetA
     [Obsolete("Use  PropertyBI instead")]
     public WidgetB PropertyB
      get { return (WidgetB)PropertyBI;  }
      set { PropertyBI = value; }

     public IWidgetB PropertyBI { get; set; }

The use of the ObsoletAttribute ensures that developers will see the property struck out in intellisense to promote useage of PropertyBI instead.

When the old, concrete type, property is no longer used it will be deleted and the "I" suffix property renamed to replace it.

Nice incremental refactoring of the code and allowing for incremental unit testing.