Skip to content

Software Development Blogs: Programming, Software Testing, Agile Project Management

Methods & Tools

Subscribe to Methods & Tools
if you are not afraid to read more than one page to be a smarter software developer, software tester or project manager!

Feed aggregator

Quote of the Day

Herding Cats - Glen Alleman - Thu, 06/15/2017 - 05:11

Have a roadmap instead of a road - Adrian Bolboaca

Without the map, we can't know if we're on the right road. But the map is not the terrain, so both are needed for success.

Categories: Project Management

Reduce friction with the new Location APIs

Android Developers Blog - Wed, 06/14/2017 - 19:16
Posted by Aaron Stacy, Software Engineer, Google Play services

The 11.0.0 release of the Google Play services SDK includes a new way to access LocationServices. The new APIs do not require your app to manually manage a connection to Google Play services through a GoogleApiClient. This reduces boilerplate and common pitfalls in your app.

Read more below, or head straight to the updated location samples on GitHub.

Why not use GoogleApiClient?

The LocationServices APIs allow you to access device location, set up geofences, prompt the user to enable location on the device and more. In order to access these services, the app must connect to Google Play services, which can involve error-prone connection logic. For example, can you spot the crash in the app below?

Note: we'll assume our app has the ACCESS_FINE_LOCATION permission, which is required to get the user's exact location using the LocationServices APIs.

public class MainActivity extends AppCompatActivity implements
        GoogleApiClient.OnConnectionFailedListener {

  @Override
  public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    GoogleApiClient client = new GoogleApiClient.Builder(this)
        .enableAutoManage(this, this)
        .addApi(LocationServices.API)
        .build();
    client.connect();

    PendingResult result = 
         LocationServices.FusedLocationApi.requestLocationUpdates(
                 client, LocationRequest.create(), pendingIntent);

    result.setResultCallback(new ResultCallback() {
      @Override
      public void onResult(@NonNull Status status) {
        Log.d(TAG, "Result: " + status.getStatusMessage());
      }
    });
  }

  // ...
}

If you pointed to the requestLocationUpdates() call, you're right! That call throws an IllegalStateException, since the GoogleApiClient is has not yet connected. The call to connect() is asynchronous.

While the code above looks like it should work, it's missing a ConnectionCallbacks argument to the GoogleApiClient builder. The call to request location updates should only be made after the onConnected callback has fired:

public class MainActivity extends AppCompatActivity implements 
        GoogleApiClient.OnConnectionFailedListener,
        GoogleApiClient.ConnectionCallbacks {

  private GoogleApiClient client;

  @Override
  protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    client = new GoogleApiClient.Builder(this)
        .enableAutoManage(this, this)
        .addApi(LocationServices.API)
        .addConnectionCallbacks(this)
        .build();

    client.connect();
  }

  @Override
  public void onConnected(@Nullable Bundle bundle) {
    PendingResult result = 
            LocationServices.FusedLocationApi.requestLocationUpdates(
                    client, LocationRequest.create(), pendingIntent);
    
    result.setResultCallback(new ResultCallback() {
      @Override
      public void onResult(@NonNull Status status) {
        Log.d(TAG, "Result: " + status.getStatusMessage());
      }
    });
  }

  // ...
}

Now the code works, but it's not ideal for a few reasons:

  • It would be hard to refactor into shared classes if, for instance, you wanted to access Location Services in multiple activities.
  • The app connects optimistically in onCreate even if Location Services are not needed until later (for example, after user input).
  • It does not handle the case where the app fails to connect to Google Play services.
  • There is a lot of boilerplate connection logic before getting started with location updates.
A better developer experience

The new LocationServices APIs are much simpler and will make your code less error prone. The connection logic is handled automatically, and you only need to attach a single completion listener:

public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    FusedLocationProviderClient client =
            LocationServices.getFusedLocationProviderClient(this);

    client.requestLocationUpdates(LocationRequest.create(), pendingIntent)
        .addOnCompleteListener(new OnCompleteListener() {
          @Override
          public void onComplete(@NonNull Task task) {
            Log.d("MainActivity", "Result: " + task.getResult());
          }
        });
  }
}

The new API immediately improves the code in a few ways:

  • The API calls automatically wait for the service connection to be established, which removes the need to wait for onConnected before making requests.
  • It uses the Task API which makes it easier to compose asynchronous operations.
  • The code is self-contained and could easily be moved into a shared utility class or similar.
  • You don't need to understand the underlying connection process to start coding.
What happened to all of the callbacks?

The new API will automatically resolve certain connection failures for you, so you don't need to write code that for things like prompting the user to update Google Play services. Rather than exposing connection failures globally in the onConnectionFailed method, connection problems will fail the Task with an ApiException:

    client.requestLocationUpdates(LocationRequest.create(), pendingIntent)
        .addOnFailureListener(new OnFailureListener() {
          @Override
          public void onFailure(@NonNull Exception e) {
            if (e instanceof ApiException) {
              Log.w(TAG, ((ApiException) e).getStatusMessage());
            } else {
              Log.w(TAG, e.getMessage());
            }
          }
        });
Try it for yourself

Try the new LocationServices APIs out for yourself in your own app or head over to the android-play-location samples on GitHub and see more examples of how the new clients reduce boilerplate and simplify logic.

Categories: Programming

Reduce friction with the new Location APIs

Android Developers Blog - Wed, 06/14/2017 - 19:16
Posted by Aaron Stacy, Software Engineer, Google Play services

The 11.0.0 release of the Google Play services SDK includes a new way to access LocationServices. The new APIs do not require your app to manually manage a connection to Google Play services through a GoogleApiClient. This reduces boilerplate and common pitfalls in your app.

Read more below, or head straight to the updated location samples on GitHub.

Why not use GoogleApiClient?

The LocationServices APIs allow you to access device location, set up geofences, prompt the user to enable location on the device and more. In order to access these services, the app must connect to Google Play services, which can involve error-prone connection logic. For example, can you spot the crash in the app below?

Note: we'll assume our app has the ACCESS_FINE_LOCATION permission, which is required to get the user's exact location using the LocationServices APIs.

public class MainActivity extends AppCompatActivity implements
        GoogleApiClient.OnConnectionFailedListener {

  @Override
  public void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    GoogleApiClient client = new GoogleApiClient.Builder(this)
        .enableAutoManage(this, this)
        .addApi(LocationServices.API)
        .build();
    client.connect();

    PendingResult result = 
         LocationServices.FusedLocationApi.requestLocationUpdates(
                 client, LocationRequest.create(), pendingIntent);

    result.setResultCallback(new ResultCallback() {
      @Override
      public void onResult(@NonNull Status status) {
        Log.d(TAG, "Result: " + status.getStatusMessage());
      }
    });
  }

  // ...
}

