Skip to content

Feed aggregator

WorldCup 2014 Retrospective: The Magic about Mindset and Leadership

Xebia Blog - Sun, 07/13/2014 - 14:56

This weekend preparing this bjohan-cruijff-hollande-1974logpost, I ran into a brilliant quote from Johan Cruijff. At a conference a few years ago for the Dutch local government, he told a great story about a talented blind golfer, Ronald Boef he played golf with.  Despite his handicap, Ronald Boef played his best golf in difficult mental circumstances like playing balls over a big pond or consistent putting. The conclusion of Johan Cruijff: "Ronald doesn’t “see" the problems, he is only focussing on the next target. He thinks from a positive mindset".   I couldn’t agree more.  In my opinion, this is one of the fundamentals behind eXtreme Manufacturing (XM) and the reason why the Dutch team didn’t made it through the WorldCup finals.

Like many consultants, topsport is an inspiring source for me.  Almost every day I show or tell stories from great sport coaches like Marc Lammers or Johan Cruijjff.   Like every major sports event, also this WorldCup in Brasil contained some interesting lessons for me I wanted to share with you.

The Big Question: You can have the best individual team members but still not be able to perform.  Why?

 3rd Place Playoff - 2014 FIFA World Cup Brazil

Top Team Ingredient #1: Mindset

The defeat of Spain against the Netherlands, the glorious win of Germany over Brazil showed having fun, faith and determination pay off and a lack of these ingredients will bring you in a lot of trouble.   Until the penalty series of the semi-finals, the right side of this recipe also worked for the Dutch squad. Now, penalty series are for no one a fun exercise, which only leaves faith and determination.   Unlike the previous penalty series against Costa Rica, the Dutch team had no faith in their keeper as a penalty-killer which directly effected the teams determination. They became more hesitant and aware of what could happen when missing a penalty.  Yes, Ronald Boef probably would have taken the penalties better than the Dutch team did against Argentina.. ;-)

Top Team Ingredient #2: Leadership

Like Johan Cruijjf stated in the same video, the leader on the pitch should be 100% concentrated on every detail and also (in my words) be the natural leader of the team, coaching them in keeping the spirit up and giving them enough room “to grow".  Despite his great qualities as a football-player, as a captain Robin van Persie was obviously not the natural leader of the team. Arjan Robben was. The natural leadership of Arjan Robben in combination with his determination was an important reason why The Netherlands were able to regain their motivation and pull off a highly respected 3rd place in this WorldCup.

In my opinion, a high performing team should always have a natural leader.  The options:

  1. A formal leader with natural leadership qualities is the perfect combination.
  2. A formal leader without natural leadership qualities but able to delegate this to another team member is also okay.
  3. A formal leader without natural leadership qualities and ignoring don’t having this competence, is bad news for the team, the team’s environment but above all, for the formal leader himself.

For the new coach van the Dutch team, Guus Hiddink, it will be a challenge convincing Robin van Persie to step back as the 1st captain after nominating Arjan Robben.  Robin van Persie should keep one thing in mind here:  no one is doubting his qualities as a top world class striker.  As a natural leader however, he is not that world class.  Trying to be one is effecting his performance as a world class striker and that would in the end be a disappointment for his supporters but above all, for Robin van Persie himself.

What does this imply for Leadership within organizations?

Leadership, especially natural leadership, is crucial for having highly motivated and productive teams.  The team stays motivated and focussed on their goal.

How ever, a lot of employees are still instrumentally “nominated” to become a coach or manager without having any leadership skills.  In my opinion, natural leadership is something you can’t gain by nomination or just by learning it.  You can improve it, but there should be some basis of natural leadership.  Ignoring this can be even counter-productive: conflicts will arise, the spirit and productivity will go down.

Categories: Companies

How culture gets created and how to change ?

Agile World - Venkatesh Krishnamurthy - Sat, 07/12/2014 - 22:17
image I will explain this through a simple example of how culture gets created in organizations.
The team is conducting a retrospective.  They capture all the good, bad and ugly items on post-its and capture the action items as well. However, the Scrum Master never bothers to follow up with action items.
Team attends the second retrospective and the similar issues crop up again.  Some one nudges the Scrum Master about the pending action from the last retro and you would hear that it is yet to be done.
By the time you are in 3rd or 4th retro, team members would have lost interest in creating action items as they have lost faith in this process. This has lead to creation of a culture that “nothing works in this team” OR “It is a waste of time”
When new members join the team and observes the retro, they would be surprised to see that no one is creating action items. They could potentially blame the team for this.  Even if the new team members try to bring their new ideas, rest of the team would be skeptical and pull them down by saying  “nothing works in this team” don’t stress yourself.  This trend will have domino effect on the entire system.
In retrospect, it is not that the team was un-willing to do anything with action items, it is the leader who silenced them in every instance. People in power, authority, dominant and influential positions play a key role in  creating culture in the organizations.
Good news is, it is possible to change. I see two options in such situations, either get a new leader who could enable in creating a new culture or get a shark in the team, who could stand up and challenge the status-quo
What is your experience in changing the culture ?
Categories: Blogs

Conventional HTML in ASP.NET MVC: Adopting Fubu conventions

Jimmy Bogard - Fri, 07/11/2014 - 17:42

Other posts in this series:

Now that we’ve established a base for programmatically building out HTML, we can start layering on top more intelligent model-centric conventions for both displaying and editing data. Eventually, I want to get to the point of not just supporting simple conventions like “DateTime = date picker” and “bool = checkbox” but much more powerful ones. Things like “a property named ‘Comments’ should be a textarea” or “a property of an entity type should make its dropdown options the list of items from the database”. These are all things that are universal to the metadata found on those properties.

On top of that, I still want to enable customization, but at the HTML tag level. Ultimately, these builders build one or more tags, but nothing bigger than that. I don’t want to use templating for this – complex logic inside a template is difficult to do, which is why you have concepts like Ember views or Angular directives. I want to build an equivalent to those, but for MVC.

I built a rather lousy, but functional version, years ago, but missed the concept of an object model to build HTML tags. That lousy version was ported to MVC Contrib, and should not be used by anybody under any circumstances. Instead, I’ll pull in what FubuMVC already built, which turns out is built on top of the HtmlTags library.

I’m not going to use any of the other pieces of FubuMVC – just the part that conventionally builds HTML tags. First things first, we’ll need to get the Fubu MVC conventions and related packages up and running in our app.

Integrating Fubu Conventions

First, we’ll need to install the correct packages. For this, we’ll just need a couple:

  • FubuMVC.Core.UI
  • FubuMVC.StructureMap3

These two pull down a number of other packages. To make things easier on ourselves, we’ll also install the StructureMap package for integrating with MVC 5:

  • StructureMap.MVC5

Once that’s done, we have StructureMap plugged in to MVC, and the components ready for plugging FubuMVC into ASP.NET MVC. We’ll need to make sure that the correct assemblies are loaded into StructureMap for scanning:

