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

Connecting with Humans

I just read¬†Zappos is struggling with Holacracy because humans aren‚Äôt designed to operate like software. I’m not surprised. That’s because we are humans who work with other human people. I want to talk with people when I want to talk with them, not when some protocol tells me I must.

It’s the same problem when managers talk about “resources” and “FTEs” (full-time equivalents). I don’t know about you. I work with resourceful humans. I work with people, regardless of how much time they work at work.

If the person I need isn’t there, I have some choices:

  • I can cc the “other” person(s) and create a ton of email
  • I can ask multiple¬†people and run the risk of multiple people doing the same work (and adding to waste)
  • I can do it myself—or try to—and not finish other work I have that’s more important.

There are other options, but those are the options I see most often.

We each have unique skills and capabilities. I am not fond of experts working alone. And, I want to know with whom I can build trust, and who will build trust with me.

We build relationships with humans. (Okay, I do yell at my computer, but that’s a one-sided relationship.) We build relationships because we talk with each other:

  • Just before and just after meetings. This is the “how are the kids? how was the wedding? how was the weekend?” kind of conversation.
  • When we work with each other and explain what we mean.
  • When we extend trust and we provide deliverables to build trust.

When we talk with each other, we build relationships. We build trust. (Some of us prefer to talk with one person at a time, and some of us like to speak with more. But we talk together.) That discussion and trust-building allows us to work together.

This relationship-building is one of the problems of geographically distributed teams not feeling like teams. The feelings might be missing in a collocated team, too. Standups work because they are about micro-commitments to each other. (Not to the work, to each other as humans.)

I’m a Spock-kind of person, I admit. I work to build human relationships with colleagues. I work at these relationships because the results are worth it to me. Some of you might start with the people first, and you will build relationships because you like people. I’m okay with that

Categories: Project Management

Some Tips for Boosting your App's Quality in 2017

Google Code Blog - Wed, 01/04/2017 - 21:59
Originally posted on the Firebase blog by Doug Stevenson /Developer Advocate

I've got to come clean with everyone: I'm making no new year's resolutions for 2017. Nor did I make any in 2016. In fact, I don't think I've ever made one! It's not so much that I take a dim view of new year's resolutions. I simply suspect that I would likely break them by the end of the week, and feel bad about it!

One thing I've found helpful in the past is to see the new year as a pivoting point to try new things, and also improve the work I'm already doing. For me (and I hope for you too!), 2017 will be a fresh year for boosting app quality.

The phrase "app quality" can take a bunch of different meanings, based on what you value in the software you create and use. As a developer, traditionally, this means fixing bugs that cause problems for your users. It could also be a reflection of the amount of delight your users take in your app. All of this gets wrapped up into the one primary metric that we have to gauge the quality of a mobile app, which is your app's rating on the store where it's published. I'm sure every one of you who has an app on a storefront has paid much attention to the app's rating at some point!

Firebase provides some tools you can use to boost your app's quality, and if you're not already using them, maybe a fresh look at those tools would be helpful this year?

Firebase Crash Reporting
The easiest tool to get started with is Firebase Crash Reporting. It takes little to no lines of code to integrate it into your iOS and Android app, and once you do, the Firebase console will start showing crashes that are happening to your users. This gives you a "hit list" of problems to fix.
One thing I find ironic about being involved with the Crash Reporting team is how we view the influx of total crashes received as we monitor our system. Like any good developer product, we strive to grow adoption, which means we celebrate graphs that go "up and to the right". So, in a strange sense, we like to see more crashes, because that means more developers are using our stuff! But for all of you developers out there, more crashes is obviously a *bad* thing, and you want to make those numbers go down! So, please, don't be like us - make your crash report graphs go down and to the right in 2017!

Firebase Test Lab for Android
Even better than fixing problems for your users is fixing those problems before they even reach your users. For your Android apps, you can use Firebase Test Lab to help ensure that your apps work great for your users among a growing variety of actual devices that we manage. Traditionally, it's been kind of a pain to acquire and manage a good selection of devices for testing. However, with Test Lab, you simply upload your APK and tests, and it will install and run them to our devices. After the tests complete, we'll provide all the screenshots, videos, and logs of everything that happened for you to examine in the Firebase console.

With Firebase Test Lab for Android now available with generous daily quotas at no charge for projects on the free Spark tier, 2017 is a great time to get started with that. And, if you haven't set up your Android app builds in a continuous integration environment, you could set that up, then configure it to run your tests automatically on Test Lab.

If you're the kind of person who likes writing tests for your code (which is, admittedly, not very many of us!), it's natural to get those tests running on Test Lab. But, for those of us who aren't maintaining a test suite with our codebase, we can still use Test Lab's automated Robo test to get automated test coverage right away, with no additional lines of code required. That's not quite that same as having a comprehensive suite of tests, so maybe 2017 would be a good time to learn more about architecting "testable" apps, and how those practices can raise the bar of quality for your app. I'm planning on writing more about this later this year, so stay tuned to the Firebase Blog for more!

Firebase Remote Config
At its core, Firebase Remote Config is a tool that lets you configure your app using parameters that you set up in the Firebase console. It can be used to help manage the quality of your app, and there's a couple neat tricks you can do with it. Maybe this new year brings new opportunities to give them a try!

First of all, you can use Remote Config to carefully roll out a new feature to your users. It works like this:
  1. Code your new feature and restrict its access to the user by a Remote Config boolean parameter. If the value is 'false', your users don't see the feature. Make 'false' the default value in the app.
  2. Configure that parameter in the Firebase console to also be initially 'false' for everyone.
  3. Publish your app to the store.
  4. When it's time to start rolling out the new feature to a small segment of users, configure the parameter to be 'true' for, say, five percent of your user base.
  5. Stay alert for new crashes in Firebase Crash Reporting, as well as feedback from your users.
  6. If there is a problem with the new feature, immediately roll back the new feature by setting the parameter to 'false' in the console for everyone.
  7. Or, if things are looking good, increase the percentage over time until you reach 100% of your users.

This is much safer than publishing your new feature to everyone with a single app update, because now you have the option to immediately disable a serious problem, and without having to build and publish a whole new version of your app. And, if you can act quickly, most of your users will never encounter the problem to begin with. This works well with the email alerts you get from Firebase Crash Reporting when a new crash is observed.

Another feature of Remote Config is the ability to experiment with some aspect of your app in order to find out what works better for the users of your app, then measure the results in Firebase Analytics. I don't know about you, but I'm typically pretty bad at guessing what people actually prefer, and sometimes I'm surprised at how people might actually *use* an app! Don't guess - instead, do an experiment and know /for certain/ what delights your users more! It stands to reason that apps finely tuned like this can get better ratings and make more money.

Firebase Realtime Database
It makes sense that if you make it easier for you user to perform tasks in your app, they will enjoy using it more, and they will come back more frequently. One thing I have always disliked is having to check for new information by refreshing, or navigating back and forward again. Apps that are always fresh and up to date, without requiring me to take action, are more pleasant to use.

You can achieve this for your app by making effective use of Firebase Realtime Databaseto deliver relevant data directly to your users at the moment it changes in the database. Realtime Database is reactive by nature, because the client API is designed for you set up listeners at data locations that get triggered in the event of a change. This is far more convenient than having to poll an API endpoint repeatedly to check for changes, and also much more respectful of the user's mobile data and battery life. Users associate this feeling of delight with apps of high quality.