If you pointed to the requestLocationUpdates() call, you're right! That call throws an IllegalStateException, since the GoogleApiClient is has not yet connected. The call to connect() is asynchronous.

While the code above looks like it should work, it's missing a ConnectionCallbacks argument to the GoogleApiClient builder. The call to request location updates should only be made after the onConnected callback has fired:

public class MainActivity extends AppCompatActivity implements 
        GoogleApiClient.OnConnectionFailedListener,
        GoogleApiClient.ConnectionCallbacks {

  private GoogleApiClient client;

  @Override
  protected void onCreate(@Nullable Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    client = new GoogleApiClient.Builder(this)
        .enableAutoManage(this, this)
        .addApi(LocationServices.API)
        .addConnectionCallbacks(this)
        .build();

    client.connect();
  }

  @Override
  public void onConnected(@Nullable Bundle bundle) {
    PendingResult result = 
            LocationServices.FusedLocationApi.requestLocationUpdates(
                    client, LocationRequest.create(), pendingIntent);
    
    result.setResultCallback(new ResultCallback() {
      @Override
      public void onResult(@NonNull Status status) {
        Log.d(TAG, "Result: " + status.getStatusMessage());
      }
    });
  }

  // ...
}

Now the code works, but it's not ideal for a few reasons:

  • It would be hard to refactor into shared classes if, for instance, you wanted to access Location Services in multiple activities.
  • The app connects optimistically in onCreate even if Location Services are not needed until later (for example, after user input).
  • It does not handle the case where the app fails to connect to Google Play services.
  • There is a lot of boilerplate connection logic before getting started with location updates.
A better developer experience

The new LocationServices APIs are much simpler and will make your code less error prone. The connection logic is handled automatically, and you only need to attach a single completion listener:

public class MainActivity extends AppCompatActivity {

  @Override
  protected void onCreate(Bundle savedInstanceState) {
    super.onCreate(savedInstanceState);

    FusedLocationProviderClient client =
            LocationServices.getFusedLocationProviderClient(this);

    client.requestLocationUpdates(LocationRequest.create(), pendingIntent)
        .addOnCompleteListener(new OnCompleteListener() {
          @Override
          public void onComplete(@NonNull Task task) {
            Log.d("MainActivity", "Result: " + task.getResult());
          }
        });
  }
}

The new API immediately improves the code in a few ways:

  • The API calls automatically wait for the service connection to be established, which removes the need to wait for onConnected before making requests.
  • It uses the Task API which makes it easier to compose asynchronous operations.
  • The code is self-contained and could easily be moved into a shared utility class or similar.
  • You don't need to understand the underlying connection process to start coding.
What happened to all of the callbacks?

The new API will automatically resolve certain connection failures for you, so you don't need to write code that for things like prompting the user to update Google Play services. Rather than exposing connection failures globally in the onConnectionFailed method, connection problems will fail the Task with an ApiException:

    client.requestLocationUpdates(LocationRequest.create(), pendingIntent)
        .addOnFailureListener(new OnFailureListener() {
          @Override
          public void onFailure(@NonNull Exception e) {
            if (e instanceof ApiException) {
              Log.w(TAG, ((ApiException) e).getStatusMessage());
            } else {
              Log.w(TAG, e.getMessage());
            }
          }
        });
Try it for yourself

Try the new LocationServices APIs out for yourself in your own app or head over to the android-play-location samples on GitHub and see more examples of how the new clients reduce boilerplate and simplify logic.

Categories: Programming

Software Development Linkopedia June 2017

From the Editor of Methods & Tools - Wed, 06/14/2017 - 13:52
Here is our monthly selection of knowledge on programming, software testing and project management. This month you will find some interesting information and opinions about product owner, project deadlines, working in teams, unit testing, better retrospectives, surviving as a QA, legacy code transformation, microservices, Scrum challenges and automated testing. Web site: Product Owner Assessment Text: […]

Kubernetes: Which node is a pod on?

Mark Needham - Wed, 06/14/2017 - 09:49

When running Kubernetes on a cloud provider, rather than locally using minikube, it’s useful to know which node a pod is running on.

The normal command to list pods doesn’t contain this information:

$ kubectl get pod
NAME           READY     STATUS    RESTARTS   AGE       
neo4j-core-0   1/1       Running   0          6m        
neo4j-core-1   1/1       Running   0          6m        
neo4j-core-2   1/1       Running   0          2m        

I spent a while searching for a command that I could use before I came across Ta-Ching Chen’s blog post while looking for something else.

Ta-Ching points out that we just need to add the flag -o wide to our original command to get the information we require:

$ kubectl get pod -o wide
NAME           READY     STATUS    RESTARTS   AGE       IP           NODE
neo4j-core-0   1/1       Running   0          6m        10.32.3.6    gke-neo4j-cluster-default-pool-ded394fa-0kpw
neo4j-core-1   1/1       Running   0          6m        10.32.3.7    gke-neo4j-cluster-default-pool-ded394fa-0kpw
neo4j-core-2   1/1       Running   0          2m        10.32.0.10   gke-neo4j-cluster-default-pool-ded394fa-kp68

Easy!

The post Kubernetes: Which node is a pod on? appeared first on Mark Needham.

Categories: Programming

Reducing Uncertainty

Sign for Sheltering In Place

Sheltering Reduces Uncertainty

‚ÄúUncertainty and complexity produce anxiety we wish to escape‚ÄĚ. ‚Äď Al Pittampalli from How to Hold Meetings That Actually End With Decisions (Webinar June 8, 2017)

