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

Holacracy:Re-read Week 4, Chapter 3. Organizational Structure

Book Cover

Holacracy

Remember to buy a copy of Holacracy published by Henry Holt and Company in 2015. Chapter 3, titled Organizational Structure describes the structural components of a holacracy. Chapter 3 provides the building blocks that allow distributed authority (Chapter 2) to function effectively.

Chapter 3: Organizational Structure

Chapter 2 provided the tools for distributing authority and the need for the organization to be able to quickly and continuously evolve how that authority is distributed. However, distributing authority in a dynamic environment without addressing how an organization is structured will cause chaos. The organization structure needs to be conducive to the processes needed to distribute authority. The classic pyramid structure organization is typically out of date, irrelevant and difficult to change.

Most organizations have three potential organizational structures. The one expressed by the org chart, the informal structure and the structure that best suits the organization‚Äôs purpose. The later is generally aspirational. The gap between what is and what could create friction within the organization that reduces the organization’s ability to achieve its purpose. The governance meetings are designed to help transform the organization from the ‚Äúwhat is‚ÄĚ into the ‚Äúcould be‚ÄĚ structure. In holacracy the formal structure is always evolving based on the tension between what is it and what could/should be.

Roles are the basic building blocks of an organization. This is in comparison to classic organizations in which the job (or block on the org chart) is the basic building block. In a holacracy, authority is distributed to a role, not a person. Complex or large roles can be broken down into sub-roles. In a holacray the roles are grouped and organized based on the purpose rather than the people being grouped and organized. Focusing on the roles leave the people free to self-organize. Needed roles can be played by the individual that has capacity, rather than the having to waiting on a specific person is available.

Robertson suggests that a critical question that should be asked is not who you are accountable to, but rather ‚Äúwhat are people at counting on you for.‚ÄĚ Asking this question forces an examination of whether there is clarity around responsibilities and roles. Differences in expectations generate frustration and friction caused by the need to sort out the expectation. In holacracy the governance process acts as a mechanism to adjudicate role and responsibility differences. One of the critical points in the chapters is that in holacracy, the structure helps to differentiate between the people working in the organization and the functions or will they fulfill.
In holacracy, tasks are assigned to a role, not a person. This distinction separates the person and the role. However, roles and people generally confused. This true in the business and nonbusiness scenarios. When asked, I often respond that I am a consultant rather than the roles I play. Robertson uses examples from nonbusiness scenarios to make the point that people often perform multiple roles. For example, I have several roles including father, grandfather, spouse, writer, consultant and household elf.

A holacray constitution defines a role as consisting of three specific elements:
· Purpose provides the reason a role is needed.
· A domain defines the sphere for which the role has authority.
· Accountabilities are the ongoing activities that the role has the authority and is expected to perform.

The governance process in the constitution provides a process for adjusting all three elements.

Classic organization charts are typically represented as a pyramid. Holacracy is represented as a set of circles. The organization is represented as a super circle, called an anchor circle. Depending on size and complexity, the anchor circle is populated by sub-circles and roles (also represented as circles). Each circle is a holon (defined as something that is simultaneously a whole and a part). In holacracy, each circle is both autonomous and part of the larger organization. As organizations grow, circles breakdown. For example, a design firm my wife owned began as a single group of designers (one circle) and grew into a company which included designers, programming, and administration. Three circles. Further, the designers broke down into two: print and digital designers.

Circles without a mechanism for data to be shared across the boundaries become silos. Holacracy uses three types of links to facilitate the flow of information and purpose across the boundaries of circles.
Lead link. The lead link is appointed by the super circle (the circle the sub-circle is within) to represent the super-circle’s needs and purpose. The lead link brings information to the sub-circle, routing new information to the correct roles. The lead link is not a manager in the classic sense but rather routes information to roles in the circle. The lead link does not have the power to fire, hire or determine compensation, but can remove a role from a person.
Representative link. The representative link is elected by the members of the sub-circle and represents the sub-circle’s issues to super circle.
The lead and representative links provide a bi-directional path to connecting the circles and to provide alignment and feedback.
Crosslinks. This type of link represents a specialized form of link between sub-circles. In the company, I work for an example of a cross-link would be the role of solution engineer that links delivery and sales.

Holocracy identifies several roles that are elected by the people within a circle. These include facilitator, secretary, and representative. The lead link role is assigned. Elected positions generally are held for a year and participate in the meetings that shape the use of holacracy (governance meetings and tactical meetings ‚Äď which are defined in later chapters).

Transformation Notes: Separating roles and people is a huge step for both people and organizations. The process of separating roles and individuals begins with defining roles. The book suggests that all three attributes (purpose, domain, and accountabilities) do not need to be defined all at once, but rather can evolve. This is a judgment call. The more resistance that is expected during a transformation the more definition of the attributes and governance process will be needed to defuse passive aggressive behavior.

Team Coaching Notes: Help teams use words that separate individuals from the role they are playing. A side benefit of separating roles and people is that it becomes easier to discuss how a role was performed when you are not seen to be critiquing a person.

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

Previous Entries in the re-read:

Week 1:  Logistics and Introduction
Week 2: Evolving Organization
Week 3: Distribution Authority

A Call To Action
I need your help. I have observed that most podcasts and speakers at conferences over-represent people from Europe and North America. I would like to work on changing that exposure. I would like to develop a feature featuring alternate software development voices beginning with Africa and Southeast Asia. If this feature works we will extend it to other areas. If you can introduce me to practitioners that would be willing to share their observations (short interviews) I would be appreciative!  Feel free to leave a note or send an email at spamcastinfo@gmail.com


Categories: Process Management

How to Talk About Estimates

Herding Cats - Glen Alleman - Sat, 04/29/2017 - 22:31

What is an estimate?

An estimate as a noun is an approximate calculation or judgment of the value, number, quantity, or extent of something.

An estimate as a verb is to roughly calculate or judge the value, number, quantity, or extent of.

But those estimates, nouns, and verbs themselves's have other attributes. They have precision and accuracy

Screen Shot 2017-04-29 at 3.12.09 PM