What does 2017 have in store for your app?
I hope you'll join me this year in putting more effort into making our users even more delighted. If you're with me, feel free to tweet me at @CodingDoug and tell me what you're up to in 2017!
Categories: Programming

Managing Uncertainty, Risk, Threat, and Opportunity

Herding Cats - Glen Alleman - Wed, 01/04/2017 - 20:43

I received a book over the Holidays - Managing Project Risk and Uncertainty: A Constructively Simple Approach to Decision Making, Chris Chapman and Stephen Ward. This is a seminal work on risk management in the presence of uncertainty. The introduction has this...

Uncertainty in the plan English sense is lack of certainty has important implication for what can be acheived by organizations. All Management decision should take uncertainty into account. Sometime the implcations of uncertainties are risk in the sense of significant potential unwlecome effects on orgainzation performance. 

Success in the presence of uncertainty requires a process be followed. Here's a recommend one:

  Stage in the Decision Process Uncertainty About Monitor the environment and current operations within the orgainzaiton Completness, veracity, and accuracy of information received, meaning of information, interpretation of implications Recognize the Issue Significance of issue, need for action Scope of decisions Appropriate frame of reference, scope of relevant organization activities who is involved, who should be involved, extent of separation from other decision issues  Determine the performance criteria relevant performance criteria, whose criteria, appropriate metrics, appropriate priorities, and trade-offs between different criteria.  Identify alternative course of action  Nature of alternatives available (scope, timing, and logistics), what is possible, level of detail required, time available to identify alternatives. Predict the outcomes of courses of action Consequence, nature of influencing factors, size of influencing factors, effects and interactions between influencing factors (variability and timing), nature and significance of assumptions made  Chose the course of action How to weight and compare predicted outcomes  Implement the chosen alternatives How alternatives will work in practices Monitor and review performance    What to monitor, how of term to monitor, when to take further actions

In order to make decisions in presence of uncertainty, we need to estimate all the partially elements of the decision process. Withoitn these estimates thetre is no Risk Management. Without Risk Management, there is no SAdult management of the project. 

Risk Management is How Adults Manage Projects - Tim Lister

Categories: Project Management

Introducing the ExifInterface Support Library

Android Developers Blog - Wed, 01/04/2017 - 18:50

Posted by Ian Lake, Developer Advocate

With the release of the 25.1.0 Support Library, there's a new entry in the family: the ExifInterface Support Library. With significant improvements introduced in Android 7.1 to the framework's ExifInterface, it only made sense to make those available to all API 9+ devices via the Support Library's ExifInterface.

The basics are still the same: the ability to read and write Exif tags embedded within image files: now with 140 different attributes (almost 100 of them new to Android 7.1/this Support Library!) including information about the camera itself, the camera settings, orientation, and GPS coordinates.

Camera Apps: Writing Exif Attributes