Much of the process of translating a user story or requirement into something that can be used is as much about managing and removing uncertainty as it is about technical transformation. Agile and legacy development (used in the broadest sense) are littered with techniques to help the team learn and to gather feedback. The techniques can be sorted into three categories:

  1. Forced Constraints (when reasonable) are useful in generating focus.  Common techniques in this category include time boxing (such as a sprint in Scrum or program increment in SAFe), breaking work into smaller components (story grooming) and defining a minimum viable product.  In each case, a constraint is introduced that forces a team to evaluate the set of solutions which often leads to a reduction in complexity and uncertainty.
  2. Experiments are set of techniques that allow teams to evaluate specific solutions on a small scale and use the outcomes to determine whether the solution is feasible. ¬†In Agile and lean circles this is often evangelized with the slogan of ‚Äúfail fast‚ÄĚ. A/B testing is a form of experiment that is often used to test business to customer (B2C) interactions. ¬†For example, A/B testing is commonly used to determine which headline will attract more attention on news sites. The results of the experiment allow the news site to deliver more value for their stakeholders (advertisers). ¬†Another form of experimentation that has been used, since time immemorial, is prototyping. Prototyping is a mechanism to test a concept before a team or organization makes a larger commitment of resources. The use of experiments reduces uncertainty.
  3. Feedback an incredibly powerful tool for reducing uncertainty when actively generated and evaluated.  Techniques such as peer reviews, pair-programing, demonstrations, daily Scrum meetings, and testing are tools specifically designed to actively generate feedback. Passive techniques Рsuch as asking for comments at the end of a blog entry Рtypically generate feedback more erratically than planned and active techniques, and are therefore less useful for reducing uncertainty.  Feedback generates information, which reduces what we don’t know (or exposes what is unknown) and therefore reduces uncertainty.

Many software development techniques are combinations of these strategies.  The ubiquitous sprint in Scrum is a forced constraint as teams are forced to get work done so they can receive feedback and then use that feedback to re-plan their course of action.

Uncertainty causes anxiety.  The Atlantic article, How Uncertainty Fuels Anxiety, states that everyone has a different level of tolerance to uncertainty (intolerance uncertainty scale).  Software development and maintenance often have a lot of uncertainty.  Nearly every day we are confronted with questions about issues and solutions.  Do we know how to solve a problem?  Do we have the skills to execute a solution?  Do we even know what the problem we are trying to solve is?  There are numerous techniques for reducing uncertainty which should be built into how work is performed.  How many are used for any piece of work is a function of an organization’s and team’s tolerance for uncertainty.


Categories: Process Management

Recognizing Android Excellence on Google Play

Android Developers Blog - Tue, 06/13/2017 - 17:00
Posted by Kacey Fahey, Developer Marketing, Google Play

Every day developers around the world are hard at work creating high quality apps and games on Android. Striving to deliver amazing experiences for an ever growing diverse user base, we've seen a significant increase in the level of polish and quality of apps and games on Google Play.

As part of our efforts to recognize this content on the Play Store, today we're launching Android Excellence. The new collections will showcase apps and games that deliver incredible user experiences on Android, use many of our best practices, and have great design, technical performance, localization, and device optimization.

Android Excellence collections will refresh quarterly and can be found within the revamped Editors' Choice section of the Play Store ‚Äď which includes app and game reviews curated by our editorial team.

Congrats to our first group of Android Excellence apps and games!

Android Excellence Apps Android Excellence Games AliExpress by Alibaba Mobile

B&H Photo Video by B&H Photo Video

Citymapper by Citymapper Limited

Drivvo by Drivvo

drupe by drupe

Evernote by Evernote Corporation

HotelTonight by HotelTonight

Kitchen Stories by Kitchen Stories

Komoot by komoot GmbH

Lifesum by Lifesum

Memrise by Memrise

Pocket by Read It Later

Runtastic Running & Fitness by Runtastic

Skyscanner by Skyscanner Ltd

Sleep as Android by Urbandroid Team

Vivino by Vivino After the End Forsaken Destiny by NEXON M Inc.

CATS: Crash Arena Turbo Stars by ZeptoLab

Golf Clash by Playdemic

Hitman GO Square Enix Ltd

Horizon Chase by Aquiris Game Studio S.A

Kill Shot Bravo by Hothead Games

Lineage Red Knights by NCSOFT Corporation

Nonstop Knight by flaregames

PAC-MAN 256 - Endless Maze by Bandai Namco Entertainment Europe

Pictionary‚ĄĘ by Etermax

Reigns by DevolverDigital

Riptide GP: Renegade by Vector Unit

Star Wars‚ĄĘ: Galaxy of Heroes by Electronic Arts

Titan Brawl by Omnidrone

Toca Blocks by Toca Boca

Transformers: Forged to Fight by Kabam

Stay up-to-date on best practices to succeed on Play and get the latest news and videos with the new beta version of our Playbook app for developers.

How useful did you find this blogpost? ‚ėÖ ‚ėÖ ‚ėÖ ‚ėÖ ‚ėÖ .blogimage img { float: right; margin: 0; padding: 0; border: 0; width: 40%; } table { border-collapse: collapse; border-spacing: 0; width: 100%; } th { text-align: left; padding: 8px; text-align: left; vertical-align: middle; width: 50%; font-size: 125%; } td { text-align: left; padding: 8px; vertical-align: top; width: 50%; } .note { text-align: center; margin: 0; padding: 0; font-size: 75%; } .playlogo img { display: block; margin: auto; width: 40%; }
Categories: Programming

Four Things to Do Before the Scrum Master Goes on Vacation

Mike Cohn's Blog - Tue, 06/13/2017 - 17:00

Ahhh, summer. Warm weather. Beaches. Barbecues. And vacations.

Vacations are great, but what happens when a team's Scrum Master goes on vacation? Should someone fill in? Should the team refactor code and fix bugs rather than try to work in a sprint while the Scrum Master is away?

To a large extent, answers depend on how long the Scrum Master will be on vacation. The one (and only) nice thing about the short vacations prevalent in the United States is that it's fairly easy for a team to get by without their Scrum Master for a week. It's much more challenging when a Scrum Master takes a more European month-long holiday.

Regardless of whether the Scrum Master will be gone for a week or a month, there are four things good Scrum Masters will do to ensure their teams continue to be successful without them.

Find a Replacement

First, the vacationing Scrum Master should consider looking for a temporary replacement. If the team is experienced with Scrum and with each other, the team could be fine without a Scrum Master if the Scrum Master’s absence is going to be short. I define short as up to a week for any team and up to two weeks for a team doing four-week sprints.

All other teams should try to have a replacement Scrum Master. The replacement could be a Scrum Master from a different team who helps out. It could be someone on the team who is curious about the role and who perhaps wants to try it out in a low-key manner.

A Scrum Master’s vacation can also be a good time to rotate the role among team members who are interested in or skilled at the role. The role might rotate daily or weekly depending on the length of the absence.

Clarify Expectations with the Team

In addition to securing a replacement Scrum Master, if one will be needed, a second thing a Scrum Master should do before departing on vacation is to clarify expectations with the team.