We can't talk about estimates or estimate, without also talking about the precision and accuracy of the estimate (the noun) after we have performed the estimate (the verb).

 

The precision and accuracy of the desired estimate and the produced estimate, the noun,  before and after the verb estimate, needs to be determined by those making and those asking for the estimate. 

The best starting point for determining the NEEDED precision and accuracy is to determine the Value at Risk. 

If I'm risking two weeks of work for the Scrum team of 5 people it's a much different need from the risk of a $10B manned spaceflight program being supported to congress for budget authorization. 

This is course is why we develop software for that manned spaceflight program using Scrum, because delivering small pieces of functionality on small grained boundaries greatly reduces the risk of being overbudget and behind schedule, and answers to critical success factor question

How long are we willing to wait before we find out we're late?

Answer 2 weeks. Every two weeks there is a mid-month flash report sent to NASA. Every month there is a Month End reports, both showing cumulative cost to date, cumulative schedule performance, and Physical Percent Complete.

Estimating and the resulting Estimates must be described by their accuracy and precision. If you hear any other description, like estimates can't be precise, or estimates are never accurate, those words are mathematically incorrect.

Point estimates without variance (accuracy and precision) are never right

Don't fall into the trap that estimates are wrong, estimates are not precise, precise estimates are a waste or any other malarkey about estimates that don't include the measures of precision and accuracy. 

Finally, the accuracy and precision themselves have accuracy and precision. This is the error on the error - the confidence in the error - that is needed.

To learn more about estimating on Agile programs read Chapter 5 of the bibliography below. There you'll also find materials on risk management, capabilities-based planning, and other agile processes as they are applied to Software Intensive System of System for mission critical programs where we work.

Screen Shot 2017-04-29 at 3.26.44 PM

Related articles Let's Stop Guessing and Start Estimating Why Guessing is not Estimating and Estimating is not Guessing Estimates IT Risk Management
Categories: Project Management

Leaflet: Mapping Strava runs/polylines on Open Street Map

Mark Needham - Sat, 04/29/2017 - 16:36

I’m a big Strava user and spent a bit of time last weekend playing around with their API to work out how to map all my runs.

2017 04 29 15 56 06

Strava API and polylines

This is a two step process:

  1. Call the /athlete/activities/ endpoint to get a list of all my activities
  2. For each of those activities call /activities/[activityId] endpoint to get more detailed information for each activity

That second API returns a ‘polyline’ property which the documentation describes as follows:

Activity and segment API requests may include summary polylines of their respective routes. The values are string encodings of the latitude and longitude points using the Google encoded polyline algorithm format.

If we navigate to that page we get the following explanation:

Polyline encoding is a lossy compression algorithm that allows you to store a series of coordinates as a single string.

I tried out a couple of my polylines using the interactive polyline encoder utility which worked well once I realised that I needed to escape backslashes (“\”) in the polyline before pasting it into the tool.

Now that I’d figured out how to map one run it was time to automate the process.

Leaflet and OpenStreetMap

I’ve previously had a good experience using Leaflet so I was keen to use that and luckily came across a Stack Overflow answer showing how to do what I wanted.

I created a HTML file and manually pasted in a couple of my runs (not forgetting to escape those backslashes!) to check that they worked:

blog.html


  
    Mapping my runs
  

  
    
    
    
    

    
    var map = L.map('map').setView([55.609818, 13.003286], 13);
    L.tileLayer(
        'http://{s}.tile.openstreetmap.org/{z}/{x}/{y}.png', {
            maxZoom: 18,
        }).addTo(map);

    var encodedRoutes = [
      "{zkrIm`inANPD?BDXGPKLATHNRBRFtAR~AFjAHl@D|ALtATj@HHJBL?`@EZ?NQ\\Y^MZURGJKR]RMXYh@QdAWf@[~@aAFGb@?j@YJKBU@m@FKZ[NSPKTCRJD?`@Wf@Wb@g@HCp@Qh@]z@SRMRE^EHJZnDHbBGPHb@NfBTxBN|DVbCBdA^lBFl@Lz@HbBDl@Lr@Bb@ApCAp@Ez@g@bEMl@g@`B_AvAq@l@    QF]Rs@Nq@CmAVKCK?_@Nw@h@UJIHOZa@xA]~@UfASn@U`@_@~@[d@Sn@s@rAs@dAGN?NVhAB\\Ox@@b@S|A?Tl@jBZpAt@vBJhATfGJn@b@fARp@H^Hx@ARGNSTIFWHe@AGBOTAP@^\\zBMpACjEWlEIrCKl@i@nAk@}@}@yBOWSg@kAgBUk@Mu@[mC?QLIEUAuAS_E?uCKyCA{BH{DDgF`AaEr@uAb@oA~@{AE}AKw@    g@qAU[_@w@[gAYm@]qAEa@FOXg@JGJ@j@o@bAy@NW?Qe@oCCc@SaBEOIIEQGaAe@kC_@{De@cE?KD[H[P]NcAJ_@DGd@Gh@UHI@Ua@}Bg@yBa@uDSo@i@UIICQUkCi@sCKe@]aAa@oBG{@G[CMOIKMQe@IIM@KB]Tg@Nw@^QL]NMPMn@@\\Lb@P~@XT",
      "u}krIq_inA_@y@My@Yu@OqAUsA]mAQc@CS@o@FSHSp@e@n@Wl@]ZCFEBK?OC_@Qw@?m@CSK[]]EMBeAA_@m@qEAg@UoCAaAMs@IkBMoACq@SwAGOYa@IYIyA_@kEMkC]{DEaAScC@yEHkGA_ALsCBiA@mCD{CCuAZcANOH@HDZl@Z`@RFh@\\TDT@ZVJBPMVGLM\\Mz@c@NCPMXERO|@a@^Ut@s@p@KJAJ    Bd@EHEXi@f@a@\\g@b@[HUD_B@uADg@DQLCLD~@l@`@J^TF?JANQ\\UbAyABEZIFG`@o@RAJEl@_@ZENDDIA[Ki@BURQZaARODKVs@LSdAiAz@G`BU^A^GT@PRp@zARXRn@`BlDHt@ZlAFh@^`BX|@HHHEf@i@FAHHp@bBd@v@DRAVMl@i@v@SROXm@tBILOTOLs@NON_@t@KX]h@Un@k@\\c@h@Ud@]ZGNKp@Sj@KJo@    b@W`@UPOX]XWd@UF]b@WPOAIBSf@QVi@j@_@V[b@Uj@YtAEFCCELARBn@`@lBjAzD^vB^hB?LENURkAv@[Ze@Xg@Py@p@QHONMA[HGAWE_@Em@Hg@AMCG@QHq@Cm@M[Jy@?UJIA{@Ae@KI@GFKNIX[QGAcAT[JK?OVMFK@IAIUKAYJI?QKUCGFIZCXDtAHl@@p@LjBCZS^ERAn@Fj@Br@Hn@HzAHh@RfD?j@TnCTlA    NjANb@\\z@TtARr@P`AFnAGfBG`@CFE?"
  ]

    for (let encoded of encodedRoutes) {
      var coordinates = L.Polyline.fromEncoded(encoded).getLatLngs();

      L.polyline(
          coordinates,
          {
              color: 'blue',
              weight: 2,
              opacity: .7,
              lineJoin: 'round'
          }
      ).addTo(map);
    }
    
  

