Tuesday, January 22, 2019

Code Refactoring


  • System entropy (disorder) / decay can be decreased by frequent code refactoring.
  • Start a Refactoring Backlog of all the things that need clean up. 
  • User retrospectives to discuss refactoring. 

How Scrum Benefits -- Mike Cohn


  • Higher productivity and lower costs
  • Improved employee engagement and job satisfaction
  • Faster time to market
  • Higher quality
  • Improved stakeholder satisfaction
  • What we have been doing no longer works



Monday, January 21, 2019

5 Trademarks of Agile Organizations - McKinsey


  • Old paradigm - Organizations as Machine Model aided by principles of scientific management (Taylor).
  • New paradigm - Organizations as living organisms
Disruptive trends challenging old paradigm
===============================

1. Rapidly changing environment
2. Constant introduction of disruptive technology
3. Accelerating digitization and democratization of information
4. New war for talent (acquire, retain, and nurture best talent).




Jack Reeves on Software Design...

The final goal of any engineering activity is the some type of documentation. When a design effort is complete, the design documentation is turned over to the manufacturing team. This is a completely different group with completely different skills from the design team. If the design documents truly represent a complete design, the manufacturing team can proceed to build the product. In fact, they can proceed to build lots of the product, all without any further intervention of the designers. After reviewing the software development life cycle as I understood it, I concluded that the only software documentation that actually seems to satisfy the criteria of an engineering design is the source code listings -- Jack Reeves



The design of a software project is an abstract concept. It has to do with the overall shape and structure of the program, as well as the detailed shape and structure of each module, class, and method. The design can be represented by many different media, but its final embodiment is source code. In the end, the source code is the design. --  Robert Martin


Intentional Programming

"Intentional Programming is a programming paradigm (Charles Simonyi, Microsoft) that encodes in the software source code the precise intention which the programmers ( or users) have in mind."

A Java program that writes numbers from 1 to 10 looks like this.

for (int i = 1; i <= 10; i++) {
    System.out.println("the number is " + i);
 }

However, this does not "does not capture the intentions of the programmer". A modified code would look like this.

for (int i = 1; i <= 10; i++) {
    System.out.println("Printing the numbers 1 to 10 " + i);
 }

TDD encourages intentional programming. You are able to state your intentions (via TDD) even before you code.



If we already have automation, what's the need for Agents?

“Automation” and “agent” sound similar — but they solve very different classes of problems. Automation = Fixed Instruction → Fixed Outcome ...