One important expectation is that the team will continue (as much as is practical) to use Scrum. A common fallacy is that some of the Scrum meetings exist for the Scrum Master. Teams that believe the daily scrum is a status update to the Scrum Master will be quick to abandon that “unnecessary” meeting when the Scrum Master is on vacation.

If it hasn’t been done long before, departing Scrum Masters need to correct any misperceptions that Scrum’s meetings or artifacts existing solely for a Scrum Master’s own benefit.

The Scrum Master should also set the expectation that not every impediment the team faces will be removed as quickly as normal. Even if a replacement Scrum Master is in place, the replacement may not have the time, skills, or connections to remove impediments as quickly as the vacationing Scrum Master.

Consider Changing the Sprint Length

A third consideration is changing the team’s sprint length. I rarely recommend changing a team’s sprint length, unless the team is making what they consider a permanent change.

For example, don't insert a three-week sprint into your normal pattern of two-week sprints without a really good reason for doing so. Sometimes Christmas or other similarly impactful holidays can be a good reason. If most of your team is going to be gone at the end of one sprint (and start of the next) because of a major holiday, it's worth at least considering making a sprint a week longer (or shorter).

Similarly, if the Scrum Master is going to be on vacation when a team would normally conduct its review, retrospective and next planning meeting, it might be worth delaying the end of the sprint by a week--in other words, add a week to this, and only this, sprint..

I would recommend a sprint-length change only for teams that are very new to Scrum and need their permanent Scrum Master there to facilitate the end-of-sprint/beginning-of-sprint events. A team with sufficient Scrum experience should be quite adept at those meetings and should be fine without its regular Scrum Master.

Consider Providing Emergency Contact Information

Finally, the vacationing Scrum Master should consider leaving emergency contact information with the team.

I'm a big proponent of being able to completely disconnect from work while on vacation. (Of course, I rarely follow my own advice.) However, there's a difference between being disconnected and being completely unavailable.

Because of their role as impediment solvers, Scrum Masters often have their fingers in many things. Because of this, someone on the team may occasionally need to get in touch with the Scrum Master.

This should happen very infrequently, but needs can occasionally arise. For example, last year I needed to contact a vacationing Scrum Master to get her login information for a tool she'd subscribed to for the team and was the only administrator on. We exchanged three text messages but it helped avoid a really painful workaround the team would have had to do for 3 weeks.

Another time, I reached out to a vacationing Scrum Master who had forgotten to leave notes on the seating arrangements for the new building the team was moving into. This Scrum Master had facilitated a slightly heated series of discussions with team members over how they would use their new space. I wanted to honor those earlier discussions by doing what had been agreed upon. I also wanted to avoid putting the team through the arguments again.

I don't want a Scrum Master thinking about work while on vacation, but providing emergency contact info to one person on the team or to another ScrumMaster can be helpful as long as the privilege isn't abused. It really should be for emergencies only.

A Team Can Perform Well While the Scrum Master Is Away

A great Scrum Master is a vital component of a successful, high-performing Scrum team. But a team can continue to perform well while the Scrum Master is on vacation as long as some thought is given in advance to finding a replacement Scrum Master, clarifying expectations about what should happen while the Scrum Master is away, changing the sprint length, and providing emergency contact information.

What Do You Think?

What’s your experience with a Scrum Master going on vacation? Are there things you’ve done or seen that help a team continue to do well while the Scrum Master is away?

Math for the Day

Herding Cats - Glen Alleman - Tue, 06/13/2017 - 13:51

Screen Shot 2017-06-12 at 6.51.11 AM

Categories: Project Management

Introducing Team Drives for developers

Google Code Blog - Mon, 06/12/2017 - 18:00
Originally posted by Hodie Meyers, Product Manager, Google Drive, and Wesley Chun (@wescpy), Developer Advocate, G Suite on the G Suite Developers Blog

Enterprises are always looking for ways to operate more efficiently, and equipping developers with the right tools can make a difference. We launched Team Drives this year to bring the best of what users love about Drive to enterprise teams. We also updated the Google Drive API, so that developers can leverage Team Drives in the apps they build.

In this latest G Suite Dev Show video, we cover how you can leverage the functionality of Team Drives in your apps. The good news is you don't have to learn a completely new API‚ÄĒTeam Drives features are built into the Drive API so you can build on what you already know. Check it out:

By the end of this video, you'll be familiar with four basic operations to help you build Team Drives functionality right into your apps:

  1. How to create Team Drives
  2. How to add members/users to your Team Drives
  3. How to create folders in Team Drives (just like creating a regular Drive folder)
  4. How to upload/import files to Team Drives folders (just like uploading files to regular folders)

Want to explore the code further? Check out the deep dive blog post. In all, the Drive API can help a variety of developers create solutions that work with both Google Drive and Team Drives. Whether you're an Independent Software Vendor (ISV), System Integrator (SI) or work in IT, there are many ways to use the Drive API to enhance productivity, help your company migrate to G Suite, or build tools to automate workflows.

Team Drives features are available in both Drive API v2 and v3, and more details can be found in the Drive API documentation. We look forward to seeing what you build with Team Drives!

Categories: Programming

Money made easily with the new Google Play Billing Library

Android Developers Blog - Mon, 06/12/2017 - 17:00
Posted by Neto Marin, Developer Advocate

Many developers want to make money through their apps, but it's not always easy to deal with all the different types of payment methods. We launched the Google Play In-app Billing API v3 in 2013, helping developers offer in-app products and subscriptions within their apps. Year after year, we've added features to the API, like subscription renewal, upgrades and downgrades, free trials, introductory pricing, promotion codes, and more.

Based on your feedback, we’re pleased to announce the Play Billing Library - Developer Preview 1. This library aims to simplify the development process when it comes to billing, allowing you to focus your efforts on implementing logic specific to your app, such as application architecture and navigation structure. The library includes several convenient classes and features for you to use when integrating your Android apps with the In-app Billing API. The library also provides an abstraction layer on top of the Android Interface Definition Language (AIDL) service, making it easier for you to define the interface between your app and the In-app Billing API.

Easy to get started and easy to use

Starting with Play Billing Library Developer Preview release, the minimum supported API level is Android 2.2 (API level 8), and the minimum supported In-app Billing API is version 3.

In-app billing relies on the Google Play Store, which handles the communication between your app and Google's Play billing service. To use Google Play billing features, your app must request the com.android.vending.BILLING permission in your AndroidManifest.xml file.

To use the library, add the following dependency in your build.gradle file:

dependencies {
    ...
    compile 'com.android.billingclient:billing:dp-1'
}

