Skip to content

Feed aggregator

The Simple Leader: The Waste of Choice

Evolving Excellence - Sun, 11/27/2016 - 11:30

This is an excerpt from The Simple Leader: Personal and Professional Leadership at the Nexus of Lean and Zen


Owning fewer keys opens more doors.
– Alex Morritt

An abundance of choices and the decisions that accompany them are both a benefit and curse of the modern world. Each decision we make, no matter how small, uses up a little bit of the mental energy we have available every day. By focusing on reducing our options and minimizing the number of choices we must make, life becomes simpler and calmer.

David Cain recently wrote a great piece on his Raptitude blog on decision-making and minimalism called Why the Minimalists Do what They Do. As an aspiring minimalist, the topic appealed to me, and Cain’s commentary on choice and decisions was especially apropos.

I’ve been lucky in that I’ve always had an ability to make good decisions quickly, regardless of whether I base them on real analysis or just wing it from the gut. (Yes, intuitive decisions can still be good.) This skill has been invaluable in my career and my personal life. However, most people I know are less fortunate, and I’ve noticed how indecision impacts many aspects of their lives. From professional decisions such as what path to take with a new product development project, to personal decisions such as where to go for dinner, not being able to make a decision creates stress for both the person making the decision and those being impacted by the decision.

The problem is compounded with age. For example, in a relative’s last years, I watched her become literally debilitated and frozen by even the most basic decisions. Because she couldn’t make decisions, the number of undecided issues made her life appear to be unnecessarily and impossibly complex.

To combat our indecision, we need to simplify our lives. Cain describes how he eats the same thing for breakfast every morning. By doing so, he removes a couple of decisions from his day, allowing him to focus better on other things. I can relate. My breakfast is the same cup of Greek yogurt and Grape Nuts each morning. I eat it while reading The Wall Street Journal on my iPad, just after my morning meditation and stretching, and just before reviewing my journal and starting my Hour of Power. I do this every day. The routine is satisfying, and calming.

The implications of reducing our number of choices go far beyond our daily meals. Simple is clearer, and fewer options tax the brain less. For example, the best websites intuitively guide you among very few choices. Well-planned standard work reduces the variation of subjectivity while providing a foundation for kaizen. In other words, when workers don’t have to make unnecessary decisions, they have the mental energy to explore better ways to perform their tasks.

Where can you reduce options in your life and in your organization, thereby reducing the waste and unnecessary complexity of indecision, and the variability of multiple decisions?

Categories: Blogs

Links for 2016-11-26 [del.icio.us]

Zachariah Young - Sun, 11/27/2016 - 10:00
Categories: Blogs

CITCON in New York City

Paul Julius - Sat, 11/26/2016 - 21:14

I am very excited that we will be hosting CITCON in New York City on December 9 & 10, 2016.

Registrations are still open: http://citconf.com/newyork2016/

I am proud that my company, Intent Media https://intentmedia.com/, has signed on as the Venue Sponsor. As Chief Technology Officer, I am excited to showcase some of the great things we have been doing at Intent like

* mob programming
* serverless architectures
* employee growth based management
* continuous delivery
* polyglot programming

Should be tons of fun! Join us!

Categories: Blogs

A look at Six Years of Blogging Stats

Agile Complexification Inverter - Fri, 11/25/2016 - 22:13
What do you get from six years of blogging about Agile/Scrum and your continued learning experiences?

Stats from Agile Complexification Inverter blog site

Well the stats are just one insignificant measure of what one gets from writing about their experience.

The bad artist imitate, the great artist steal.The more meaningful measures have been seeing some of these articles and resources put into practice by other colleagues, discussion that have happened (off line & sometimes in comments or twitter, etc.) with readers that require me to refine my thinking and messaging of my thinking.  Interestingly some times seeing a resource that you have created being "borrowed" and used in another persons or companies artifact without attribution is both rewarding and a bit infuriating.  I like that the concept has resonated well with someone else and they have gone to the trouble of borrowing the concept, and repeating or improving or repurposing the concept.

Let me borrow someone else's concept:  "The Bad Artist Imitate, the GREAT Artists Steal." -- Banksy


Most of all the collection of articles are a repository of resources that I do not need to carry around in my 3-4 lbs of white & grey matter.  I can off-load the storage of concepts, research pointers and questions to a semi-perminate storage.  This is a great benefit.

Categories: Blogs

Q: What is an Agile Transition Guide?

Agile Complexification Inverter - Fri, 11/25/2016 - 21:38
David Koontz guiding a canoeI was at the Dallas Tech Fest last week and was asked several times what an Agile Transition Guide was (it was a title on my name tag)... it's surprising to me how many people assume they know what an Agile Coach is, yet there is no good definition or professional organization (with a possible exception coming: Agile Coaching Institute).

So naturally the conversation went something like this:

Inquisitive person:  "Hi David, what's an Agile Transition Guide?  Is that like a coach?"

David:  "Hi, glad you asked.  What does a coach do in your experience?"

Inquisitive person: "They help people and teams improve their software practices."

David:  "Yes, I do that also."

Inquisitive person: "Oh, well then why don't you call yourself a coach?"

David:  "Great question:  Let's see...  well one of the foundational principles of coaching (ICF) is that the coached asks for and desires an interaction with the coach, there is no authority assigning the relationship, or the tasks of coaching.  So do you see why I don't call myself a coach?"

Inquisitive person: "Well no, not really.  That's just semantics.  So you're not a coach... OK, but what's is a guide?"

David:  "Have you ever been fishing with a guide, or been whitewater rafting with a guide, or been on a tour with a guide?  What do they do differently than a coach?  Did you get to choose your guide, or were they assigned to your group?"

Inquisitive person: "Oh, yeah.  I've been trout fishing with a guide, they were very helpful, we caught a lot of fish, and had more fun than going on our own.  They also had some great gear and lots of local knowledge of where to find the trout."

David:  "Well, there you have it... that's a guide - an expert, a person that has years of experience, has techniques to share and increase your JOY with a new experience."

Inquisitive person: "Yes, I'm starting to see that difference, but can't a coach do this also?"

David:  "No, not unless the coach is willing to switch to a different modality - to one of mentoring, teaching, consulting, or protecting.  Some times a guide must take over for the participant and keep the person/group within the bounds of safety - think about a whitewater river guide.  A coach - by strict interpretation of the ethics, is not allowed to protect the person from their own decisions (even if there are foreseen consequence of this action."

Richard FeynmanAnd now the conversation start to get very interesting, the Whys start to flow and we can go down the various paths to understanding.  See Richard Feynman's dialogue about "Why questions"