For Camera apps, the writing is probably the most important - writing attributes is still limited to JPEG image files. Now, normally you wouldn't need to use this during the actual camera capturing itself - you'd instead be calling the Camera2 API CaptureRequest.Builder.set() with JPEG_ORIENTATION, JPEG_GPS_LOCATION or the equivalents in the Camera1 Camera.Parameters. However, using ExifInterface allows you to make changes to the file after the fact (say, removing the location information on the user's request). Reading Exif Attributes

For the rest of us though, reading those attributes is going to be our bread-and-butter; this is where we see the biggest improvements.

Firstly, you can read Exif data from JPEG and raw images (specifically, DNG, CR2, NEF, NRW, ARW, RW2, ORF, PEF, SRW and RAF files). Under the hood, this was a major restructuring, removing all native dependencies and building an extensive test suite to ensure that everything actually works.

For apps that receive images from other apps with a content:// URI (such as those sent by apps that target API 24 or higher), ExifInterface now works directly off of an InputStream; this allows you to easily extract Exif information directly out of content:// URIs you receive without having to create a temporary file.

Uri uri; // the URI you've received from the other app
InputStream in;
try {
  in = getContentResolver().openInputStream(uri);
  ExifInterface exifInterface = new ExifInterface(in);
  // Now you can extract any Exif tag you want
  // Assuming the image is a JPEG or supported raw format
} catch (IOException e) {
  // Handle any errors
} finally {
  if (in != null) {
    try {
    } catch (IOException ignored) {}

Note: ExifInterface will not work with remote InputStreams, such as those returned from a HttpURLConnection. It is strongly recommended to only use them with content:// or file:// URIs.

For most attributes, you'd simply use the getAttributeInt(), getAttributeDouble(), or getAttribute() (for Strings) methods as appropriate.

One of the most important attributes when it comes to displaying images is the image orientation, stored in the aptly-named TAG_ORIENTATION, which returns one of the ORIENTATION_ constants. To convert this to a rotation angle, you can post-process the value.

int rotation = 0;
int orientation = exifInterface.getAttributeInt(
switch (orientation) {
  case ExifInterface.ORIENTATION_ROTATE_90:
    rotation = 90;
  case ExifInterface.ORIENTATION_ROTATE_180:
    rotation = 180;
  case ExifInterface.ORIENTATION_ROTATE_270:
    rotation = 270;

There are some helper methods to extract values from specific Exif tags. For location data, the getLatLong() method gives you the latitude and longitude as floats and getAltitude() will give you the altitude in meters. Some images also embed a small thumbnail. You can check for its existence with hasThumbnail() and then extract the byte[] representation of the thumbnail with getThumbnail() - perfect to pass to BitmapFactory.decodeByteArray(). Working with Exif: Everything is optional

One thing that is important to understand with Exif data is that there are no required tags: each and every tag is optional - some services even specifically strip Exif data. Therefore throughout your code, you should always handle cases where there is no Exif data, either due to no data for a specific attribute or an image format that doesn't support Exif data at all (say, the ubiquitous PNGs or WebP images).

Add the ExifInterface Support Library to your project with the following dependency:

compile ""

But when an Exif attribute is exactly what you need to prevent a mis-rotated image in your app, the ExifInterface Support Library is just what you need to #BuildBetterApps

Categories: Programming

How is Writing Lord of the Rings Like Writing Software?


Have you ever read a book and wondered how any human could have written something so brilliant? For me it was Lord of the Rings. I despaired that in a hundred lifetimes I could never write a book so rich, so deep, so beautiful. Since then I've learned a few things about about how LoTr was created that has made me reconsider. The kick-in-the-head is that it's the same lesson I learned long ago about writing software.

I've always been amazed how a program can start as a single source file and after years of continued effort turn into a working system that is so large no human can come close to understanding it. If you had tried from the start to build the system you ended up with you would have never ever got there. That's just not how it works. Software is path dependent.

I've experienced this growth from a single cell to a Cambrian explosion many times so I know it's a thing. What I hadn't considered is how it's also a thing for writing books too. 

Creating good software is a process of evolution through the mechanism of constant iteration for the purpose of survival. This is also how good stories are made. What both have in common is creation through thought.

Thought needs an object to contemplate. Each intermediate state of a project is that object. By linking together a series of state inspired creative jumps something wonderful can be created that may contain only the faintest trace of its beginnings.

Here's how Lord of the Rings is a good example of this process...

LoTr started out as a sequel to the Hobbit. Tolkien's publisher wanted to cash in on the success of the Hobbit with a sequel. And The Silmarillion wasn't it. So Tolkien began with the intention of writing a sequel to the Hobbit. It was horrible. 

The first book title was The Return of the Shadow, not Lord of the Rings. The prose was still written for children. Frodo was called Bingo. Strider was a hobbit called Trotter. Bilbo planned to get married. And the ring was still just a ring. The story had no clear motive or direction. "What more can hobbits do?" asked Tolkein. The ideas of the Hobbit were played out. The LoTr we know and love was far far away. 

In draft after draft Tolkien probed and searched for a direction to take the story. It all turned when Tolkien wrote the scene with the Black Rider. At first the Black Rider was really a White Rider. It was Gandalf coming to talk to Bingo. But then some insight happened. A dizzying array of neurons conspired and the color of the horse changed from white to black and Gandalf transformed into a man wrapped in a great black cloak and hood. A new framework was creating itself.

How do we know? Fortunately, from Christopher Tolkien, we have the history of changes his father made to LoTr. Dr. Corey Olsen in a great series—The Return of the Shadow, Session 1 - In Search of a Sequel—walks us through what is essentially the git log for LoTr. Imagine a kind of Papers We Love treatment from a true Tolkien expert and gifted analyst. It's magical.

We see idea after idea worked through in the text. It was a continuous process of refactoring and new development. Some ideas were kept from beginning to end. Many were cut. Many morphed. Much dialogue was kept, but was given to different characters to say in different circumstances. 

The whole feeling was very much like seeing software being developed, only the result wasn't a working app, but one of the most influential stories of all time.

The lesson for me was a deep and dramatic reconfirmation of an old idea: All successful large systems started as successful small systems.

This applies to us as writers and programmers. It's easy to get down on yourself during the creation process. Neither your story or program has to start out great; greatness is something that evolves.

In this new year, that's the lesson of Lord of the Rings for me.

Categories: Architecture

Watch sessions from the Playtime 2016 events to learn how to succeed on Android & Google Play

Android Developers Blog - Wed, 01/04/2017 - 18:12
Posted by Patricia Correa, Head of Developer Marketing, Google Play

We’re wrapping up our annual global Playtime series of events with a last stop in Tokyo, Japan. This year Google Play hosted events in 10 cities: London, Paris, Berlin, Hong Kong, Singapore, Gurgaon, San Francisco, Sao Paulo, Seoul and Tokyo. We met with app and game developers from around the world to discuss how to build successful businesses on Google Play, share experiences, give feedback, collaborate, and get inspired. You can now watch some of the best Playtime sessions on our Android Developers YouTube Channel, as listed below. The playlist opens with a video that celebrates collaboration.

Keynote What’s next for Google Play

Learn how we're helping users discover apps in the right context, creating new ways to engage with users beyond the install, and powering innovative experiences on emerging platforms like virtual reality, wearables, and auto.

Develop and launch apps & games
Android development in 2016

Android development is more powerful and efficient than ever before. Android Studio brings you speed, smarts, and support for Android Nougat. The broad range of cross-platform tools on Firecase can improve your app on Android and beyond. Material Design and Vulkan continue to improve the user experience and increase engagement.

Daydream & Tango

Daydream View is a VR headset and controller by Google that lets people explore new worlds, or play games that put them at the center of action. Learn how we're helping users discover apps in the right context and powering new experiences with Daydream and Tango.

Fireside chat - Wayfair & Pokémon GO on augmented reality

Augmented reality engages and delights people everywhere. In this fireside chat, online furniture seller Wayfair and Niantic's Pokémon GO share their experiences with AR and discuss how other developers can make the most of the platform.

Building for billions, featuring best practices from Maliyo Games

Learn how to create apps and games for emerging markets, which are expected to drive 80% of global smartphone growth by 2020, by recognizing the key challenges and designing the right app experiences to overcome them.

At minute 16:41, hear tips from Hugo Obi, co-founder of Nigerian games developer Maliyo.

Launch smart on Google Play

Set your app up for success using experimentation and iteration. Learn best practices for soft launching and adapting your app for different markets and device types.

Sustainable growth solves most problems for apps, featuring best practices from SoundCloud & Peak

Planning and executing a great growth strategy involves a complex set of choices and mastery of many tools. In this session we discuss topics including key business objectives, tools, and techniques to help you solve the growth puzzle with our partner, SoundCloud.

Also, check out some growth best practices from Peak.

Creating sustainable user growth for startups, by Greylock

User growth isn't just about growing the number of users you have. The key to sustainability is creating and delivering core product value. In this session, VC Greylock discusses how to identify your core action to focus on and shows you how to use these insights to optimize your app for long term growth.

App engagement is the new black, featuring best practices from Lifesum

As the app marketplace becomes more competitive, developer success depends on retaining users in apps they love. Find out which Google tools and features can help you analyze your users' behaviors, improve engagement and retention in your app and hear insights from others developers including Lifesum.

Predicting lifetime value in the apps world

Deepdive into lifetime value models and predictive analytics in the apps ecosystem. Tactics to get the most out of identified segments and how to upgrade their behaviors to minimize churn.

Subscriptions update

Learn about Google's efforts to enable users, around the world, to seamlessly and safely pay for content. This session provides updates on Google Play billing and recent enhancements to our subscriptions platform.

One game fits all, featuring best practices from Space Ape Games

Customize your game's experience for different users by targeting them with lifetime value models and predictive analytics. Hear how these concepts are applied by Space Ape Games to improve retention and monetization of their titles.

Promoting your game and growing your user base, featuring best practices from Seriously

Learn how to use Google's latest tools, like Firebase, for benchmarking, acquiring users and measuring your activities. Also, hear game developer Seriously share their latest insights and strategies on YouTube influencer campaigns.

Creating long-term retention, loyalty and value with engaging LiveOps events, featuring best practices from Kabam & Creative Mobile

Learn how successful developers keep their games fresh and engaging with Live Operations. In this talk, the LiveOps expert on Marvel: Contest of Champions discusses tips about the art and science of running an engaging LiveOps event.

Also check out the tips and best practices to run successful LiveOps from games developer Creative Mobile.

Panel - Play fair: Maintaining a level playing field in your game, featuring Space Ape Games and Kongregate

Ensuring that your game is fair is critical to success. Find out how game developers are achieving this and some ways Google Play can help.

Why you need to build for families

Family-based households with children have higher tablet and smartphone ownership rates than the general population. These families are more likely to make purchases on their mobile devices and play games. Learn about how parents choose what to download and buy, and how you can prepare for maximum conversion.

Two keys to growth: user acquisition & app engagement, by Cartoon Network

Hear how Cartoon Network leverages their network to cross-promote new titles, acquire new users and keep them engaged through immersive experiences.

Go global: Getting ready for the emerging markets revolution, by Papumba

Papumba has a clear vision to grow a global business. Hear how they work with experts to adapt their games to local markets and leverage Google Play's developer tools to find success around the world.

Optimizing for a post install world

You've spent time and resources getting users to download your apps, but what happens after the install? Learn how to minimize churn and keep families engaged with your content long term.

Monetization best practices on freemium, by 01 Digital

Learn how 01 Digital uses In-App-Purchases (IAP) to effectively monetize their apps while maintaining a safe environment for families.

Building a subscription business that appeals to parents, by PlayKids

PlayKids has been at the forefront of the subscription business model since their inception. See how they best serve their subscribers by refreshing their content, expanding their offerings and investing in new verticals.

How useful did you find this blogpost?
‚ėÖ ‚ėÖ ‚ėÖ ‚ėÖ ‚ėÖ

Categories: Programming

Five steps to achieve sustainable growth and boost your app's long term success

Android Developers Blog - Wed, 01/04/2017 - 18:04
Maxim Mai, Business Development Manager, Google Play

Maintaining sustainable growth is difficult for even the highest quality apps. In this video and through the 5 steps below you can find out how some of our leading Android developers are tackling growth.

1) Understand and define your app's objectives Depending on your product lifecycle stage you will most likely focus on these 3 growth goals with varying intensity:
  • Acquire new users
  • Increase engagement and retention
  • Grow revenue
2) Track and measure your tactics against each of your objectives List out the tactics you're using to achieve each objective and keep track of their performance. You can visualize it using a scorecard like in the example below created by Mobile Growth Stack.

3) Apply your growth tactics. Here are a few examples of specific tactics developers have successfully used to drive sustained growth.
Tactic: Clue, a female health app, invests in the Play store listing to increase conversions.
Results: 24% aggregate increase in install conversion rate over a period of 6 months.

How they did it:

Which phone screenshot do you think drove increase in install conversion for Clue?

Tactic: ShareTheMeal, a non-profit app developed by the World Food Programme, uses public relations as a free sustainable acquisition channel.

Results: 50% of their total installs to date were driven by media coverage.

How they did it:
  • Developed an excellent messaging.
  • Boosted installs impact by combining PR with celebrity outreach and distribution partnership.
  • Learned that TV coverage has the highest impact on installs but print is a useful door opener to amplify TV coverage.
Tactic: Viral growth. Virality is a core growth tool for apps and games that focus on sharing and usually the mechanic is built into the core user experience of the product. However, even if sharing isn't a key component of your app, you can still influence two key variables to create an appropriate environment to encourage virality.

How to do it:
  • Increase the number of additional users that a single user brings to the app, by boosting the number of invitations sent.
  • Decrease your "cycle time", how long it takes between inviting a user and that user sending out the next round of invitations to their friends.
  • Offer more incentives for users to share the app or its content while they're using it will help shorten the cycle time and kickstart viral growth!
Tactic: Freeletics Nutrition, an app to adjust your nutrition to your individual needs and goals, uses cross-promotion to accelerate the launch of a new product.

Results: 96% of new Nutrition app sales generated by users who originally registered for the developer's Bodyweight training app.

How they did it:
  • Surface meal advice in the Bodyweight app's activity feed with the goal of raising awareness for the approaching launch of their new Freeletics Nutrition app.

4) Build a strong growth culture To make sustainable growth work for your app, it needs to be a part of your culture. Runtastic is one of the leading health and fitness app developers in Europe and 95% of their approximately 76M total app installs on Google Play have been generated organically. Mario Aichlseder, VP of Growth, believes this is the result of a strong growth culture and the growth principles according to which all teams operate. For example, product managers, designers and engineers at Runtastic deliberately chose a mixture of qualitative and quantitative feedback loops during the app development process to ensure they stay true to their growth principles.

5) Adjust along the way It's important to track your tactics against real metrics to measure your impact. That will help you make decisions about where to increase or decrease your efforts. Your priorities will also change based on the evolution of your business and product lifecycle as well as due to external factors such as new techniques becoming available, so be open to regularly adjusting your tactics.
Get more tips and best practices in the sessions from this year's Playtime events.

