Warning: Table './devblogsdb/cache_page' is marked as crashed and last (automatic?) repair failed query: SELECT data, created, headers, expire, serialized FROM cache_page WHERE cid = 'http://softdevblogs.com/' in /home/content/O/c/n/Ocnarfparking9/html/softdevblogs/includes/database.mysql.inc on line 135

Warning: Cannot modify header information - headers already sent by (output started at /home/content/O/c/n/Ocnarfparking9/html/softdevblogs/includes/database.mysql.inc:135) in /home/content/O/c/n/Ocnarfparking9/html/softdevblogs/includes/bootstrap.inc on line 729

Warning: Cannot modify header information - headers already sent by (output started at /home/content/O/c/n/Ocnarfparking9/html/softdevblogs/includes/database.mysql.inc:135) in /home/content/O/c/n/Ocnarfparking9/html/softdevblogs/includes/bootstrap.inc on line 730

Warning: Cannot modify header information - headers already sent by (output started at /home/content/O/c/n/Ocnarfparking9/html/softdevblogs/includes/database.mysql.inc:135) in /home/content/O/c/n/Ocnarfparking9/html/softdevblogs/includes/bootstrap.inc on line 731

Warning: Cannot modify header information - headers already sent by (output started at /home/content/O/c/n/Ocnarfparking9/html/softdevblogs/includes/database.mysql.inc:135) in /home/content/O/c/n/Ocnarfparking9/html/softdevblogs/includes/bootstrap.inc on line 732
Software Development Blogs: Programming, Software Testing, Agile, Project Management
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
warning: Cannot modify header information - headers already sent by (output started at /home/content/O/c/n/Ocnarfparking9/html/softdevblogs/includes/database.mysql.inc:135) in /home/content/O/c/n/Ocnarfparking9/html/softdevblogs/includes/common.inc on line 153.

Five Dysfunctions of a Team, Patrick Lencioni:  Re-Read Week 5

The Five Dysfunctions of a Team Cover

The book during unboxing!

Today we continue our re-read of the business novel, The Five Dysfunctions of a Team  by Patrick Lencioni (Jossey-Bass, Copyright 2002, 33rd printing). If you do not have a copy of the book, please buy a copy from the link above and read along. As we move through the first part of the book we are being exposed to Lencioni’s model of team dysfunctions and a set of crises to illustrate the common problems that make teams into dysfunctional collections of individuals.


Next to the base of the five-stage model titled absence of trust (introduced in the section titled “The Speech”)  Kathryn wrote the term invulnerability. People that have trust are willing to show their vulnerability to others on the team. Without trust, people put up a wall so they appear invulnerable which impedes communication and sharing need to create a functional team.  Kathryn describes the next exercise that will help the group to demonstrate showing vulnerability in a safe environment.

The exercise: Each person on the team will take five minutes to identify their single biggest strength and weakness related to their involvement at DecisionTech. Answers that with strengths that were over self-deprecating or included generic weaknesses were not allowed. The expectation is that each person will expose themselves to the rest of the group. Once the five minutes are up, each person will debrief with the rest of the group.

Nick began the debrief process.  He was open and honest in his strengths and weakness, and he listened to his teammate’s comments and critiques. It took trust for the group to be able to talk honestly about how they felt.

When Mikey shared, her strengths and weakness were shallow, showing a lack of trust in the group.  There was no interaction and comments from the rest the team.  Mikey’s lack of participation let the air out of the exercise.

Martin went last and noted that his weakness was that he gave the appearance of arrogance. This sparked a discussion until Mikey squashed it noting that he would not be about to change without years of psychotherapy and that perhaps he was just hardwired to be arrogant. Kathryn didn’t call her on the remark, which was foreshadowed as a mistake.


Kathryn shifts the focus from the base of the model to the top of the pyramid.   In the space at the top of the pyramid, she writes the phrase “Inattention to Results”.  Dysfunctional teams fail to focus on collective results because individuals are honing their own egos and chasing individual status.  Functional teams deliver collective results. Everyone has egos; however, on a team, the collective ego has to be greater than the individual ones.  Over the years, I have watched Lebron James (power forward on the Cleveland Cavilers basketball team) mature and learn that an individual virtuoso can’t win if the team isn’t more than a collection of talented individuals.  When the results of the overall team define success, it is difficult for individual egos to get out of hand.

The book uses the example of Kathryn’s husband who coaches high school basketball.  He focuses on getting the team to be and play like a team which allows him to win consistently, even though the individuals are probably not as talented many individuals on the teams they play against.

One of the many important concepts in this section is that the goal of the leader is not to shepherd individual careers, but rather to get the most out of the team.

The section is capped off with a discussion of why sports provide a good training ground and metaphor for the concept of team.  The goal of a sport to unambiguously win. The score provides unambiguous proof of whether a team is successful. Scores also provide continuously updated and transparent feedback to everyone participating during the game so that there is no surprise when the game ends. Profit, which is the ultimate goal of for-profit organizations, is very difficult to use as a motivational tool because it is only known at the end of a reporting period. I classify profit as a rearview mirror type of measure; it tells you where have been but not necessarily where you are going. Profit is important, but a team needs other goals that more actionable. More actionable goals will be more like a score from a sporting event 


Goals are an important tool to focus attention and energy.  For a goal to be effective it needs to be actionable.  In an effort to identify more actionable goals, Kathryn leads another exercise.

Exercise: Break the group into subgroups of two or three people.  I recommend that the subgroups are cross-functional (note: in the book the subgroups are cross-functional because each person in the group is focused on different areas of the company). Have the subgroup propose a list of categories that the organization should have results-focused goals. In this exercise just create categories.  After the subgroups develop a list of categories, debrief and discuss with the whole group to develop a set of categories that represents a consensus amongst the whole team.

The DecisionTech executives identify 15 categories that they decide to measure on a monthly basis. As the discussion becomes more focused on the team’s day-to-day work, people fell back into their typical dysfunctional behavior.  The book uses the example of the team discussing the public relationship category.  In this category, goals and measures existed, however, most of the executive team either did not know they existed or didn’t understand them or . When the discussion got heated (with Mikey defending and deflecting criticism), the team shut down instead of getting to the crux of the problem. The section ends with Kathryn’s thought “so this is how it works.” We end on another cliffhanger!