After this quick setup process, you're ready to start using the Play Billing Library in your app and can connect to the In-app Billing API, query for available products, start the purchase flow, and more.

Sample updated: Trivial Drive V2

With a new library comes a refreshed sample! To help you to understand how to implement in-app billing in your app using the new Play Billing Library, we've rewritten the Trivial Drive sample from the ground up.

Since we released Trivial Drive back in 2013, many new features, devices, and platforms have been added to the Android ecosystem. To reflect this evolution, the Trivial Drive v2 sample now runs on Android TV and Android Wear.

Give it a try!

Before integrating within your app, you can try the Play Billing Library with the codelab published during Google I/O 2017: Buy and Subscribe: Monetize your app on Google Play.

In this codelab, you will start with a simplified version of Trivial Drive V2 that lets users to "drive" and then you will add in-app billing to it. You'll learn how to integrate purchases and subscriptions as well as the best practices for developing reliable apps that handle purchases.

If you are looking for a step-by-step guide about how to sell in-app products from your app using the Play Billing Library, check out our new training class, explaining how to prepare your application, add products for purchase, start purchase flow and much more.

We want your feedback

We look forward to hearing your feedback about this new library. Visit the Play Billing Library site, the library reference, and the new version of the Trivial Drive sample. If you have issues or questions, file a bug report on the Google Issue Tracker, and for issues and suggestions on the sample, contact us on the Trivial Drive issues page.

For technical questions on implementation, library usage, and best practices, you can use the tags google-play and play-billing-library on Stackoverflow or visit the community pages on our Google+ page.

Categories: Programming

Property-based testing in Java with JUnit-Quickcheck - Part 2: Generators

Xebia Blog - Mon, 06/12/2017 - 09:45

In Part 1 of this tutorial we¬†created a Property-based test (PBT) from a normal JUnit test with basic types. Now let us extend the domain object PostalParcel with a list of Products. All examples are written with Java 8 and can be downloaded from my gitlab repository. Write an unit¬†test for the function deliveryCosts with […]

The post Property-based testing in Java with JUnit-Quickcheck - Part 2: Generators appeared first on Xebia Blog.

TeamCity running on Docker

One of the sessions at JaxLondon, Paul Stack mentioned they were running TeamCity on containers at HashiCorp. Because I am doing quite a number of trainings, demos, talks about Continuous Delivery, having the CI server/agents portable and containerised is a big win for me. After I saw JetBrains has the official docker image [for the server and the agents] at DockerHub, I decided to do it sooner, than later.
There are quite things I will cover to have a good touch on containers.

Step1: Setup:
I will use docker’s Mac Toolbox to create TeamCity server and agents. There will be 2 folders required on my host for TeamCity server: data folder, and logs folder to be introduced as volumes to the server container.


Step2: Creating VirtualBox VMs:

I have my Mac Toolbox installed on Mac. Why not Docker-for-Mac, purely I want to rely on VirtualBox to manage my machines, and keep environment variables for Virtualbox VMs.

mymac:~ demokritos$ docker-machine create --driver virtualbox teamcityserver
mymac:~ demokritos$ docker-machine start teamcityserver
Starting "teamcityserver"... (teamcityserver) Waiting for an IP...
Machine "teamcityserver" was started.
Waiting for SSH to be available...
Detecting the provisioner...
Started machines may have new IP addresses.
You may need to re-run the `docker-machine env` command.
mymac:~ demokritos$ docker-machine env teamcityserver
export DOCKER_TLS_VERIFY="1"
export DOCKER_HOST="tcp://192.168.99.100:2376"
export DOCKER_CERT_PATH="/Users/demokritos/.docker/machine/machines/teamcityserver" export DOCKER_MACHINE_NAME="teamcityserver"
# Run this command to configure your shell: # eval $(docker-machine env teamcityserver)
mymac:~ demokritos$ eval $(docker-machine env teamcityserver)


Step2: Create and share our volumes:

We need to create folders, give permission to our group [my user is in wheel group], and share folder with docker. You can see `stat $folder` to display the permissions.

mymac:~ demokritos$ sudo mkdir -p /opt/teamcity_server/logs
mymac:~ demokritos$ sudo mkdir -p /data/teamcity_server/datadir
mymac:~ demokritos$ sudo chmod g+rw /opt/teamcity_server/logs
mymac:~ demokritos$ sudo chmod g+rw /data/teamcity_server/datadir

And share on Docker preferences
2 Folders to share

This will avoid errors like :
docker: Error response from daemon: error while creating mount source path ‘/opt/teamcity_server/logs’: mkdir /opt/teamcity_server/logs: permission denied.

Step3: Run the docker:

sudo docker run -it --name teamcityserver \
-e TEAMCITY_SERVER_MEM_OPTS="-Xmx2g -XX:MaxPermSize=270m \
-XX:ReservedCodeCacheSize=350m"
-v /data/teamcity_server/datadir:/data/teamcity_server/datadir \
-v /opt/teamcity_server/logs:/opt/teamcity_server/logs \
-p 50004:8111 jetbrains/teamcity-server

If you get an error like :

docker: Error response from daemon: Conflict.
The container name "/teamcityserver" is already in use
by container 4143c2d13192b8020f066b13a2c033750b4ac1ac7d54e822a6b31a5f47489647.
You have to remove (or rename) that container to be able to reuse that name..

Then, if you can find them with “ps -aq”, you can remove them in your terminal, if not open a new one and remove it, i.e:

 docker rm 4143c2d13192 

There is a long discussion on moby’s github site, if you are interested in …

And TC server is ready to be configured… Next, we will set up the agents…


Categories: Programming

Property-based testing in Java with JUnit-Quickcheck - Part 1: The basics

Xebia Blog - Mon, 06/12/2017 - 06:48

To be able to show you what Property-based testing (PBT) is, let's start by grasping the concept of a property in programming languages.¬†Since this is a Java tutorial, I will start with¬†Oracle and their¬†definition of a property in their¬†glossary: Characteristics of an object that users can set, such as the color of a window. Property […]

The post Property-based testing in Java with JUnit-Quickcheck - Part 1: The basics appeared first on Xebia Blog.

SPaMCAST 446 ‚Äď Questions, Go-To People, Servant Leadership

SPaMCAST Logo

http://www.spamcast.net

Listen Now
Subscribe on iTunes
Check out the podcast on Google Play Music

SPaMCAST 446 will feature our essay on questions.  Questions are a coach and facilitator’s secret power! But, with great power comes great responsibility.  