How useful did you find this blogpost?

‚ėÖ ‚ėÖ ‚ėÖ ‚ėÖ ‚ėÖ

Categories: Programming

Tips to be better found and discovered on Google Play

Android Developers Blog - Wed, 01/04/2017 - 18:00
Posted by Andrew Ahn, Product Manager, Google Play

We're constantly working on ways to make Google Play a great place for users to discover apps and games they'll love. We know this is crucial to most developers ongoing success. There are steps you can take to ensure your app is primed for success ‚Äď that's why we're sharing a reminder of some of our top tips for getting your app discovered on Google Play.

Build for quality

First, build for quality. Android users expect high-quality apps. App quality directly influences the long-term success of your app - in terms of installs, user rating and reviews, engagement, and user retention. These are some of the factors that go into our search and discovery systems that help discern what apps to recommend and surface across our Google Play experiences. When building your app, check against the quality criteria, and use what you need from the material design guidelines to make sure you are delivering a highly usable experience. Also, be sure to test your app for functional quality. Opt-in to the pre-launch report for your alpha and beta apps in the Google Play Developer Console and you'll receive a report for each APK showing how it performs on real devices. This will help you identify crashes and other issues before you release your app.

Example: Designing for high usability through Google Material Design.
Request only the permissions you need

Second, be considerate on which permission settings to enable for your app. We see that there are some apps that ask for very sensitive permissions, even when the app doesn't use them. (For example, a camera app asking for read and write permissions to call logs.) Excessive app permissions may dissuade users from installing your app. In fact, one study, in which users were shown two unbranded apps with similar ratings that had the same functionality but different sets of permission requests, showed that users were, on average, 3 times more likely to install the app with fewer permissions requests. And a similar study showed that users are 1.7 times more likely, on average, to select the application with fewer permission requests. The rule of thumb is to enable permissions that are only essential to your app. Read the best practices for app permissions.

Chart: Distribution of permission groups use across Arcade Games category. If you're building an arcade game, you many only need a very few permission settings, if any.
Listen and respond to your users

Lastly, be attentive to user feedback. It's ultimately the users who drive our search and discovery systems. When you hear user feedback about bugs or other issues, we recommend engaging with the feedback and, if needed, updating your app in a timely manner. Having an up-to-date app that reflects your user's feedback can help you gain more installs, engagement, and higher ratings. Beta testing is a good way to get feedback from real users before launch. You can also check the ratings and reviews section of the Developer Console to see an analysis of what users are saying about your app and how that is affecting your rating compared to similar apps.

Review benchmarks in the Developer Console uses machine learning to give you insights about what users are saying about your app and how it affects your rating.

Google Play strives to help users find and discover the most safe, high quality, useful, and relevant apps. Building apps that put user's interest first will help you be successful in Google Play. For more tips and best practices for building a successful app business on Google Play, get the Playbook for Developers app.

How useful did you find this blogpost? ‚ėÖ ‚ėÖ ‚ėÖ ‚ėÖ ‚ėÖ

Categories: Programming

Get a glimpse of Wear 2.0’s upcoming standalone apps

Android Developers Blog - Wed, 01/04/2017 - 17:58
Kacey Fahey, Marketing Programs Manager, Google Play

The upcoming Android Wear 2.0 experience will introduce standalone apps, expanding your potential reach to both Android and iOS audiences with Wear devices. Users will be able to search, install, and use apps without ever leaving their device. See how other developers are enhancing their user experience with standalone apps for messaging, travel & local, and health & fitness.

Having a watch app further simplifies video messaging with Glide. Using the Wear Complications API, Glide is now able to live broadcast directly from the watch face. By tapping contact shortcuts from the watch face, you can now launch directly into a conversation. This experience brings speed and intimacy to the world of messaging, making wrist-based communication more accessible and effortless.


Travelers around the world use Foursquare's Android Wear app to discover hidden gems and be in the know about the best places to eat, drink and explore. With their upcoming 2.0 app, the team has a clean new canvas for rich notifications giving users an immersive experience with Foursquare content.

"The standalone nature of the Android Wear 2.0 app will offer a big boost in search performance and app responsiveness so you spend less time staring at the screen and more time exploring the world around you," said Kyle Fowler, Software Engineer at Foursquare.