Scan(
    scan => {
        scan.AssemblyContainingType<IFubuRequest>();
        scan.AssemblyContainingType<ITypeResolver>();
        scan.AssemblyContainingType<ITagGeneratorFactory>();
        scan.AssemblyContainingType<IFieldAccessService>();
        scan.AssemblyContainingType<StructureMapFubuRegistry>();

        scan.TheCallingAssembly();
        scan.WithDefaultConventions();
        scan.LookForRegistries();
    });

We just make sure we add the default conventions (IFoo –> Foo) for the Fubu assemblies we referenced as part of the NuGet packages. Next, we need to configure the pieces that normally are done through FubuMVC configuration, but because we’re not pulling all of Fubu, we need to do through container configuration:

public class FubuRegistry : Registry
{
    public FubuRegistry()
    {
        var htmlConventionLibrary = new HtmlConventionLibrary();
        htmlConventionLibrary.Import(new DefaultHtmlConventions().Library);
        For<HtmlConventionLibrary>().Use(htmlConventionLibrary);

        For<IValueSource>().AddInstances(c =>
        {
            c.Type<RequestPropertyValueSource>();
        });
        For<ITagRequestActivator>().AddInstances(c =>
        {
            c.Type<ElementRequestActivator>();
            c.Type<ServiceLocatorTagRequestActivator>();
        });
        For<HttpRequestBase>().Use(c => c.GetInstance<HttpRequestWrapper>());
        For<HttpContextBase>().Use(c => c.GetInstance<HttpContextWrapper>());
            
        For<HttpRequest>().Use(() => HttpContext.Current.Request);
        For<HttpContext>().Use(() => HttpContext.Current);

        For<ITypeResolverStrategy>().Use<TypeResolver.DefaultStrategy>();
        For<IElementNamingConvention>().Use<DotNotationElementNamingConvention>();
        For(typeof(ITagGenerator<>)).Use(typeof(TagGenerator<>));
        For(typeof(IElementGenerator<>)).Use(typeof(ElementGenerator<>));
    }
}

There’s a bit here. First, we create an HtmlConventionLibrary, import default conventions, and register this instance with the controller. We’re going to modify this in the future but for now we’ll use the defaults. This class tells FubuMVC how to generate HtmlTag instances based on element requests (more on that soon). Next, we register a value source, which is analogous to a ValueProvider in MVC. The ITagRequestActivator is for filling in extra details around a tag request (again, normally filled in with FubuMVC configuration).

Since FubuMVC still has pieces that bridge into ASP.NET, we need to register the HttpContext/Request classes based on HttpContext.Current. In the future ASP.NET version, this registration would go away in favor of Web API’s RequestContext.

The ITypeResolverStrategy determines how to resolve a type based on an instance. I included this because, well, something required it so I registered it. Much of this configuration was a bit of trial-and-error until pieces worked. Not a knock on Fubu, since this is what you deal with bridging two similar frameworks together. Still much cleaner than bridging validation frameworks together *shudder*.

The IElementNamingConvention we’re using tells Fubu to use the MVC-style notation for HTML element names (foo[0].FirstName). Finally, we register the open generic tag/element generators. Even though the naming convention is IFoo->Foo, StructureMap doesn’t automatically register open generics.

This is the worst, ugliest part of integrating Fubu into ASP.NET MVC. If you can get past this piece, you’re 100 yards from the marathon finish line.

Now that we have Fubu MVC configured for our application, we need to actually use it!

Supplanting the helpers

Because the EditorFor and DisplayFor are impossible to completely replace, we need to come up with our own methods. FubuMVC exposes similar functionality in InputFor/DisplayFor/LabelFor methods. We need to build HtmlHelper extensions that call into FubuMVC element generators instead:

public static class FubuAspNetTagExtensions
{
    // Similar methods for Display/Label
    public static HtmlTag Input<T>(this HtmlHelper<T> helper, 
        Expression<Func<T, object>> expression)
        where T : class
    {
        var generator = GetGenerator<T>();

        return generator.InputFor(expression, model: helper.ViewData.Model);
    }

    private static IElementGenerator<T> GetGenerator<T>() where T : class
    {
        var generator = DependencyResolver.Current.GetService<IElementGenerator<T>>();
        return generator;
    }
}

We build an extension method for HtmlHelper that accepts an expression for the model member you’re building an input for. Next, we use the dependency resolver (service location because MVC) to request an instance of an IElementGenerator based on the model type. Finally, we call the InputFor of IElementGenerator to generate an HtmlTag based our expression and model. Notice there’s no ModelState involved (yet). We’ll get to validation in the future.

Finally, we need to use these Label and Input methods in our forms. Here’s one example from the Register.cshtml view from the default MVC template:

<div class="form-group">
    @Html.Label(m => m.Email).AddClass("col-md-2 control-label")
    <div class="col-md-10">
        @Html.Input(m => m.Email).AddClass("form-control")
    </div>
</div>
<div class="form-group">
    @Html.LabelFor(m => m.Password, new { @class = "col-md-2 control-label" })
    <div class="col-md-10">
        @Html.PasswordFor(m => m.Password, new { @class = "form-control" })
    </div>
</div>

I left the second alone to contrast our version. So far not much is different. We do get a more elegant way of modifying the HTML, instead of weird anonymous classes, we get targeted, explicit methods. But more than that, we now have a hook to add our own conventions. What kinds of conventions? That’s what we’ll go into the next few posts.

Ultimately, our goal is not to build magical, self-assembling views. That’s not possible or desirable. What we’re trying to achieve is standardization and intelligence around building model-driven input, display, and label elements. If you’re familiar with Angular directives or Ember views, that’s effectively what our conventions are doing – encapsulating, with intelligent, metadata-driven HTML elements.

Next up: applying our own conventions.

Post Footer automatically generated by Add Post Footer Plugin for wordpress.

Categories: Blogs

[Webinar] "Fast IT": Concepts and Examples from Assembla and Attivio

Assembla Blog - Fri, 07/11/2014 - 17:41

Join us on July 23, 2014 from 11:00 AM - 11:45 AM EDT for a webinar “Fast IT”: Concepts and Examples from Assembla and Attivio.

describe the image

When we at Assembla heard about the 2-2-2 project structure used by Attivio, we knew we had a fun story and a big idea to share.  The fun story is the way that Attivio can spin-up major Business Intelligence apps with 2-day, 2-person prototyping sessions. The big idea is “Fast IT”: a way of managing fast and Agile projects, while working smoothly with your slower, more reliable core systems: "Core IT".

In this Webinar, Sid Probstein, CTO of Attivio, and Andy Singleton, founder of Assembla, will share their discoveries about ways that “Core” and “Fast” can work smoothly together.  We will show tools that help you wrap and index your Core IT so that you can easily use it in Fast IT projects.  And, we’ll show how to professionally launch and manage an expanding portfolio of Fast IT projects for analytics, Web, mobile and marketing applications and SaaS integration. 

This Webinar is designed to help IT professionals or project managers who are handling analytics, Web, mobile, cloud and marketing applications.

describe the image

Presented By:

assembla logo rectangle    Attivio logo

Categories: Companies

Why Little's Law Works...Always

Xebia Blog - Fri, 07/11/2014 - 13:00