We can spin up a Python web server over that HTML file to see how it renders:

$ python -m http.server
Serving HTTP on 0.0.0.0 port 8000 (http://0.0.0.0:8000/) ...

And below we can see both runs plotted on the map.

2017 04 29 15 53 28 Automating Strava API to Open Street Map

The final step is to automate the whole thing so that I can see all of my runs.

I wrote the following script to call the Strava API and save the polyline for every run to a CSV file:

import requests
import os
import sys
import csv

token = os.environ["TOKEN"]
headers = {'Authorization': "Bearer {0}".format(token)}

with open("runs.csv", "w") as runs_file:
    writer = csv.writer(runs_file, delimiter=",")
    writer.writerow(["id", "polyline"])

    page = 1
    while True:
        r = requests.get("https://www.strava.com/api/v3/athlete/activities?page={0}".format(page), headers = headers)
        response = r.json()

        if len(response) == 0:
            break
        else:
            for activity in response:
                r = requests.get("https://www.strava.com/api/v3/activities/{0}?include_all_efforts=true".format(activity["id"]), headers = headers)
                polyline = r.json()["map"]["polyline"]
                writer.writerow([activity["id"], polyline])
            page += 1

I then wrote a simple script using Flask to parse the CSV files and send a JSON representation of my runs to a slightly modified version of the HTML page that I described above:

from flask import Flask
from flask import render_template
import csv
import json

app = Flask(__name__)

@app.route('/')
def my_runs():
    runs = []
    with open("runs.csv", "r") as runs_file:
        reader = csv.DictReader(runs_file)

        for row in reader:
            runs.append(row["polyline"])

    return render_template("leaflet.html", runs = json.dumps(runs))

if __name__ == "__main__":
    app.run(port = 5001)

I changed the following line in the HTML file:

var encodedRoutes = {{ runs|safe }};

Now we can launch our Flask web server:

$ python app.py 
 * Running on http://127.0.0.1:5001/ (Press CTRL+C to quit)

And if we navigate to http://127.0.0.1:5001/ we can see all my runs that went near Westminster:

2017 04 29 16 32 00

The full code for all the files I’ve described in this post are available on github. If you give it a try you’ll need to provide your Strava Token in the ‘TOKEN’ environment variable before running extract_runs.py.

Hope this was helpful and if you have any questions ask me in the comments.

The post Leaflet: Mapping Strava runs/polylines on Open Street Map appeared first on Mark Needham.

Categories: Programming

Start planning your Google I/O 2017 schedule!

Google Code Blog - Fri, 04/28/2017 - 18:44
Posted by Christopher Katsaros, Product Marketing Manager

Whether you're joining us in person or remotely, we're looking forward to connecting with you at Google I/O, on May 17-19. It's the best way to learn about building apps for the Google Assistant, how to go from Zero to App with Firebase, all of the goodies inside Android O, and much more!

Over 150 Technical Sessions, Livestreamed

The show kicks off at 10AM PDT on Wednesday, May 17 with the Google Keynote, an opportunity to hear about the latest product and platform innovations from Google, helping connect you to billions of users around the world. After that, we'll be diving into all of the ways developers can take advantage of this newness in a Developer Keynote at 1PM PDT. From there, the 14 tracks at Google I/O kickoff, with over 150 technical sessions livestreamed (i.e. all of them!) at google.com/io.

We've just published more talks on the I/O website, so you can start planning your custom schedule ahead of the conference (shhh! we've got a few more sessions up our sleeve, so don't forget to check back directly after the Developer Keynote).

You can also take advantage of Codelabs - self-paced tutorials on a number of technical topics to get you up and running with a Google product or feature. These Codelabs will be available both to those who are joining us in person at Shoreline, and online for those of you tuning in from around the world. More details will be available on the schedule soon.

Joining in person?

We received a lot of great feedback from attendees last year, and have been working hard since then to make sure this is the best Google I/O, yet. To help make it easier to attend your favorite talks and minimize lines, you'll be able to reserve seats across sessions before I/O starts. But don't worry, we're saving a few seats in each session that will be available on a first-come, first-served basis onsite. We've also increased the size of each of the tents this year, giving you more opportunities to see all of your favorite talks in-person.

Finally, we've doubled the number of Office Hours available, since you told us that being able to connect directly with Googlers to get your questions answered was extremely valuable. On top of that, all of the sandbox demo areas will be inside climate-controlled structures, making it easier to avoid the elements (but don't forget to bring your layers ‚Äď Shoreline Amphitheatre is still an outdoor venue, after all).

See you in 3 weeks!

We're looking forward to seeing you in just a few weeks. We've got a few more updates to share before then; be sure to check out the Google I/O website for more details, or follow the conversation using the #io17 hashtag.


Categories: Programming