Our second column is from Gene Hughson.  Gene and I discussed his essay Go-to People Considered Harmful originally published on his blog Form Follows Function (www.genehughson.wordpress.com).  The concept may sound counterintuitive, but it is not.

The third column is from Kim Pries, the Software Sensei.  In this installment, Kim dives into the topic of servant leadership.

Re-Read Saturday News

This week we tackle Chapter 8 of Holacracy: The New Management System for a Rapidly Changing World by Brian J. Robertson published by Henry Holt and Company in 2015.  Chapter 8 is a bit of a bits and bobs chapter but begins to draw in a lot of loose threads.  

This week we also announce the next book in the re-read series.  The envelope please. . . . The next book is The Science of Successful Organizational Change. Remember to use the link to buy a copy in order to support the podcast and blog. The reread will be led by Steven Adams.  Steve has been an active participant in many of our previous re-reads and has appeared twice on the Software Process and Measurement Cast to discuss earlier re-reads.  I will provide supplemental comments and highlights.  I am looking forward to sitting on the other side of the table during the next re-read!

Catch up on the all of the Holacracy entries:

Week 1:  Logistics and Introduction

Week 2: Evolving Organization

Week 3: Distribution Authority

Week 4: Organizational Structure

Week 5: Governance

Week 6: Operations

Week 7: Facilitating Governance

Week 8: Strategy and Dynamic Control

Week 9 Adopting Holacracy

Visit the Software Process and Measurement Cast blog to participate in this and previous re-reads.

A Call To Action

If you got a new idea this week while listening to the podcast, please give the SPaMCAST a short, honest review in iTunes, Stitcher or wherever you are listening.  If you leave a review please send a copy to spamcastinfo@gmail.com.  Reviews help guide people to the cast!

Next SPaMCAST

SPaMCAST 447 will feature our interview with Angela Wick on the role of the product owner and business analyst in Agile efforts.The two roles are important and interrelated. This is not first-time the SPaMCAST has featured essays and conversations on the role of product owners ( for example SPaMCAST 430 and SPaMCAST 325).  Angela provides a fresh take on the role!

Shameless Ad for my book!

Mastering Software Project Management: Best Practices, Tools and Techniques co-authored by Murali Chematuri and myself and published by J. Ross Publishing. We have received unsolicited reviews like the following: ‚ÄúThis book will prove that software projects should not be a tedious process, for you or your team.‚ÄĚ Support SPaMCAST by buying the book here. Available in English and Chinese.

 

 


Categories: Process Management

SPaMCAST 446 - Questions, Go-To People, Servant Leadership

Software Process and Measurement Cast - Sun, 06/11/2017 - 22:00

SPaMCAST 446 will feature our essay on questions.  Questions are a coach and facilitator’s secret power! But, with great power comes great responsibility.  

Our second column is from Gene Hughson.  Gene and I discussed his essay Go-to People Considered Harmful originally published on his blog Form Follows Function (www.genehughson.wordpress.com).  The concept may sound counterintuitive, but it is not.

The third column is from Kim Pries, the Software Sensei.  In this installment, Kim dives into the topic of servant leadership.

Re-Read Saturday News

This week we tackle Chapter 8 of Holacracy: The New Management System for a Rapidly Changing World by Brian J. Robertson published by Henry Holt and Company in 2015.  Chapter 8 is a bit of a bits and bobs chapter but begins to draw in a lot of loose threads.  

This week we also announce the next book in the re-read series.  The envelope please. . . . The next book is The Science of Successful Organizational Change. Remember to use the link to buy a copy in order to support the podcast and blog. The reread will be led by Steven Adams.  Steve has been an active participant in many of our previous re-reads and has appeared twice on the Software Process and Measurement Cast to discuss earlier re-reads.  I will provide supplemental comments and highlights.  I am looking forward to sitting on the other side of the table during the next re-read!

Catch up on the all of the Holacracy entries:

Week 1:  Logistics and Introduction

Week 2: Evolving Organization

Week 3: Distribution Authority

Week 4: Organizational Structure

Week 5: Governance

Week 6: Operations

Week 7: Facilitating Governance

Week 8: Strategy and Dynamic Control

Week 9 Adopting Holacracy

Visit the Software Process and Measurement Cast blog to participate in this and previous re-reads.

A Call To Action

If you got a new idea this week while listening to the podcast, please give the SPaMCAST a short, honest review in iTunes, Stitcher or wherever you are listening.  If you leave a review please send a copy to spamcastinfo@gmail.com.  Reviews help guide people to the cast!

Next SPaMCAST

SPaMCAST 447 will feature our interview with Angela Wick on the role of the product owner and business analyst in Agile efforts.The two roles are important and interrelated. This is not first-time the SPaMCAST has featured essays and conversations on the role of product owners ( for example SPaMCAST 430 and SPaMCAST 325).  Angela provides a fresh take on the role!

Shameless Ad for my book!

Mastering Software Project Management: Best Practices, Tools and Techniques co-authored by Murali Chematuri and myself and published by J. Ross Publishing. We have received unsolicited reviews like the following: ‚ÄúThis book will prove that software projects should not be a tedious process, for you or your team.‚ÄĚ Support SPaMCAST by buying the book here. Available in English and Chinese.

Categories: Process Management

The Ultimate List of 13 Global Workplace Trends

NOOP.NL - Jurgen Appelo - Sun, 06/11/2017 - 10:46
Are you missing the waves? Are you riding them? Or are you going under?

It’s a cliche because it’s true: the world is changing faster and faster. The way people will work in the future is radically different from the way we worked until now.

To understand how things are expected to change in the world of work, I spent many hours finding the newest workplace trends. I came across some in-depth reports from various professional sources, based on global investigations and surveys, and I did my best to cross-check everything and synthesize the results into The Ultimate List of 13 Global Workplace Trends. (For each of these 13 trends, I wrote a blog post on the Agility Scales blog.)

The primary purpose of this exercise was to investigate how my businesses stand up against the multiple waves of change that are soon to reach all of us. And I highly recommend that you do the same. Check your business model and compare it with the list of 13 trends. Because for each of the trends, there are three possibilities:

  • You miss the wave and your company neither benefits nor suffers from it.
  • You ride the wave and your business gets a boost for as long as it stays on top of it.
  • You clash with the wave and your business takes a hit, maybe even goes under.

I am checking each business that I am involved in. How will we cope with these 13 waves? Are we missing them? Are we riding them? Or are we going under?