So, I'm not a Coach

I've been hired as a coach (largely because the organization didn't truly understand the label, role, and the ethics of coaching).  This relationship was typically dysfunctional from the standpoint of being a coach.  So I decide to study the role of coaching. I've done a few classes, seminars, personal one of one coach, read a lot and drawn some conclusions from my study - I'm not good a coaching within the environment and situation that Agile Coaches are hired. I've learned that regardless of the title that an organization uses (Agile Coach, Scrum Master, etc.) it doesn't mean coaching.  It intends the relationship to be vastly different.  Since I'm very techie, I appreciate using the correct words, and phrase for a concept.  (Paraphrasing Phil Karlton: In software there are two major challenges: cache invalidation and naming things.  Two Hard Things)

So to stop the confusing and the absurd use of the terms, I quit referring to my role and skills as coaching.  Then I needed a new term.  And having lots of friends that have been Outward Bound instructors and understanding their roles, the concept of a river guide appeals to me in this Agile transformational role.  Therefore I coin the term Agile Transformation Guide.  But many organization do not wish to transform their organization, but they do wish for some type of transition, perhaps from tradition development to a more agile or lean mindset.  So a transition guide is more generic, capable of the situational awareness of the desire of the organization.



See Also:


Six Kinds of Agile Coaches by Ravi Verma Describes the HUGeB coach, the one to be.
Where Agile goes to Die - Dave Nicolette - about those companies that are late adopters or laggards in the innovation curve and the challenges that "coaches" have when engaging with them.
The Difference Between Coaching & Mentoring

Scrum Master vs Scrum Coach by Charles Bradley

Agile Coach -or- Transition Guide to Agility by David Koontz; the whitewater guide analogy to agile coaching.

Academic paper:  Coaching in an Agile Context by David Koontz

What is the ROI of Agile Coaching - Payton Consulting

Interesting Twitter conversation about the nature of "coaching" with Agile42 group.



Categories: Blogs

Kubernetes: Spinning up a Neo4j 3.1 Causal Cluster

Mark Needham - Fri, 11/25/2016 - 18:55

A couple of weeks ago I wrote a blog post explaining how I’d created a Neo4j causal cluster using docker containers directly and for my next pet project I wanted to use Kubernetes as an orchestration layer so that I could declaratively change the number of servers in my cluster.

I’d never used Kubernetes before but I saw a presentation showing how to use it to create an Elastic cluster at the GDG Cloud meetup a couple of months ago.

In that presentation I was introduced to the idea of a PetSet which is an abstraction exposed by Kubernetes which allows us to manage a set of pods (containers) which have a fixed identity. The documentation explains it better:

A PetSet ensures that a specified number of “pets” with unique identities are running at any given time. The identity of a Pet is comprised of:

  • a stable hostname, available in DNS
  • an ordinal index
  • stable storage: linked to the ordinal & hostname

In my case I need to have a stable hostname because each member of a Neo4j cluster is given a list of other cluster members with which it can create a new cluster or join an already existing one. This is the first use case described in the documentation:

PetSet also helps with the 2 most common problems encountered managing such clustered applications:

  • discovery of peers for quorum
  • startup/teardown ordering

So the first thing we need to do is create some stable storage for our pods to use.

We’ll create a cluster of 3 members so we need to create one PersistentVolume for each of them. The following script does the job:

volumes.sh

for i in $(seq 0 2); do
  cat <<EOF | kubectl create -f -
kind: PersistentVolume
apiVersion: v1
metadata:
  name: pv${i}
  labels:
    type: local
    app: neo4j
spec:
  capacity:
    storage: 1Gi
  accessModes:
    - ReadWriteOnce
  hostPath:
    path: "/tmp/${i}"
EOF
 
  cat <<EOF | kubectl create -f -
kind: PersistentVolumeClaim
apiVersion: v1
metadata:
  name: datadir-neo4j-${i}
  labels:
    app: neo4j
spec:
  accessModes:
    - ReadWriteOnce
  resources:
    requests:
      storage: 1Gi
EOF
done;

If we run this script it’ll create 3 volumes which we can see by running the following command:

$ kubectl get pv
NAME      CAPACITY   ACCESSMODES   STATUS    CLAIM                     REASON    AGE
pv0       1Gi        RWO           Bound     default/datadir-neo4j-0             7s
pv1       1Gi        RWO           Bound     default/datadir-neo4j-1             7s
pv2       1Gi        RWO           Bound     default/datadir-neo4j-2             7s
$ kubectl get pvc
NAME              STATUS    VOLUME    CAPACITY   ACCESSMODES   AGE
datadir-neo4j-0   Bound     pv0       1Gi        RWO           26s
datadir-neo4j-1   Bound     pv1       1Gi        RWO           26s
datadir-neo4j-2   Bound     pv2       1Gi        RWO           25s

Next we need to create a PetSet template. After a lot of iterations I ended up with the following:

# Headless service to provide DNS lookup
apiVersion: v1
kind: Service
metadata:
  labels:
    app: neo4j
  name: neo4j
spec:
  clusterIP: None
  ports:
    - port: 7474
  selector:
    app: neo4j
----
# new API name
apiVersion: "apps/v1alpha1"
kind: PetSet
metadata:
  name: neo4j
spec:
  serviceName: neo4j
  replicas: 3
  template:
    metadata:
      annotations:
        pod.alpha.kubernetes.io/initialized: "true"
        pod.beta.kubernetes.io/init-containers: '[
            {
                "name": "install",
                "image": "gcr.io/google_containers/busybox:1.24",
                "command": ["/bin/sh", "-c", "echo \"
                unsupported.dbms.edition=enterprise\n
                dbms.mode=CORE\n
                dbms.connectors.default_advertised_address=$HOSTNAME.neo4j.default.svc.cluster.local\n
                dbms.connectors.default_listen_address=0.0.0.0\n
                dbms.connector.bolt.type=BOLT\n
                dbms.connector.bolt.enabled=true\n
                dbms.connector.bolt.listen_address=0.0.0.0:7687\n
                dbms.connector.http.type=HTTP\n
                dbms.connector.http.enabled=true\n
                dbms.connector.http.listen_address=0.0.0.0:7474\n
                causal_clustering.raft_messages_log_enable=true\n
                causal_clustering.initial_discovery_members=neo4j-0.neo4j.default.svc.cluster.local:5000,neo4j-1.neo4j.default.svc.cluster.local:5000,neo4j-2.neo4j.default.svc.cluster.local:5000\n
                causal_clustering.leader_election_timeout=2s\n
                  \" > /work-dir/neo4j.conf" ],
                "volumeMounts": [
                    {
                        "name": "confdir",
                        "mountPath": "/work-dir"
                    }
                ]
            }
        ]'
      labels:
        app: neo4j
    spec:
      containers:
      - name: neo4j
        image: "neo4j/neo4j-experimental:3.1.0-M13-beta3-enterprise"
        imagePullPolicy: Always
        ports:
        - containerPort: 5000
          name: discovery
        - containerPort: 6000
          name: tx
        - containerPort: 7000
          name: raft
        - containerPort: 7474
          name: browser
        - containerPort: 7687
          name: bolt
        securityContext:
          privileged: true
        volumeMounts:
        - name: datadir
          mountPath: /data
        - name: confdir
          mountPath: /conf
      volumes:
      - name: confdir
  volumeClaimTemplates:
  - metadata:
      name: datadir
      annotations:
        volume.alpha.kubernetes.io/storage-class: anything
    spec:
      accessModes: [ "ReadWriteOnce" ]
      resources:
        requests:
          storage: 1Gi