Stuff The Internet Says On Scalability For April 28th, 2017

Hey, it's HighScalability time:

 

Do you understand the power symbol? I always think of O as a circuit being open, or off, and the | as the circuit being closed, or on. Wrong! Really the symbols are binary, 0 for false, or off, 1 for true, or on. Mind blown.
If you like this sort of Stuff then please support me on Patreon.
  • 220,000-Core: largest Google Compute Engine job; 100 million: Netflix subscribers; 1.3M: Sling TV subscribers; 200: Downloadable Modern Art Books; 25%: Americans Won't Subscribe To Traditional Cable; 84%: image payload savings using smart CDN; 10^5: number of world-wide cloud data centers needed; 63%: more Facebook clicks using personality targeting; 2.5 million: red blood cells created per second; 

  • Quotable Quotes:
    • Silicon Valley~ The only reason Gilfoyle and I stayed up 48 f*cking straight hours was to decrease server load, not keep it the same. 
    • Robert Graham: In other words, if the entire Mirai botnet of 2.5 million IoT devices was furiously mining bitcoin, it's total earnings would be $0.25 (25 cents) per day.
    • @BoingBoing: John Deere just told US Copyright office that only corporations can own property, humans merely license it
    • mattbillenstein: Lin Clark's talk makes this sound like they implemented a scheduler in React -- basically JS is single-threaded, so they're implementing their own primitives and a scheduler for executing those on that main thread.
    • Robert M. Pirsig: When analytic thought, the knife, is applied to experience, something is always killed in the process.
    • @vornietom: I honestly feel bad for the people on the Placebo March who thought they were at the Science March but double blind testing is important
    • MIT: we can capture and monitor human breathing and heart rates by relying on wireless reflections off the human body.
    • Mohamed Zahran~ Surprisingly enough traditional homogenous multi-core are really heterogeneous. Why is that? Every core is running at its own frequency. Many processors are now a traditional core and a GPU. FPGAs are already with us. Automata Processor is a specialized processor that can execute non-deterministic finite automata (regular expressions) orders of magnitude faster than a GPU.  Neuromorphic brain inspired chips. Fancy GPUs. 
    • @craigbuj: amazing how fast China Internet companies can scale: ofo: 10+ million daily rides in China Uber: ~6 million daily rides globally
    • knz: CockroachDB's architecture is an emergent property of its source code. 
    • @Jason: Good news: over 70b spent on digital ads in 2016.  Terrifying news: 89% of growth was Facebook & Google. Via @iab
    • @swardley: I think we need to stop thinking about AMZN as a future $1T biz and more think about it as a future $10T biz, possibly much more.
    • @timoreilly: "Algorithms are opinions embedded in code." @mathbabedotorg #TED2017 
    • Google: I think we [Google Cloud] have a pretty good shot at being No. 1 in five years
    • limitless__: Folks who think programmer skill declines when you're 40+ are 100% wrong. What declines is your willingness to put up with stupidity and what increases is your willingness and ability to tell someone to fly a kite when they tell you to work stupid hours and do stupid things.
    • @nicusX: "Don't worry about X. X is transparently managed for you". Reads: "When things go wrong you'll never be able to fix it" #mechanicalSympathy
    • defined: What's up is the rampant ageism in the industry - the perception that you are washed up as a "dinosaur" developer after a certain age, maybe 40 or so, and belong in management. We "dinosaurs" - we happy few - are living evidence to the contrary.
    • user5994461: AWS Spot Instances are under bid. The highest bidder takes the instances, the price changes all the time. Google Spot Instances (preemptibles) are 80% off and that's it. It's simple.
    • James Hamilton: in 10 years, ML will be more than 1/2 the worlds server side footprint.
    • qnovo: if we examine the average capacity in smartphones over the past 5 years, we see that it has grown at about 8% annually. A battery in a 2017 smartphone contains about 40 – 50% more capacity (mAh) than it did in 2012.
    • StorageMojo: Bottom line: the NVRAM market is heating up. And that’s a very good thing for the IT industry.
    • Crazycontini: We need a lot more help to clean up the world’s crypto mess.
    • Pramati Muthalaxe: Irrespective of what Facebook says, all of them have one objective‚Ää—‚Ääto get more money out of potential advertisers. That requires a constant decay of your reach.
    • danluu: It looks like, for a particular cache size, the randomized algorithms do better when miss rates are relatively high and worse when miss rates are relatively low,
    • There's just too much. To see all Quotable Quotes please click through to the full article.

  • Is Kubernetes the next OpenStack? The Cloudcast #296. No. The core architecture team for Kubernetes ensures there's a consistency accross the project...

Don't miss all that the Internet has to say on Scalability, click below and become eventually consistent with all scalability knowledge (which means this post has many more items to read so please keep on reading)...

Categories: Architecture

Capability Teams are Not a Silver Bullet

 

The terms ‘long-lived team’, ‘stable team’ or to a lesser extent ‘capability’ can evoke an almost magical reaction. The problem with a magical reaction is that it switches off our ability to think about the consequences of the attributes and assumptions that need to be true for these types of the team to function effectively. ¬†When any concept takes on a magical aura, conflict and disaster follow. ¬†Long-lived teams sometimes don‚Äôt always make sense in every situation.

Human Safety or High-Security Scenarios Influenced by Confirmation Bias.  Airline crews are a perfect example.  Rotating crew members helps teams to avoid confirmation bias.  The high productivity and trust of a capability team are replaced by detailed embedded processes and checklists. The cockpit checklist is used to establish a common process, the lack of familiarity makes sure that the pilot and co-pilot do not get overly comfortable in each other’s pattern of behavior and fall prey to confirmation bias.  The checklist is augmented by a strict observation of hierarchy. I recently visited a military base and during my stay, I got to speak with the guards at the gate multiple times (why I had time to talk at the gate is another story entirely). In the airline industry, long-lived teams have been linked to accidents. Gate duty was continually rotated so that no one became overly comfortable and strays from the process.  TSA officers follow a very similar pattern at major airports. In each of these cases, efficiency and interpersonal trust are traded for ensuring the process is followed and that nothing falls through the cracks.  Most software development scenarios favor the most efficient and effective delivery process because human life and security are not at risk when writing and testing the software.