I strongly suggest you do the same.

The Ultimate List of 13 Global Workplace Trends

Here they are:

  1. The Employee Experience
    Employees demand an experience that covers happiness and well-being.
  2. Organizational Agility
    The ‚Äúredesign of organizational design‚ÄĚ is a top trend for the C-suite.
  3. The Blended Workforce
    The workforce is more than just the employees.
  4. Scalable Learning
    The half-life of learned skills continues to fall.
  5. Skillful Talent Acquisition
    The demands on recruiters and candidates keep growing.
  6. Digital HR and Workplaces
    HR must become a leader in the digital organization.
  7. People Analytics
    With computers all around us, data is driving everything.
  8. Rejuvenated Leadership
    A different time calls for a different leadership.
  9. Robotics and AI
    Intelligent machines and cognitive computing have gone mainstream.
  10. Continuous Performance Management
    A new paradigm for performance measurement and rewards is needed.
  11. Networks and Platforms
    Value streams are replaced with value networks.
  12. Purpose and Values
    Companies start caring about sustainability, transparency, and more.
  13. Diversity and Inclusion
    Fairness and equality are now CEO-level issues worldwide.

There you go!

Now analyze these trends yourself and scrutinize your business model. The exercise may significantly increase your company’s chance of survival.

These 13 major trends were derived from the insightful results offered by the authors and publishers of the following reports:

2017 Deloitte Global Human Capital Trends
Accenture Technology Vision 2017
Boston Consulting Group 12 Forces 2017
Bersin-Deloitte ‚ÄĒ Predictions for 2017
Mercer Talent Trends 2017 Global Study
PWC CEO 20th Survey Report 2017
Randstad Sourceright 2017 Talent Trends Report
Sodexo 2017 Workplace Trends Report

(photo credit: Grempz)

The post The Ultimate List of 13 Global Workplace Trends appeared first on NOOP.NL.

Categories: Project Management

The Ultimate List of 13 Global Workplace Trends

NOOP.NL - Jurgen Appelo - Sun, 06/11/2017 - 10:46
Are you missing the waves? Are you riding them? Or are you going under?

It’s a cliche because it’s true: the world is changing faster and faster. The way people will work in the future is radically different from the way we worked until now.

To understand how things are expected to change in the world of work, I spent many hours finding the newest workplace trends. I came across some in-depth reports from various professional sources, based on global investigations and surveys, and I did my best to cross-check everything and synthesize the results into The Ultimate List of 13 Global Workplace Trends. (For each of these 13 trends, I wrote a blog post on the Agility Scales blog.)

The primary purpose of this exercise was to investigate how my businesses stand up against the multiple waves of change that are soon to reach all of us. And I highly recommend that you do the same. Check your business model and compare it with the list of 13 trends. Because for each of the trends, there are three possibilities:

  • You miss the wave and your company neither benefits nor suffers from it.
  • You ride the wave and your business gets a boost for as long as it stays on top of it.
  • You clash with the wave and your business takes a hit, maybe even goes under.

I am checking each business that I am involved in. How will we cope with these 13 waves? Are we missing them? Are we riding them? Or are we going under?

I strongly suggest you do the same.

The Ultimate List of 13 Global Workplace Trends

Here they are:

  1. The Employee Experience
    Employees demand an experience that covers happiness and well-being.
  2. Organizational Agility
    The ‚Äúredesign of organizational design‚ÄĚ is a top trend for the C-suite.
  3. The Blended Workforce
    The workforce is more than just the employees.
  4. Scalable Learning
    The half-life of learned skills continues to fall.
  5. Skillful Talent Acquisition
    The demands on recruiters and candidates keep growing.
  6. Digital HR and Workplaces
    HR must become a leader in the digital organization.
  7. People Analytics
    With computers all around us, data is driving everything.
  8. Rejuvenated Leadership
    A different time calls for a different leadership.
  9. Robotics and AI
    Intelligent machines and cognitive computing have gone mainstream.
  10. Continuous Performance Management
    A new paradigm for performance measurement and rewards is needed.
  11. Networks and Platforms
    Value streams are replaced with value networks.
  12. Purpose and Values
    Companies start caring about sustainability, transparency, and more.
  13. Diversity and Inclusion
    Fairness and equality are now CEO-level issues worldwide.

There you go!

Now analyze these trends yourself and scrutinize your business model. The exercise may significantly increase your company’s chance of survival.

These 13 major trends were derived from the insightful results offered by the authors and publishers of the following reports:

2017 Deloitte Global Human Capital Trends
Accenture Technology Vision 2017
Boston Consulting Group 12 Forces 2017
Bersin-Deloitte ‚ÄĒ Predictions for 2017
Mercer Talent Trends 2017 Global Study
PWC CEO 20th Survey Report 2017
Randstad Sourceright 2017 Talent Trends Report
Sodexo 2017 Workplace Trends Report

(photo credit: Grempz)

The post The Ultimate List of 13 Global Workplace Trends appeared first on NOOP.NL.

Categories: Project Management

Holacracy: Re-read Week 9, Chapter 8: Adopting Holacracy

Book Cover

Holacracy

Chapter 8 begins the third section of Holacracy, Evolution Installed: Living Holacracy. We have approximately three weeks left in this re-read after today. ¬†The next book is The Science of Successful Organizational Change. Remember to use the link to buy a copy in order to support the podcast and blog. The reread will be led by Steven Adams. ¬†Steve has been an active participant in many of our previous re-reads and has appeared twice on the Software Process and Measurement Cast to discuss earlier re-reads. ¬†I will provide supplemental comments and highlights to Steve’s insights! ¬†I am looking forward to sitting on the other side of the table during the next re-read!

Chapter 8 of Holacracy: The New Management System for a Rapidly Changing World by Brian J. Robertson published by Henry Holt and Company in 2015 is titled Adopting Holacracy.  This chapter begins to draw a number of loose threads together.  Personally, I find this chapter a bit disjointed (although useful). The chapter is formatted as a mixture of questions and answers and then a five-step process to bootstrap the use of Holacracy.

The first common question that Robertson addresses is whether just certain parts of Holacracy can be adopted, such as formal meetings. The summarized answer is no.  Robertson strongly believes that Holacracy needs all of its interlinking parts and that by cherry picking the technique will cause more friction than needed and reduce the effectiveness of the organization.  I personally think the structure of the formal meetings might be useful even if you are not adopting Holacracy.