On the internet there is much information on Little's Law. It is described an explained in many places [Vac]. Recently, the conditions under which it is true got  attention [Ram11]. As will be explained in this blog the conditions under which the law is true are very mild. It will be shown that for teams working on backlog items virtually there are no conditions.

Why does it work? Under what conditions does it hold?

Airplane Folding

In the previous post (Applying Little's Law in Agile Games) I described how to calculate the quantities in Little's Law. As an example this was applied to the Agile game of folding airplanes consisting of 3 rounds of folding.

airplane-1

Let's look in more detail in which round an airplane was picked up and in which round it was completed. This is depicted in the following figure.

The horizontal axis shows the number of rounds. The vertical axis describes each airplane to fold. The picture is then interpreted as follows. Airplane no. 2 is picked up in round 1 and competed in the same round. It has a waiting time of 1 round. This is indicated at the right of the lowest shaded rectangle.
Airplane no. 8 was picked up in round 1 and finished in round 3. A waiting time of 3 rounds. Airplane no 12 (top most shaded area) was picked up in round 3 and unfinished. Up to round 3 a waiting time of 1 round.

The number 3, 5, and 10 denote the number of completed airplanes at the end of round 1, 2, and 3 respectively.

Waiting Times

The waiting times are determined by counting the number of 'cells' in a row.

The pictures show that we have 12 airplanes (12 'rows'), 3 completed in the first round, 2 more completed in the second round and 5 additionally  folded airplanes in the third and last round giving a total of 10 finished paper airplanes.

All twelve airplanes have waiting times of 1, 1, 1, 2, 2, 3, 3, 3, 3, 3, 3, and 1 respectively.

Work in Progress

In the figure below the number of airplanes picked up by the team in each round are indicated with red numbers above the round. new doc 6_2
In round 1 the team has taken up the folding of 11 airplanes (of which 3 are completed). In round 2 the team was folding 8 airplanes (of which 2 were competed) and in round 3 the team was folding 7 airplanes (of which it completed 5).

Work in progress is determined by counting the number of 'cells' in a column.

Little's Law.....Again

Now that we have determined the waiting times and amount of work in progress, let's calculate the average waiting time and average work in progress.

Average Waiting Time. This quantity we get by adding all waiting times and dividing by the number of items. This gives 26/12.

Average Work in Progress. This quantity is equal to (11+8+7)/3 = 26/3.

Average input rate. This is equal to 12 (the height of the third column) divided by 3 which gives 4.

Again we find that: Average Waiting Time = Average Work in Progress / Average input rate.

Why It Works

new doc 6_3 Little's Law works....always....because the average waiting times is got by adding the lengths of all the rows dividing by the number of rows, so it is proportional to the size of the shaded area in the picture to the right.

The average work in progress is got by adding the heights of the columns in the shaded area which is also proportional to the size of the shaded area.

Both the waiting time and work in progress relate to the size of the shaded area: one by adding the heights and the other by adding the rows. The proportionality corresponds to the average input rate.

Conditions

What assumptions did we make? None...well this is not exactly true. The only assumptions we make in this calculation:

  • We count discrete items
  • There are a finite number of rounds (or sprints)
  • Items enter and possibly leave the system.

That's it. It doesn't need to be stable, ageing (items having increasingly larger waiting times) is not a problem, prioritisation/scheduling of items (also known as queueing discipline), etc. Only the above assumptions need to be true.

Note: Especially the second condition is important, i.e. Little's Law is measured over a finite time interval. For infinite time interval additional conditions need to be fulfilled.

Note: When applying this to agile teams we always consider finite time intervals, e.g. 6 months, 1 year, 8 sprints, etc.

Conclusion

Little's Law is true because the average waiting time is proportional to the size of the shaded area (see figure) and the average work in progress is also proportional to the size of the same shaded area.

Only 3 basic conditions need to be met for Little's Law to be true.

References

[Vac] Little’s Law Part I, Dan Vacanti, http://corporatekanban.com/littles-law-part-i/

[Ram11] Little’s Law – It’s not about the numbers, Agile Ramblings, http://agileramblings.com/2012/12/11/littles-law-its-not-about-the-numbers/

Categories: Companies

Can you recommend a virtual task board?

Scrum Breakfast - Fri, 07/11/2014 - 11:08
The participants of my last course had a lot of questions about working with distributed teams. What tools do you need to work with distributed teams?

I developed echobravo with a team from Brazil. As product owner, I was located (mostly) in Zurich. My team was in Maringa.

One aspect which encouraged the trust between myself and my supplier was the use of a cloud-based source code repository like bitbucket. Knowing that I had access to the source code in the event a dispute took a lot of the worry away from the collaboration.

We found "Web 2.0" tools like Google Docs, Google Hangout, Dropbox and Skype to be essential for collaboration. You can communicate with each other, share screens and access common files, e.g. definition of done. I liked Skype better than hangout for convenience, especially the ability easily recall old chats, but Google Hangout has better video and screen sharing (an extra cost feature on Skype).

In my experience, proprietary tools introduce cost which is a hurdle to using them, and more importantly, they introduce arguments over who will pay for them which can be an even bigger hurdle! Beware of proprietary video conference solutions. Make sure that it is possible for people to call in from home without proprietary hardware.

I find an online spreadsheet is an excellent, collaborative tool for distributed teams to maintain story maps and backlogs, and for holding a distributed retrospective. A wiki is also good for documenting stories, sprints, and acceptance criteria. You can also record the state of the task board every day by taking a picture and uploading it to the wiki, a capability which is, AFAIK, unmatched by any virtual task board.

I would only recommend a virtual task board if the development team is not co-located. (And I would not recommend a development team which is not co-located!). My Brazilian team and I used a Target Process to manage the backlog and the flow of stories (not tasks!) from waiting to working to done in the Sprint, but they used a physical task board to manage their actual tasks.

Target Process is dear to my heart for a number of nonfunctional reasons (ask me about "my" feature!). Greenhopper/Jira is quite widely used, because of its integration into the other Atlassian products, as are Rally and VersionOne. I don't have any strong preference for or against any of them. Most products have an online version which is free for five users, so you can try it out and figure it out before you actually pay money.

The main drawback of virtual tools are twofold: First, a virtual tool doesn't function well as an information radiator -- people have to actively look at the appropriate web page to see the status (if they even have access). With a physical board, anybody walking by can take look.

Second, Products must appeal to a wide spectrum of users, so they can do far more than you actually need. They often support practices which are not really recommended any more (like estimating tasks in hours). Wading through this excess can be confusing and cause you to waste time forever on unnecessary process.

I would therefore recommend, before you pick a product, start on paper. Then maybe move to an online spreadsheet. These are both very flexible tools. Figure out what your requirements and workflow really are. Then you are well positioned to pick a tool that suits you needs.
Categories: Blogs

UX: Why Lists Save Time

TargetProcess - Edge of Chaos Blog - Fri, 07/11/2014 - 02:44

Any information in the world falls into one of the 2 categories: it requires some action on our part, or it wants to be consumed (or browsed). The job of a UX designer or an infoviz/dataviz specialist, then, is to create UIs or pages with one of these goals in mind. If we want to subtly nudge users to browsing more pages in a passive mode, the design logic needs to be built just for that. If we want to help users act and save their time, rather than make them hang out on a web page,  then the page layout or user interface has to take that into account. I will show the difference between these two kinds of logic based on the  list and grid infoviz patterns from a news hub and from a project management tool.

It’s quite common nowadays to display news as a grid of tagline+image sets, maybe with a mouseover text. Here’s one such grid:

news grid

If we think about it, this image+headline+mouseover layout is used with one major goal: engage users. Make them spend more time browsing the news, move mouse over images, check a few headlines, click on an image. Once a mouseover text is displayed, it’s an easy-lazy thing to get to the full view of the news, with advertisements, videos and social comments. The grid layout, thus, appears to eat more of users’s time, luring them with this ease to click and to browse. In general, if we lay this whole “engagement” thing aside, reading news is a passive online activity, and it can be completed rather quickly. So, if someone wants to scan the news, rather than get stuck in them, they wouldn’t want to hover mouse over those pieces, checking for the clues. The grid layout in the news appears to be more “engaging”, as they call it, but it loses in terms of time spent vs. value gained. I mean, what if I don’t have time to move mouse over those snapshots to find out what’s behind a headline? Busy readers will likely want to just scan the news and headlines. They don’t even need those large image thumbnails. That’s why a list layout scores higher on the time spent/value gained scale. Check this out:

news list

This layout allows  to scan many headlines+summaries in one look. Readers are able to decide faster, if they want to click on some news or not, without mouseovers. Apparently, I would want to read more about the cleanup from storms, which left three dead, and I don’t have to hover mouse over an image, as in a kid’s game, to find out what the cleanup from storms entails. That’s why I like the list layout better: it is more respectful of my time. I must give credit to the UX designers of this news portal, though. They have provided users with an option to choose between a list and a grid.

That was the case with passive browsing. A few “active” things available to users on a news web-site would be clicking on an ad (the more time they spent there, the more likely they are to do that), posting a comment and/or sharing news in social networks. That’s the logic behind the grid design in case you were wondering why such a draining layout — that’s how it looks to me — should ever be used in the news. Another handy example of grid slowing us down is… our desktop. Often I just save stuff to my desktop, files, snips or images, and when I want to find something, it takes more time and effort to move eyes between thumbs, as compared to using a list or search.

Let’s now consider the logic behind the list and grid/board layouts in a project management tool. The UI of such a tool must encourage users to spend time productively. It might seem a stretched parallel, but in some ways board/grid is less efficient for project management as well. Lists will work better when it gets to managing bugs, for example:

list view inline edit 1

If someone in charge, a QA manager, or anyone else, will want to create a living display of bugs, tailored for hands-on work, it would be such a list. Apart from the compact layout, the list has inline edit for most of the fields, and it’s like with processing fish: bug details can be updated faster than in a grid view. Besides, the very columns in this list are customizable; one can choose which column they want to see and which not. Now, what if this person in charge were to work with bugs displayed as a grid? Check this out:

board view mouse over

As with the news portal grid, one has to move mouse over bugs for more details, e.g. to check on a bug’s severity. This grid layout would be a plus if I had time to leisurely contemplate which card might mean what, but if I want to change a bug’s status, assign people, or update tags, I need to dive further in *sigh*, click on the bug card and work there. The grid layout does not allow for quick scanning of the bugs and quick editing/updating. But it would be optimal for changing states as they do on a Kanban board. Thankfully, this project management tool allows users to switch between views when they want to do whatever they want :)