Lifesum helps users make better food choices, improve their exercise, and reach health goals. The upcoming 2.0 experience complements the existing Lifesum mobile app and as a standalone app, it will allow users to more easily track water and meals throughout the day.
"It's all about increasing access and being there for the user in a quick and simple way. We believe a simplified way of tracking meals and water will make it easier for our users on their journey of becoming healthier and happier," said Joakim Hammer, Android Developer at Lifesum

Check out for the latest builds and documentation about the recently released Android Wear Developer Preview 4.
How useful did you find this blogpost?
‚ėÖ ‚ėÖ ‚ėÖ ‚ėÖ ‚ėÖ

Categories: Programming

Four tips for startup success from a Silicon Valley VC

Android Developers Blog - Wed, 01/04/2017 - 17:55
Posted by Kacey Fahey, Marketing Programs Manager, Google Play

Working at Google Play, we’re on the front line watching developers build, polish, and launch their dreams for millions of users to experience. While it’s exciting to be a part of so much creativity, we’re often asked how small startups can stand out in such a competitive field. We recently had Josh Elman & Sarah Tavel of Greylock Partners speak at our events, sharing their experiences working in Product Marketing and Engineering at major tech companies including Twitter, Facebook and Pinterest. Below are four tips to hit the ground running and create a business built for success.

Set goals, both large and small
Every startup has an ultimate goal, but don’t forget to create micro-goals. Breaking your larger goal down into smaller milestones creates checkpoints to review progress and ensure momentum is heading in the right direction. This also allows for flexibility if teams need to course correct along the way, not to mention micro-accomplishments to celebrate!

Create stickiness
The first level in Sarah’s Hierarchy of Engagement is to identify the core action for users to perform in your app. Once you have engagement with this core action, level 2 is driving retention, getting users to come back and perform the core action more and more. The ultimate goal is to hook users with your app creating accruing benefits, whereby deeper and more frequent engagement creates habits and product dependencies.

‚ÄúAs companies move up the hierarchy, their products become better, harder to leave, and ultimately create virtuous loops that make the product self-perpetuating,‚ÄĚ ‚Äď Sarah Tavel, Partner at Greylock

Example: For those looking to improve on organizational skills, Evernote can be a lifesaver. The more lists users create, the more they rely on the product. Evernote becomes such an ingrained habit that it naturally transcends between personal and professional worlds.

Drive virality
When launching a new app, look for ways to achieve virality. Find hooks to make users fall in love with your app and strive to make it part of their regular habits. But watch out, not all types of virality are treated equally.

‚ÄúWhenever you‚Äôre thinking about engineering virality, you need to be sure that you‚Äôre reaching the right people, getting them interested for reasons that align with the intrinsic value of your product, and leading them to the right actions,‚ÄĚ ‚Äď Josh Elman, Partner at Greylock Example: Whether you‚Äôre lucky enough to convert happy users into product evangelists or catch fire through social media, outbreak virality has driven tremendous success for apps like Pok√©mon GO and Prisma.

Measure cohorts
While monitoring traditional mobile metrics such as installs and DAUs provide a high level overview of app performance, cohort analysis is key to understanding user behavior and optimizing for growth. When rolling out changes in your app, make sure to track cohorts for an extended duration. Initial results may tell one story at D7, but hold tight, as things could turn a corner by D15 or even later. Give users time to adapt and get comfortable with the changes before making any final product decisions.

Read more tips on how to find success for your app or game start up in the Playbook for Developers app.

How useful did you find this blogpost?
‚ėÖ ‚ėÖ ‚ėÖ ‚ėÖ ‚ėÖ

Categories: Programming

Best practices to improve app engagement

Android Developers Blog - Wed, 01/04/2017 - 17:54
Posted by Niko Schröer, Business Development, Google Play

Driving installs is important to growing a user base, but it's not much use if your app sits on users' devices and is rarely opened. In a competitive app landscape, it's increasingly important to engage and retain users over the long term to build a successful business. Users who are using your app more will have a higher lifetime value and be more likely to share your app. Watch my Playtime session below to hear about the tools and features other developers are using to increase app engagement. You can also read the summary of my main tips below.

1. Build a high quality app to engage Android users
Building a high quality app is the foundation of a great user experience on Android. The better your app's user experience is, the more engaged your users will be. Optimizing for material design, for example, can significantly improve user engagement as well as building for Android Wear, Auto or TV where it makes sense based on your value proposition.

To achieve high quality, we recommend you to check out the latest Android features, tips, and best practices in our Playbook for Developers.

The developer of the golf app, Hole19, tailored their app's user experience thoughtfully for Android Wear and, as a result, saw a 40% increase in user engagement compared to non-Wear users. Watch a video about Hole19's success.

2. Make your users feel at home
Personalising your app experience to make users feel at home is a good way to start a long lasting relationship. Onboarding new users is a crucial step in this process. Onboarding should be fast and seamless and ask for minimal user input - after all users want to start using your app as quickly as possible. Furthermore, the onboarding should be a core part of the overall product experience. Use images and wording that's true to your brand and only ask for user input when it's actually needed, to reduce friction and avoid losing users.

Freeletics, a fitness app, created an engaging user onboarding flow in which they tailored imagery and text to male and female users respectively. They also moved the registration process to a later stage in the funnel to reduce friction. The improved onboarding flow increased user activity by 58% within the first 7 days. They also implemented Google Smart Lock to seamlessly sign-in returning users.