The second question is whether Holacracy can be adopted by communities or groups.  This question intrigued me as the leader of an international association. The short answer is often no. Holacracy is designed for organizations not just groups for people. Robertson includes a set of attributes to help define an organization.  These attributes include structure, a boundary, interchange with the outside world across that boundary and a purpose. Holacracy does not work when a group is not an organization.

The third question is whether you can read the book and then implement Holacracy.  Robertson waffles a bit in his answer starting with a no then admitting that people try this approach. Get a consultant; Holacracy is a very significant change for any organization. If you really are allergic to getting consulting help, at least take a class in addition to reading the book and other articles on Holacracy.

The five-step bootstrap process:

  1. Adopt the Holacracy constitution. The most senior person in the organization that is adopting Holacracy needs power to the rules embedded in the Holacracy constitution.  Those that will be part of the Holacracy must buy in (Robertson addresses the idea of the Board of a firm adopting Holacracy later in the chapter).  The buy-in step is akin to ratifying the constitution.  During this step, the anchor circle and the anchor circle link is identified.  The anchor circle link is responsible for discovering the purpose of the organization (see Chapter 4)
  2. Set up a shared system for governance records РThe Holacracy need to identify where all key operational information and governance records will be kept.  Access is important.  Robertson recommends GlassFrog (his company created the tool).
  3. Define your initial structure.  The initial structure should represent the current state not what the organization is anticipated to evolve toward.  A side note in this area is that small firms often will only have one circle.  Once the initial structure is defined, the lead link of the anchor circle should assign people to roles including assigning the lead links of other circles.
  4. Hold the first governance meetings and run elections. The lead link should call the first the governance meeting. The first position that should be elected is the secretary.   The first governance meeting primes the pump and sets the process of definition and change in action, the secretary is the formal memory.
  5. Schedule regular tactical governance meetings. ¬†I call this ‚Äúthe get on with it step.‚ÄĚ

The section after the bootstrap process Robertson discusses the power of converting the Board to expose the organizations deeper purpose and as a tool to pull the whole organization forward.

The remainder of the chapter focuses on a few of more common scenarios where Holacracy is attempted but does not stick.

  1.    The Reluctant Leader. If the leader can’t live with the power he or she has transferred to the transformation there really is no way forward.
  2.    Middle Management Heck. Middle management requires clear leadership, and message to provide guidance and support for the change.  Middle management also needs the right coach to keep them on track.
  3.    Stopping Short. Implementing Holacracy, starting to reap the benefits and then losing the discipline of the governance and tactical meetings.  Feedback and coaching are tools to keep people and circles from wandering off track.

Remember to buy a copy of Holacracy (use the link to help support and defray the costs of the Software Process and Measurement Cast blog and podcast).

Previous Entries in the re-read:

Week 1:  Logistics and Introduction

Week 2: Evolving Organization

Week 3: Distribution Authority

Week 4: Organization Structure

Week 5: Governance

Week 6: Operations

Week 7: Facilitating Governance

Week 8: Strategy and Dynamic Control


Categories: Process Management

Five Immutable Principles of Project Success Requires Estimating

Herding Cats - Glen Alleman - Sat, 06/10/2017 - 21:02

There are Five Immutable Principles of Project Success.

Screen Shot 2017-06-09 at 9.24.28 AMEach question requires an answer with sufficient confidence to make decisions about spending other people's money, that increases the probability of project success.

All project work is probabilistic (actually statistical and probabilistic), with reducible and irreducible uncertainties that create reducible and irreducible risks to the success of the project.

Let's look at what estimates are needed to answer each of the Five questions:

Principle Estimate Needed To Answer The Question What does DONE look like in units of measure meaningful to the decision makers?

DONE is always in units of business value. That Business Value has variance and that variance needs to be known to assure that the range of Value is tolerable for those paying. 

DONE is a delivered Capability that can be (should be) measured in a unit of Effectiveness and Performance. [1]

A core principle of Managerial Finance is Value cannot be determined without knowing the Cost to achieve that Value. 

So we need to know something about both measures - Cost and Value - to decide that what we think is DONE is affordable, arrives at the needed time to fulfill our business needs, and the cost of this Value can be sustained over the Value's delivery lifecycle.

Without estimates, the units of measure of DONE have no confidence that they will deliver the needed Value or the Cost to achieve that Value is possible before spending all the money and using all the time.

What's our plan to reach DONE as needed for the customer to receive the expected Value from our work?

A Plan is a Strategy for the success of the project. Strategies are hypotheses. Hypotheses require tests to confirm they represent the reality of the situation. 

With these hypotheses, we need to answer the question what's our confidence that the plan we have will actually work?

There is a bigger and better question though ... what confidence DO WE NEED in the plan for the Plan to be credible?

Anyone can construct a Plan. Is it a Credible Plan? Good question. Each requires us to make an estimate of the confidence in the elements of the Plan.

In our Software Intensive System of Systems world, this is called Probability of Program Success (PoPS).

What resources will we need to satisfy the business goals of the customer?

 For the project to be successful, we need resources. People, Facilities, Money, and Time.

How many people, of what skills? What facilities, tools? How much money? How much time?

Each of these needs is probabilistic when it comes to fulfilling the need. What range of variability can we tolerate? This requires making estimates and assessing that impact on the probability of success of the project.

What impediments will we encounter that will reduce the probability of reaching our business goal as needed for the customer to pay back the cost of delivering the needed Value

Risk Management is How Adults Manage Projects - Tim Lister.

All risk management operates in the presence of uncertainty. Making decisions in the presence of uncertainty requires estimating the outcomes of those decisions, the costs associated with those decisions.

You manage projects in the absence of risk management. 

You can't apply risk management without estimating.

No risk management? No adult management.

How are we going to measure progress toward DONE, in some unit meaningful to those paying for our work?

 Physical Percent Complete is the best measure of progress to plan. This is the beauty of Agile Development. Working Software is the Measure of Progress.

But that working software's arrival rate is statistically distributed. The notion of a burndown chart and the projection of progress to show the completion date ignores the statistical nature of software development and the statistical nature of the past performance. 

Many examples from NE show wild varainces in the past performance, but not the impact on the confidence of the complete date or cost. 

To show a confidence range on the completion date from the past performance - the empirical data - we need to estimate the possible ranges of performance in the future from the past performance AND from the possible risks in the future.

Estimates are needed to apply the Five Immutable Principles of Project Success 

[1] System Analysis, Design, and Development: Concepts, Principles, and Practices, Charles S. Wasson, Wiley Series in Systems Engineering and Management, 2006

Categories: Project Management