I hope these examples helped reveal some logic behind designing information layouts for various purposes.

Related articles:

How Visualize: Board, List or Timeline?

Visual Management Software

How Timelines Help Project Managers Track Progress

Categories: Companies

Bootstrapping and monitoring multiple processes in Docker using monit

Xebia Blog - Fri, 07/11/2014 - 00:01

If you have every tried to start a docker container and keep it running, you must have encountered the problem that this is no easy task. Most stuff I like to start in container are things like http servers, application servers and various other middleware components which tend to have start scripts that daemonize the program. Starting a single process is a pain, starting multiple processes becomes nasty. My advise is to use monit to start all but the most simple Docker application containers! When I found monit while delving through the inner works Cloud Foundry, I was ecstatic about it! It was so elegant, small, fast, with a beautiful DSL that I thought it was the hottest thing since sliced bread! I was determined to blog it off the roof tops. Until.... I discovered that the first release dated from somewhere in 2002. So it was not hot and new; Clearly I had been lying under a UNIX rock for quite a while. This time, the time was right to write about it! Most of the middleware components I want to start in a docker container, have a habit to start the process, daemonize it and exit immediately, with the docker container on its tail. My first attempt to circumvent this while starting a tomcat server in Docker looked something like this:

/bin/bash -c "service tomcat7 start;while service tomcat7 status;do sleep 1;done

Quite horrific. Imaging the ugliness when you have to start multiple processes. A better solution is needed:  With the zabbix docker container  the problem was solved using simplevisor. As you can read in this post that was not a pleasant experience either. As I knew little about simplevisor and could not solve the problem, I put in an issue and  resorted to a plain installation. But a voice in my head started nagging: "Why don't you fix it and send a pull request?"  (actually, it was the voice of my colleague Arjan Molenaar). Then, I remembered from my earlier explorations to the inner workings of Cloud Foundry, a tool that would be really suitable for the job: monit. Why? It will:

  1. Give you a beautiful,readable specification file stating which processes to start
  2. Make sure that your processes will keep on running
  3. Deliver you a clean and crisp monitoring application
  4. Reduce all your Docker starts to a single command!

In the case of the Zabbix server there were seven processes to start: the zabbix server, agent, java agent, apache, mysql and sshd. In monit this looks as follows:

check process mysqld with pidfile /var/run/mysqld/mysqld.pid
        start program = "/sbin/service mysqld start"
        stop program = "/sbin/service mysqld stop"

check process zabbix-server with pidfile /var/run/zabbix/zabbix_server.pid
        start program = "/sbin/service zabbix-server start"
        stop program = "/sbin/service zabbix-server stop"
        depends on mysqld

check process zabbix-agent with pidfile /var/run/zabbix/zabbix_agentd.pid
        start program = "/sbin/service zabbix-agent start"
        stop program = "/sbin/service zabbix-agent stop"

check process zabbix-java-gateway with pidfile /var/run/zabbix/zabbix_java.pid
        start program = "/sbin/service zabbix-java-gateway start"
        stop program = "/sbin/service zabbix-java-gateway stop"

check process httpd with pidfile /var/run/httpd/httpd.pid
        start program = "/sbin/service httpd start"
        stop program = "/sbin/service httpd stop"
        depends on zabbix-server

check process sshd with pidfile /var/run/sshd.pid
        start program = "/sbin/service sshd start"
        stop program = "/sbin/service sshd stop"

Normally when you start monit it will start as a daemon. But fortunately, you can prevent this with the following configuration.

set init

Your Dockerfile CMD can now always look the same:

    monit -d 10 -Ic /etc/monitrc

Finally, by adding the following statement to the configuration you get an application to view the status of your container processes,

set httpd
     port 2812
     allow myuser:mypassword