Highly Variable Work. If either the type of work or flow of work is highly variable, a fixed capability team makes little sense.  One of the requirements for a capability team to be effective is a backlog of work to draw from otherwise the team will either sit or be highly inefficient (potentially ineffective also).  I recently spoke with a firm that occasionally required software development.  Rather than forming their own capability team, it made more sense to outsource the work to a firm with a capability team.

Cultures That Believe In Highly Matrixed Approach. Organizations that believe (magical thinking) that organizing hierarchies based on functional roles and then forming teams to tackle specific projects will only have long-lived capability teams by accident.  There are only three ways for capability teams to form and prosper in these environments.  The first is purely by accident, in this situation prospering also has to occur by accident.  Don’t count on this strategy.  The second is for a portion of the organization to seal itself off from the other part of the organization and embrace a new management approach.  This approach is similar to icebergs calving from a glacier; it happens but how long the new entity lives is an open question. This is a useful approach for trying out capability teams. The final and only long-term approach is to change the management culture within the organization; unfortunately, this is the hardest route (risk and reward are often related). In the end, until the management culture is refocused, creating capability teams staffed from matrix managers will generate friction and management frustration when managers try to lean in and task individuals.

Capability teams generally represent the holy grail for effectiveness and efficiency in Agile and Lean organizations. However whether we use the term capability team or long-lived team, no one should fall prey to magical thinking.  Magical thinking can cause mistakes.  Alex Yakima in the Software Process and Measurement Cast 439 strongly advocates that organization experiment with concepts first, review hard data on the impact of a change and them thinks carefully about a change.  This approach is the opposite of magical thinking. While my observation is that capability teams will usually come out on top; usually is not the same thing as always.

 


Categories: Process Management

SafetyNet attestation, a building block for anti-abuse

Android Developers Blog - Thu, 04/27/2017 - 22:00
Posted by Arindam Basu, Borbala Benko, Alan Butler, Edward Cunningham, William Luh

Building innovative security features for Android app developers and their users continues to be a priority. As part of this effort, we provide SafetyNet attestation, an API for developers to remotely evaluate whether they are talking to a genuine Android device.

SafetyNet examines software and hardware information on the device to assess its integrity. The result is a cryptographically signed statement, attesting basic properties of the device ‚ÄĒ such as overall integrity and compatibility with Android (CTS) ‚ÄĒ as well as metadata about your app, such as its package name and signature. The following JSON snippet shows an example of how the API reports this information:

{
  "nonce": "R2Rra24fVm5xa2Mg",
  "timestampMs": 9860437986543,
  "apkPackageName": "com.package.name.of.requesting.app",
  "apkCertificateDigestSha256": ["base64 encoded, SHA-256 hash of the
                                  certificate used to sign requesting app"],
  "apkDigestSha256": "base64 encoded, SHA-256 hash of the app's APK",
  "ctsProfileMatch": true,
  "basicIntegrity": true,
}
The contents of an example attestation response, providing information about the calling app and the integrity and compatibility of the device.

The SafetyNet attestation API can help your server distinguish traffic coming from genuine, compatible Android devices from traffic coming from less-trusted sources, including non-Android devices. This classification helps you better understand the risks associated with each device so that you can fine-tune preventive or mitigative actions in case of abuse or misbehavior.

We encourage developers to use SafetyNet attestations to augment their anti-abuse strategy. Combine SafetyNet attestation with other signals, such as your existing device-side signals and behavioral signals about what the user is trying to do, in order to build robust, multi-tier protection systems.

For further information, check the recently updated documentation and see the SafetyNet API Samples on GitHub.
Categories: Programming

Python: Flask ‚Äď Generating a static HTML page

Mark Needham - Thu, 04/27/2017 - 21:59

Whenever I need to quickly spin up a web application Python’s Flask library is my go to tool but I recently found myself wanting to generate a static HTML to upload to S3 and wondered if I could use it for that as well.

It’s actually not too tricky. If we’re in the scope of the app context then we have access to the template rendering that we’d normally use when serving the response to a web request.

The following code will generate a HTML file based on a template file templates/blog.html:

from flask import render_template
import flask

app = flask.Flask('my app')

if __name__ == "__main__":
    with app.app_context():
        rendered = render_template('blog.html', \
            title = "My Generated Page", \
            people = [{"name": "Mark"}, {"name": "Michael"}])
        print(rendered)

templates/index.html



  
	{{ title }}
  
  
	{{ title }}
  
    {% for person in people %}
  • {{ person.name }}
  • {% endfor %}

If we execute the Python script it will generate the following HTML:

$ python blog.py 


  
	My Generated Page
  
  
	My Generated Page
  
  • Mark
  • Michael


And we can finish off by redirecting that output into a file:

$ python blog.py  > blog.html

We could also write to the file from Python but this seems just as easy!

The post Python: Flask – Generating a static HTML page appeared first on Mark Needham.

Categories: Programming

The Google Play Awards are returning to Google I/O

Android Developers Blog - Thu, 04/27/2017 - 18:33
Posted by Purnima Kochikar, Director, Apps and Games Business Development, Google Play


Drum roll please! The Google Play Awards are back again this year and will take place Thursday, May 18th at 6:30pm (Pacific Time) during Google I/O, our annual developer festival.

The annual ceremony is a great opportunity for the industry to recognize outstanding developers that continue to set the bar for quality apps and games showing a passion for driving innovation and adoption of new platforms and user experiences.

This year we'll be honoring partners across 12 award categories, some familiar and some new. Nominees were selected much like last year by cross-functional teams throughout Google who work hand-in-hand with the relevant categories and product areas. While category specific criteria can be found below, the common requirements across all categories focused on high star rating, technical performance and freshness, requiring a launch or major update since April 2016. The winners of each category will be announced at Google I/O in May.

The full list of categories and nominees are below and can also be found at g.co/play/GPA2017:
Standout Indie

Games from indie developers that focus on artistic design, gameplay mechanics and overall polish. And the nominees are‚Ķ‚Ķ 

 Standout Indie
Standout Startup Apps from new developers that offer a unique experience while achieving strong organic install growth. And the nominees are……  Standout Startup

Best Android Wear Experience New wear 2.0 apps offering great design, user delight and functionality. And the nominees are…  Best Android Wear Experience

Best TV Experience Apps or games leveraging innovative features for the large-screen format while providing an immersive and intuitive experience. And the nominees are…  Best TV Experience

Best VR Experience Highly engaging and immersive experience with optimal use of Daydream UI. And the nominees are…  Best VR Experience

Best AR Experience Apps or games harnessing the creative and imaginative technology of AR. And the nominees are…  Best AR Experience

Best App for Kids Apps or games with family friendly design that encourage creativity, exploration and education. And the nominees are…  Best App for Kids

Best Multiplayer Game

Games built to connect gamers in competitive and engaging multiplayer experiences. And the nominees are…

 Best Multiplayer Game

Best App A true representation of beautiful design, intuitive UX and high user appeal. And the nominees are…  Best App

Best Game Games with strong mechanics, stellar graphics and strong engagement and retention tactics. And the nominees are...  Best Game

Best Accessibility Experience Apps or games enabling device interaction in an innovative way that serves people with disabilities or special needs. And the nominees are…  Best Accessibility Experience

Best Social Impact Apps that creates meaningful social impact for a broad spectrum of people around the world. And the nominees are…  Best Social Impact

Join us live at the ceremony May 18th at 6:30 pm PDT at Google I/O or via the live stream to see who wins.


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

Categories: Programming

Introducing the Google Assistant SDK

Google Code Blog - Thu, 04/27/2017 - 18:01
Posted by Chris Ramsdale, Product Manager

When we first announced the Google Assistant, we talked about helping users get things done no matter what device they're using. We started with Google Allo, Google Home and Pixel phones, and expanded the Assistant ecosystem to include Android Wear and Android phones running Marshmallow and Nougat over the last few months. We also announced that Android Auto and Android TV will get support soon.

Today, we're taking another step towards building out that ecosystem by introducing the developer preview of the Google Assistant SDK. With this SDK you can now start building your own hardware prototypes that include the Google Assistant, like a self-built robot or a voice-enabled smart mirror. This allows you to interact with the Google Assistant from any platform.

The Google Assistant SDK includes a gRPC API, a Python open source client that handles authentication and access to the API, samples and documentation. The SDK allows you to capture a spoken query, for example "what's on my calendar", pass that up to the Google Assistant service and receive an audio response. And while it's ideal for prototyping on Raspberry Pi devices, it also adds support for many other platforms.

To get started, visit the Google Assistant SDK website for developers, download the SDK, and start building. In addition, Wayne Piekarski from our Developer Relations team has a video introducing the Google Assistant SDK, below.


And for some more inspiration, try our samples or check out an example implementation by Deeplocal, an innovation studio out of Pittsburgh that took the Google Assistant SDK for a spin and built a fun mocktails mixer. You can even build one for yourself: go here to learn more and read their documentationon Github. Or check out the video below on how they built their demo from scratch.


This is a developer preview and we have a number of features in development including hotword support, companion app integration and more. If you're interested in building a commercial product with the Google Assistant, we encourage you to reach out and contact us. We've created a new developer community on Google+ at g.co/assistantsdkdev for developers to keep up to date and discuss ideas. There is also a stackoverflow tag [google-assistant-sdk] for questions, and a mailing list to keep up to date on SDK news. We look forward to seeing what you create with the Google Assistant SDK!
Categories: Programming

The Premises of Rational Management

Herding Cats - Glen Alleman - Thu, 04/27/2017 - 14:58

Organizational Effectiveness is a basis of rational management.

The organization is one of mankind's all-time greatest inventions. An organization is intended to operate as one unit, with all its parts in efficient coordination. But all too often it does not. The parts operate as disparate levels of efficiency, or they overlap, or they work against others interests. There is misunderstanding and miscomunictaion. Things get done, progess is made. But not enough of the right things get done or as well as they should. Progress, however it is defined, does not meet expectations.

from The Rational Manager, Charles Kepner and Benjamin Tregoe, 1965

When we hear about dysfunction and things that are the smell of that dysfunction and have not identified the root cause of that smell, we are simply treating the symptom. Whatever suggested solution there is has no hope of ever fixing the problem, it's simply a placebo at best and a diversion a worst.

Picture1

This book in its original form and the updated version in 1997 provides the foundation for decision analysis in the presence of uncertainty. Decision making and the analysis that accompanies it are the basis of success for business and those providing the solutions the enable the success of business.

Any suggestion that decisions can be made in the presence of uncertainty without estimating the outcomes of those decisions on the probability of success of the business as no basis in principle or practice of business management. Such suggestions are logically fallacious.

Related articles Making Conjectures Without Testable Outcomes Essential Reading List for Managing Other People's Money Making Decisions In The Presence of Uncertainty
Categories: Project Management

Visualising and documenting software architecture cheat sheets

Coding the Architecture - Simon Brown - Thu, 04/27/2017 - 11:59

My cheat sheet summarising the C4 model has now been updated, and I've created another to summarise my thoughts on how to document software architecture. Click the images for the full-size (A3) PDF file.

Visualising software architecture Documenting software architecture

I hope you find them useful!

Categories: Architecture

Software Development Conferences Forecast April 2017

From the Editor of Methods & Tools - Thu, 04/27/2017 - 07:47
Here is a list of software development related conferences and events on Agile project management ( Scrum, Lean, Kanban), software testing and software quality, software architecture, programming (Java, .NET, JavaScript, Ruby, Python, PHP), DevOps and databases (NoSQL, MySQL, etc.) that will take place in the coming weeks and that have media partnerships with the Methods […]

New OnDemand Course - 10x Software Development, 2nd Edition

10x Software Development - Steve McConnell - Wed, 04/26/2017 - 11:54

How do you maximize team productivity? Decades of research have found at least a ten-fold‚ÄĒ‚Äú10x‚ÄĚ‚ÄĒdifference in productivity and quality between the best teams and the worst. The studies have collectively involved hundreds of professional programmers across a spectrum of programming activities. Specific differences range from about 5:1 to about 25:1, and in my judgment, that collectively supports the 10x claim. Moreover, the research finding is consistent with my experience, in which I have personally observed 10x differences (or more) between different programmers.

Fully updated from beginning to end, our 10x Software Development, Second Edition online course describes the Eight Key Principles of 10x software development‚ÄĒhow the most effective teams approach their work. The principles are: 

  • Avoid minus-x software development
  • Set direction
  • Attack uncertainty
  • Tailor the solution to the problem
  • Seek ground truth
  • Make decisions with data
  • Minimize unintentional rework
  • Grow capability

You’ll gain a deep understanding of these principles in this course, and you’ll learn specific tactics for turning your team into a 10x team.

New for the second edition are multiple activities to deepen your learning experience, including case studies, exercises, and quizzes; a reassessment and refreshing of every lesson in the course via full in-studio production (no ‚Äúvoice over PowerPoint‚ÄĚ); and the addition of tactic-specific resources to help you take your learning beyond our course. There‚Äôs literally nothing about this course that we haven‚Äôt improved!

Because 10x software development requires all roles to be strong, this course is appropriate for Managers, Technical Leads, Quality Leads, Test Leads, Developers, Testers, and other software project stakeholders. In other words, this is a good course for software development teams as well as individual practitioners.

After you complete this course, you will be able to: 

  • Apply tactics to address the classic mistakes your team is making
  • Identify the development fundamentals you need to grow
  • Make decisions that will stick

After your team completes this course, it will be able to:

  • Confirm that you are all aligned on the project‚Äôs objectives
  • Match your development lifecycle to your work rather than the other way around
  • Apply risk management appropriately
  • Plan the right kind of early defect detection
  • Review and enhance your feedback loops

If you’re not already a member of Construx OnDemand, start a free trial today and take your first steps toward 10x excellence!

For a description of the body of research proving the existence of the 10x phenomenon, see my earlier blog post ‚ÄúOrigins of 10X ‚Äď How Valid is the Underlying Research?‚ÄĚ

Quote of the Day

Herding Cats - Glen Alleman - Wed, 04/26/2017 - 06:18

Reality is that which when you stop believing in it, doesn’t go away - Philip K. Dick

Categories: Project Management

Four Factors to Address When Implementing Capability Teams

14955864_10154768928297276_8000508545464981060_n

There are those who believe that implementing a capability team is as easy as identifying a group of people, putting them together, and then doing a few team building exercises. Instant team! In the most simple terms possible Рthey are wrong.  There are four complicating factors that have to be addressed.

The first is identifying the capabilities required to deliver consistent value.   One approach is to perform a value chain analysis. Value is generated through the transformation of raw materials into a new form, which is represented by a value chain. The value chain concept is generally applied to whole organizations but can be applied to an individual business unit or a specific business function.  Once the path is mapped the roles required to transform the raw material will be identified.

The second factor implied in this factor is a consistent need.  Capability teams, while not permanent (even granite is not permanent) are long-lived teams.  The backlog or flow of work needs to be substantial enough to keep the team busy delivering output that is more valuable than the cost of the team.

Third, once the value flow and the roles have been identified, the people needed to perform those roles need to be reorganized into a capability team. ¬†All members of the team need to ‚Äúreport‚ÄĚ to a single leader or manager. ¬†The capability team is a team member‚Äôs most important business team. ¬†This typically requires breaking up hierarchies based on specialties. ¬†For example, in a recent organization implementing capability teams, the product owner, and BAs resided in the business, programmers, and testers in development (although separate teams) and release management personnel in operations (which view themselves as separate from development). ¬†The capability team required personnel from each of these specialties. ¬†The team when formed reported to a business operations unit. The change required many managers to agree to give up resources and disrupt teams however they recognized that techniques life matrix management would reduce the value delivered to the overall organization, which in the end was more important than internecine squabbles. ¬†¬†

Breaking up the specialty-driven hierarchy is easily the hardest and most continuous of the changes need to adopt capability teams both from middle and senior managers and practitioners.  Middle and senior managers see their power base being eroded. Solving this problem requires strong sponsorship, consistency of purpose and an overriding belief in the purpose of the larger organization. In a recent LeadX podcast, Kevin Kruse interviewed Dan Pontefract (author and Chief Envisioner of TELUS Transformation Office) who suggested the best performers had a role-based mindset.  A role-based mindset allowed people and organizations to pursue their purpose more effectively.  The concept of capability teams and role based mindsets are linked. When you focus on organizing by role artificial hierarchies based on specialties stop making sense because they impede an organization purpose. At a practitioner level, one complaint is that the specialists do not get the intellectual support they would ostensibly get when organized by functional specialties.  Organizations that adopt capability teams often adopt communities of practice or programs like hackathons as a way to ensure intellectual support for specialties.  

A fourth factor that needs to be addressed is backlog management. A capability team requires a backlog to draw work from (otherwise they do not need to be a long-lived team).  Backlog management requires processes for how work gets on the backlog, how that work is prioritized, how that prioritization changes and when an item should be removed.  These are just a sample of the processes needed to keep a backlog groomed.  Backlog management is even more complicated when multiple functional areas are being serviced by the capability team or by more than one capability team. For example, when multiple functional areas are being supported by one or more capability teams, a product owner council is often a required to balance the need to multiples product owners.

Implementing a capability team is not as simple as waving a magic wand.  However, the factors that have to be addressed should be addressed in any type of organization.  Often the impetus to address these factors is the need to become more effective and value driven which leads us back to capability teams. Although a bit circular, the payoff promised from adopting capability teams primes the pump for change and keeps it moving!

 


Categories: Process Management

SE-Radio Episode 289: James Turnbull on Declarative Programming with Terraform

James Turnbull rejoins the show with Robert Blumen for a conversation mostly about Terraform, as well as a bit about Puppet. Terraform is a declarative programming tool for automating infrastructure resource creation; it targets resource providers, such as Amazon AWS, Microsoft Azure, Digital Ocean, and other cloud and SAAS back ends. The discussion explores the […]
Categories: Programming

Sponsored Post: Etleap, Pier 1, Aerospike, Loupe, Clubhouse, Stream, Scalyr, VividCortex, MemSQL, InMemory.Net, Zohocorp

Who's Hiring? 
  • Pier 1 Imports is looking for an amazing Sr. Website Engineer to join our growing team!  Our customer continues to evolve the way she prefers to shop, speak to, and engage with us at Pier 1 Imports.  Driving us to innovate more ways to surprise and delight her expectations as a Premier Home and Decor retailer.  We are looking for a candidate to be another key member of a driven agile team. This person will inform and apply modern technical expertise to website site performance, development and design techniques for Pier.com. To apply please email cmwelsh@pier1.com. More details are available here.

  • Etleap is looking for Senior Data Engineers to build the next-generation ETL solution. Data analytics teams need solid infrastructure and great ETL tools to be successful. It shouldn't take a CS degree to use big data effectively, and abstracting away the difficult parts is our mission. We use Java extensively, and distributed systems experience is a big plus! See full job description and apply here.

  • Advertise your job here! 
Fun and Informative Events
  • DBTA Roundtable OnDemand Webinar: Leveraging Big Data with Hadoop, NoSQL and RDBMS. Watch this recent roundtable discussion hosted by DBTA to learn about key differences between Hadoop, NoSQL and RDBMS. Topics include primary use cases, selection criteria, when a hybrid approach will best fit your needs and best practices for managing, securing and integrating data across platforms. Brian Bulkowski, CTO and Co-founder of Aerospike, presented along with speakers from Cask Data and Splice Machine. View now.

  • Advertise 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.

  • Etleap provides a SaaS ETL tool that makes it easy to create and operate a Redshift data warehouse at a small fraction of the typical time and cost. It combines the ability to do deep transformations on large data sets with self-service usability, and no coding is required. Sign up for a 30-day free trial.

  • 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

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

  • Working on a software product? Clubhouse is a project management tool that helps software teams plan, build, and deploy their products with ease. Try it free today or learn why thousands of teams use Clubhouse as a Trello alternative or JIRA alternative.

  • Build, scale and personalize your news feeds and activity streams with getstream.io. Try the API now in this 5 minute interactive tutorial. Stream is free up to 3 million feed updates so it's easy to get started. Client libraries are available for Node, Ruby, Python, PHP, Go, Java and .NET. Stream is currently also hiring Devops and Python/Go developers in Amsterdam. More than 400 companies rely on Stream for their production feed infrastructure, this includes apps with 30 million users. With your help we'd like to ad a few zeros to that number. Check out the job opening on AngelList.

  • 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.

  • 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: http://www.memsql.com/

  • Advertise your product or service here!

If you are interested in a sponsored post for an event, job, or product, please contact us for more information.

Categories: Architecture

Does the Scrum Master Role Ever Go Away?

Mike Cohn's Blog - Tue, 04/25/2017 - 17:00

Scrum Masters coach, mentor, guide, and enable their teams to develop great products. For a new team in an organization that is also new to Scrum, this can be a challenging and time-consuming job.

At first, a Scrum Master may spend time educating the team about the Scrum framework itself. The Scrum Master may have to convince the team that, yes, something potentially shippable can be developed in less than three months. The Scrum Master may mentor the team on new practices, such as test-driven development or continuous integration. And the Scrum Master of a new team will spend time helping the new product owner learn how to do that job.

It can take a lot of work to do this. But, it does get easier.

The Scrum Master Role Gets Easier Over Time

Over time, the team improves. And the skills team members acquire from their first steps with agile help them learn, evaluate and adopt new practices.

It is perhaps comparable to learning a new language. At first we learn through memorization. Later, when we know enough to begin conversing in the new language, we can also learn through context: One word in a sentence is new to you, but the other words provide enough context that you can discern the meaning of the new word.

After seeing some early benefits of Scrum, teams don’t need as much convincing to try new agile practices. And, over time, the Scrum Master gradually removes organization impediments to agility. Perhaps an early battle was with the facilities group to move people so that the agile team could sit together. But once fought and won, that battle does not need to be fought again.

This argues strongly that the job of the Scrum Master does get easier over time. In general, it will take less time to be a good Scrum Master a year into a team’s agile journey than it did at the start.

Why the Job Gets Easier

The Scrum Master role gets easier in part because team members begin to take on parts of the job.

After a while, team members need less coaching. They learn how to facilitate some of their own meetings. Team members work more closely and directly with the product owner, so the Scrum Master is no longer needed to resolve communication roadblocks and resolve issues. There are fewer organizational impediments to agility. Those that remain can be particularly difficult to resolve, but there are fewer of them.

And so, the Scrum Master job starts to take less time as the team and organization become better at Scrum.

But Does The Role Ever Go Away Entirely?

But does the effort required to be a ScrumMaster ever go all the way to zero?

Not in my experience.

Even the best Scrum team continues to benefit from the coaching, guiding and mentoring provided by a good Scrum Master. With that being said, some high-performing teams might find they do not need a ScrumMaster full time anymore. They might, for example, opt to have a technical team member also function as the Scrum Master.

But my experience is that even the best teams benefit from having a Scrum Master.

What’s Your Experience?

What have you found to be true about the Scrum Master role over time? Do you agree it takes less time as the Scrum Master and team become more experienced? Have you worked on a team that had so fully absorbed the role of Scrum Master themselves that they did not benefit from a designated, even part-time Scrum Master?

Quote of the Month April 2017

From the Editor of Methods & Tools - Tue, 04/25/2017 - 08:49
The ScrumMaster is one of the most undervalued roles in Scrum and Agile. Most teams that are just starting out don‚Äôt see the value of having a full-time ScrumMaster, and they try to combine this position with that of a developer or tester so that the ScrumMaster is ‚Äúworking.‚ÄĚ It‚Äôs one of the most common […]