You are previewing Software Development: Building Reliable Systems.
O'Reilly logo
Software Development: Building Reliable Systems

Book Description

80% of software projects fail—here's why the other 20% succeed!

Software Development is the most thorough, realistic guide to "what works" in software development—and how to make it happen in your organization. Leading consultant Marc Hamilton tackles all three key components of successful development: people, processes, and technology.

From streamlining infrastructures to retraining programmers, choosing tools to implementing service-level agreements, Hamilton unifies all of today's best practices—in management, architecture, and software engineering. There's never been a more comprehensive blueprint for software success.

  • Discover "The Ten Commandments of Software Development"

  • Build a winning software development team, organize it for success - and retain your best talent

  • Create a software architecture that maps to business goals and serves as a foundation for successful development

  • Define processes that streamline component and Web-based development projects

  • Leverage the advantages of object-oriented techniques throughout the entire lifecycle

  • Make the most of Java, JavaBeans, and Jini technology

  • Learn the best ways to measure software quality and productivity—and improve them

Software Development is ruthlessly realistic and remarkably accessible—for managers and technical professionals alike. Best of all, its techniques can be applied to any project or organization, large or small. Ready to build software that meets all its goals? This book will get you there.

Table of Contents

  1. Copyright
    1. Dedication
  2. Acknowledgments
  3. Figures
  4. Tables
  5. Foreword
  6. Introduction
    1. Who Should Read This Book
    2. How to Read This Book
    3. About the Author
  7. 1. Background
    1. 1. Ten Commandments of Successful Software Development
      1. #1 Thou shalt start development with software requirements
      2. #2 Thou shalt honor thy users and communicate with them often
      3. #3 Thou shalt not allow unwarranted requirements changes
      4. #4 Thou shalt invest up front in a software architecture
      5. #5 Thou shalt not confuse products with standards
      6. #6 Thou shalt recognize and retain your top talent
      7. #7 Thou shalt understand object-oriented technology
      8. #8 Thou shalt design web-centric applications and reusable components
      9. #9 Thou shalt plan for change
      10. #10 Thou shalt implement and always adhere to a production acceptance process
    2. 2. Software Development Has Always Been Difficult
      1. Software's Difficult Past
      2. The Year 2000 and Other Similar Problems
      3. It Is Hard to Structure Development Organizations for Success
      4. It Is Hard to Schedule and Budget Correctly
      5. It Is Hard to Select the Right Language and Development Tools
      6. It Is Hard to Select the Right OS and Hardware Platform
      7. It Is Hard to Accomplish a Production Rollout
    3. 3. Software Development Defined
      1. Software Life Cycle Overview
      2. Programming Paradigms
        1. Procedural Software
        2. Modular Software
        3. Object-Oriented Software
        4. Distributed and Concurrent Software
      3. Development Environments
      4. System Modeling Tools
      5. Software Architectures
    4. 4. Trends in Software Development
      1. The Universal DBMS
      2. Packaged ERP Software and its Customization
      3. Webtop Computing and Platform Independence
      4. Offshore Development
      5. Streamlining IT Infrastructure
  8. 2. People
    1. 5. Building a Winning Software Development Team
      1. The Developer Shortage
      2. Software Development Job Descriptions
        1. Director of Software Development
          1. Nature of Work
          2. Education and Experience Profile
          3. Management, Leadership, and Personal Skills
          4. Technical Skills
        2. Chief Software Architect
          1. Nature of Work
          2. Education and Experience Profile
          3. Management, Leadership, and Personal Skills
          4. Technical Skills
        3. Software Development Manager
          1. Nature of Work
          2. Education and Experience Profile
          3. Management, Leadership, and Personal Skills
          4. Technical Skills
        4. Senior Software Engineer
          1. Nature of Work
          2. Education and Experience Profile
          3. Management, Leadership, and Personal Skills
          4. Technical Skills
        5. Software Engineer III
          1. Nature of Work
          2. Education and Experience Profile
          3. Management, Leadership, and Personal Skills
          4. Technical Skills
        6. Software Engineer II
          1. Nature of Work
          2. Education and Experience Profile
          3. Management, Leadership, and Personal Skills
          4. Technical Skills
        7. Software Engineer I
          1. Nature of Work
          2. Education and Experience Profile
          3. Management, Leadership, and Personal Skills
          4. Technical Skills
        8. Toolsmith
          1. Nature of Work
          2. Education and Experience Profile
          3. Management, Leadership, and Personal Skills
          4. Technical Skills
        9. Webmaster
          1. Nature of Work
          2. Education and Experience Profile
          3. Management, Leadership, and Personal Skills
          4. Technical Skills
        10. Database Administrator
          1. Nature of Work
          2. Education and Experience Profile
          3. Management, Leadership, and Personal Skills
          4. Technical Skills
        11. System Administrator
          1. Nature of Work
          2. Education and Experience Profile
          3. Management, Leadership, and Personal Skills
          4. Technical Skills
      3. Skills Tracking
        1. Sample C++ Programming Self-Evaluation
          1. Rating 0: No Skill
          2. Rating 1: Beginner
          3. Rating 2: Intermediate
          4. Rating 3: Accomplished
          5. Rating 4: Expert
          6. Rating 5: Master
        2. Sample Java Programming Self-Evaluation
          1. Rating 0: No Skill
          2. Rating 1: Beginner
          3. Rating 2: Intermediate
          4. Rating 3: Accomplished
          5. Rating 4: Expert
          6. Rating 5: Master
      4. Behavioral Value Assessment Interview
        1. Value #1: Initiative
        2. Value #2: Dedication
        3. Value #3: Flexibility
        4. Value #4: Respect
      5. Your Software Development Partners
    2. 6. Organizing for Success
      1. The Dimensions of an Organization
      2. The Importance of Organizational Structure
      3. Streamlining Bureaucracy
      4. Sample Organizational Structures
        1. Project Centered Organizations
          1. Department Centered Organizations
          2. Matrix Organizations
          3. Product Line Organizations
        2. Recurring Organizational Themes
          1. Creating a Software Process Team
          2. Balancing Centralized versus Decentralized Organization
          3. Managing Virtual Teams
        3. Thirteen Organizational Structure Mistakes
          1. #1 Combining software development and operations into a single organization.
          2. #2 Organizing software technology specialists by project.
          3. #3 Organizing software technology specialists by application domain (i.e., financial, manufacturing, etc.).
          4. #4 Organizing software developers by delivery platform (i.e., Windows, Unix, and mainframe).
          5. #5 Separating software development and software maintenance groups.
          6. #6 Representing projects in the formal organizational structure versus defining project teams that cut across organizational boundaries.
          7. #7 Organizing software developers into long-term and short-term development groups.
          8. #8 Designing organizations that need "super-developers" to succeed.
          9. #9 Designing organizations that tolerate underachievers.
          10. #10 Designing organizations that reward empire building.
          11. #11 Setting organizational goals that compete against each other for customer satisfaction.
          12. #12 Organizing around individuals versus personality types.
          13. #13 Mandating organizational changes from the top down.
    3. 7. Recruiting The Best Talent
      1. How to Staff for Growth
        1. Internal Referrals
        2. Campus Recruiting
        3. Agencies
        4. Newspapers and Other Media
        5. Job Fairs
        6. Internet
        7. Acquisitions
      2. What to Look for and How to Look for It
        1. Technical Skills
        2. Values
          1. Winning Values
          2. Losing Values
    4. 8. Retaining the Best Talent
      1. Compensation Philosophy
      2. Total Compensation Strategy
        1. Base Pay
        2. Traditional Benefits
        3. Creative Benefits
        4. Short-Term Incentives
        5. Long-Term Incentives
        6. Job Rotations
        7. Mentoring
      3. HR Issues
    5. 9. Successfully Transitioning Developers
      1. Why Transition Developers
      2. Mainframe to Client-Server
      3. Mainframe to Web-Centric
      4. Client-Server to Web-Centric
      5. Procedural to Object-Oriented
      6. Language-Specific Transition Issues
      7. Does Transitioning Work?
      8. Project 1:
      9. Project 2:
      10. Project 3:
  9. 3. Processes
    1. 10. The Software Life Cycle
      1. The Capability Maturity Model for Software
        1. Level One: Initial
        2. Level Two: Repeatable
        3. Level Three: Defined
        4. Level Four: Managed
        5. Level Five: Optimized
      2. Requirements Analysis and Definition
      3. System Architecture and Design
      4. Test Plan Design
      5. Implementation
        1. Attendees
        2. Ground Rules
        3. Requirements Review
        4. Design Review
        5. Code Review
        6. Summary
      6. Validation and Testing
        1. Unit Testing
        2. Subsystem and System Testing
        3. Black-Box and White-Box Testing
        4. Alpha and Beta Testing
        5. Stress Testing
        6. Production Acceptance
    2. 11. Rapid Application Development
      1. Why Another Methodology?
      2. Strategic Planning
      3. Product Definition
      4. Product Design
      5. Product Development
      6. Product Delivery
    3. 12. Software Productivity, Metrics, and Quality
      1. Code Metrics
        1. McCabe Metrics
          1. Cyclomatic Complexity
          2. Essential Complexity
          3. Module Design Complexity
          4. Design Complexity
          5. Number of Lines
          6. Normalized Complexity
          7. Global Data Complexity
          8. Pathological Complexity
      2. The Impact of Workspace on Productivity
      3. Make versus Buy
      4. The Value of Domain Knowledge
      5. The Importance of Standards
        1. Enterprise-Wide Architecture Standards
        2. Coding Standards
        3. Help Standards
    4. 13. Web-Centric Production Acceptance
      1. The WCPA Chronicle
      2. The WCPA Questionnaire
      3. Personalized Communications
      4. Internal Support Agreements (ISAs)
      5. Roles and Responsibilities
        1. Internet Engineering
        2. Security Engineering
        3. Network Engineering
        4. WebTone Engineering
        5. Technical Support
        6. Hardware Support
        7. Applications Support
      6. The WCPA Process
      7. What IT Should/Should Not Support
  10. 4. Technology
    1. 14. Programming Language Features
      1. C
      2. C++
      3. FORTRAN
      4. Ada
      5. BASIC
      6. Java
      7. COBOL
      8. LISP
      9. Scripting Languages (Perl, awk, Tcl, ksh)
    2. 15. Software Development Tools
      1. Interactive Development Environments
        1. BeanMachine
        2. Builder Xcessory Pro
        3. CodeWarrior Professional
        4. Java Workshop
        5. JBuilder
        6. SuperCede for Java
        7. UIM/X
        8. Visual Cafe for Java
        9. VisualAge
        10. Visual J++
      2. GUI Development Tools and Libraries
        1. Chart.J
        2. Jviews
        3. JWave
      3. Database Tools
        1. Blend.J
        2. CocoBase
        3. Developer/2000
        4. GemStone/J
        5. Jaguar CTS
        6. NetDynamics
      4. Testing Tools
        1. JavaScope
        2. Pegasus
        3. WebLoad
      5. Web Authoring Tools
      6. Code Editors
      7. Compilers
      8. Debuggers
      9. Code Analysis
      10. Performance Analysis Tools
      11. Component Tools
      12. CASE Tools
      13. Version and Baseline Control
    3. 16. Selecting Your Hardware Environment
      1. Developer Desktops
      2. Development Servers
        1. File Server Benchmarks
        2. Compile Server Benchmarks
        3. Database Server Benchmarks
        4. Web Server Benchmarks
      3. Network Infrastructure
      4. Disk Storage Architecture
      5. Single Function versus General Purpose Servers
      6. Architecture Issues Impacting Software Design
        1. SMP Architectures
        2. MPP
        3. NUMA
        4. Clustering
        5. Highly Available and Fault-Tolerant Systems
        6. Relationship of Hardware to OS and Compiler Design
    4. 17. Component-Based Software Development
      1. The History of Components
      2. Components versus Object-Oriented Technology
      3. Role of Visual Programming in Component Software
      4. Component Development Using JavaBeans
    5. 18. Performance Optimization Techniques
      1. How Much Performance Do You Need?
      2. How to Identify Bottlenecks
        1. Disk Bottlenecks
        2. CPU Bottlenecks
        3. Memory Bottlenecks
        4. Network Bottlenecks
    6. 19. Multithreaded Programming
      1. Multithreading Defined
      2. Synchronization Objects
    7. 20. Developing for the Web
      1. Web Browsers and Servers
      2. Proxy Web Servers
      3. CGI Programming
      4. Java Applets
      5. Enterprise JavaBeans
      6. Other Java Enterprise APIs
        1. Java Servlet API
        2. JavaServer Pages (JSP)
        3. Java Messaging Service (JMS) API
        4. Java Naming and Directory (JNDI) API
    8. 21. Distributed Applications with CORBA, RMI, and DCOM
      1. Distributed Objects Using CORBA
        1. CORBA Services
        2. CORBA Facilities
        3. CORBA Application Objects
      2. A CORBA Client-Server Example
      3. DCOM Objects
      4. Distributed Java Applications with RMI
    9. 22. A Sneak Peak at Jini Technology
      1. Jini Infrastructure
      2. Discover and Join
      3. Lookup
      4. Distributed Programming
        1. Leasing
        2. Distributed Events
        3. Distributed Transactions
      5. Millennium versus Jini
    10. A. Software Development Frequently Asked Questions
      1. General Questions
      2. People Related Questions
      3. Process Related Questions
      4. Technology Related Questions
      5. Software History and Trivia Questions
    11. B. Java Coding Standard Template
      1. Introduction
      2. Source Files
        1. Source File Naming
        2. Source File Organization
      3. Naming Conventions
        1. Package Naming
        2. Class/Interface Naming
        3. Field Naming
        4. Method Naming
        5. Statement Label Naming
      4. White Space Usage
        1. Blank Lines
        2. Blank Spaces
        3. Indentation
        4. Continuation Lines
      5. Comments
      6. Documentation Comments
      7. Block Comments
      8. Single-line Comments
      9. Classes
      10. Class Body Organization
        1. Member Access Levels
        2. Members Comments
        3. Class and Instance Variable Field Declarations
        4. Constructor Declarations
        5. Class and Instance Method Declarations
      11. Interfaces
      12. Interface Body Organization
      13. Statements
        1. Simple Statements
          1. Assignment and Expression Statements
          2. Local Variable Declarations
        2. Compound Statements
          1. if Statement
          2. for Statement
          3. while Statement
          4. do-while Statement
          5. switch Statement
          6. try Statement
          7. synchronized Statement
        3. Labeled Statements
    12. C. Sample Internal Support Agreement (ISA)
      1. Root Authority
      2. Server Availability Hours
      3. Backups
      4. Support Responsibility
      5. Function of Each Server
      6. Special Requests
    13. D. How This Book Was Written
    14. Bibliography
    15. Glossary