After starting the container, surf to port 2812 and you will get a beautiful page showing the state of your processes and the ability to stop and restart them.

monit overview monit process control

Just delve into the documentation of monit and you will find much more features that will allow you to monitor network ports and files, start corrective actions and send out alerts.

Monit is true to its UNIX heritage: it is elegant and promotes an autonomous monitoring system. Monit is cool!

Categories: Companies

Factors that support Creativity

Agile Complexification Inverter - Thu, 07/10/2014 - 22:17
Many companies have initiatives to become innovative.  There are some companies that don't appear to need a leadership sponsor to get competitive innovation - wonder why.  Perhaps they have some fundamental aspect to their organization that allows them to be creative.  What would be those aspects?

Here's my research on the topic of creativity.

Predicting Creativity in the Wild-- a research paper on the use of sociometric monitoring of teams by Sociometric Solutions.

Actor John Cleese talks about creativity.  It's about the open mindset of play.





Play is More than Just Fun - Stuart Brown; TED Talk
Stuart Brown has studied play in animals and humans and argues that it is a natural tool used for creative problem solving.

Play by Stuart Brown"We've all seen the happiness on the face of a child while playing in the school yard. Or the blissful abandon of a golden retriever racing across a lawn. This is the joy of play. By definition, play is purposeless, all-consuming, and fun. But as Dr. Stuart Brown illustrates, play is anything but trivial. It is a biological drive as integral to our health as sleep or nutrition. We are designed by nature to flourish through play."

"Dr. Brown has spent his career studying animal behavior and conducting more than six- thousand "play histories" of humans from all walks of life-from serial murderers to Nobel Prize winners. Backed by the latest research, Play (20,000 copies in print) explains why play is essential to our social skills, adaptability, intelligence, creativity, ability to problem solve and more. Particularly in tough times, we need to play more than ever, as it's the very means by which we prepare for the unexpected, search out new solutions, and remain optimistic. A fascinating blend of cutting-edge neuroscience, biology, psychology, social science, and inspiring human stories of the transformative power of play, this book proves why play just might be the most important work we can ever do."

Dr. Brown's 2008 three part PBS series on Play:
     PROMISE OF PLAY, Part 1: The Mother of Invention
     PROMISE OF PLAY, Part Two: A World of Your Own     PROMISE OF PLAY, Part 3: The Heart of the Matter

Why games are an integral part of learning -- from the Institute of Play.


Categories: Blogs

The 5 Stages Of A SaaS Bootstrapper’s Grief

Derick Bailey - new ThoughtStream - Thu, 07/10/2014 - 22:12

I’m nearly a year in to bootstrapping SignalLeaf. By most accounts, it is a successful podcast hosting service (unless you look at my P&L sheet – but I’m working on that). In the last 11 months, I’ve gone through a number of emotions regarding SignalLeaf – many of them in the same hour, day or week. And it occurred to me, just now, that a lot of the emotional turmoil that I’m facing as a solopreneur / entreprogrammer are directly mappable to the classic Kübler-Ross model of the 5 stages of grief.

So I give to you,

The 5 Stages of a SaaS Bootstrapper’s Grief

5 stages of bootstrapper grief

Stage 1: Denial (of the value that you provide)

Nope. It’s not going to happen. Ever.

Stage 1 denial

There’s no way anyone will ever use what I’ve built, let alone pay for it! Why would they? It’s so easy to do this on your own. I mean, I did it and it only took me a day to do it! But now I have to go and set up all this infrastructure to support accounts and logins and payments… seriously… Why would anyone ever pay for this?!

No. I’m done. I refuse. It will never happen.

Stage 2: Anger (at not getting customers)

DAMNIT!!! Why aren’t i getting any customers?!

Stage 2 anger

I’ve got EXACTLY what you need! I do it BETTER than they do, and I am so much more hands on in my support! What is wrong with you people?! Why do you sign up for them, instead of me? Why do you get a trial account with me and then LEAVE FOR THEM?! AAAAAARRRRRGGGGHHH!!!!!

WHY ME?! WHY AM I NOT GETTING ANY PAYING CUSTOMERS?! IT’S NOT FAIR!

Stage 3: Bargaining (with customers)

Ok, look. I just need one more customer. Please. Just one more customer.

Stage 3 bargaining

Just one this week. If I get one more customer, then I’ll know that this is real. Then I’ll be certain that what I’m doing is worth it. 

Yeah, I realize that you’re not signing up because you don’t know me – you don’t trust me, you don’t have an entire market share of people telling you how good I am. I know that. But I am worth it. In fact, I’ll prove to you that I’m worth it. I’ll not only give you a discount to start with, I’ll give you 1:1 assistance. I’ll give you more than the usual discount, too. I’ll wash your ceilings, comb your lawn and mow your windows… whatever it takes!

I’ll bend over backwards to get you to sign up and pay for my service. I know what my service can do for you and I’m willing to give you more than ask for if you try it out.  Just don’t leave me. What can I do to keep you, dear customer? Anything… please… just one more customer…

Stage 4: Depression (about your financial state)

I only have 16 customers?! #sniff … #sigh

Stage 4 depression

I’m spending $5x more per month than I’m earning. This sucks. It’s been almost a year, and I’m not making it yet. I just needed more paying customers… but nothing I try is working, and I don’t know why. Why bother? Why try? Why go on? My bank account is going to be dry soon. The SaaS will die. I’ll be bankrupt. Why go on?

I’m not going to work on it anymore. I’ll just let it die on it’s own. I’ll ignore it. It’s going to die anyways.

Stage 5: Acceptance (of the work to be done)

I know. You’re right. You were always right.

Stage 5 acceptance

I didn’t realize just how important marketing was. I didn’t take the lessons learned that you tried to teach me seriously. I didn’t listen. But I get it now. I do. And I’m willing to change. I’m willing to learn how to be a marketer as well as a developer. I’m willing to put in the time and effort.

I know that I have a lot of work to do, and I’m not just saying I’m going to do it. I’m actually doing it now. I’ve already started. I rolled up my sleeves this week, and set a plan in motion. It’s going to take a long time, I know that. It’s going to be hard work. I get it.

It’s going to be worth it. Because when I look at what I’ve already done – the 20 customers that are already paying me, and are saying such amazing things about what I’m doing for them – I KNOW the hard work will pay off. And I know how much work this is going to be.

So I’m here, now. I’ve got my work gloves on. I’ve got my sunscreen, my shovel and my determination. I will do the work. I will earn that customer the hard way, at first. I will improve my services, my marketing and my bottom line.

I will succeed.

     Related Stories 
Categories: Blogs

Breaking Gantt – Project Reporting in Agile Transition – A BigVisible Webinar

BigVisible Solutions :: An Agile Company - Thu, 07/10/2014 - 20:47

Breaking Gantt – Project Reporting in Agile Transition – A BigVisible Webinar by Dave Prior

When an organization makes the decision to move from a traditional (waterfall) approach to Agile, coming to grips with the new way of tracking projects can be one of the biggest challenges. Dave Prior presents on some of the tips and tools he has found to have a positive impact when helping an organization let go of their dependence on traditional project tracking in favor of Agile reporting.