Three quick take-ups:

  1.       Don’t let bad attitudes fester!
  2.       Team ego and success is more important than individual egos and success.
  3.       Goals should provide actionable feedback.

Previous Installments in the re-read of  The Five Dysfunctions of a Team by Patrick Lencioni:

Week 1 – Introduction through Observations

Week 2 – The Staff through the End Run

Week 3 – Drawing the Line though Pushing Back

Week 4 – Entering Danger though Rebound


Categories: Process Management

Announcing the winners of the Google Play Indie Games Festival in San Francisco; Indie Games Contest coming soon to Europe

Android Developers Blog - Sat, 10/22/2016 - 08:22

Posted by Jamil Moledina, Google Play, Games Strategic Lead

Last Saturday, we hosted the first Google Play Indie Games Festival in North America, where we showcased 30 amazing games that celebrate the passion, innovation, and art of indies. After a competitive round of voting from fans and on-stage presentations to a jury of industry experts, we recognized seven finalists nominees and three winners.

Winners: bit bit blocks Presented by Greg Batha Bit Bit Blocks is a cute and action-packed competitive puzzle game. Play with your friends on a single screen, or challenge yourself in single player mode. Head-to-head puzzle play anytime, anywhere. Numbo Jumbo Presented by Kaveh Daryabeygi, Wombo Combo Numbo Jumbo is a casual mobile puzzle number game for iOS and Android. Players group numbers that add together: for example, [3, 5, 8] works because 3+5=8. Orbit - Playing with Gravity Presented by Chetan Surpur & Eric Rahman, Highkey Games ORBIT puts a gravity simulator at the heart of a puzzle game. Launch planets with a flick of your finger, and try to get them into orbit around black holes. ORBIT also features a sandbox where you can create your own universes, control time, and paint with gravity.
Finalist nominees:
Antihero [coming later in 2016] Presented by Tim Conkling Antihero is a "fast-paced strategy game with an (Oliver) Twist." Run a thieves' guild in a gas-lit, corrupt city. Recruit urchins, hire thugs, steal everything – and bribe, blackmail, and assassinate your opposition. Single-player and cross-platform multiplayer for desktops, tablets, and phones. Armajet [coming later in 2016] Presented by Nicola Geretti & Alexander Krivicich, Super Bit Machine Armajet is a free-to-play multiplayer shooter that pits teams of players against each other in fast-paced jetpack combat. Armajet is a best in class mobile game designed for spectator-friendly competitive gaming for tablets and smartphones. Players compete in a modern arena shooter that’s easy to learn, but hard to master. Norman's Night In: The Cave [coming later in 2016] Presented by Nick Iorfino & Alex Reed, Bactrian Games Norman's Night In is a 2D puzzle-platformer that tells the tale of Norman and his fateful fall into the world of cave. While test driving the latest model 3c Bowling Ball, Norman finds himself lost with nothing but his loaned bball and a weird feeling that somehow he was meant to be there. Parallyzed Presented by David Fox, Double Coconut Parallyzed is an atmospheric adventure platformer with unique gameplay, set in a dark and enchanting dreamscape. You play twin sisters who have been cast into separate dimensions. Red and Blue have different attributes and talents, are deeply connected, and have the ability to swap bodies at any time.

Finalists nominees and winners also received a range of prizes, including Google I/O 2017 tickets, a Tango Development kit, Google Cloud credits, an NVIDIA Android TV & K1 tablet, and a Razer Forge TV bundle.

Indie Games Contest coming to Europe

We’re continuing our effort to help indie game developers thrive by highlighting innovative and fun games for fans around the world. Today, we are announcing the Indie Games Contest for developers based in European countries (specific list of countries coming soon!). This is a great opportunity for indie games developers to win prizes that will help you showcase your art to industry experts and grow your business and your community of players worldwide. Make sure you don’t miss out on hearing the details by signing up here for updates.

As we shared at the festival, it’s rewarding to see how Google Play has evolved over the years. We’re now reaching over 1 billion users every month and there’s literally something for everyone. From virtual reality to family indie games, developers like you continue to inspire, provoke, and innovate through beautiful, artistic games.

Categories: Programming

Announcing Open Registration and Exhibitors for Google Play Indie Games Festival in San Francisco, Sept. 24

Android Developers Blog - Sat, 10/22/2016 - 08:14

Posted by Jamil Moledina, Google Play, Games Strategic Lead

To celebrate the art of the latest innovative indie games, we’re hosting the first Google Play Indie Games Festival in North America on September 24th in San Francisco. At the festival, Android fans and gamers will have a unique opportunity to play new and unreleased indie games from some of the most innovative developers in the US and Canada, as well as vote for their favorite ones.

Registration is now open and the event is free for everyone to enjoy.

We’re also excited to announce the games selected to exhibit and compete at the event. From over 200 submissions, we carefully picked 30 games that promise the most fun and engaging experiences to attendees. Fans will have a chance to play a variety of indie games not yet available publicly.

Check out the full list of games selected here and below.

A Matter of Murder
Antihero (coming soon)
AR Zombie (coming soon)
Armajet (coming soon)
Armor Blitz (coming soon)
Bit Bit Blocks (coming soon)
1979 Revolution: Black Friday (coming soon) Coffee Pot Terrarium (coming soon) Crayola® Worlds for Tango (coming soon) Dog Sled Saga (coming soon)
Endless Mine

Futurable 1. Summer City (coming soon) Gunhouse (coming soon)
HoloGrid: Monster Battle (coming soon) Hovercraft: Takedown
HOVR (coming soon)
Maruta 279 (coming soon)
Norman's Night In: The Cave (coming soon) Numeris

Orbit - Playing with Gravity

Psychic (coming soon)
Riptide GP: Renegade

Sand Stories (coming soon)
SmashWars VR: Drone Racing

Rainmaker: Ultimate Trading
Zombie Rollerz (coming soon)
Coming soon

