Friday, February 11, 2011

10 Rules for Writing and Delivering Quality Software - by Doug Pinkston

10 (12?) Rules for Writing and Delivering Quality Software
Book Proposal
Outline

Chatper 1 - Requirements are Requirements
Why requirements are important
   Aligns customer, budget and builders
   Drives the technical design and architecture
   Drives the look and feel

The golden triangle

Capturing requirements
            Listing Objectives
            Prioritizing Objectives
            Process Flow Diagrams
            Mock-ups
            Business Requirements Docs

 
            The Collaborative Process
                        Customers
                        Web Designers
                        Architects
                        Engineers
Using requirements
            The importance of keeping in sync, keeping in front of the customer and getting unambiguous sign-off    
Mapping BRD to Functional Design Docs
            Discipline around
                        Documentation
                        Scope Creep
           
Working with Stakeholders
                        Internal (Customers and other Groups)
                        External (Customers and Vendors)
                        Mgt
           
Using Integrated PM software
           
Chapter 2 - Would You Bet Your Paycheck on it?  (Test, Test, Test)
The Scientific Method
Using Tools
Requirements are Requirements
Importance of Testing Environments and Realistic Test Data
            Dev
            QA
            SIT
            Prod
Building Test Cases
Iterative Functional Tests
Iterative Regression Tests
Iterative Test Automation
Iterative Load Testing
Ad Hoc Real World Testing
Customer Testing and User Acceptance
Defect Mgt
Breaking the Application
            User Interfaces
                        Intuition and Common Sense
                        Building better idiots
            Unexpected Events
            Multiple Users
            Multiple Locations
Value of Beta Launches


Chapter 3 - Speed Kills
Why is response time important?
What causes latency and how do I fix it
            Database
                        Lack of Capacity
                                    Hardware
                                    Software
                                    Version
                                    Cluster
                       
DB Design
            Too little normalization
            Too much normalization
            Too many joins
            Poor indexing
            Poor use of DB capabilities like SPs, Views, Jobs, Triggers, etc.

SQL
            Poorly constructed
            Never tested and optimized
            Network
                        Lack of Capacity
                                    Bandwith
                                    Network devices
                                    Load Balancers
                        Too many hops
                                    Webservices
                                    SOA gone wild
                                    Overly architected (solving future problems that don’t exist)                  
                        Delivering Static content from appserver layer
                        Too much Javascript (also an app issue)
           
            Webserver
                        Hardware
                        Software
                        Version
                        Load Balancer Optimization
                        Distributing
                        Delivering Static content

            Appserver
                        Hardware
                        Software and Versions
                        Distributing and Clustering
                        Performance Tuning


            Application
                        Database Layer Design and Code
Connection Mgt
                                    SQL
                                    Caching
                                    Using the DB: Stored Procs, Views, Triggers
                        Business Layer Design and Code
                                    Memory Mgt
                                    Calculations
                                    Messaging
                                    Caching
                        UI Layer Design and Code
                                    Network impact of
                                                HTML
                                                Images
                                                JS
                                                Other static resources
                                    Leveraging JS for business logic
                                    Impact of AJAX

Chapter 4 - Its All Data
What is data?
Storing Data
            Memory
                        Immediate
                        Intermediate (caching)
            Disk
            Database
Importance of the Database Design and Implementation
            Normalization
                        Advantages
                        Traps
            Benchmarking Queries 
            Using Database Components
                        Indexes
                        Stored Procedures
                        ETLs
                        Jobs
                        XML

Messaging
            Network Impact
                        Numerous quick messages vs. one big one
            Guaranteed Delivery
            Using queues
            Webservices

Chapter 6 - Design is Not Over Rated
Importance of the design phase
How requirements gathering and architectural design work together
            Listing and rating objectives
            Flexibility vs. Progress
Understanding the budget
            Hardware constraints
            Resource constraints
Using design tools
Using mock-ups and POCs
Documenting design

Chapter 7 - Five Average Programmers != One Great Programmer
The Gap
            The significance of the gap between almost getting it, and getting it

Separating the great from the good and the good from the average
            Finding Great Talent
Overcoming fear
Dealing with the objections that must be overcome when hiring talent
Managing Talent and Rookies
            Meetings
            Design Conflicts
            Schedules
            Documentation
           
Chapter 8 - Deja Vu All Over Again (Build re-usable components and re-use them)Value of reusable components
Buy vs. Build
Build vs. Get for Free
Service Oriented Architecture
Using XML
Messaging Strategies
Configurations in the DB
Utility Classes
Managing Libraries
            Interfaces
            Black box strategy
            Publish libraries
            Enforcing the use of libraries
Deploying libraries
            C#
            Java
            JavaScript

Chapter 9 - Divide and Conquer (Divide up Roles, Responsibilities and Tasks for Faster, more Focused and Accountable Development)Project Roles and Responsibilities
            DBA
            Architect         
            Programming Lead
            Programmer
            Web Designer
            Graphic Artist
            Technical Writer
            Business Analyst
            Project Manager
            Systems Engineer
            Financial Analyst

Dividing up coding tasks around end-to-end functional specs
Dividing up coding tasks around layers (UI, Messaging, Business Logic, DAO, DB)
Template plan (Architect and senior engineer(s) develop a template for each solution end-to-end so other engineers can copy.
Divide around deployable components (.dlls, .wars, .ears)
Object Oriented Concepts
Solving hard tasks first
Code Re-use
Utility classes
Configurable
Configuration Management


Chapter 10 - Nothing is Finished Until its Documented
The Real Value of Documentation
Documentation as an Afterthought
Documentation as a Development Task
Utilizing Technical Writers and Copywriters
Documentation as a Project Deliverable
Iterative Documentation
Example

Chatper xxx. Manage the Details
Overview
Project Management
            Organizing Roles
            Organizing and Tracking Tasks
            Using Tools
Source Control
            Importance
            Enforcement of Rules
            Using Tools

Chapter xxxx. Understand the Web

Why the web?
Deploy one place, access everywhere
Deploy one place, update one place
Leverages current and future reusable components
Leverages access to external web services and resources

Understanding web apps
What is really happening?
Process flow, forms and data
JavaScript
DHTML
CSS
Java vs. .NET
AJAX
Flash



No comments:

Post a Comment