Webinar Topics Include:
• Core differences between traditional and Agile project tracking
• How Agile reporting can impact a traditional organization
• Communication Modeling and Agile Transition
• Understanding the needs of an organization in transition
• Tracking Agile projects
• Hybrid reporting approaches

download

The post Breaking Gantt – Project Reporting in Agile Transition – A BigVisible Webinar appeared first on BigVisible Solutions.

Categories: Companies

Neo4j: LOAD CSV – Processing hidden arrays in your CSV documents

Mark Needham - Thu, 07/10/2014 - 16:54

I was recently asked how to process an ‘array’ of values inside a column in a CSV file using Neo4j’s LOAD CSV tool and although I initially thought this wouldn’t be possible as every cell is treated as a String, Michael showed me a way of working around this which I thought was pretty neat.

Let’s say we have a CSV file representing people and their friends. It might look like this:

name,friends
"Mark","Michael,Peter"
"Michael","Peter,Kenny"
"Kenny","Anders,Michael"

And what we want is to have the following nodes:

  • Mark
  • Michael
  • Peter
  • Kenny
  • Anders

And the following friends relationships:

  • Mark -> Michael
  • Mark -> Peter
  • Michael -> Peter
  • Michael -> Kenny
  • Kenny -> Anders
  • Kenny -> Michael

We’ll start by loading the CSV file and returning each row:

$ load csv with headers from "file:/Users/markneedham/Desktop/friends.csv" AS row RETURN row;
+------------------------------------------------+
| row                                            |
+------------------------------------------------+
| {name -> "Mark", friends -> "Michael,Peter"}   |
| {name -> "Michael", friends -> "Peter,Kenny"}  |
| {name -> "Kenny", friends -> "Anders,Michael"} |
+------------------------------------------------+
3 rows

As expected the ‘friends’ column is being treated as a String which means we can use the split function to get an array of people that we want to be friends with:

$ load csv with headers from "file:/Users/markneedham/Desktop/friends.csv" AS row RETURN row, split(row.friends, ",") AS friends;
+-----------------------------------------------------------------------+
| row                                            | friends              |
+-----------------------------------------------------------------------+
| {name -> "Mark", friends -> "Michael,Peter"}   | ["Michael","Peter"]  |
| {name -> "Michael", friends -> "Peter,Kenny"}  | ["Peter","Kenny"]    |
| {name -> "Kenny", friends -> "Anders,Michael"} | ["Anders","Michael"] |
+-----------------------------------------------------------------------+
3 rows

Now that we’ve got them as an array we can use UNWIND to get pairs of friends that we want to create:

$ load csv with headers from "file:/Users/markneedham/Desktop/friends.csv" AS row 
  WITH row, split(row.friends, ",") AS friends 
  UNWIND friends AS friend 
  RETURN row.name, friend;
+-----------------------+
| row.name  | friend    |
+-----------------------+
| "Mark"    | "Michael" |
| "Mark"    | "Peter"   |
| "Michael" | "Peter"   |
| "Michael" | "Kenny"   |
| "Kenny"   | "Anders"  |
| "Kenny"   | "Michael" |
+-----------------------+
6 rows

And now we’ll introduce some MERGE statements to create the appropriate nodes and relationships:

$ load csv with headers from "file:/Users/markneedham/Desktop/friends.csv" AS row 
  WITH row, split(row.friends, ",") AS friends 
  UNWIND friends AS friend  
  MERGE (p1:Person {name: row.name}) 
  MERGE (p2:Person {name: friend}) 
  MERGE (p1)-[:FRIENDS_WITH]->(p2);
+-------------------+
| No data returned. |
+-------------------+
Nodes created: 5
Relationships created: 6
Properties set: 5
Labels added: 5
373 ms

And now if we query the database to get back all the nodes + relationships…

$ match (p1:Person)-[r]->(p2) RETURN p1,r, p2;
+------------------------------------------------------------------------+
| p1                      | r                  | p2                      |
+------------------------------------------------------------------------+
| Node[0]{name:"Mark"}    | :FRIENDS_WITH[0]{} | Node[1]{name:"Michael"} |
| Node[0]{name:"Mark"}    | :FRIENDS_WITH[1]{} | Node[2]{name:"Peter"}   |
| Node[1]{name:"Michael"} | :FRIENDS_WITH[2]{} | Node[2]{name:"Peter"}   |
| Node[1]{name:"Michael"} | :FRIENDS_WITH[3]{} | Node[3]{name:"Kenny"}   |
| Node[3]{name:"Kenny"}   | :FRIENDS_WITH[4]{} | Node[4]{name:"Anders"}  |
| Node[3]{name:"Kenny"}   | :FRIENDS_WITH[5]{} | Node[1]{name:"Michael"} |
+------------------------------------------------------------------------+
6 rows

…you’ll see that we have everything.

If instead of a comma separated list of people we have a literal array in the cell…

name,friends
"Mark", "[Michael,Peter]"
"Michael", "[Peter,Kenny]"
"Kenny", "[Anders,Michael]"

…we’d need to tweak the part of the query which extracts our friends to strip off the first and last characters:

$ load csv with headers from "file:/Users/markneedham/Desktop/friendsa.csv" AS row 
  RETURN row, split(substring(row.friends, 1, length(row.friends) -2), ",") AS friends;
+-------------------------------------------------------------------------+
| row                                              | friends              |
+-------------------------------------------------------------------------+
| {name -> "Mark", friends -> "[Michael,Peter]"}   | ["Michael","Peter"]  |
| {name -> "Michael", friends -> "[Peter,Kenny]"}  | ["Peter","Kenny"]    |
| {name -> "Kenny", friends -> "[Anders,Michael]"} | ["Anders","Michael"] |
+-------------------------------------------------------------------------+
3 rows

And then if we put the whole query together we end up with this:

$ load csv with headers from "file:/Users/markneedham/Desktop/friendsa.csv" AS row 
  WITH row, split(substring(row.friends, 1, length(row.friends) -2), ",") AS friends 
  UNWIND friends AS friend  
  MERGE (p1:Person {name: row.name}) 
  MERGE (p2:Person {name: friend}) 
  MERGE (p1)-[:FRIENDS_WITH]->(p2);;
+-------------------+
| No data returned. |
+-------------------+
Nodes created: 5
Relationships created: 6
Properties set: 5
Labels added: 5
Categories: Blogs

The Heart Rate Monitor

Illustrated Agile - Len Lagestee - Thu, 07/10/2014 - 15:01

My desk where I’m currently coaching is surrounded by three Agile teams. Periodically, I’ll just watch and listen to each of them and before long, the heart beat of each team begins to reveal itself. Under “normal” conditions the teams will have a nice steady pulse. They have planned their work effectively, they are having fun, there is energy and excitement, and they are delivering results.

There are times however, when something changes and a noticeable increase or decrease in the pulse occurs. This can happen when a new team member arrives, impacting the  dynamics of the team. It can happen when priorities are refined, a significant impediment has been discovered, or it can happen when a manager interjects themselves into team ceremonies. Ever notice the reaction of most teams when delivery dates are mandated to an Agile team? Not pretty.