Fans will also have the opportunity to vote for their favorite games at the festival, along with an authoritative panel of judges from Google Play and the game industry. They include:

  • Ron Carmel, Co-founder of Indie Fund; co-creator of World of Goo
  • Hyunse Chang, Business Development Manager at Google Play
  • Lina Chen, Co-founder & CEO of Nix Hydra
  • David Edery, CEO of Spry Fox
  • Maria Essig, Partner Manager, Indies at Google Play
  • Noah Falstein, Chief Game Designer at Google
  • Dan Fiden, Chief Strategy Officer of Funplus
  • Emily Greer, CEO of Kongregate
  • Alex Lee, Producer, Program Manager, Daydream & Project Tango at Google
  • Jordan Maron, Gamer and independent YouTuber “CaptainSparklez”

We are also thrilled to announce that veteran game designer and professor Richard Lemarchand will be the emcee for the event. He was lead designer at Crystal Dynamics and Naughty Dog, and is now Associate Chair and Associate Professor at the University of Southern California, School of Cinematic Arts, Interactive Media and Games Division.

The winning developers will receive prizes, such Google Cloud credits, NVIDIA SHIELD Android TVs and K1 tablets, Razer Forge TV bundles, and more, to recognize their efforts.

Join us for an exciting opportunity to connect with fellow game fans, get inspired, and celebrate the art of indie games. Learn more about the event on the event website.

Categories: Programming

Announcing Android add-ons for Docs and Sheets

Android Developers Blog - Sat, 10/22/2016 - 08:12
Posted by By Saurabh Gupta, Product Manager, Google Apps

We know many of you consider your mobile device as your primary tool to consume business information, but what if you could use it to get more work done, from anywhere? We’re excited to introduce Android add-ons for Docs and Sheets, a new way for you to do just that—whether it’s readying a contract you have for e-signature from your phone, or pulling in CRM data on your tablet for some quick analysis while waiting for your morning coffee, Android add-ons can help you accomplish more.

Get more done with your favorite third-party apps, no matter where you are We’ve worked with eight integration partners who have created seamless integrations for Docs and Sheets. Here’s a preview of just a few of them:
  • DocuSign - Trigger or complete a signing process from Docs or Sheets, and save the executed document to Drive. Read more here.
DocuSign lets you easily create signature envelopes right from Google Docs
  • ProsperWorks - Import your CRM data to create and update advanced dashboards, reports and graphs on Sheets, right from your device. Read more here.
  • AppSheet - Create powerful mobile apps directly from your data in Sheets instantly — no coding required. Read more here.
  • Scanbot - Scan your business documents using built-in OCR, and insert their contents into Docs as editable text. Read more here.

You can find these add-ons and many more, including PandaDoc, ZohoCRM, Teacher Aide, EasyBib and Classroom in our Google Play collection as well as directly from the add-on menus in Docs or Sheets.

Try them out today, and see how much more you can do.

Calling all developers: try our developer preview today!

As you can see from above, Android add-ons offer a great opportunity to build innovative integrations and reach Docs and Sheets users around the world. They’re basically Android apps that connect with Google Apps Script projects on the server-side, allowing them to access and manipulate data from Google Docs or Sheets using standard Apps Script techniques. Check out our documentation which includes UI guidelines as well as sample code to get you started. We’ve also made it easy for you to publish your apps with the Apps Script editor.

Android add-ons are available today as a developer preview. We look forward to seeing what you build!

Categories: Programming

Being An Agile Security Officer

Xebia Blog - Fri, 10/21/2016 - 13:31
Whenever I give a presentation, training, or just talk to security teams, it becomes clear that over the years a gap has been created between application security and development. A gap we created consciously and with intent and that became painfully visible with the introduction of Agile and DevOps. Suddenly exhaustive information security policies with

Systems Thinking: Putting Systems Thinking To Work In Process Improvement

Systems thinking helps to make sure process improvement see the big picture.

Systems thinking helps to make sure process improvement see the big picture.

Why isn’t systems thinking one of the first techniques any IT change agent reaches for?  Most change professionals have not been trained in applying systems thinking techniques because it is viewed as an engineering or academic practice. It provides a framework for the introduction of lean techniques, which have become popular to deliver the maximum business value. Lean provides tool and philosophy and systems thinking provides the breadth of scope to apply those tools.  Systems thinking provides process improvement with both a scope by defining what a system is and a business related goal for improvement, to improve the delivery of business value.

Affecting processes, systems and the environmental elements that are outside of the change agent’s control is difficult, requiring the development of influence and political capital outside of their comfort zone. For example, in an organization that is delivering a product that requires a hardware and software combination, a change that shortens the length of time needed to deliver the software may not impact the delivery time of the product if the hardware development does not keep pace. For another example, consider a set of process improvements meant to quicken the pace of requirements definition and evolution that feed into a classic stage gate for approval. The changes can be made moot by department boundaries within IT as easy as by processes and systems outside of IT. A few years ago, I observed a group of business analysts who embraced an iterative process for requirements elicitation, but still had to provide a single complete requirements definition document before the project could progress.  They had not been able to engage the owner of the stage gate process to fashion a scenario in which parts could be passed through the barrier as they were completed. Therefore little of the increased pace was transmitted to the overall process.

Process improvement begins by identifying opportunities. In order to use a systems thinking approach to process improvement we need to ensure that the boundary for process improvement is a whole system, a whole value chain, and provides the means to affect the output of the whole system. This helps ensure that any changes improve the overall performance of IT. One, simple approach I use to identify systems thinking process improvement opportunities begins by assembling a cross-functional team (or teams, for large supply-chain systems) that includes representatives with experience from the whole system – beginning to end.  This is similar to the process described in our discussion of value chain mapping. I facilitate the team through one or two sessions using a combination of affinity diagramming (brainstorming and mute-grouping) and mind mapping in order to identify the variables impacting the system.  Affinity diagramming is a technique of driving out and grouping large amounts of data though the use of seed questions and brainstorming, followed by team grouping exercise done without talking.  Mind mapping is then leveraged to mine the data for non-linear relationships and to prompt for completeness. Combining the two techniques, the cross functional team can take a holistic approach to making change. After we drive out the variables, I have the team work through building a desktop model to identify which variables the team feels will impact the ultimate performance of the system.  For the variables selected, I ask the team to identify trends underway in these variables and any external trends that impact these trends.  This generally requires a bit of research and the collection of performance data for the variables. Experimentation, like building mathematical models and process pilots, is used to determine if the identified variables will have a positive impact on the output of the system being studied.