The main thing I had trouble with was getting the members of the cluster to talk to each other. The default docker config uses hostnames but I found that pods were unable to contact each other unless I specified the FQDN in the config file. We can run the following command to create the PetSet:

$ kubectl create -f neo4j.yaml 
service "neo4j" created
petset "neo4j" created

We can check if the pods are up and running by executing the following command:

$ kubectl get pods
NAME      READY     STATUS    RESTARTS   AGE
neo4j-0   1/1       Running   0          2m
neo4j-1   1/1       Running   0          14s
neo4j-2   1/1       Running   0          10s

And we can tail neo4j’s log files like this:

$ kubectl logs neo4j-0
Starting Neo4j.
2016-11-25 16:39:50.333+0000 INFO  Starting...
2016-11-25 16:39:51.723+0000 INFO  Bolt enabled on 0.0.0.0:7687.
2016-11-25 16:39:51.733+0000 INFO  Initiating metrics...
2016-11-25 16:39:51.911+0000 INFO  Waiting for other members to join cluster before continuing...
2016-11-25 16:40:12.074+0000 INFO  Started.
2016-11-25 16:40:12.428+0000 INFO  Mounted REST API at: /db/manage
2016-11-25 16:40:13.350+0000 INFO  Remote interface available at http://neo4j-0.neo4j.default.svc.cluster.local:7474/
$ kubectl logs neo4j-1
Starting Neo4j.
2016-11-25 16:39:53.846+0000 INFO  Starting...
2016-11-25 16:39:56.212+0000 INFO  Bolt enabled on 0.0.0.0:7687.
2016-11-25 16:39:56.225+0000 INFO  Initiating metrics...
2016-11-25 16:39:56.341+0000 INFO  Waiting for other members to join cluster before continuing...
2016-11-25 16:40:16.623+0000 INFO  Started.
2016-11-25 16:40:16.951+0000 INFO  Mounted REST API at: /db/manage
2016-11-25 16:40:17.607+0000 INFO  Remote interface available at http://neo4j-1.neo4j.default.svc.cluster.local:7474/
$ kubectl logs neo4j-2
Starting Neo4j.
2016-11-25 16:39:57.828+0000 INFO  Starting...
2016-11-25 16:39:59.166+0000 INFO  Bolt enabled on 0.0.0.0:7687.
2016-11-25 16:39:59.176+0000 INFO  Initiating metrics...
2016-11-25 16:39:59.329+0000 INFO  Waiting for other members to join cluster before continuing...
2016-11-25 16:40:19.216+0000 INFO  Started.
2016-11-25 16:40:19.675+0000 INFO  Mounted REST API at: /db/manage
2016-11-25 16:40:21.029+0000 INFO  Remote interface available at http://neo4j-2.neo4j.default.svc.cluster.local:7474/

I wanted to log into the servers from my host machine’s browser so I setup port forwarding for each of the servers:

$ kubectl port-forward neo4j-0 7474:7474 7687:7687

We can then get an overview of the cluster by running the following procedure:

CALL dbms.cluster.overview()
 