When the pulse of the team spikes or plunges significantly, the Scrum Master should recognize and react by becoming the team “heart rate monitor.” To explain this concept, here is an excerpt from my book Becoming a Catalyst: Scrum Master Edition. This comes from the chapter The Necessary Fuel where I talk about specific traits a Scrum Master should develop and this text comes from the “Process Conscience” trait.

Well-functioning teams should have a wonderful cadence about them. You can almost hear and see the heartbeat. There is a natural buzz of sustainable energy and pace and hopefully through the Intense Observer trait you have heard and felt what this is like. To be the conscience of the team, the Catalyst finds a natural pace for the team and becomes keeper of the beat. The Catalyst ensures a steady rhythm and an almost comforting flow. I often use the analogy of walking or jogging on a treadmill to describe this.

When you first get on a treadmill, you usually start slowly and gradually increase the speed or incline. Depending on your physical conditioning, if you go too fast or too high too quickly, your heart rate elevates. Stay at this level too long and the incline or speed must be reduced. If your heartbeat remains too low, the benefits of being on the treadmill have been diminished.

Catalysts use a methodology or process to act as the heart rate monitor for the team. They can assess the ideal level of exertion a team should have and strive to keep team members there. With a new team (when the level of team “conditioning” is not yet high), the team operates at a slower cadence while getting used to the methodology, technology, and working with each other. The amount of work the team takes on should be reduced until team members are comfortable with the process and can work up to their optimal heartbeat. Even after a team has been together for a while, reducing the amount of work a team commits too is not easy. Most teams are overly optimistic. It will take a strong conscience to keep them from harming themselves.”

This doesn’t mean there are times when the heart rate should become elevated. Preparing for a major release for example or when the vision of the organization is naturally pulling the team to deliver valuable features. Just like the human body, we just can’t stay there forever or we will burn-out or crash. This is the sustainable pace documented in the Agile Principles.

When you get a sense of the heartbeat of your team you can begin to understand when it is ok for the heart rate to be elevated or when the team is actually stressed by overwork and exhaustion. If the team doesn’t have time to catch their breath, this stress will build to the point of fracture. People will no longer believe “being Agile” is possible and the Agile principles are just words on a screen.

For many Scrum Masters, an approach for determining the heart rate for their team is by determining the velocity for the team and using a burn-down chart. From this chart, if used appropriately, the team health story is revealed. There are also issues with the burn-down chart and I’ll cover that next week.

Take a minute and recognize the heart rate of your team. Watch and listen intently. Are they under stress? Is there a natural hum of energy, movement, and excitement? Everything you need to know about the health and vibrancy of a team can be gleaned from a period of observation.

Becoming a Catalyst - Scrum Master Edition

The post The Heart Rate Monitor appeared first on Illustrated Agile.

Categories: Blogs

Five links on Agile Testing

…if you are not defining your tests at the acceptance level before you are writing your code you are creating waste.

@alshalloway

henrik.signature

 

 

 

I don’t claim these articles to be the best on this subject, but I have enjoyed reading them and they have made my knowledge grow. I recommend you to have a look if you are interested in the subject. Happy reading!

Follow me on twitter @hlarsson for more links on a daily basis. You may also subscribe to weekly newsletter of my links. Thanks to writers of these articles and Kirill Klimov for collecting the agile quotes: http://agilequote.info/. Please follow @agilequote for more quotes.


Categories: Blogs

.NET in SonarQube: bright future

Sonar - Thu, 07/10/2014 - 11:12

A few months ago, we started on an innocuous-seeming task: make the .NET Ecosystem compatible with the multi-language feature in SonarQube 4.2. What followed was a bit like one of those cartoons where you pull a string on the character’s sweater and the whole cartoon character starts to unravel. Oops.

Once we stopped pulling the string and started knitting again (to torture a metaphor), what came off the needles was a different sweater than what we’d started with. The changes we made along the way – fewer external tools, simpler configuration – were well-intentioned, and we still believe they were the right things to do. But many people were at pains to tell us that the old way had been just fine, thank you. It had gotten the job done on a day-to-day basis for hundreds of projects, and hundreds-of-thousands of lines of code, they said. It had been crafted by .NETers for .NETers, and as Java geeks, they said, we really didn’t understand the domain.

And they were right. But when we started, we didn’t understand how much we didn’t understand. Fortunately, we have a better handle on our ignorance now, and a plan for overcoming it and emerging with industry leading C# and VB.NET analysis tools.

First, we’re planning to hire a C# developer. This person will be first and foremost our “really get .NET” person, and represents a real commitment to the future of SonarQube’s .NET plugins. She or he will be able to head off our most boneheaded notions at the pass, and guide us in the ways of righteousness. Or at least in the ways of .NETness.

Of course it’s not just a guru position. We’ll call on this person to help us progressively improve and evolve the C# and VB.NET plugins, and their associated helpers, such as the Analysis Bootstrapper. He (or she) will also help us fill the gaps back in. When we reworked the .NET ecosystem there were gains, but there were also loses. For instance, there are corner cases not covered today by the C# and VB.NET plugins which were covered with the old .NET Ecosystem.

We also plan to start moving these plugins into C#. We’ve realized that just can’t do the job as well in Java as we need to. But the move to C# code will be a gradual one, and we’ll do our best to make it painless and transparent. Also on the list will be identifying the most valuable rules from FxCop and ReSharper and re-implementing them in our code.

At the same time, we’ll be advancing on these fronts for both C# and VB.NET:

  • Push “cartography” information to SonarQube.
  • Implement bug detection rules.
  • Implement framework-specific rules, for things like SharePoint.

All of that with the ultimate goal of becoming the leader in analyzing .NET code. We’ve got a long way to go, but we know we’ll bring it home in the end.

Categories: Open Source

More Agile Testing: Book Review

Growing Agile - Thu, 07/10/2014 - 11:00

We were lucky enough to receive a pre-release copy of Janet Gregory and Lisa Crispin’s new book: More Agile Testing. The book is available for pre-order and the published version is coming soon. I highly recommend the book, even if you haven’t read the previous one. Here’s my review.

 Book ReviewMore Agile Testing is a great collection of stories and ideas that can help you improve, not just how you test, but the products you build and the way you work. What I love most about the book is how easy many of the ideas are to try. If one message is clear, it is that regardless of your context and challenges there are things you can try to improve. Get started today with something small, and nothing will be impossible.

I wanted to pick three things that I found most useful to share with potential readers to help you get a flavour for the book. Trust me it was hard to pick just three, but here they are.

The chapter on Technical Awareness is excellent. For a long time I have heard people debate whether testers need to be able to code. In this chapterJanet and Lisa answer this eloquently and confirm my personal views that even if you don’t write code, testing requires specific and deep technical skills.

Secondly I love the approach to both Session Based and Thread Based Exploratory Testing with test charters. In particular the idea of using this with the whole team for pre-release manual regression. I have been struggling to find a good approach for teams not ready or able to give up manual regression and I think this approach is exactly what I have been searching for.

