The Elevator Pitch
The Mind Map
Defining Requirements
Eliciting and Documenting Requirements
Painless Software Scheduling
Time and Billing Tools
The Waterfall Approach
Iterative Approaches
Agile Approaches
Settling on a Methodology
What Is Software Architecture?
Architecture vs. Design
Architecture in Small Projects
What about UML?
The Gang of Four
Why Patterns?
Patterns at Microsoft
Breadth-First Coding
Depth-First Coding
Mixed Models
The Beta Testing Approach
The XP Approach
Choosing a Scheduling Approach
Level 1: Opening Your Eyes
Level 2: The SCC Journeyman
Level 3: Experts Only
Price
Concurrent Development Style
The Repository
Internet Friendliness
IDE Integration
Advanced Commands
Cross-Platform Support
What Belongs in the System?
Source Code Control Etiquette
The Proper Use of Labels
Branching Discipline
Miscellaneous Rules
Assertions
Exceptions
Noise Comments
Placeholder Comments
Summary and Intent Comments
Types of Testing
Testing for Developers
Unit Testing Tools for .NET
Using NUnit for Unit Testing
TDD in Action
Effects of TDD
Refactoring GetDownload
Refactoring Tools
Using Profiles
Setting VS .NET Options
Using VS .NET PowerToys
Overview of Macros
The Macro Recorder
The Macro Editor
Making a Macro Permanent
Macros from the Keyboard
Some Simple Examples
Navigating and Analyzing Your Code
Switching Editors
The Big Boys
Ildasm
Reflector
Experimenting with New Code
The Framework and Friends
The Microsoft Application Blocks
Logidex .NET Library
Other Sources of Free Code
A Code-Generation Example
Code-Generation Taxonomy
Brainstorming Code-Generation Uses
Code Generation in Visual Studio .NET
.NET Code-Generation Tools
Risk Assessment
Risk Control
Maintaining the Top Five Risks List
Bug Triage
Types of Software Testing
QA for the Lone Wolf
Building a Test Network
Choosing a Bug-Tracking Tool
Using a Bug-Tracking Tool
Logging during Development
Logging after Shipping
The Trace and Debug Classes
The EventLog Class
The Enterprise Instrumentation Framework
The Logging Application Block
log4net
Choosing a Team Structure
Tracking Progress
The Peter Principle
E-mail
Instant Messages
Online Workspaces
Wikis
Microsoft SharePoint
Groove
Programmer's Tools
Understanding User Needs
Choosing Help Topics
Organizing Information
Testing and Feedback
Tools for End-User Help
Development Log
Postmortem
The Big Picture
Tasks for Daily Builds
Daily Build
FinalBuilder
Hippo.NET
NAnt
Visual Build Professional
Automating Intractable Tools
Handling Developer Idiosyncrasies
Fixing Broken Builds
Managing Software Versions
Staking a Claim
Creating the Contract
Public Domain
Open-Source Licenses
Shared-Source Licenses
Proprietary Licenses
Why Obfuscation?
Approaches to Obfuscation
Obfuscation in Action
Surveying Installation Creators
Choosing an Installation Creator
General Installation Tips
XCOPY Deployment
No-Touch Deployment