Skip to content

Blogs

Lean Business Analysis and UX

TV Agile - Tue, 05/03/2016 - 10:22
Some of the most difficult roles to integrate in Agile and Lean development are business analysts and user experience (UX) professionals. Transitioning from big upfront design and massive requirements documents to a minimum viable product and just in time design is difficult to understand and implement successfully. This presentation describes key strategies to shift the […]
Categories: Blogs

Presentation on The Road to Agility from AgileEE

Ben Linders - Tue, 05/03/2016 - 09:55

I gave a talk about The Road to Agility at the 7th Agile Eastern Europe (#AgileEE) conference in Kiev, Ukraine. This was the second time that I presented at AgileEE, I was invited back by the organizers after giving a talk on Sustainable Improvement through Agile Retrospectives in 2015. Continue reading →

The post Presentation on The Road to Agility from AgileEE appeared first on Ben Linders.

Categories: Blogs

Links for 2016-05-02 [del.icio.us]

Zachariah Young - Tue, 05/03/2016 - 09:00
Categories: Blogs

One Second Services

Radyology - Ben Rady - Mon, 05/02/2016 - 22:25
Microservices have problems. Monoliths have problems. How do you wind up in a happy middle? Here's what I do. As I talked about in my new book, I'm skeptical of starting systems with a microservice architecture. Splitting a new system... Ben Rady
Categories: Blogs

URI/URL Encoding Strings In JavaScript/Node.js

Derick Bailey - new ThoughtStream - Mon, 05/02/2016 - 14:36

I recently found myself needing to URL encode a string, in Node – to convert a space into %20 in this case, but also to handle other scenarios.

My initial thought was “oh, great – I’ll need to find a library that doesn’t completely suck”.

Turns out I didn’t need to find anything. JavaScript has a built-in function to handle this: encodeURI

Pass any string to it, and it will produce the correctly encoded string as output:

There is a decodeURI method as well, to take an encoded string and produce a decoded version:

These methods have been in JavaScript since EMCAScript 3, I just never knew about them until a few days ago.

The next time you need to encode or decode a URL or other URI string, then, you can do so with JavaScript’s built-in functions.

Categories: Blogs

Promotional: Video About our Agile Training

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

BERTEIG offers agile training for Certified ScrumMaster, Certified Scrum Product Owner, Certified Scrum Developer, Leading SAFe, and more.  This promotional video gives you a glimpse into the classroom for these fantastic events.

Find out more on our BERTEIG / WorldMindware course registration site.

Note: all prices in Canadian dollars.  Most courses are delivered in the Toronto area, but we also come to you to deliver training upon request!

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

The post Promotional: Video About our Agile Training appeared first on Agile Advice.

Categories: Blogs

Validation inside or outside entities?

Jimmy Bogard - Fri, 04/29/2016 - 21:45

A common question I get asked, especially around a vertical slice architecture, is where does validation happen? If you’re doing DDD, you might want to put validation inside your entities. But personally, I’ve found that validation as part of an entity’s responsibility is just not a great fit.

Typically, an entity validating itself will do so with validation/data annotations on itself. Suppose we have a Customer and its First/Last names are “required”:

public class Customer
{
    [Required]
    public string FirstName { get; set; }
    [Required]
    public string LastName { get; set; }
}

The issue with this approach is twofold:

  • You’re mutating state before validation, so your entity is allowed to be in an invalid state.
  • There is no context of what the user was trying to do

So while you can surface these validation errors (typically from an ORM) to the end user, it’s not easy to line up the original intent with the implementation details of state. Generally I avoid this approach.

But if you’re all up in DDD, you might want to introduce some methods to wrap around mutating state:

public class Customer
{
  public string FirstName { get; private set; }
  public string LastName { get; private set; }
    
  public void ChangeName(string firstName, string lastName) {
    if (firstName == null)
      throw new ArgumentNullException(nameof(firstName));
    if (lastName == null)
      throw new ArgumentNullException(nameof(lastName));
      
    FirstName = firstName;
    LastName = lastName;
  }
}

Slightly better, but only slightly, because the only way I can surface “validation errors” are through exceptions. So you don’t do exceptions, you use some sort of command result:

public class Customer
{
  public string FirstName { get; private set; }
  public string LastName { get; private set; }
    
  public CommandResult ChangeName(ChangeNameCommand command) {
    if (command.FirstName == null)
      return CommandResult.Fail("First name cannot be empty.");
    if (lastName == null)
      return CommandResult.Fail("Last name cannot be empty.");
      
    FirstName = command.FirstName;
    LastName = command.LastName;
    
    return CommandResult.Success;
  }
}

Again, this is annoying to surface to the end user because I have one validation error at a time being returned. I can batch them up, but how do I correlate back to the field name on the screen? I really can’t. Ultimately, entities are lousy at command validation. Validation frameworks, however, are great.

Command validation

Instead of relying on an entity/aggregate to perform command validation, I entrust it solely with invariants. Invariants are all about making sure I can transition from one state to the next wholly and completely, not partially. It’s not actually about validating a request, but performing a state transition.

With this in mind, my validation centers around commands and actions, not entities. I could do something like this instead:

public class ChangeNameCommand {
  [Required]
  public string FirstName { get; set; }
  [Required]
  public string LastName { get; set; }
}

public class Customer
{
  public string FirstName { get; private set; }
  public string LastName { get; private set; }
    
  public void ChangeName(ChangeNameCommand command) {
    FirstName = command.FirstName;
    LastName = command.LastName;
  }
}

My validation attributes are on the command itself, and only when the command is valid do I pass it to my entities for state transition. Inside my entity, I’m responsible for successfully accepting a ChangeNameCommand and performing the state transition, ensuring my invariants are satisfied. In many projects, I wind up using FluentValidation instead:

public class ChangeNameCommand {
  public string FirstName { get; set; }
  public string LastName { get; set; }
}

public class ChangeNameValidator : AbstractValidator<ChangeNameCommand> {
  public ChangeNameValidator() {
    RuleFor(m => m.FirstName).NotNull().Length(3, 50);
    RuleFor(m => m.LastName).NotNull().Length(3, 50);
  }
}

public class Customer
{
  public string FirstName { get; private set; }
  public string LastName { get; private set; }
    
  public void ChangeName(ChangeNameCommand command) {
    FirstName = command.FirstName;
    LastName = command.LastName;
  }
}

The key difference here is that I’m validating a command, not an entity. And since entities themselves are not validation libraries, it’s much, much cleaner to validate at the command level. Because the command is the form I’m presenting to the user, any validation errors are easily correlated to the UI since the command was used to build the form in the first place.

Validate commands, not entities, and perform the validation at the edges.

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

Categories: Blogs

Unleash the Power of the Whole Person

Agilitrix - Michael Sahota - Fri, 04/29/2016 - 16:56

In this post I will share how to unleash the power of individuals in your organization by inviting in the whole person. Below is the visual summary. People are powerful when we invite the whole person to work: spirit, heart, body, and mind. Key environmental ingredients are: safety, trust and valuing people as human beings. Your […]

The post Unleash the Power of the Whole Person appeared first on agilitrix.com - Michael Sahota.

Categories: Blogs

The Secret To Being A Better Developer

Derick Bailey - new ThoughtStream - Fri, 04/29/2016 - 13:30

As a software developer, technical skills are a must – they are absolutely necessary, but they are also not sufficient.

The reality of what we do is far more than just logic and processing and making computers do things.

If technical skills are required, but not enough, then what else is there? What’s the secret to being a far more effective software developer?

Categories: Blogs

Working towards my Personal Scrum

Scrum Breakfast - Fri, 04/29/2016 - 09:00
Two weeks ago I read an article that changed how I organize my life.

I have a problem. Despite teaching people and organizations how to organize their work effectively, how to prioritize, about the evils of multi-tasking and the importance of sustainable pace, I have never been able to get my own to-dos under control. By extension, my life has never really been under control either. So I often work late into the night, almost every night, and on the weekends as well.

I have experimented with the Pomodoro (I could never get myself to stop working after 25 minutes. I want something done before I can put it down) and Personal Kanban (post-its with waiting-working-done around the screen of my notebook (the problem wan't the WIP but the length of the backlog). The results of my attempts was always the same: I worked very hard, getting things done one after the other, but my work schedule always extended into the night and over the weekend.
An experiment with timeboxing tasks/goalsTwo weeks ago, a read an article on linked in, Critical Things Ridiculously Successful People Do Every Day, by Travis Bradberry. His first recommendation: "[F]ocus on minutes, not hours." Enter your program in your agenda. A light went on. If I am going to do something, the first question I must answer is when am I going to do it? Then I block the time for that activity. What happens if I don't have time for it? Either postpone it, don't do it, or cancel something else.

So I decided to try an experiment. For one week, I would schedule every major activity I needed to accomplish. From Sprint Planing for the SBC website, to quotes I needed to send customers, a talk I needed to prepare, to packing for my trip to the Scrum Gathering. Everything went into my calendar. Looking back on it today, I see that I had 30 individual items over five days. Only once did I schedule work into the evening.

What happened? The good news: Friday morning, when it came time to leave, my wife said, "it's time." I said, "OK," put my suitcase in the car, and off we went. On the way, she said to me, "I have never seen you so organized and ready for departure before a trip like this!". (And I hadn't even told her about my experiment!). I accomplished every major goal I set for myself that week (except one). And I had time to watch 4 hours of amateur Star Trek videos on you tube without feeling guilty! Wow.

The bad news. My estimates suck. It starts with the assumption that 30 minutes every morning is enough to deal with routine emails. So I had to deal with that.

Having a schedule in my calendar, and new goal starting half an hour from now, has proven to be an interesting attractor. It reminds me to focus my attention on the right thing. I can look at my calendar and see what I should be doing.

If I get to the end one time box, and the goal has not been achieved,  I have to ask myself the questions, what do I do now? Do I keep working on my current goal? Or do I schedule the remaining parts for later? Or do I cancel or postpone the next goal?

Depending on the situation, I have already done all of these. Remember, I said there was one major goal I did not accomplish? Well, I got to the time when I was supposed to start it, but I was nowhere near finished the previous goal. I evaluated the importance of the two goals and decided that it was more important to finish the goal I that I was working on. So I finished it and dropped the other one (urgent but not important). So timeboxing individual goals enables me to prioritize and ensure that the most important things get done. After a week of this, I was pretty happy with my results.
What does this have to do with Scrum? For me, Scrum consists of 6 essential patterns:
  1. Inspect and Adapt at regular intervals
  2. Produce something that might be valuable at least once per interval
  3. Management leads and supports, and knows when to stay out of the way.
  4. The whole team solves the problem
  5. One voice speaks for the customer/maximizes the value of the work done
  6. A coach helps everybody achieve higher performance.
How does planning my time on my calendar in this detail get me closer to doing Scrum? Let's look at how this implements the patterns:
Inspect and Adapt at regular intervals.
Produce something that might be valuable at least once per intervalFirst, I have stopped calling it task planning. I allocate time to achieve a goal, not perform a task. So I keep focus on the fact that my work should produce value. At the end of a time box, I hope that the goal will have been achieved. If not, that is the moment to Inspect and Adapt. I allocate time in Pomodoros (units of 30 minutes, including a 5 minute break). Nothing takes less than one Pomodoro, and I never block more than 4 consecutive pomodori for a goal. Often I achieve my goal. Sometimes I don't. That is when inspect and adapt is really helpful!
The whole team solves the problemThis one is actually pretty easy. I am the whole team. Management leads and supports, and knows when to stay out of the way.I don't think this is really relevant in my context. I am basically a one person company. Not much of a management layer. :-)One voice speaks for the customer/maximizes the value of the work doneThis one is a bit tougher. Can I effectively be my own product owner? I think so, but I am going to keep an eye on this one. I started to set longer term goals by allocating time further in the future to achieve them. Aside from managing time I am not yet managing a formal backlog. A coach helps everybody achieve higher performanceIs it possible to be my own Scrum Master? I don't think so. An essential aspect of being a Scrum Master a Scrum Master is the independent perspective. On the one hand, I don't feel like I have systematic impediments. On the other, how do I know that I am focussing on the right goals? How do I know that I am working effectively? I think there needs to be second person involved.Next experimentsThis week, I will continue with the approach. I have also asked my wife to play the role of Scrum Master and I'd like to add a Sprint Planning/Review and maybe even a retrospective. Hmm, that means scheduling time for it...My Personal Scrum, v0.1How am I doing Scrum for myself?
  1. When I decide I want to achieve a particular goal, I also decide when I will work on it, and block that time in my agenda
  2. If I have no time to work on a new goal, I have to either postpone the goal, reject the goal, or reschedule or renounce another goal
  3. I strive to work on / that which  is planned at any given time
  4. I know my estimates suck, so I leave slack in my agenda and forgive myself if things don't get finished when I hoped/expected.
  5. My agenda serves me, not the other way around. So if reality is different than plan, I adjust the plan to reflect reality.
Do you have a personal Scrum? How does it work? I'd love to continue an exchange on how I as an individual can organize myself.
Categories: Blogs

Digital Transformation Defined

J.D. Meier's Blog - Fri, 04/29/2016 - 08:16

This post is a walkthrough multiple definitions of digital transformation from multiple sources.

Digital transformation can be elusive if you can’t define it.

Lucky for us, there is no shortage of definitions for digital transformation.

I find that rather than use one single definition for digital transformation, it’s actually more helpful to look at a range of definitions to really internalize what digital transformation means from multiple angles.

Before you walk through the definitions, be sure to review Satya’s pillars for Digital Transformation so you have a simple mental model to work with.

Wikipedia on Digital Transformation

Wikipedia has a simple explanation:

“Digital transformation refers to the changes associated with the application of digital technology in all aspects of human society.”

What I like about that definition is that it goes beyond pure business and includes all impact on society, whether it’s education, government, sports, arts, leisure, etc.

Altimeter on Digital Transformation

Altimeter defined digital transformation from a customer-focused lens in their online report, The 2014 State of Digital Transformation:

“The realignment of, or new investment in, technology and business models to more effectively engage digital customers at every touchpoint in the customer experience lifecycle.”

What I like about Altimeter’s definition is that it’s outside in vs. inside out.  The big idea is to leverage technology to adapt to your customer’s changing preferences.  So if you “transform”, but there is no visible impact to your customers or to the market, then you didn’t really transform.

Capgemini and MIT Center for Digital Business on Digital Transformation

Capgemini and MIT Center for Digital Business define Digital Transformation in Digital Transformation: A Roadmap for Billion-Dollar Organizations like this:

“Digital transformation – the use of technology to radically improve performance or reach of enterprises.”

While their definition may look simplistic, the power is in the data behind the definition.  It’s a global study of how 157 executives in 50 large traditional companies are managing – and benefiting from – digital transformation.

Agile Elephant on Digital Transformation

Agile Elephant defines digital transformation like this:

“Digital transformation is the process of shifting your organisation from a legacy approach to new ways of working and thinking using digital, social, mobile and emerging technologies.  It involves a change in leadership, different thinking, the encouragement of innovation and new business models, incorporating digitisation of assets and an increased use of technology to improve the experience of your organisation’s employees, customers, suppliers, partners and stakeholders.”

While this definition may seem more elaborate, I find this elaboration can really help get somebody’s head into the digital transformation game.

MIT Sloan’s 9 Elements of Digital Transformation

In The Nine Elements of Digital Transformation, George Westerman, Didier Bonnet and Andrew McAfee identify the key attributes of digital transformation:

Category Items Transforming Customer Experience
  1. Customer Understanding
  2. Top-Line Growth
  3. Customer Touch Points
Transforming Operational Processes
  1. Process Digitization
  2. Worker Enablement
  3. Performance Management
Transforming Business Models
  1. Digitally Modified Businesses
  2. New Digital Businesses
  3. Digital Globalization

 

The nine elements are excerpted from their digital report, Digital Transformation: A Roadmap for Billion-Dollar Organizations.  Here are quick summaries of each:

  1. Customer Understanding – Customer Understanding is where “Companies are starting to take advantage of previous investments in systems to gain an in-depth understanding of specific geographies and market segments.”
  2. To-Line Growth – Top-Line Growth is where “Companies are using technology to enhance in-person sales conversations.”
  3. Customer Touch Points – Customer Touch Points are where “Customer service can be enhanced significantly by digital initiatives.”
  4. Process Digitization – Process Digitization is where “Automation can enable companies to refocus their people on more strategic tasks.”
  5. Worker Enablement – Worker Enablement is where “Individual-level work has, in essence, been virtualized — separating the work process from the location of the work.”
  6. Performance Management – Performance Management is where “Transactional systems give executives deeper insights into products, regions and customers, allowing decisions to be made on real data and not on assumptions.”
  7. Digitally Modified Businesses – Digitally Modified Businesses is “finding ways to augment physical with digital offerings and to use digital to share content across organizational silos.”
  8. New Digital Businesses – New Digital businesses is where “companies are introducing digital products that complement traditional products.”
  9. Digital Globalization – Digital Globalization is where “Companies are increasingly transforming from multinational to truly global operations.”

Sidenote – George, Didier, and Andrew sum up the power of digital transformation when they say, “”Whether it is in the way individuals work and collaborate, the way business processes are executed within and across organizational boundaries, or in the way a company understands and serves customers, digital technology provides a wealth of opportunity.”

Digital Business Transformation

I think it’s worth pointing out the distinction between Digital Transformation and Digital “Business” Transformation.

Digital Business Transformation is specifically about transforming the business with digital technologies.

There are many lenses to look at but in particular it helps to view it through the lens of business model innovation.   So you can think of it as innovating in your business models through digital technologies.   Your business model is simply the WHO (customers), the WHAT (value prop), the HOW (value chain), and your WHY (profit model.)

An exec from SAP at Davos said it well when he said “new business models are driven by different interactions with companies and their customers.”

In pragmatic terms, that means evolving your business model and interaction patterns to meet the changing demands of your customers all along your value chain.  For example, consider how millennials want to interact with a business in today’s world.  They want to learn about a company or brand through their friends and family on social networks and through real stories from authentic people, and they want access to services anytime, anywhere, from any device.

Another way to think about this is how many companies are learning how to wrap their engineering teams around their customer’s end-to-end journey to directly address the customer’s pains, needs, and desired outcomes.

Hopefully, this helps give you a good enough understanding to get going with your Digital Transformation and to understand the difference between Digital Transformation and Digital Business Transformation so that you can pave your path forward.

If nothing else, go back to the Altimeter Group’s definition of Digital Transformation,“The realignment of, or new investment in, technology and business models to more effectively engage digital customers at every touchpoint in the customer experience lifecycle.”, and use Satya’s pillars for Digital Transformation as a guide to stay grounded.

Additional Resources

Digital Transformation: A Roadmap for Billion-Dollar Organizations, by Capgemini and MIT Center for Digital Business

The 2014 State of Digital Transformation, by Altimeter

The Nine Elements of Digital Transformation, by George Westerman, Didier Bonnet and Andrew McAfee

You Might Also Like

All Digital Transformation

Microsoft Stories of Digital Business Transformation

Re-Imagine Customer Experience

Re-Imagine Operations

Satya Nadella on Digital Transformation

Categories: Blogs

Podcast About Geographically Distributed Agile Teams

Johanna Rothman - Thu, 04/28/2016 - 16:56

Lisette Sutherland posted a podcast we recorded about geographically distributed agile teams. See Organize Your Distributed Team over on the CollaborationSuperpowers site.

We covered how you can think about your geographically distributed agile team:

  • Why you want a distributed agile team (yes, there are some great reasons)
  • How you might organize your team.

Here are the articles I mentioned:

Managing Multicultural Projects with Complementary Practices

I wrote about the timezone bubble chart in Managing Timezones in Geographically Distributed Agile Teams

Here are three posts about Geographically Distributed Teams Have Choices for Lifecycles about options for how you might do agile with a geographically distributed agile team.

I even had a chance to rant about management. We had a blast, as you can tell. Hope you enjoy it.

Categories: Blogs

80% of Organizations Have Culture Challenges

Agilitrix - Michael Sahota - Thu, 04/28/2016 - 16:02

If you are having culture challenges with your organization, you are not alone. 80% of participants at a recent conference (Scrum Gathering in Orlando) reported that the dominant culture in their organization is not supportive of progressive working environment such as Agile. Where is Your Organization? The infographic below show my simplification of the Laloux […]

The post 80% of Organizations Have Culture Challenges appeared first on agilitrix.com - Michael Sahota.

Categories: Blogs

SWAYAM: India’s First MOOCs Platform

J.D. Meier's Blog - Wed, 04/27/2016 - 19:20

It’s always cool to see the work our team is doing around the world to help hack a better world.

Our Digital Advisory Services team is helping the Government of India, the Ministry of Human Resource Development (HRD), to reimagine the student experience and to develop India’s first MOOCs (Massive Open Online Courses) platform.

Apparently, the presentation went so well that the honorable HRD minister, Smriti Irani tweeted our Student Experience Journey Map that helps show the vision and the Digital Transformation opportunities.

Way to go!

image

Categories: Blogs

Agile is just throwing stuff together as quickly as possible?

Is Agile just throwing stuff together as quickly as possible?

The older version of this was some variant of "Extreme Programming is just hacking" or "Extreme Programming is just cowboy coding".

In essence, the suggestion is that Agile is equivalent to "Code and Fix" or "Cowboy Coding".

Kent Beck describes the heartbeat of an Extreme Programming episode in response to the "Why is XP not just hacking?" question.  Paraphrasing for length...
  1. Pair writes next automated test case to force design decisions for new logic independent of implementation.
  2. Run test case to verify failure or explore unexpected success.
  3. Refactor existing code to enable a clean and simple implementation. Also known as "situated design".
  4. Make the test case work.
  5. Refactor new code in response to new opportunities for simplification.
Does this reasonably sound equivalent to "throw stuff together as quickly as possible"?

Granted, not every Agile team has this kind of technical discipline.  Hence, so-called Flaccid Scrum and the advocacy of Two-Star Agile fluency.

Also, granted, that sometimes one should throw stuff together quickly when the purpose of the exercise is to test an experimental concept.  For example, "spiking a solution" or an initial MVP.
Categories: Blogs

You don't need Agile, just let the developers do what they think is right?

Do we need this Agile malarky if all that really matters is letting developer do what they think is right?

This is a popular variant of "Agile is fundamentally just..." and is similar to "Agile is just for programmers", differing only in not wanting to identify with "Agile".

Let's work through the reasoning.

When building something effectively, how do you know what is right?

In order to know what is right, you need to understand both the problem space (What problem are we trying to solve? What forces are in play? etc.) and the solution space (What options do we have? What trade-offs are in play? etc.).

Nominally developers have the best understanding and insight into the solution space.  "Let the developers do what they think is right" implies that understanding the solution space magically means that you understand the problem space.  This doesn't make any logical sense.

One-way communication from developers to product owners / managers is as illogical as one-way communication from product owners / managers to developers.

Bringing perspectives together in order to gain understanding and insight of both problem and solution space does make logical sense.

Doing what you think is right is ineffective if you have no justifiable reason for those beliefs.

See also Lean Startup.
Categories: Blogs

Doing Agile vs. Being Agile

Agilitrix - Michael Sahota - Tue, 04/26/2016 - 21:16

Doing Agile and Being Agile are different. Here is a popular infographic that explains what Agile really is and illustrates common misunderstandings about it: Doing Agile Doing Agile is about the practices: standups, user stories, iterations, etc. There are significant benefits from using Agile practices – I see it as “common sense” of getting work done. […]

The post Doing Agile vs. Being Agile appeared first on agilitrix.com - Michael Sahota.

Categories: Blogs

The Secret Assumption of Agile

TV Agile - Tue, 04/26/2016 - 20:28
One of the most important factors of success in delivering Agile projects is to recognize that the programming style of developers on the team is not well ­aligned with Agile. This presentation discusses this flaw and remedies for it, as well as touching on several other key success enablers. The initial element of success is […]
Categories: Blogs

Tuesday Tech Tip: Create Multiple Directories in One Line

Oftentimes you find yourself wanting to create a directory with multiple subdirectories. For example, when creating Ansible roles I almost typically always create the role and three to five different subdirectories underneath it.

This is actually quite easy to do on any posix compliant shell (although I have only tried bash and zsh).

This will yield the following directory structure.

Pretty simple but incredibly handy. This also works for many different arbitrary shell commands, give it a try!

Categories: Blogs