╒════════════════════════════════════╤═════════════════════════════════════════════════════╤════════╕
│id                                  │addresses                                            │role    │
╞════════════════════════════════════╪═════════════════════════════════════════════════════╪════════╡
│81d8e5e2-02db-4414-85de-a7025b346e84│[bolt://neo4j-0.neo4j.default.svc.cluster.local:7687,│LEADER  │
│                                    │ http://neo4j-0.neo4j.default.svc.cluster.local:7474]│        │
├────────────────────────────────────┼─────────────────────────────────────────────────────┼────────┤
│347b7517-7ca0-4b92-b9f0-9249d46b2ad3│[bolt://neo4j-1.neo4j.default.svc.cluster.local:7687,│FOLLOWER│
│                                    │ http://neo4j-1.neo4j.default.svc.cluster.local:7474]│        │
├────────────────────────────────────┼─────────────────────────────────────────────────────┼────────┤
│a5ec1335-91ce-4358-910b-8af9086c2969│[bolt://neo4j-2.neo4j.default.svc.cluster.local:7687,│FOLLOWER│
│                                    │ http://neo4j-2.neo4j.default.svc.cluster.local:7474]│        │
└────────────────────────────────────┴─────────────────────────────────────────────────────┴────────┘

So far so good. What if we want to have 5 servers in the cluster instead of 3? We can run the following command to increase our replica size:

$ kubectl patch petset neo4j -p '{"spec":{"replicas":5}}'
"neo4j" patched

Let’s run that procedure again:

CALL dbms.cluster.overview()
 
╒════════════════════════════════════╤═════════════════════════════════════════════════════╤════════╕
│id                                  │addresses                                            │role    │
╞════════════════════════════════════╪═════════════════════════════════════════════════════╪════════╡
│81d8e5e2-02db-4414-85de-a7025b346e84│[bolt://neo4j-0.neo4j.default.svc.cluster.local:7687,│LEADER  │
│                                    │ http://neo4j-0.neo4j.default.svc.cluster.local:7474]│        │
├────────────────────────────────────┼─────────────────────────────────────────────────────┼────────┤
│347b7517-7ca0-4b92-b9f0-9249d46b2ad3│[bolt://neo4j-1.neo4j.default.svc.cluster.local:7687,│FOLLOWER│
│                                    │ http://neo4j-1.neo4j.default.svc.cluster.local:7474]│        │
├────────────────────────────────────┼─────────────────────────────────────────────────────┼────────┤
│a5ec1335-91ce-4358-910b-8af9086c2969│[bolt://neo4j-2.neo4j.default.svc.cluster.local:7687,│FOLLOWER│
│                                    │ http://neo4j-2.neo4j.default.svc.cluster.local:7474]│        │
├────────────────────────────────────┼─────────────────────────────────────────────────────┼────────┤
│28613d06-d4c5-461c-b277-ddb3f05e5647│[bolt://neo4j-3.neo4j.default.svc.cluster.local:7687,│FOLLOWER│
│                                    │ http://neo4j-3.neo4j.default.svc.cluster.local:7474]│        │
├────────────────────────────────────┼─────────────────────────────────────────────────────┼────────┤
│2eaa0058-a4f3-4f07-9f22-d310562ad1ec│[bolt://neo4j-4.neo4j.default.svc.cluster.local:7687,│FOLLOWER│
│                                    │ http://neo4j-4.neo4j.default.svc.cluster.local:7474]│        │
└────────────────────────────────────┴─────────────────────────────────────────────────────┴────────┘

Neat! And it’s as easy to go back down to 3 again:

$ kubectl patch petset neo4j -p '{"spec":{"replicas":3}}'
"neo4j" patched
CALL dbms.cluster.overview()
 
╒════════════════════════════════════╤══════════════════════════════════════════════════════╤════════╕
│id                                  │addresses                                             │role    │
╞════════════════════════════════════╪══════════════════════════════════════════════════════╪════════╡
│81d8e5e2-02db-4414-85de-a7025b346e84│[bolt://neo4j-0.neo4j.default.svc.cluster.local:7687, │LEADER  │
│                                    │http://neo4j-0.neo4j.default.svc.cluster.local:7474]  │        │
├────────────────────────────────────┼──────────────────────────────────────────────────────┼────────┤
│347b7517-7ca0-4b92-b9f0-9249d46b2ad3│[bolt://neo4j-1.neo4j.default.svc.cluster.local:7687, │FOLLOWER│
│                                    │http://neo4j-1.neo4j.default.svc.cluster.local:7474]  │        │
├────────────────────────────────────┼──────────────────────────────────────────────────────┼────────┤
│a5ec1335-91ce-4358-910b-8af9086c2969│[bolt://neo4j-2.neo4j.default.svc.cluster.local:7687, │FOLLOWER│
│                                    │http://neo4j-2.neo4j.default.svc.cluster.local:7474]  │        │
└────────────────────────────────────┴──────────────────────────────────────────────────────┴────────┘

Next I need to look at how we can add read replicas into the cluster. These don’t take part in the membership/quorum algorithm so I think I’ll be able to use the more common ReplicationController/Pod architecture for those.

If you want to play around with this the code is available as a gist. I’m using the minikube library for all my experiments but I’ll hopefully get around to trying this on GCE or AWS soon.

Categories: Blogs

A Book Review: “The Great ScrumMaster”, by Zuzana Šochová

Learn more about transforming people, process and culture with the Real Agility ProgramIn Brief

Buy it! You won’t be disappointed!

In Depth

I read the book in 3 sittings.

The First Sitting

Zuzi gave her book to me in October. She was visiting Toronto at the time and we spent a few days together teaching Scrum – I was honoured that she would share a classroom with me and that I’d get a sneak peak at her new publication. Almost immediately after she gave me the book I found a few minutes to thumb through it and read the foreword and first chapters. I immediately liked what I saw.

The foreword is written by Linda Rising who frames the book nicely by reminding us of these simple principles: “successful change is built around small steps and learning”, and “the book offers a chance for reflection and evaluation”. Zuzi’s preface describes briefly her journey to become a great Scrum Master. Hers is a story about humility and studious peristence; the journey is unique and difficult for us all. I could relate! The best aspect of the early pages in the book are the photographs of Zuzi. The book exudes her character traits: a friendly and insightful expert, a colleague and advisor. Her photos, as well as her illustrations throughout the book, help the reader to understand her colourful character; her stance as a coach and mentor; and her voice as an author.

My time was limited so I didn’t get far in that first sitting though my first impressions of the book are memorable. It’s a big book – not thick, that’s not what I mean. I mean large, wide pages. Approximately 20 centimetres square. It’s the kind of book that lays open on a coffee table. This is important! I understand many people buy digital books but if you can find the book in physical format, buy it! The medium is the message, as Mcluhan said. The medium, in this case, is a lightweight book that rests easy, open-faced, on a desk or coffee table. As you pass by the table or sit for a while to enjoy a conversation, you’ll find the book open and waiting for you. You’re likely to thumb through it lazily, your mind wandering while on the phone or talking with a friend, then something will catch your eye. It’ll be a page you’ve looked at a dozen times but suddenly a sentence or illustration will stand out for you, draw your attention. Like, “…if you join a discussion with the core metaskill of curiosity it will be different than if you choose listening or teaching”. That sentence is on page 88 – that’s the one that jumped off the page for me today. I’ve read that page a few times already but this day, in this moment, that sentence resonates. Such a simple sentence on a page and sparse text and white space…but exactly the solace you will need.

The Second Sitting

I was riding a train with the book open on my lap. Through the window passed the Canadian landscape, and I’d glance at the book between sips of coffee to take in another paragraph, picture, page. (See how cool the format is??) What I’ve learned from the next chapters of the book is that I share Zuzi’s interpretation of Scrum and of the Scrum Master’s role.

Her perspective is a philosophical one, yet she effectively relates the material to practical examples. Zuzi describes a concept she calls the #ScrumMasterWay. This is an innovative model for understanding how a Scrum Master can adapt their mode of service depending on the conditions of the organization they serve. Perhaps at first, the organization they serve is ‘A Scrum Team’ – and in that mode of service a Scrum Master will facilitate Scrum and help the team to self-organize. Next, after all the easy fruit has been picked and the Scrum Team is capable of continuous and deep self-improvement, the Scrum Master’s mode of service is likely to change – the team no longer needs help with the rudiments so the Scrum Master may focus more intently upon relationships to and within the team. And finally, the 3rd level of #ScrumMasterWay is achieved when the Scrum Master is able to focus their effort toward the entire system, “bringing the Agile Mindset and Scrum values to the company level”.

The Last Sitting

Reading about Zuzi’s #ScrumMasterWay concept in the previous sitting led me to think nostalgically about my own journey. I know this book, had she written it a decade ago, may have saved me from some mistakes of my own. I’ve come to more deeply appreciate her telling of the Scrum Master role.

In the 2nd half of the book, she provides a glimpse into numerous related practices and concepts. A collection of references and teaching tools that most Scrum Masters will discover along their journey. For example, all Scrum Masters will find themselves in discussion with stakeholders about the nature of complex problems and, ta da!, like a stone tablet from a high mountain will appear Dave Snowden’s CYNEFIN framework! A simple diagram…it’s so obvious! All Scrum Masters will find themselves in a personal struggle between telling and listening: “should I coach as a teacher?” or “coach as a facilitator?” and, without fail, a fellow Scrum Master will recommend a training course with the Agile Coaching Institute to better understand the coaching stance(s).

Here’s the truth of it: if a young jazz musician wants to become a great jazz musician, there are some iconic recordings to which they must listen: Kind of Blue; anything by Duke Ellington and Louis Armstrong; Blue Train; Saxophone Colossus. No drummer is worth their salt without having spent a zillion hours listening to Max Roach and Jimmy Cobb. Likewise, every great Scrum Master has had to grapple with the iconic challenges of servant leadership – they’ve spent a zillion hours pondering the difference between the words “should” and “could” and they’ve praised the power of the question, “what if?”

So, to help Scrum Masters along their journey, Zuzi has compiled many of the community’s greatest hits in her book. Einstein is often quoted as saying, “If you can’t explain it simply, you don’t understand it well enough.” Perhaps then, one can examine how well a person understands a concept by how simply they can explain it… right? By that measure, it’s evident that Zuzi understands her material as she’s able to distill complex topics to just a colourful drawing and a few bullet points. “Root cause analysis” is described concisely with 3 paragraphs, 4 bullet points, and a beautiful drawing of a tree. Her purpose, keep in mind, isn’t to make the reader an expert in root cause analysis – her point is as if to say, “remember…problems often run deeeeeeep in the system. They’re organic. Find the seed.” I’m hearing in my mind a wise old music teacher, telling the aspring young jazz musician, “remember Herbie Hancock…go listen to Maiden Voyage…behold the deeeeeeep groove and floating melodies. It’s organic”.

The collection of materials which complete her book include highlights of Tuckman’s “Stages of Group Development”; Lencioni’s “Five Dysfunctions of a Team”; the martial artist’s progression through “Shu Ha Ri”; a shortlist of “Powerful Questions”; and a few others. In this last sitting, as I finished reading the book, I was struck by the similarity between Zuzi’s journey and interests and my own. I too have enjoyed Lencioni’s books, Tuckman’s model, the practice of co-active coaching. While I’ve lived and practiced all these years in Canada and Zuzi has lived and practiced in Prague, how is it we have been exposed to a similar body of knowledge and wisdom? I take some comfort in that, actually.

Conclusion

I face a difficult decision now. Zuzi signed this book for me and it’s in pristine condition. However, if I’m not careful, I am certain in the coming years this book will become littered with notes and comments, dog-eared pages and sticky-notes everywhere. Shall I allow myself to ruin this pristine book? Yes. Yes, I shall

Categories: Blogs

Welcome to Kagibox, our first physical product!

IceScrum - Fri, 11/25/2016 - 15:33
Today’s topic is quite different from what we usually talk about here. No version of iceScrum or new feature for your favorite tool (don’t worry you will get some very soon), but a presentation of a brand new product we just launched this week: Kagibox! For a long time, our team has been thinking of…
Categories: Open Source

Links for 2016-11-24 [del.icio.us]

Zachariah Young - Fri, 11/25/2016 - 10:00
Categories: Blogs

Lessons from a Scrum Webinar with Paul Goddard

Learn more about transforming people, process and culture with the Real Agility Program

“Improv-ing Your Scrum Team” was the title of the webinar given by Paul Goddard, a CST and Coach from the UK with a background in improvisational theatre. He has written and coached extensively on the use of improvisation to help Scrum teams develop. Because of my own experience in teaching and creating theatre, I was eager to see how Mr. Goddard used improv to improve Scrum teams.

For clarity’s sake, we can describe improvisation, in theatrical milieus, as the act of making things up as you go along. Improvisers are normally people who know their discipline very well, and are able to allow their creativity to take them into new places, new expressions, in their art.

Themes

The improv themes Goddard covered that can be used with Scrum teams were: creating safety, being spontaneous, telling stories, changing status and increasing sensitivity.

He likened these themes to the Agile Manifesto which proclaims: “Individuals and interactions over processes and tools,” and “Responding to change over following a plan.” He also related improv to Agile principles of “welcoming change,” “face to face is the best way to convey information,” and “the best designs emerge from self-organizing teams.”

Myths

In an interesting aside, he also compared myths of Agile to myths about Improv, for example, that Agile is only about creating software, and Improv is only about comedy. Another myth is that Agile and Improv are about unstructured chaos, whereas both prescribe being disciplined within a framework. Goddard described the Scrum framework as “a lightweight structure that uses constraints to unlock creativity;” improv also provides such a structure.

Creating Safety

Improv starts with “creating safety.” Since it is impossible to improvise alone, we must learn to trust others. This involves a team behaving as a family who rescue each other if necessary. There are no mistakes in improv; team members work for each other. When we try too hard in improv to get it right, it becomes a struggle to feel safe. Ultimately, we should be able to feel safe whether we win or lose, and definitely we feel safe when we PLAY.

Being Spontaneous

The second theme is “being spontaneous.” Spontaneity is the ability to act on impulse as soon as an idea occurs. This is the bread and butter of creativity. We are less spontaneous when we filter or edit our ideas before trying them out. We usually do this filtering because we fear our ideas being deemed crazy, or obscene, or unoriginal. Good improvisers increase their spontaneity by giving and receiving offers from team members. Offers are the currency of improv: you go with an idea, build on it, and keep a scene going. Bad improvisers put up blocks, that is, they reject ideas, and a scene goes nowhere.

Telling stories

Goddard tells us that the power of storytelling lies in the fact that many parts of the brain get activated: empathy is increased, oxytocin hormone and cortisol is released when we feel empathy for a character, and so on. Conversely, the brain switches off ideas or stories that are cliches – things we’ve heard too many times before and are inured to. The beauty about stories is that they make dry data more human and therefore interesting.

Changing status

Status always exists, especially in business environments. Some jobs or roles imply having a higher status, i.e. Scrum Master. If physical power poses adjust the hormones in our bodies, as Goddard claims, then the opposite is also true. In improv, playing high or low status and then changing it becomes a dynamic and creative game. It assists in collaboration. Low status players in improv tend to accept offers from their fellows; high status tend to refuse offers, unless they can control them. Scrum teams can learn to play with status to collaborate more effectively.

Increased sensitivity

Great improvisers develop certain qualities: selflessness (they want to make others look good), listening, observation, recollection/ memory, and emotional awareness (ability to pick up on cues). They are able to be “fully in the moment.” Goddard describes this as “thinking inside the box,” i.e. with safety established, the ideas are already there.

Back to Scrum

Just as in an improv team, a Scrum team’s firmest foundation is trust. How can one introduce improv and its beneficial themes to a Scrum team? Start with the idea of a game. It’s not about performing. It’s simply about having fun together, getting to know each other, learning common values, shaking off the dust of work-related responsibilities and allowing time for play. If you’re working with introverted types, allow that person to opt out. Make sure no one is judged. It’s important to be able to joke and feel like a family. Even a non co-located team can play word games over the telephone.

I look forward to trying out some improv with my own team, and, hopefully, in the future with others.

For a more in-depth understanding of the use of improv see Paul Goddard’s book “IMPROV-ING AGILE TEAMS” available at www.amazon.ca.

Learn more about our Scrum and Agile training sessions on WorldMindware.comPlease share!
Facebooktwittergoogle_plusredditpinterestlinkedinmail

The post Lessons from a Scrum Webinar with Paul Goddard appeared first on Agile Advice.

Categories: Blogs

Agile Leadership: An Oxymoron? – GOAT2016 Presentation

Notes from a Tool User - Mark Levison - Thu, 11/24/2016 - 14:11
How do Agile Leaders lead without control? What can they really do?

Mark answered those questions as a feature presenter at this year’s Gatineau Ottawa Agile Tour (GOAT2016).

Gatineau Ottawa Agile Tour 2016

The one-day conference saw record attendance, with double the last year’s numbers. Attendees had many great speakers and sessions to select from, and those who sat in on Mark’s session had nice comments to offer on his Agile Leadership presentation.

It wasn’t a topic selected out of the blue – Agile Pain Relief is excited to announce that we will be offering Certified Agile Leadership workshops in 2017! It’s a topic that Mark is well-versed on and passionate about.

View the slide presentation and download the session handout:

Agile Leadership – Beyond the Basics from Mark Levison, CST Download the digital copy of the accompanying session PDF handout “Agile Leader – Beyond the Basics“.
Categories: Blogs

Nomad 0.5 configuration templates: consul-template is dead! long live consul-template!

Xebia Blog - Thu, 11/24/2016 - 10:20
Or... has Nomad made the Consul-template tool obsolete? If you employ Consul or Vault to provide service discovery or secrets management to your applications you will love the freshly released 0.5 version of the Nomad workload scheduler: it includes a new 'template' feature to dynamically generate configuration files from Consul and Vault data for the jobs it
Categories: Companies

CLEAR Servant Leadership

Learn more about transforming people, process and culture with the Real Agility Program

Sun rising over field - servant leadership

I facilitated this workshop today for a senior leadership team. I mostly employ famous quotations familiar to many to provide a brief overview of Servant Leadership as well as a learning framework for systematically building capacity in others while improving the systems in which they work. The folks in the workshop seemed to really connect with Scott’s CLEAR model (not so famous but ingenious in its deceptive simplicity). I offer it as a guide for designing CLEAR acts of leadership.

Learn more about our Scrum and Agile training sessions on WorldMindware.comPlease share!
Facebooktwittergoogle_plusredditpinterestlinkedinmail

The post CLEAR Servant Leadership appeared first on Agile Advice.

Categories: Blogs

1st Conference, Melbourne, Australia, March 2-3 2017

Scrum Expert - Thu, 11/24/2016 - 08:00
The 1st Conference is a two-day event aimed at people starting out with Agile and Scrum run by practitioners of the Agile Melbourne community. The format of the 1st Conference is a one day of presentation and one day of workshops presented by Australian and overseas Agile experts. In the agenda of the 1st Conference you can find topics like ” Heart of Agile”, “Is there a future for business analysis?”, “Influence and inspire with stories”, “Goals on Every Level”, “Recruiting for Agile or Agility”, “Effective Agile Leadership: A practical model for Agile Managers”, “Road Mapping your way to Agile Fluency”, “The first 18 months of our Agile transformation”, “Infrastructure for Agile teams”, “Agile Governance”, “Large Scale Agile – LESS”, “Large Scale Agile – SAFe”, “The heart of Scrum”, “What is Kanban”. Web site: http://www.1stconf.com/ Location for the 1st Conference: RMIT University Storey Hall, Building 16, 336–348 Swanston St, Melbourne VIC 3000, Australia
Categories: Communities

Agile Tour talk: Engaging managers and executives in Agile transformation (in French)

Bruno Collet - Agility and Governance - Wed, 11/23/2016 - 18:43
I had the pleasure to give a talk at Agile Tour Montreal with colleague Payam Afkari, on the topic of engaging managers and executives in the Agile transformation.
We based our talk on five typical situations where agile coach interacts with managers or executives. Here are the videos we used (in FRENCH).
Agility for the right reasons
The real investment for Agile transformation
Steering the Agile transformation
Directive management style
Laisser-aller management style

Slides are available here (also in FRENCH) but as you know slides without speakers do not speak...
Categories: Blogs

Iterations and Increments

Johanna Rothman - Wed, 11/23/2016 - 18:07

general-agile-picture-copyright-1024x645Agile is iterative and incremental development and frequent delivery with cultural change for transparency.

What do the words iterative and incremental mean?

Iterative means we take a one-piece-at-a-time for creating an entire feature. Iterative approaches manage the technical risk. We learn about the risk as we iterate through the entire feature set.

Incremental means we deliver those pieces of value. Incremental approaches manage the schedule risk, because we deliver finished work.

Agile works because we manage both technical and schedule risk. We iterate over a feature set, delivering chunks of value. (One reason to deliver value often is so we can change what the team does next.)

Here’s a way to think about this if I use a feature set called “secure login.” Now, no one wants to log in. But, people want to have security for payment. So secure login might be a way to get to secure payment. The theme, or what I have been calling a feature set, is “Secure login.” A feature set is several related features that deliver a theme.

If you want to iterate on the feature set, you might deliver these valuable increments (I first wrote about this in How to Use Continuous Planning):

  1. Already existing user can log in.
  2. Users can change their password.
  3. Add new user as a user.
  4. Add new user as admin.
  5. Prevent unwanted users from logging in: bots, certain IP addresses, or a physical location. (This is three separate stories.)

If you implement the first story, you can use a flat file. You can still use a flat file for the second story. Once you start to add more than 10 users, you might want to move to some sort of database. That would be a story. It’s not “Create a database.” The story is “Explore options for how to add 10, 100, 1000, 10000 users to our site so we can see what the performance and reliability implications are.”

Notice the explore as part of the story. That would lead to a spike to generate options that the team can discuss with the PO. Some options have performance implications.

Every time the team iterates over the feature set, they deliver an increment. Since many teams use timeboxes, they use “iterations” as the timebox. (If you use Scrum, you use sprints.) Notice the term “iterate over the feature set.”

In incremental life cycles, such as staged delivery, the team would finish all the features in the one feature set. Incremental life cycles did not necessarily use timeboxes to timebox the incremental development. In iterative life cycles, such as spiral or RUP, the team would develop prototypes of features, or even partially finish features, but the final integration and test occurs after all the iterative development was done.

In agile, we iterate over a feature set, delivering incremental value. If you don’t finish your stories, you’re in an iterative life cycle. If you don’t limit the features you finish and finish “all” of them, you are in an incremental life cycle.

There is No One Right Way to select a life cycle for your project. If you want to use agile, you iterate over a feature set in a short time, delivering chunks of value.

If you are having trouble slicing your stories so you can create feature sets, see my Product Owner Workshop (starting in January). Super early bird expires this coming Friday.

Categories: Blogs

Scaling simplicity – Cascading control and permission management in Kanbanery

Kanbanery - Wed, 11/23/2016 - 17:44

Artykuł Scaling simplicity – Cascading control and permission management in Kanbanery pochodzi z serwisu Kanbanery.

Merging complexity and ease of use is always challenging. At Kanbanery, our aim has always been to create a product that is easy to use, and yet can scale with our clients’ businesses. In the early days, many of our clients were startups, and we know that startups aspire to greatness and some will achieve it. They need an agile project management tool that doesn’t get in the way of a small team building a great minimal viable product. When they become successful, they shouldn’t have to change their toolkit for some ungainly enterprise tool that requires a full-time administrator just to manage accounts, permissions, and workflows. One of the primary tools that we used to achieve flexibility was Principle-driven Design, which I described in an earlier blog post. A startup that chooses Kanbanery because they share our principles of transparency and collaborative learning will grow to become an enterprise that continues to share those principles.

An illustration is our permission management system.

At one time in a past life, I was a Jira system administrator for a large IT company. We had dozens of teams supporting or building dozens of products, each with different workflows. We had layers of management and stakeholders in various departments who had roles to play in multiple projects. The result was many groups with hundreds of overlapping permissions and every day I was adding and removing people from groups, defining new groups (never removing them), adding (but never removing) group permissions, and adding (never removing) workflows. Some companies think they need that level of control, but I didn’t want to do that to any of Kanbanery’s clients.

I knew that plenty of large companies use physical kanban boards. You can’t hide a physical board from someone who has a key to the room. You can’t show anyone some columns but not others. You can’t control who can move tasks or in which direction. And yet it works. That’s because people are basically good and most are pretty smart (they call it knowledge work for a reason), and when you trust them, their natural inclination is not to let you down.

So When we designed the Kanbanery permission system, we kept it simple. There are three roles: viewer, team member, and manager. A viewer can see anything, including comments, attachments, and reports. They see all the same things that a member of the team would see when they look at a board, but they can’t move task cards, create task cards, or change anything on the board. The physical analog is looking at a task board through a window. They see the same things the team sees. No secrets. That’s how we build trust.

A team member can add and move cards around and add comments and attachments to a card. They can also edit anything on a card.

Adding a team member in Kanbanery

A board manager (there can be several) can do everything a team member can and they can also change the board layout and settings and manage board users.

Personally, I use only the board manager role, giving all the control to everyone on my teams. No one has ever made a mistake or abused their power. People don’t have to ask me to add them to a board or to change a board’s settings or layout since anyone on the team can do all that by themselves. I had enough of that back when I was a Jira admin.

At the higher level, we have account and workspace management. The one thing that I do feel pretty strongly about controlling is my clients’ costs. The person who creates a company account and pays for it is the only person who can change the plan level, upgrade to the Pro plan, or add team members over the plan limit. The person who pays the bill, or who entered the company credit card should never be surprised by an invoice. So when someone creates an account, paid or not, they own it. In the account is one workspace. If they have a pro plan, then can create more workspaces.

Workspaces can be handy when you need to control access by product, team, department, or client. A workspace can have many managers, assigned by the account owner. These managers can do anything within a workspace that the account owner can, except things that would cost more money. They can create and delete boards and manage those boards and all their members.

It sounds complex, but after hundreds of thousands of clients using Kanbanery over almost ten years, I can only remember four times that we got a support request to clarify how something works.

Because from the standpoint of a person adopting Kanbanery for their company, the workflow is natural. They create an account, then perhaps they rename the workspace or create a few workspaces. They automatically are the workspace owners for all workspaces in their account. Perhaps later they want someone to help, and then they just add that person as an additional workspace manager. The account owner or their workspace managers then create new Kanbanery boards, and they are automatically managers of those boards. Again, if they want someone else to manage a project board, they just make them a board manager.

Only twice in Kanbanery’s history has this caused a problem. Both times it was because an engineer or project manager created an account for their team and paid with a company credit card borrowed for the purpose. In both cases, other teams in the company saw Kanbanery and liked it, and Kanbanery use grew from the original team to other departments. Later, the people who created the accounts left the companies and we’d start getting requests from accounting for invoices, or we were asked to update the credit card on file. So we’d migrate the account ownership to someone higher in the organization or in accounting and the problem was solved.

A student who created a free Kanbanery account for managing their coursework can assume it’s as easy to use as Trello because they never have to see the power that’s under the hood until they need it. A large corporation using Kanbanery in multiple departments for sales, marketing, legal, recruitment, and of course product development just sees a simple tool that scales intuitively. So by giving account owners total power over everything in the account and the ability to easily share that power, we have a simple system of automatically cascading responsibility that just works, because it’s based on maximizing simplicity and assuming trust and transparency.

Artykuł Scaling simplicity – Cascading control and permission management in Kanbanery pochodzi z serwisu Kanbanery.

Categories: Companies

Acceptance Test-Driven Development: A Quick Introduction

NetObjectives - Wed, 11/23/2016 - 16:05
Acceptance Test-Driven Development: A Quick Introduction Ken Pugh and Jim Trott talk about ATDD: who is involved and who leads the effort, what is involved in writing acceptance tests, how ATDD compares with regular "analysis" you have done in the past, how ATDD compares with TDD, and the language of Acceptance Tests. Ken describes why he is so passionate about ATDD and the tangible benefits he...

[[ This is a content summary only. Visit my website for full links, other content, and more! ]]
Categories: Companies

The Simple Leader: The Beginner’s Mind

Evolving Excellence - Wed, 11/23/2016 - 11:27

This is an excerpt from The Simple Leader: Personal and Professional Leadership at the Nexus of Lean and Zen


In the beginner’s mind there are many possibilities, in the expert’s mind there are few.
– Shunryu Suzuki

In the discussion on habits, I mentioned how a significant percentage of our decisions are rarely thought about. A disturbing corollary to that is that how we think and what we believe is also subject to the same shortcuts, called cognitive biases. In the next section, I will discuss how we observe processes, examine our current reality, and search for truth. Therefore, it is important to first understand and recognize how our experience, perspective, and bias can distort our observations.

One of the core concepts of Zen is shoshin, or “beginner’s mind.” This is a perspective that is free of preconceived ideas and opinions, and is open to new thought. I discussed earlier how some Lean concepts can be counterintuitive. Embracing shoshin requires “unlearning” what you thought you already knew—in effect, creating a beginner’s mind. As we become older and supposedly wiser, creating a beginner’s mind can become increasingly difficult. It becomes even more so when an entire team or organization needs to unlearn and develop a beginner’s perspective.

Begin by focusing on questions, not answers. When observing a process, especially one you’ve seen many times, try to avoid jumping ahead to conclusions. Take one step (one question) at a time. Similarly, be aware that what seems like common sense may not be. Avoid using the word “should” as it implies a predeter-mined or expected outcome. Be careful with experience. What you already know should be an input, not a perspective. Be comfort- able with saying “I don’t know”—it shows a desire to learn and is a component of humility.

Being biased is a result of not having a beginner’s mind. The most common and well-known bias is confirmation bias. This is our desire to believe what we want to believe, to the extent that we consciously or subconsciously distort or interpret information to fit our preconceptions. We can also seek out sources of information that align with our biases, while ignoring non-confirming data.

You can see an example of confirmation bias in the politics of the United States. It is the reason the two major parties in the U.S. are moving away from the center and more toward the extremes. Even though the number of information sources has exploded over the last couple decades, people on the right of the spectrum consume news geared toward them, because they feel it is correct. In other words, it fits their biases. The same happens on the left. This has occurred to such an extent that heroes of each party—Ronald Reagan and John F. Kennedy, for example—probably wouldn’t be welcome in their parties today.

A second form of bias is loss aversion. Researchers such as psychologists Daniel Kahneman and Amos Tversky have found that we’re twice as likely to try to avoid a loss than go after a gain. In effect, we are risk averse, which may be great for our survival as a species, but it hinders us as we try to create organizational change and improvement.

A third form of bias is conformity bias, also known as groupthink (e.g., “When in Rome…”). By nature, most of us don’t like to stand out in a crowd and will be willing to agree with a group, even if we know the information is incorrect.

A fourth type is survivorship bias, where we focus on the tiny fraction of people that are successful, ignoring the far greater numbers that have failed. An example of this is our fascination with and attraction to get-rich-quick gurus. We also look at highly successful people like Steve Jobs and Bill Gates, and think that could be us. We then try to model ourselves after them. We find it easy to ignore, or not even understand, that every path is unique and what works for one person may not for another, for a multitude of reasons.

Finally—and this one is very common in the business world—is anchoring, or first impression bias. This form of bias occurs because we subconsciously give the first piece of information we receive on a topic more relevance and weight than follow- up information. This is why public relations companies find it very important to get their story out first, and why it is so difficult to change minds after the fact—even if the subsequent information is more accurate.

Once we know that we’re susceptible to these biases, what can we do? The most important thing to do is to be mindful and present. Observe your thoughts and ask validating questions. Why do you think this way? What are the arguments against your opinion? Review the forms of bias and honestly try to determine if they might be in play. Taking steps to neutralize your biases will help you make smarter, more rational decisions. Observe like a beginner.

Categories: Blogs

Kubernetes: Writing hostname to a file

Mark Needham - Tue, 11/22/2016 - 21:56

Over the weekend I spent a bit of time playing around with Kubernetes and to get the hang of the technology I set myself the task of writing the hostname of the machine to a file.

I’m using the excellent minikube tool to create a local Kubernetes cluster for my experiments so the first step is to spin that up:

$ minikube start
Starting local Kubernetes cluster...
Kubectl is now configured to use the cluster.

The first thing I needed to work out how to get the hostname. I figured there was probably an environment variable that I could access. We can call the env command to see a list of all the environment variables in a container so I created a pod template that would show me that information:

hostname_super_simple.yaml

apiVersion: v1
kind: Pod
metadata:
  name: mark-super-simple-test-pod
spec:
  containers:
    - name: test-container
      image: gcr.io/google_containers/busybox:1.24
      command: [ "/bin/sh", "-c", "env" ]      
  dnsPolicy: Default
  restartPolicy: Never

I then created a pod from that template and checked the logs of that pod:

$ kubectl create -f hostname_super_simple.yaml 
pod "mark-super-simple-test-pod" created
$ kubectl logs  mark-super-simple-test-pod
KUBERNETES_SERVICE_PORT=443
KUBERNETES_PORT=tcp://10.0.0.1:443
HOSTNAME=mark-super-simple-test-pod
SHLVL=1
HOME=/root
KUBERNETES_PORT_443_TCP_ADDR=10.0.0.1
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin
KUBERNETES_PORT_443_TCP_PORT=443
KUBERNETES_PORT_443_TCP_PROTO=tcp
KUBERNETES_SERVICE_PORT_HTTPS=443
KUBERNETES_PORT_443_TCP=tcp://10.0.0.1:443
PWD=/
KUBERNETES_SERVICE_HOST=10.0.0.1

The information we need is in $HOSTNAME so the next thing we need to do is created a pod template which puts that into a file.

hostname_simple.yaml

apiVersion: v1
kind: Pod
metadata:
  name: mark-test-pod
spec:
  containers:
    - name: test-container
      image: gcr.io/google_containers/busybox:1.24
      command: [ "/bin/sh", "-c", "echo $HOSTNAME > /tmp/bar; cat /tmp/bar" ]
  dnsPolicy: Default
  restartPolicy: Never

We can create a pod using this template by running the following command:

$ kubectl create -f hostname_simple.yaml
pod "mark-test-pod" created

Now let’s check the logs of the instance to see whether our script worked:

$ kubectl logs mark-test-pod
mark-test-pod

Indeed it did, good times!

Categories: Blogs

Knowledge Sharing


SpiraTeam is a agile application lifecycle management (ALM) system designed specifically for methodologies such as scrum, XP and Kanban.