3. Optimize feature releases as a way to increase user engagement
Introducing new features is essential to staying ahead of competition and relevant to your users to ensure they keep coming back to your app. To make new feature launches successful drivers for user engagement, follow these simple steps:
  • Define a clear objective for each release to measure your impact, e.g. increase number of users who edit a photo by at least 10%.
  • Use beta testing to gather user feedback and iterate a feature before it's rolled out to all of your users.
  • Enable the pre-launch report in the Play developer console to spot potential flaws and ensure technical stability in your alpha and beta apps.
  • Guide users to each new feature as if it is a light onboarding experience. Visually highlight what's new and provide a short explanation why users should care.
  • Measure performance with analytics to see if the new feature drives engagement (that you've defined as your objective).
4. Use notifications wisely
Push notifications are a popular engagement tool and rightfully so. However, there is a fine line between driving engagement and annoying users (who might then uninstall your app). Follow these guidelines to ensure your notifications are on the right side of the line:
  • Be relevant and only send messages that matter to the user in context. Be creative and true to your brand, speak your users language and use an authentic tone.
  • Make notifications actionable for your users and don't forget to deep link to content where applicable to save your users time.
  • Remember that not all your users are equal so personalize your message to different user cohorts with Firebase Notifications.
  • Consider timeliness of your messages to get users the right notification at the right time and with the right frequency. For example, it might be better to send a notification about something interesting to read at a time when the user normally gets out their phone ‚Äď like during their commute ‚Äď instead of the middle of the day, when they might be busy and dismiss a new notification.
  • Finally, give users control over what notifications they receive so that they can opt-in and opt-out of the notifications they like and don't like respectively. If users get annoyed about certain types of notifications and don't have a way to disable them, they might uninstall your app.
The Norwegian news app Aftenposten implemented a new onboarding flow that clarified which notifications were available, allowing readers to manage their preferences. This reduced uninstalls by 9.2.% over 60 days and led to a 28% decrease in the number of users muting notifications completely. Read more about Aftenposten's success.

5. Reward your most engaged users
Last but not least, you should find ways to reward your most loyal users to retain them over time and to make it desirable to less engaged users to engage more. These rewards can come in many shapes and forms. Start by keeping it simple and make sure the reward adds real value to the user and fits in your app's ecosystem. You can do this by:
  • Giving sneak peeks of new features by inviting them to a beta group.
  • Decorating user accounts with badges based on their behaviour.
  • Offer app exclusive discounts or promo codes that can only be redeemed in your app.
Generally, the more you can personalize the reward the better it will work.

Find success with ongoing experimentation
A great Android app gives developers a unique opportunity to create a lasting relationship with users and build a sustainable business with happy customers. Therefore optimising apps to engage and retain your users by following these 5 tips should be front and centre of your development goals and company strategy. Find more tips and best practices by watching the sessions at this year's Playtime events.
How useful did you find this blogpost?

‚ėÖ ‚ėÖ ‚ėÖ ‚ėÖ ‚ėÖ

Categories: Programming

Self-Healing Systems

From the Editor of Methods & Tools - Wed, 01/04/2017 - 16:33
We can think of the whole computer systems as a human body that consist of cells of various types. They can be hardware or software. When they are software units, the smaller they are, the easier it is for them to self-heal, recuperate from failures, multiply or even get destroyed when that is needed. We […]

2016 Podcast and Blog Highlights in Review


With 2017 just beginning I want to spend a few moments to showcase the most popular podcasts and blog entries published in 2016.

For those of you who read the blog and don‚Äôt listen to the podcast, a quick reminder — the Software Process and Measurement Podcast explores the varied world of software process improvement and measurement, providing solutions and advice on how to improve value delivery effectiveness. SPaMCAST combines essays, commentaries, interviews, question and answer sessions, and your feedback to serve up ideas, options, opinions, and advice that can be applied in the real world. ¬†In a nutshell, the cast provides advice for and from practitioners, methodologists, pundits, and consultants!

The podcast is published every Sunday, 52 times a year (except when we have equipment failure).  We publish two types of podcasts.  The first type features an interview, and the second is more of a magazine and includes an essay from the blog and two or three columns from a great group of contributors.  The current cast of characters includes:

  • ¬†¬†¬†¬†¬†¬†¬†¬†Gene Hughson (Architecture)
  • ¬†¬†¬†¬†¬†¬†¬†¬†Jeremy Berriault (Quality Assurance)
  • ¬†¬†¬†¬†¬†¬†¬†¬†Kim Pries (Software Development)
  • ¬†¬†¬†¬†¬†¬†¬†¬†Steve Tendon (Lean and Kanban)
  • ¬†¬†¬†¬†¬†¬†¬†¬†Jon Quigley (Product Development

Are you interested in participating?  Pitch me!  

The 5 top downloaded interview podcasts of 2016 (as of 1/2/2017) were:

  1.       SPaMCAST 374 РJerry Weinberg, Quality, Grandfather of Agile Web  Audio
  2.       SPaMCAST 396 РMike Burrows, Agendashift  Web  Audio
  3.       SPaMCAST 406 РErik van Veenendaal, Quality, Agile and the TMMi   Web  Audio
  4.       SPaMCAST 404 РRyan Ripley, The Business of Agile Web  Audio
  5.       SPaMCAST 372 РVasco Duarte, #NoEstimates Web   Audio

An interesting mix of people populated the top five interviews in 2016.  Lots of information on Agile, but also a strong showing for testing and the TMMi.  The interview with Jerry Weinberg was one of my favorites and it is great to see that it was one of yours. Jerry has been an amazing force in the software development world for a long time and continues to be a huge influence.

The 5 top downloaded magazine podcasts of 2016 (as of 1/2/2017) were:

  1.    SPaMCAST 413 РScaling Management, Throughput Accounting, QA Tools Web   Audio
  2.    SPaMCAST 419 РNotes on Distributed Stand-ups, QA Corner, Configuration Management, Software Sensei
        Web  Audio
  3.    SPaMCAST 409 РTeam Structure, QA Presentations, Eliciting Requirements Web  Audio
  4.    SPaMCAST 417 РSix Elements of Business Stories, QA Corner, Herbie and Tame Flow  Web  Audio
  5.    SPaMCAST 376 РWomen In Tech, Microservices, Capabilities and More  Web  Audio                           

The five top magazine podcast included an appearance by EVERYONE of the SPaMCASTs columnists.  This year the first year where the magazine casts typically surpassed the number of downloads for the interview casts.  I think that the listeners of the podcast get significant value for hearing many voices!  I hope to add a few more diverse voices to the mix in 2017.

In mid-January, we will complete year 10 of podcasting essays, interviews, and columns. I look forward to continuing to edit and guide the SPaMCAST during Year 11 and beyond.

Software Process and Measurement Cast Blog  

A brief review of the cadence for the blog.  We publish material on the blog four days a week and over those four days we have three types of entries.  The first type of entry are essays focused on software process and measurement.  These type of entries are published on Tuesday and Thursday and generally relate to a 4 essay theme. The second type of entries are those that fall into the Re-Read Saturday category.  We are currently finishing the re-read of Five Dysfunctions of a Team.  This essay is published on Saturday (hence the name).  The final type of entry on the blog is the announcement podcast posting which posts on Sunday.  The top five new entries on the blog in 2016 were:  

  1.    Metrics: Four Types of Productivity
  2.    Basics: Difference Between Process, Procedures, and Techniques
  3.    Basics: Difference Between Models, Frameworks, and Methodologies
  4.    Productive Agile Teams:  I, T, E and M Shaped People
  5.    Post Agile Age: The Movement Is Dead

Two of the top five entries are part of the basics theme published in March.  The Post Agile Age entry was published December 1st and has been moving up the list.

Every year I am amazed by what I learn from interviewees, columnists, the research for the essays and discussions with listeners. Based on my observations and conversations with a wide range of practitioners, I believe the use of Agile, lean and Kanban still are expanding and evolving, even as Agile as a movement fades. Older frameworks continue to both adapt and incorporate newer frameworks or they fade in relevance.  Which means that in order to stay relevant all of us must continue to learn and adapt. I hope the podcast and the blog can help all of us stay on the front lines of leading change in the world of software development. The Software Process and Measurement Cast crew will continue to scan the edges of acceptable development methods to try to identify the next new wave of change, and I can guarantee that there will be a next wave of change (see Post-Agile Age: The Age of Aquarius (Something Better is Beginning)). However, we need you to let us know what new trends you are seeing and topics you would like us to explore so that everyone that reads the blog or listens to the podcast can benefit.

We have a lot of plans for 2017 that cover both the podcast and blog.

  1. Monthly Update on Appearances
  2. New Website ‚Äď this will happen this year!
  3. Implement Patreon for Fund Raising
  4. Add New Voices to Magazine
  5. Upgrade Studio (potentially add video capability)
  6. Mobile Recording Equipment

More on these topics as they are ready (one will appear tomorrow).  2017?  Let’s have some fun!


Categories: Process Management

Sponsored Post: Loupe, New York Times, ScaleArc, Aerospike, Scalyr, VividCortex, MemSQL, InMemory.Net, Zohocorp

Who's Hiring?
  • The New York Times is looking for a Software Engineer for its Delivery/Site Reliability Engineering team. You will also be a part of a team responsible for building the tools that ensure that the various systems at The New York Times continue to operate in a reliable and efficient manner. Some of the tech we use: Go, Ruby, Bash, AWS, GCP, Terraform, Packer, Docker, Kubernetes, Vault, Consul, Jenkins, Drone. Please send resumes to:
Fun and Informative Events
  • Your event here!
Cool Products and Services
  • A note for .NET developers: You know the pain of troubleshooting errors with limited time, limited information, and limited tools. Log management, exception tracking, and monitoring solutions can help, but many of them treat the .NET platform as an afterthought. You should learn about Loupe...Loupe is a .NET logging and monitoring solution made for the .NET platform from day one. It helps you find and fix problems fast by tracking performance metrics, capturing errors in your .NET software, identifying which errors are causing the greatest impact, and pinpointing root causes. Learn more and try it free today.

  • ScaleArc's database load balancing software empowers you to “upgrade your apps” to consumer grade – the never down, always fast experience you get on Google or Amazon. Plus you need the ability to scale easily and anywhere. Find out how ScaleArc has helped companies like yours save thousands, even millions of dollars and valuable resources by eliminating downtime and avoiding app changes to scale. 

  • Scalyr is a lightning-fast log management and operational data platform.  It's a tool (actually, multiple tools) that your entire team will love.  Get visibility into your production issues without juggling multiple tabs and different services -- all of your logs, server metrics and alerts are in your browser and at your fingertips. .  Loved and used by teams at Codecademy, ReturnPath, Grab, and InsideSales. Learn more today or see why Scalyr is a great alternative to Splunk.

  • InMemory.Net provides a Dot Net native in memory database for analysing large amounts of data. It runs natively on .Net, and provides a native .Net, COM & ODBC apis for integration. It also has an easy to use language for importing data, and supports standard SQL for querying data. http://InMemory.Net

  • VividCortex is a SaaS database monitoring product that provides the best way for organizations to improve their database performance, efficiency, and uptime. Currently supporting MySQL, PostgreSQL, Redis, MongoDB, and Amazon Aurora database types, it's a secure, cloud-hosted platform that eliminates businesses' most critical visibility gap. VividCortex uses patented algorithms to analyze and surface relevant insights, so users can proactively fix future performance problems before they impact customers.

  • MemSQL provides a distributed in-memory database for high value data. It's designed to handle extreme data ingest and store the data for real-time, streaming and historical analysis using SQL. MemSQL also cost effectively supports both application and ad-hoc queries concurrently across all data. Start a free 30 day trial here:

  • ManageEngine Applications Manager : Monitor physical, virtual and Cloud Applications.

  • : Monitor End User Experience from a global monitoring network. 

If any of these items interest you there's a full description of each sponsor below...

Categories: Architecture

Continuous Planning Article Posted

I have a new article up on,¬†Continuous Agile Program Planning: Think Big, Plan Small. It’s about how to use rolling wave planning especially for an agile program.

If you are a Product Owner or you are responsible for planning what when, and want to learn how to do this, join my PPO Workshop, starting next week.

Categories: Project Management

Lessons for the New Year

I don’t know if you retrospect on a regular basis. I do. (I know, you are so surprised!)

Andy Kaufman asked me to share my biggest learning for his podcast. Take a listen to¬†The Most Important Lesson You Learned Last Year. I’m pleased and proud to be in such good company. Thanks, Andy!

Categories: Project Management

Accountability on a Agile Software Development in the Presence of Governance

Herding Cats - Glen Alleman - Tue, 01/03/2017 - 02:25

One of the principles of agile development is self-organizing teams.  Self-Organizing is a powerful process. But Self-Directed is not the same as Self-Organizing. On all but de-minimis projects, there is some external organization that is defining what Done looks like at the business capabilities level. In Scrum, this is the Product Owner, who is a member of the team. The PO is defined as:

The keeper of the requirements. The Product Owner provides the ‚Äúsingle source of truth‚ÄĚ for the Team regarding requirements and their planned order of implementation. In practice, the Product Owner is the interface between the business, the customers, and their product related needs on one side, and the Team on the other. The Product Owner buffers the Team from feature requests that come from many sources, and is the single point of contact for all questions about product. The PO maintains the Product Backlog, sets the schedule for releasing completed work to customers, and makes the final call as to whether implementations have the features and quality required for release.¬†

But First a Statement of Principles

Without a set of principles, it's difficult to have a conversation about seeking a shared understanding of the problem and possible solutions for almosty any topic. So for projects that spend other people's money in the presence of uncertainty - Governance is a means to establish those shared principles.

Governance is about Decision Rights. Specifying the decision rights and accoutability framework to encourage desirable behaviours in the developemnt and use of information technology and its supporting services. - IT Governance: How Top Performers Manage IT Decision Risght for Superier Results, Weill and Ross, Harvard Business School Proess.

In this Role (like all members of Agile teams, the PO is a role, not a position) the business value stream is conveyed from the business to the development team through the Product Roadmap and Release Plan. With the Team's full contribution to these artifacts, the Product Owner is Accountable to the business for delivering that value from the Scrum Team's outcomes. This is paradigm is usually found at the Enterprise level of software development. If you're working on a self-contained team, where the customer, PO, development team, and all supporting roles are all sitting at the same table, with a low ceremony around cost, schedule, or deliverable - you can stop reading now. You don't need governance, a Product Roadmap, and Release Plan. Just code and the person paying you will tell you what to do next.

But if you're on a team that gets its funding outside the team, then there is likely a governance process in place for how to spend that money. In this case, there are others who are Accountable for delivery working software. Not designing and developing the software. But those that have a business role for the use of that software to make money or provide a mandated service.This is the Team itself as a collective, but there is a separation of concerns on any non-trivial project as well. The UX/UI designers are Accountable for developing human factors and compliance -

In this governance paradigm, the Team itself is still a collective, but there is a separation of concerns on any non-trivial project as well. The UX/UI designers are Accountable for developing human factors and compliance - 508 Compiance for example - as well as compliance with the current or future UX/UI processes. The Database performance lead on the team is accountable for assuring the code and web service maintain the needed database performance. The Cyber Security lead is Accountable for assure the work of the developers adheres with NIST Cyber Security Framework when the system is public facing with controlled content. The Architect is accountable for assuring the code developed by the Team is compliant with the established Architecture. For example TOGAF or in the DOD, DODAF, or in some other domains industry architectures. IEEE 1553 for real-time embedded system.

In these examples, there is usually some overarching governance process. If yu have no governance process, then none of this accountability discussion is applicable - do what you want not one cares. But if someone does care, usually the customer and those paying, then the notion of Accountability is the basis of project success.

The Responsibility Assignment Matrix

First, there are many alternatives to RACI, so this post is about a Principle and in this case a Practice and Process. On projects where governance is in place, a Responsibility Assignment Matrix (RAM) is a means of defining who is participating in what Role on the project. The RAM defines the single points of accountability for project Leadership Team. These assignments start by identifying who is accountable for which project roles before the project starts. As the project matures, a delegation of these responsibilities down to the project team members using the RACI tool.

In an enterprise project here's an example of the locations for Accountability at the enterprise. 

Screen Shot 2017-01-02 at 9.09.12 AM

 For agile programs, replace the PM with the PO and the diagram above remains the same. From this business governance process, we can build a RAM.

Screen Shot 2017-01-02 at 9.12.35 AM

The RACI paradigm should actually start with Accountability - but ARCI which isn't as snappy. RACI provides the means to flow down responsibility from the Accountability. There cannot be multiple people Accountable, but there can be multiple people Responsible. Without a single point of integrative responsibility, it's not clear who gets to say what about the spending of other people's money. Again if you have no governance process, spend as you wish, do as you wish, no one care. But if there is governance, one place for developers to looks as to WHY governance is needed (rather than saying it's a waste) is Essentials of Managerial Finance, Besley and Brigham. This book explains why and how to manage other people's money when producing products or services in exchange for that money. 

Screen Shot 2017-01-01 at 5.50.50 PM

In The End

If it's your money or maybe your parents money, no one carees how you spend it. But if it's not your money - investors, relatives, the firms money, the stockholders money, the owners money - then some form of governance is likely needed. With this governance paradigm in place, some structure around who gets to decide how to spend that money is likely needed. With that need in place RACI (or its relatives) is a way to have a conversation about who, what, when, and why descioons can be made.

The governance process is based on 3 pillars:

  • Ensure Benefits Realization - this is where the¬†value management comes from
  • Optimize Resources - this is where he¬†cost management comes from
  • Optimize Risks - this is the of removing the impediments of cost, schedule, and technical performance

This is the basis of Governance - It's About Decision Rights. 

No need for decision rights? Spend away

[1] COBIT 5 ISACA's new Framework for IT Governance, Risk, and Security Auditing: An Overview

[2] The Role of ITIL in IT Governance: Leveraging IT Governance around IT Service Management

Related articles Essential Reading List for Managing Other People's Money The Art of Systems Architecting Architecture -Center ERP Systems in the Manufacturing Domain
Categories: Project Management

Matching strings in Scala

Xebia Blog - Mon, 01/02/2017 - 21:31
Over December I had a lot of fun doing the Advent of Code coding challenges with some colleagues. Many of those, such as day 21, require interpreting some kind of string input. While normally I'd probably marshall those strings into case classes before processing, in this case that seemed like overkill: a quick pattern-match should

Hack a Happy New Year!

“Whatever you can do, or dream you can, begin it. Boldness has genius, power and magic in it.” — Johann Wolfgang Von Goethe

Hack a Better New Year

It’s time to dig down, dig in, and dig deep to create a great year for yourself and others.

I’m a fan of hacks for work and life.

I find that hacking away at challenges is a great way to make progress and to eventually overcome them.

Hacking is really an a approach and a mindset where you try new things, experiment and explore while staying open-minded and learning as you go.

You never really know what’s going to work, until you’ve actually made it work.

Nothing beats personal experimentation when it comes to creating better results in your life.

Anyway, in the spirit of kicking off the new year right, I created a comprehensive collection of the ultimate hacks for a happy new year:

101 Hacks for a Happy New Year

This is no ordinary set of hacks.  It’s deep.  There are hacks for mind, body, emotions, career, finance, relationships, and fun.

There are hacks you can use everyday to change how you think, feel, and act.

There are hacks to help you change habits.

There are hacks to help you relight your fire and get back in the game, if you’ve been in a slump or waiting on the sidelines.

Jump back in the game, master your work and life, and have some fun in the process.

Here is a quick list of the hacks from 101 Hacks for a Happy New Year:

1. Get the power of a New Year’s Resolution on your side
2. Limit yourself to one big resolution at a time
3. Get specific with your goals
4. Dream bigger to realize your potential
5. If you want change, you must change
6. Guide your path with vision, values, and goals
7. Change a habit with Habit Stacking
8. Create mini-feedback loops
9. Bounce back from a setback
10. Avoid ‚ÄúAll or Nothing‚ÄĚ thinking
11. Choose progress over perfection
12. Reward yourself more often
13. Gamify it
14. Adopt a Tiny Habit
15. Just Start
16. Adopt a growth mindset
17. Create if-then plans to stick with your goals
18. Start with Great Expectations
19. Adopt 7 beliefs for personal excellence
20. Master the art of goal planning
21. Prime your mind for greatness
22. Use dreams, goals, and habits to pull you forward
23. Use the Exponential Results Formula to make a big change
24. Adopt the 7 Habits of Highly Motivated People
25. Use Trigger Moments to activate your higher self
26. Use Door Frame Triggers to inspire a better version of you
27. Find your purpose
28. Figure out what you really want
29. Use 3 Wins to Rule Your Year
30. Commit to your best year ever
31. Find your Signature Strengths
32. Practice a ‚Äúlighter feeling‚ÄĚ
33. Let go of regrets
34. 15-Minutes of Fulfillment
35. Create your ideal day the Tony Robbins Way
36. Master your emotions for power, passion, and strength
37. Start your year in February
38. Build your personal effectiveness toolbox
39. Write your story for the future
40. Get out of a slump
41. Give your best, where you have your best to give
42. Ask more empowering questions
43. Surround yourself with better people
44. Find better mentors
45. Do the opposite
46. Try a 30 Day Sprint
47. Grow 10 Years Younger
48. Don’t get sick this year
49. Know Thyself
50. Decide Who You Are
51. Decide Who You Want To Be
52. Cultivate an Attitude of Gratitude
53. Try 20-Minute Sprints
54. Create a vision board for your year
55. Adopt some meaningful mantras and affirmations
56. Practice your mindfulness
57. 15-Minutes of Happiness
58. Breathe better
59. Become your own gym
60. Master your wealth
61. Learn how to read faster
62. Let go of negative feelings
63. Live a meaningful life
64. Establish a routine for eating, sleeping, and exercising
65. Improve your likeability
66. Win friends and influence people
67. Improve your charisma through power, presence, and warmth
68. Fill your mind with a few good good thoughts
69. Ask for help more effectively
70. Attract everything you’ve ever wanted
71. Catch the next train
72. Unleash You 2.0
73. Learn anything in 20 hours
74. Use stress to be your best
75. Take worry breaks
76. Use the Rule of Three to rule your day
77. Have better days
78. Read 5 powerful personal development books
79. Practice the 10 Skills of Personal Leadership
80.  Develop your Emotional Intelligence
81. Cap your day with four powerful questions
82. Build mental toughness like a Navy Seal
83. Feel In Control
84. Transform your job
85. Use work as your ultimate form of self-expression
86. Be the one who gives their all
87. Live without the fear of death in your heart
88. Find your personal high-performance pattern
89. Create unshakeable confidence
90. Lead a charged life
91. Use feedback to be your best
92. Make better decisions
93. Learn how to deal with difficult people
94. Defeat decision fatigue
95. Make the most of luck
96. Develop your spiritual intelligence
97. Conquer your fears
98. Deal with tough criticism
99. Embrace the effort
100. Finding truth from the B.S.
101. Visualize more effectively

For the details of each hack, check out 101 Hacks for a Happy New Year.

I will likely tune and prune the hacks over time, and improve the titles and the descriptions.

Meanwhile, I’m not letting perfectionism get in the way of progress.

Go forth and hack a happy new year and share 101 Hacks for a Happy New Year with a friend.

Categories: Architecture, Programming

Efficient storage: how we went down from 50 PB to 32 PB

As the Russian rouble exchange rate slumped two years ago, it drove us to think of cutting hardware and hosting costs for the Mail.Ru email service. To find ways of saving money, let’s first take a look at what emails consist of.

Indexes and bodies account for only 15% of the storage size, whereas 85% is taken up by files. So, files (that is attachments) are worth exploring in more detail in terms of optimization. At that time, we didn’t have file deduplication in place, but we estimated that it could shrink the total storage size by 36% since many users receive the same messages, such as price lists from online stores or newsletters from social networks containing images and so on. In this article, I’m going to describe how we implemented a deduplication system under the supervision of Albert Galimov.

Categories: Architecture