The third (and hardest to pick because the more I read, the more good ideas there were) is the approach of using page objects to simply automated UI testing. I often encounter teams stalled in the maintenance nightmare of GUI automation and I have not had practical advice except move the tests down the pyramid. This books offers some great ideas to help refactor and structure UI tests.

Lisa and Janet mention this book starts where the last one left off, but in someways I think it’s a great prequel. If you read agile testing and haven’t managed to adopt the ideas in it, then I think this book will help you get started. The stories in the book will help you see that even seemingly impossible obstacles can be overcome. Probably the greatest praise I can give this book is to say that it made me want to become a tester again. It is an exciting time with fantastic tools and approaches available and this book will help you uncover them.

Categories: Companies

XM Principle 10: Partner Patterns

Scrum Breakfast - Thu, 07/10/2014 - 09:00
Deliveries often rely on third party suppliers, and often they are not yet able to deliver a new product that meets our new specification within a single sprint. So what can we do in order to go from an idea to a new product or service in a customer’s hands in less than 7 days?

WIKISPEED first designs a wrapper, usually a plate of aluminum with pre-defined bolt patterns, around the third party supplied part to create a known “interface” that won’t change, even if that third party part changes. You might see how this is enforced by principle 2: Object-Oriented, Modular Architecture and 4: Contract-First Design, and then sped up by principle 6: Agile Hardware Design Patterns.

Once each third party part is wrapped in a known interface, you can iterate between suppliers and in-house prototypes or volume parts at very low cost. The only marginal cost is that of changing the wrapper itself.

Then, to expedite suppliers, ask them to deliver a certain set of performance characteristics as opposed to an engineering specification. "Do you have a transmission suitable for 100hp motor?", not "Here is our design for a transmission, can you build it?" Why should you wait months for a supplier to build a device to your specifications when they have a device that will satisfy your needs already in the catalog or in stock?

Many engineers are quick to design their own solution, which works to the team’s advantage when the design team is also the volume manufacturing team. But in cases where some production is outsourced, sending a list of values and tests to the outsourced vendor and not sending an engineering specification gives the supplier the most room to innovate. This allows the vendor to do what they do best, that part, which is why you are partnering with them in the first place. Team WIKISPEED finds they get higher quality parts faster, often from within the vendor’s existing stock.

The 10 Principles of Extreme Manufacturing
Categories: Blogs

Impediment: Network down time

Agile Complexification Inverter - Thu, 07/10/2014 - 06:03
I'm working with a large networking (telecommunication) company on a mission critical new initiative to replace existing B2B account services functions that are siloed and separate with a new sexy UI where all the services are aggregated in one portal.  The development has been underway for over one year.  It is touted as an "agile" program.  Yet an interesting impediment has never been resolved.  That is the internal WiFi/Lan systems appear to be overloaded with the strain of development, over utilized with the number of people that are squeezed into the floor plan (I call the sardine can).  This system fails quite frequently, it is a well know impediment to sprints being completed, stories integrated into the build, builds tested, access to the QA server, etc.  Yet this impediment remains after months and continued growth of the program.

I wonder if the problem is that management feels that they can't do anything about infrastructure at one of the largest telecommunication companies in the universe.  Perhaps they believe that the cobbler's kids should have no shoes - that is is just the way of the world.

I frequently wonder if this program was a client of the company would they cancel their service for the networking products and seek an alternative supplier.  I wonder if that would be an option for this program.  I wonder if this is a case of having to eat your own dog food - imposed by some evil VP to make the teams understand just how bad the customers have it using our services and administering them using the system we have provided them - but then I realize - no that would take real organizational ability and if it could be used for evil - then surely it would be as easy to use that super power to organize for good.  And since I can feel little organization, I assume there is no super power in existence.

So perhaps one step in the direction of making this problem understood would be to calculate the cost of the frequent network down times and make this cost visible.  I've done this before with other such impediments - with varying levels of success.

I just saw this article:
How Much Does Network Downtime REALLY Cost Your Business? [Shocking]It contains a link to a calculator - makes it easy... try it - you might like it.
What would you do?  Please leave me a comment with suggestions.
Categories: Blogs

New ScrumMaster Tips

Agile Management Blog - VersionOne - Wed, 07/09/2014 - 18:47

Team

I recently completed a blog on PMs transitioning to a ScrumMaster role.  I was inspired to put together a quick blog post for new ScrumMasters after reading a question that was posted to social media.  The poster basically wanted to know how to drive the team without them reporting to him/her or having “control” over them.  When I first read this I was perturbed but quickly thought to myself this person could be new to Agile and Scrum.  I’ll refer back to my definition of a ScrumMaster, a servant leader who is an Agile champion for your team.  I didn’t say management leader or controller or mother of dragons.

The ScrumMaster role is very challenging role and it takes some self control for people coming from a different role such as a PM or a lead from the team.  I am not a fan of “working” ScrumMasters, meaning they are also coders or leads.  They need to resist the urge to roll up their sleeves and dive in.  A good example of this, I was working on a Legos4Scrum (By Alexey Krivitsky) exercise acting as ScrumMaster.  Legos4Scrum is a cool way to introduce Scrum during an Agile bootcamp. You basically have teams working with sprints building items for a city while working with a product owner for vision of the city.  All the other teams had working ScrumMasters meaning they were diving in helping to build items such as schools and hotels for the city.  I was not building anything, instead I was separating the bricks, breaking bricks apart, sorting into colors etcetera making it easier for the team to build. Can you guess which team achieved a higher velocity? The team with a ScrumMaster who was constantly making the team’s job easier.  I was also working with product owner with any questions the team had as they were building. I tracked down the product owner if need be, not the team member working.  Do whatever you can to keep impediments down and efficiency high!

The servant leader side of the role is rewarding but being an Agile champion is crucial.  If you are new to the role start to soak up as much knowledge as you can.  At the end of the day you serve as the Agile coach for the team.  You should know the ceremonies and fun ways to facilitate them.  I highly recommend joining groups out there in internet land.  If you have a local Agile group join it, attend the meetings and share your experiences.  You will never stop learning.  Your knowledge and ways to handle situations builds trust with the team.

Another piece of advice I have is to provide a fun environment for your team.  Anything you can do to achieve this whether it is adding some cool posters or getting that energy drink fridge installed.  Try coming up with fun ways to do the standups and retrospectives.  If your team has the personality for it a prank doesn’t hurt from time to time.  Now remember don’t rewire the power switch on a PC to a remote power switch unless they can take a joke.  That was one of my favorite pranks I’ve ever been apart of.  Soft dart guns can also be very interesting on Friday afternoon.

I have only scratched the surface, this is a topic I could type for days on since I am very passionate about it.  That being said if you are a ScumMaster and have some tips please comment for those new ScrumMasters out there!

Categories: Companies

Recent Enhancements to LeanKit

Enhancements have been rolling in over the past few months. Here’s a rundown of some of the latest features, including: Mass card updates Auto-subscribe settings Quick card adds Mobile app improvements Update Multiple Cards at Once The new multi-select option (Ctrl/Cmd + click) allows you to update multiple cards on a board at once. Remove cards that are […]

The post Recent Enhancements to LeanKit appeared first on Blog | LeanKit.

Categories: Companies