Systems thinking is a powerful concept. However, the breadth of vision required to address even the small process improvements is intimating to many managers. So, they stay focused on their individual part of the process.  We have been taught that focusing on specific issues will help us improve what we do over time. Unfortunately, focusing on a narrow view of a complex system rarely provides enough information to affect overall customer experience or satisfaction. When improving development and maintenance processes, what really matters is that we deliver what we promised, when we promised and for what we promised. Then be in a position to do that as many times as required.  That last requirement means that our interactions, processes and people must be consumed in a holistic and sustainable manner. Building a backlog of process and human debt by focusing on steps rather than the whole does not deliver sustainable products.

Categories: Process Management

Creating EC2 and Route 53 resources with Terraform

Agile Testing - Grig Gheorghiu - Thu, 10/20/2016 - 22:14
Inspired by the great series of Terraform-related posts published on the Gruntwork blog, I've been experimenting with Terraform the last couple of days. So far, I like it a lot, and I think the point that Yevgeniy Brikman makes in the first post of the series, on why they chose Terraform over other tools (which are the usual suspects Chef, Puppet, Ansible), is a very valid point: Terraform is a declarative and client-only orchestration tool that allows you to manage immutable infrastructure. Read that post for more details about why this is a good thing.

In this short post I'll show how I am using Terraform in its Docker image incarnation to create an AWS ELB and a Route 53 CNAME record pointing to the name of the newly-created ELB.

I created a directory called terraform and created this Dockerfile inside it:

$ cat Dockerfile
FROM hashicorp/terraform:full
COPY data /data/

My Terraform configuration files are under terraform/data locally. I have 2 files, one for variable declarations and one for the actual resource declarations.

Here is the variable declaration file:

$ cat data/vars.tf

variable "access_key" {}
variable "secret_key" {}
variable "region" {
  default = "us-west-2"

variable "exposed_http_port" {
  description = "The HTTP port exposed by the application"
  default = 8888

variable "security_group_id" {
  description = "The ID of the ELB security group"
  default = "sg-SOMEID"

variable "host1_id" {
  description = "EC2 Instance ID for ELB Host #1"
  default = "i-SOMEID1"

variable "host2_id" {
  description = "EC2 Instance ID for ELB Host #2"
  default = "i-SOMEID2"

variable "elb_cname" {
  description = "CNAME for the ELB"

variable "route53_zone_id" {
  description = "Zone ID for the Route 53 zone "
  default = "MY_ZONE_ID"

Note that I am making some assumptions, namely that the ELB will point to 2 EC2 instances. This is because I know beforehand which 2 instances I want to point it to. In my case, those instances are configured as Rancher hosts, and the ELB's purpose is to expose as port 80 to the world an internal Rancher load balancer port (say 8888).

Here is the resource declaration file:

$ cat data/main.tf

# --------------------------------------------------------
# --------------------------------------------------------

provider "aws" {
  access_key = "${var.access_key}"
  secret_key = "${var.secret_key}"
  region = "${var.region}"

# --------------------------------------------------------
# --------------------------------------------------------

resource "aws_elb" "my-elb" {
  name = "MY-ELB"
  availability_zones = ["us-west-2a", "us-west-2b", "us-west-2c"]

  listener {
    instance_port = "${var.exposed_http_port}"
    instance_protocol = "http"
    lb_port = 80
    lb_protocol = "http"

  health_check {
    healthy_threshold = 2
    unhealthy_threshold = 2
    timeout = 3
    target = "TCP:${var.exposed_http_port}"
    interval = 10

  instances = ["${var.host1_id}", "${var.host2_id}"]
  security_groups = ["${var.security_group_id}"]
  cross_zone_load_balancing = true
  idle_timeout = 400
  connection_draining = true
  connection_draining_timeout = 400

  tags {
    Name = "MY-ELB"

# --------------------------------------------------------
# --------------------------------------------------------

resource "aws_route53_record" "my-elb-cname" {
  zone_id = "${var.route53_zone_id}"
  name = "${var.elb_cname}"
  type = "CNAME"
  ttl = "300"
  records = ["${aws_elb.my-elb.dns_name}"]

First I declare a provider of type aws, then I declare 2 resources, one of type aws_elb, and another one of type aws_route53_record. These types are all detailed in the very good Terraform documentation for the AWS provider.

The aws_elb resource defines an ELB named my-elb, which points to the 2 EC2 instances mentioned above. The instances are specified by their variable names from vars.tf, using the syntax ${var.VARIABLE_NAME}, e.g. ${var.host1_id}. For the other properties of the ELB resource, consult the Terraform aws_elb documentation.

The aws_route53_record defined a CNAME record in the given Route 53 zone file (specified via the route53_zone_id variable). An important thing to note here is that the CNAME points to the name of the ELB just created via the aws_elb.my-elb.dns_name variable. This is one of the powerful things you can do in Terraform - reference properties of resources in other resources.

Again, for more details on aws_route53_record, consult the Terraform documentation.

Given these files, I built a local Docker image:

$ docker build -t terraform:local

I can then run the Terraform 'plan' command to see what Terraform intends to do:

$ docker run -t --rm terraform:local plan \
-var "access_key=$TERRAFORM_AWS_ACCESS_KEY" \
-var "secret_key=$TERRAFORM_AWS_SECRET_KEY" \
-var "exposed_http_port=$LB_EXPOSED_HTTP_PORT" \
-var "elb_cname=$ELB_CNAME"

The nice thing about this is that I can run Terraform in exactly the same way via Jenkins. The variables above are defined in Jenkins either as credentials of type 'secret text' (the 2 AWS keys), or as build parameters of type string. In Jenkins, the Docker image name would be specified as an ECR image, something of the type ECR_ID.dkr.ecr.us-west-2.amazonaws.com/terraform.

After making sure that the plan corresponds to what I expected, I ran the Terraform apply command:

$ docker run -t --rm terraform:local apply \
-var "access_key=$TERRAFORM_AWS_ACCESS_KEY" \
-var "secret_key=$TERRAFORM_AWS_SECRET_KEY" \
-var "exposed_http_port=$LB_EXPOSED_HTTP_PORT" \
-var "elb_cname=$ELB_CNAME"

One thing to note is that the AWS credentials I used are for an IAM user that has only the privileges needed to create the resources I need. I tinkered with the IAM policy generator until I got it right. Terraform will emit various AWS errors when it's not able to make certain calls. Those errors help you add the required privileges to the IAM policies. In my case, here are some example of policies.

Allow all ELB operations:

"Version": "2012-10-17",
"Statement": [
"Sid": "Stmt1476919435000",
"Effect": "Allow",
"Action": [ "elasticloadbalancing:*"
"Resource": [
Allow the ec2:DescribeSecurityGroups operation:

"Version": "2012-10-17",
"Statement": [
"Sid": "Stmt1476983196000",
"Effect": "Allow",
"Action": [
"Resource": [
Allow the route53:GetHostedZone and GetChange operations:
"Version": "2012-10-17",
"Statement": [
"Sid": "Stmt1476986919000",
"Effect": "Allow",
"Action": [
"Resource": [

Allow the creation, changing and listing of Route 53 record sets in a given Route 53 zone file:
"Version": "2012-10-17",
"Statement": [
"Sid": "Stmt1476987070000",
"Effect": "Allow",
"Action": [
"Resource": [

Android Developer Stories: drupe and Noom expand globally by localising their apps on Google Play

Android Developers Blog - Thu, 10/20/2016 - 18:26

Posted by Kacey Fahey, Marketing Programs Manager, Google Play

Interested in growing your app on a global scale? See how two app developers localized their apps in unique ways to drive revenue and user engagement.


drupe is a communications app that utilizes the openness of android to build a truly native experience delivering highly contextual recommendations to their users across the world.

Key to achieving international growth, drupe has translated their app in 17 languages, and their store listing page in 28 languages. This led to an increase in conversion and retention rates. Additionally, when entering India, the team noticed several user reviews requesting integration with a specific messaging app widely used in the Indian market. Through a combination of this integration, adding Hindi language translation, and other new features, drupe saw improved performance. In six months, daily active users increased 300%, and actions per average daily user increased 25% in the Indian market.


Noom is a health & fitness app that has achieved an 80% increase in international revenue growth on Android over the past three years by localizing their app with unique cultural behaviors, cuisines, and local-market coaches.

In addition to translating their app and store listing page, Noom conducted extensive analysis to determine the right financial model tailored to each international market. This included evaluation of their competitive landscape and local health and wellness spending behavior, in addition to running pricing experiments to determine the optimal offering between subscriptions, IAPs, or a premium app.

Use the Localization Checklist to learn more about tailoring your app for different markets to drive installs and revenue, and to create a better overall user experience. Also, get the Playbook for Developers app to stay up-to-date on new features and learn best practices that will help you grow a successful business on Google Play.

Read the full articles for drupe and Noom.

Categories: Programming

Future Tidal Wave of Mobile Video

In this article I will examine the growing trends of Internet Mobile video and how consumer behaviour is rapidly adopting to a world of ‘always on content’ and discuss the impact on the underlying infrastructure.
Categories: Architecture

Gone Fishin'

Well, not exactly Fishin', but I'll be on a month long vacation starting today. I won't be posting (much) new content, so we'll all have a break. Disappointing, I know. Please use this time for quiet contemplation and other inappropriate activities. See you on down the road...

Categories: Architecture

Now available: Android 7.1 Developer Preview

Android Developers Blog - Wed, 10/19/2016 - 22:36

Posted by Dave Burke, VP of Engineering

A couple of weeks ago we announced that a developer preview of Android 7.1 Nougat was on the way. You can get started with this new release today by downloading the SDK and tools. To get the 7.1 release on your eligible device, enroll your device in the Android Beta program. If your device is already enrolled, you'll receive the update automatically.

What’s in the Developer Preview?

The Android 7.1 Developer Preview gives you everything you need to test your app on the new platform or extend it with new features like app shortcuts and image keyboard support. It includes an updated SDK and tools, documentation and samples, as well as emulators and device system images for running your apps on supported devices.

We’re continuing the model we used in N and earlier releases, and with Android 7.1 being an incremental release there are a few differences to highlight:

  • Since 7.1 has already launched on Pixel, we’re delivering the initial Developer Preview at beta quality for the Nexus lineup of devices. The goal is to tease out any device-specific issues.
  • We’ve finalized the new APIs as API Level 25
  • We’ve opened up publishing on Google Play for apps targeting the new API level, so you can update your apps soon as you are ready.

After the initial preview release, we plan to deliver an update in November followed by the final public release to the Android Open Source Project (AOSP) in December. Initially available on Nexus 5X, Nexus 6P, and Pixel C devices, we’ll extend the Developer Preview to other devices in November.

Get your apps ready for Android 7.1

To get started, update to Android Studio 2.2.2 and download API Level 25 platform, emulator system images and tools. The final API Level 25 SDK is available for download through the SDK Manager in Android Studio.

Once you’ve installed the API Level 25 SDK, you can update your project’s compileSdkVersion to 25 to build and test against the new APIs. If you’re doing compatibility testing, we recommend updating your app’s targetSdkVersion to 25 to test your app with compatibility behaviors disabled. For details on how to set up your app with the API Level 25 SDK, see Set up the Preview.

If you’re adding app shortcuts or circular launcher icons to your app, you can use Android Studio’s built-in Image Asset Studio to quickly help you create icons of different sizes that meet the material design guidelines.

The Google APIs Emulator System images shipped with the Android API Level 25 SDK include support for round icons and the new Google Pixel Launcher. The Google API system image allows you to test how your app’s circular app icons look in devices that support circular icons. Also, if you are developing live wallpapers, you can also use the the new system images with the Android Emulator to test the enhanced preview metadata in Android 7.1.

To help you add image keyboard support, you can use the Messenger and Google Keyboard apps included in the preview system images for testing as they include support for this new API.

Along with the API Level 25 SDK, we have also updated the Android Support Library to 25.0.0. The new version lets you add image keyboard support with compatibility back to API level 13. It also introduces BottomNavigationView widget, which implements the bottom navigation pattern from the material design guidelines.

For details on API Level 25 check out the API diffs and the updated API reference on the developer preview site.

Image keyboard support on Nexus 6P

You can use the Android Emulator in Android Studio to test your circular app icons & shortcuts in a launcher

App shortcuts on Nexus 6P

You can use the Image Asset tool to quickly create circular icon assets.

Publish your apps to alpha, beta or production channels in Google Play

Since the Android 7.1 APIs are final, you can publish updates compiling with, and optionally targeting, API 25 to Google Play. You can now publish app updates that use API 25 to your alpha, beta, or even production channels in the Google Play Developer Console. In this way, push your app updates to users whose devices are running Android 7.1, such as Pixel and Android Beta devices. How to Get Android 7.1 Developer Preview on Your Eligible Device

If you are already enrolled in the Android Beta program, then your eligible enrolled devices will get the Android 7.1 Developer Preview update right away, no action is needed on your part. If you aren’t yet enrolled in Android Beta, the easiest way to get started is to visit android.com/beta and opt-in your eligible Android phone or tablet -- you’ll soon receive this (and later) preview updates over-the-air. If you have an enrolled device and do not want to receive the update, just visit Android Beta and unenroll the device. You can also download and flash this update manually.

We welcome your feedback in the Developer Preview issue tracker, N Preview Developer community, or Android Beta community as we work towards the consumer release in December!

Categories: Programming

Google Open Source Report Card

Google Code Blog - Wed, 10/19/2016 - 18:55
Originally posted on Google Open Source Blog
Posted by Josh Simmons, Open Source Programs Office

Open source software enables Google to build things quickly and efficiently without reinventing the wheel, allowing us to focus on solving new problems. We stand on the shoulders of giants and we know it. This is why we support open source and make it easy for Googlers to release the projects they’re working on internally as open source.

Today we’re sharing our first Open Source Report Card, highlighting our most popular projects, sharing a few statistics and detailing some of the projects we’ve released in 2016.

We’ve open sourced over 20 million lines of code to date and you can find a listing of some of our best known project releases on our website. Here are some of our most popular projects:
  • Android - a software stack for mobile devices that includes an operating system, middleware and key applications.
  • Chromium - a project encompassing Chromium, the software behind Google Chrome, and Chromium OS, the software behind Google Chrome OS devices.
  • Angular - a web application framework for JavaScript and Dart focused on developer productivity, speed and testability.
  • TensorFlow - a library for numerical computation using data flow graphics with support for scalable machine learning across platforms from data centers to embedded devices.
  • Go - a statically typed and compiled programming language that is expressive, concise, clean and efficient.
  • Kubernetes - a system for automating deployment, operations and scaling of containerized applications.
  • Polymer - a lightweight library built on top of Web Components APIs for building encapsulated re-usable elements in web applications.
  • Protobuf - an extensible, language-neutral and platform-neutral mechanism for serializing structured data.
  • Guava - a set of Java core libraries that includes new collection types (such as multimap and multiset), immutable collections, a graph library, functional types, an in-memory cache, and APIs/utilities for concurrency, I/O, hashing, primitives, reflection, string processing and much more.
  • Yeoman - a robust and opinionated set of scaffolding tools including libraries and a workflow that can help developers quickly build beautiful and compelling web applications.
While it’s difficult to measure the full scope of open source at Google, we can use the subset of projects that are on GitHub to gather some interesting data. Today our GitHub footprint includes over 84 organizations and 3,499 repositories, 773 of which were created this year.

Googlers use countless languages from Assembly to XSLT, but what are their favorites? GitHub flags the most heavily used language in a repository and we can use that to find out. A survey of GitHub repositories shows us these are some of the languages Googlers use most often:
  • JavaScript
  • Java
  • C/C++
  • Go
  • Python
  • TypeScript
  • Dart
  • PHP
  • Objective-C
  • C#
Many things can be gleaned using the open source GitHub dataset on BigQuery, like usage of tabs versus spaces and the most popular Go packages. What about how many times Googlers have committed to open source projects on GitHub? We can search for Google.com email addresses to get a baseline number of Googler commits. Here’s our query:

SELECT count(*) as n
FROM [bigquery-public-data:github_repos.commits]
WHERE committer.date > '2016-01-01 00:00'
AND REGEXP_EXTRACT(author.email, r'.*@(.*)') = 'google.com'

With this, we learn that Googlers have made 142,527 commits to open source projects on GitHub since the start of the year. This dataset goes back to 2011 and we can tweak this query to find out that Googlers have made 719,012 commits since then. Again, this is just a baseline number as it doesn’t count commits made with other email addresses.

Looking back at the projects we’ve open-sourced in 2016 there’s a lot to be excited about. We have released open source software, hardware and datasets. Let’s take a look at some of this year’s releases.

Seesaw is a Linux Virtual Server (LVS) based load balancing platform developed in Go by our Site Reliability Engineers. Seesaw, like many projects, was built to scratch our own itch.

From our blog post announcing its release: “We needed the ability to handle traffic for unicast and anycast VIPs, perform load balancing with NAT and DSR (also known as DR), and perform adequate health checks against the backends. Above all we wanted a platform that allowed for ease of management, including automated deployment of configuration changes.”

Vendor Security Assessment Questionnaire (VSAQ)
We assess the security of hundreds of vendors every year and have developed a process to automate much of the initial information gathering with VSAQ. Many vendors found our questionnaires intuitive and flexible, so we decided to shared them. The VSAQ Framework includes four extensible questionnaire templates covering web applications, privacy programs, infrastructure as well as physical and data center security. You can learn more about it in our announcement blog post.

OpenThread, released by Nest, is a complete implementation of the Thread protocol for connected devices in the home. This is especially important because of the fragmentation we’re seeing in this space. Development of OpenThread is supported by ARM, Microsoft, Qualcomm, Texas Instruments and other major vendors.

Can we use machine learning to create compelling art and music? That’s the question that animates Magenta, a project from the Google Brain team based on TensorFlow. The aim is to advance the state of the art in machine intelligence for music and art generation and build a collaborative community of artists, coders and machine learning researchers. Read the release announcement for more information.

Virtual reality (VR) isn’t nearly as immersive without spatial audio and much of VR development is taking place on proprietary platforms. Omnitone is an open library built by members of the Chrome Team that brings spatial audio to the browser. Omnitone builds on standard Web Audio APIs to deliver an immersive experience and can be used alongside projects like WebVR. Find out more in our blog post announcing the project’s release.

Science Journal
Today’s smartphones are packed with sensors that can tell us interesting things about the world around us. We launched Science Journal to help educators, students and citizen scientists tap into those sensors. You can learn more about the project in our announcement blog post.

Cartographer is a library for real-time simultaneous localization and mapping (SLAM) in 2D and 3D with Robot Operating System (ROS) support. Combining data from a variety of sensors, this library computes positioning and maps surroundings. This is a key element of self-driving cars, UAVs and robotics as well as efforts to map the insides of famous buildings. More information on Cartographer can be found in our blog post announcing its release.

This is just a small sampling of what we’ve released this year. Follow the Google Open Source Blog to stay apprised of Google’s open source software, hardware and data releases.
Categories: Programming

Software Development Linkopedia October 2016

From the Editor of Methods & Tools - Wed, 10/19/2016 - 11:02
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 the life and career of a software developer, technical debt, DevOps, software testing, metrics, microservices, API and mobile testing. Blog: Being A Developer After 40 Blog: Tech Debt Snowball – […]

Neo4j: Detecting rogue spaces in CSV headers with LOAD CSV

Mark Needham - Wed, 10/19/2016 - 06:16

Last week I was helping someone load the data from a CSV file into Neo4j and we were having trouble filtering out rows which contained a null value in one of the columns.

This is what the data looked like:

load csv with headers from "file:///foo.csv" as row
│row                               │
│{key1: a,  key2: (null),  key3: c}│
│{key1: d,  key2: e,  key3: f}     │

We’d like to filter out any rows which have ‘key2’ as null, so let’s tweak our query to do that:

load csv with headers from "file:///foo.csv" as row
WITH row WHERE NOT row.key2 is null
(no rows)

Hmmm that’s odd, it’s got rid of both rows. We’d expect to see the 2nd row since that doesn’t have a null value.

At this point we might suspect that what we’re seeing on the screen isn’t actually what the data looks like. Let’s write the following query to check our header values:

load csv with headers from "file:///foo.csv" as row
UNWIND keys(row) AS key
RETURN key, SIZE(key)
│key  │SIZE(key)│
│key1 │4        │
│ key2│5        │
│ key3│5        │

The second column tells us that there are some extra characters in the columns for ‘key2’ and ‘key3’ or rather ‘ key2’ and ‘ key3’. In this case they are spaces, but it could easily be another character:

load csv with headers from "file:///foo.csv" as row
UNWIND keys(row) AS key
RETURN key, replace(key, " ", "_SPACE_") AS spaces
│key  │spaces     │
│key1 │key1       │
│ key2│_SPACE_key2│
│ key3│_SPACE_key3│

If we clean up our CSV file and try again everything works as expected:

load csv with headers from "file:///foo.csv" as row
UNWIND keys(row) AS key
RETURN key, SIZE(key)
│key │SIZE(key)│
│key1│4        │
│key2│4        │
│key3│4        │
load csv with headers from "file:///foo.csv" as row
WITH row WHERE NOT row.key2 is null
│row                        │
│{key1: d, key2: e, key3: f}│
Categories: Programming

Systems Thinking: Habits Of A Systems Thinker

Sometimes you have to seek a little harder to understand the big picture.

Sometimes you have to seek a little harder to understand the big picture.

We should be guided by theory, not by numbers. – W.E. Deming

Many process improvement programs falter when, despite our best efforts, they don’t improve the overall performance of IT. The impact of fixing individual processes can easily get lost in the weeds; the impact overtaken by the inertia of the overall systems. Systems thinking is a way to view the world, including organizations, from a broad perspective that includes structures, patterns, and events.  Systems thinking is all about the big picture. Grasping the big picture is important when approaching any change program.  It becomes even more critical when the environment you are changing is complex and previous attempts at change have been less than successful. The world that professional developers operate within is complex, even though the goal of satisfying the projects stakeholders, on the surface, seems so simple. Every element of our work is part of a larger system that visibly and invisibly shapes our individual and organizational opportunities and risks.  The combination of complexity and the nagging issues that have dogged software-centric product development and maintenance suggest that real innovation will only come through systems thinking.

The Waters Foundation, a group dedicated to applying systems thinking to education, suggests a set of “Habits of a Systems Thinker.” The habits are:

  • Seeking to understand the big picture
  • Observing how elements within systems change over time, generating patterns and trends
  • Recognizing that a system’s structure generates its behavior
  • Identifying the circular nature of complex cause and effect relationships
  • Changing perspectives to increase understanding
  • Surfacing and tests assumptions
  • Considering an issue fully and resists the urge to come to a quick conclusion
  • Considering how mental models affect current reality and the future
  • Using understanding of system structure to identify possible leverage action
  • Considering both short and long-term consequences of actions
  • Finding where unintended consequences emerge
  • Recognizing the impact of time delays when exploring cause and effect relationships
  • Checking results and changes actions if needed: “successive approximation”

These habits illustrate that to really create change you need to take the overall process into account and test all of our assumptions before you can know that your change is effective.

An example presented at MIT’s System Design and Management (SDM) program on Oct. 22 and 23 exposed the need to address complexity through holistic solutions. A hospital scenario was described in which alarm fatigue has occurred, leading to negative patient outcomes. Alarm fatigue occurs when health professionals are overwhelmed by monitoring medical devices that provide data and alerts.  The devices don’t interoperate, therefore all of the data and alerts just create noise, which can hide real problems.  Any IT manager that has reviewed multiple monthly project status reports and updates can appreciate how a specific problem signal could be missed and what the consequences might be.  Systems thinking applied through the filter of the “Habits of a Systems Thinker” is tailor-made to help us conceptualize, understand and then address complex problems; to find solutions for problems that seem elusive or that reoccur in an organization.

Categories: Process Management

[New eBook] Download The No-Nonsense Guide to Native Ads

Google Code Blog - Mon, 10/17/2016 - 18:10

Posted by Vishal Kumar, Senior Product Manager, AdMob

Originally posted to the Inside AdMob blog

Recently we launched a new eBook called "The No-Nonsense Guide to Native Ads", the latest in our No-Nonsense series. This guide is designed to provide a comprehensive overview of native ads and share practical tips and best practices for implementing native ads in your app.

Over the last several years, app users have raised their expectations for a high quality app UX. To meet these expectations, ad formats have evolved accordingly. The most fitting new format that meets these higher expectations is native ads – ads that match the look and feel of the surrounding app content. And as spending on native ads is expected to grow to $21 billion in 2018, this presents a huge opportunity for publishers to enhance their user experience and tap into new revenues.

In the eBook, you’ll learn:

  • Guiding design principles that will help you better implement native ads 
  • Practical tips and best practices for implementing native ads with lots of examples 
  • Tips on how to set up a proper A/B test to begin testing native ads 
  • How AdMob can help you implement native ads

Download your copy here:

Categories: Programming

Datanet: a New CRDT Database that Let's You Do Bad Bad Things to Distributed Data


We've had databases targeting consistency. These are your typical RDBMSs. We've had databases targeting availability. These are your typical NoSQL databases.

If you're using your CAP decoder ring you know what's next...what databases do we have that target making concurrency a first class feature? That promise to thrive and continue to function when network partitions occur?

No many, but we have a brand new concurrency oriented database: Datanet - a P2P replication system that utilizes CRDT algorithms to allow multiple concurrent actors to modify data and then automatically & sensibly resolve modification conflicts.

Datanet is the creation of Russell Sullivan. Russell spent over three years hidden away in his mad scientist layer researching, thinking, coding, refining, and testing Datanet. You may remember Russell. He has been involved with several articles on HighScalability and he wrote AlchemyDB, a NoSQL database, which was acquired by Aerospike.

So Russell has a feel for what's next. When he built AlchemyDB he was way ahead of the pack and now he thinks practical, programmer friendly CRDTs are what's next. Why?

Concurrency and data locality. To quote Russell:

Datanet lets you ship data to the spot where the action is happening. When the action happens it is processed locally, your system's reactivity is insanely quick. This is pretty much the opposite of the non-concurrent case where you need to go to a specific machine in the cloud to modify a piece of data regardless of where the action takes place. As your system grows, the concurrent approach is superior.

We have been slowly moving away from transactions towards NoSQL for reasons of scalability, availability, robustness, etc. Datanet continues this evolution by taking the next step and moving towards extreme distribution: supporting tons of concurrent writers.

The shift is to more distribution in computation. We went from one app-server & one DB to app-server-clusters and clustered-DBs, to geographically distributed data-centers, and now we are going much further with Datanet, data is distributed anywhere you need it to a local cache that functions as a database master.

How does Datanet work?

In Datanet, the same piece of data can simultaneously exist as a write-able entity in many many places in the stack. Datanet is a different way of looking at data: Datanet more closely resembles an internet routing protocol than a traditional client-server database ... and this mirrors the current realities that data is much more in flight than it used to be.

What bad bad things can you do to your distributed data? Here's an amazing video of how Datanet recovers quickly, predictably, and automatically from Chaos Monkey level extinction events. It's pretty slick. 


Here's an email interview I did with Russell. He goes into a lot more detail about Datanet and what it's all about. I think you will find it interesting. 

Let's start with your name and a little of your background?
Categories: Architecture

Polymer Summit Livestream 2016

Google Code Blog - Mon, 10/17/2016 - 09:30

Posted by Taylor Savage, Product Manager, Polymer

Welcome to the Polymer Summit livestream 2016. Today, we’ll kick off with a keynote about how the core Polymer team is thinking about the project’s past, present, and future. We’ll follow with a full day of sessions covering every aspect of building great web applications using Polymer, including a unique new Polymer experience, and thoughts from our partners. Tune into the livestream below to follow along. We look forward to engaging in the conversation with you at #PolymerSummit.

Categories: Programming

Fair and Balanced in the Absence of Principles?

Herding Cats - Glen Alleman - Mon, 10/17/2016 - 02:40

We hear fair and balanced is a desirable approach to problems. Turns out this is a false balance when the issue under discussion doesn't address an underlying principle. 

One side can be wrong

It is seductive to state we're exploring new ways to do things ... in the absence of the underlying principles that would guide the explorer to a possible new way to doing something. In the absence of any principles, any conjectures should be rejected. Without this approach, any conjecture, any unsubstantiated opinion, can be treated as equal to principles and evidence-based processes. This is not a good way to improve processes.

Categories: Project Management

SPaMCAST 415 - Risk Tolerance in Agile, Kotter Change Model, Innovation Bandwagon, Requirements Part 3

Software Process and Measurement Cast - Mon, 10/17/2016 - 01:32

The Software Process and Measurement Cast features four columns.  We begin with our essay on recognizing risk and risk tolerance.  Any discussion of risk begins with acknowledging that risk exists and then recognizing specific risks.  Once we know risks exist we need to determine which risks we care about. Risk tolerance affects how everyone in an organization behaves.

Kim Pries the Software Sensei discusses change models, focusing on the Kotter model of change.  Kim discusses how change models can be used for hardware, software, processes and procedures.  

Gene Hughson brings his wonderful Form Follows Function Blog the podcast.  In this installment, Gene and I discuss All Aboard the Innovation Band Wagon. We talked a lot about how to define innovation AND why innovation and change is powerful.

Jon Quigley anchors the cast with the third installment in a three-part arc on requirements in his  “The Alpha-Omega of Product Development” column. This week Jon discusses managing requirements.

Re-Read Saturday News

We continue the read/re-read of The Five Dysfunctions of a Team by Patrick Lencioni (published by Jossey-Bass).  We seem to be moving from cliffhanger to cliffhanger over the past few weeks, and we shall do so again today. Lencioni uses crises to illustrate common problems that make teams into dysfunctional collections of individuals. This week we tackle the sections from Entering the Danger to Rebound.

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


The Software Process and Measurement Cast 416 will feature our interview with Kirk Botula.  Kirk is the CEO of the CMMI Institute.  Kirk and I talked about organizational capability and why capability is crucial for organizational health and agility!

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