Coder to Developer: Table of Contents

Introduction

Chapter 1: Planning Your Project

Nailing Down a Feature Set

The Elevator Pitch
The Mind Map

Handling Requirements

Defining Requirements
Eliciting and Documenting Requirements

Project-Tracking Tools

Painless Software Scheduling
Time and Billing Tools

Choosing a Methodology

The Waterfall Approach
Iterative Approaches
Agile Approaches
Settling on a Methodology

Planning Checklist

Chapter 2: Organizing Your Project

Thinking about Architecture

What Is Software Architecture?
Architecture vs. Design
Architecture in Small Projects
What about UML?

Introducing Patterns

The Gang of Four
Why Patterns?
Patterns at Microsoft

Starting a New Project

Breadth-First Coding
Depth-First Coding
Mixed Models

Scheduling Deliveries

The Beta Testing Approach
The XP Approach
Choosing a Scheduling Approach

Organization Checklist

Chapter 3: Using Source Code Control Effectively

The Three Levels of Source Code Control Enlightenment

Level 1: Opening Your Eyes
Level 2: The SCC Journeyman
Level 3: Experts Only

Source Code Control Alternatives

Choosing Your Source Code Control System

Price
Concurrent Development Style
The Repository
Internet Friendliness
IDE Integration
Advanced Commands
Cross-Platform Support

Best Practices in Source Code Control

What Belongs in the System?
Source Code Control Etiquette
The Proper Use of Labels
Branching Discipline
Miscellaneous Rules

Source Code Control for Download Tracker

Source Code Control Checklist

Chapter 4: Coding Defensively

Assertions and Exceptions

Assertions
Exceptions

Comments or Self-Documenting Code?

Noise Comments
Placeholder Comments
Summary and Intent Comments

Defensive Coding Checklist

Chapter 5: Preventing Bugs with Unit Testing

The Testing Landscape

Types of Testing
Testing for Developers

Unit Testing in Action

Unit Testing Tools for .NET
Using NUnit for Unit Testing

Test-Driven Development

TDD in Action
Effects of TDD

Refactoring

Refactoring GetDownload
Refactoring Tools

Unit Testing Checklist

Chapter 6: Pumping Up the IDE

Customizing Visual Studio .NET

Using Profiles
Setting VS .NET Options
Using VS .NET PowerToys

Writing VS .NET Macros

Overview of Macros
The Macro Recorder
The Macro Editor
Making a Macro Permanent
Macros from the Keyboard

Choosing Add-Ins

Some Simple Examples
Navigating and Analyzing Your Code
Switching Editors
The Big Boys

IDE Checklist

Chapter 7: Digging Into Source Code

Spelunking Utilities

Ildasm
Reflector
Experimenting with New Code

Sources of Reusable Source Code

The Framework and Friends
The Microsoft Application Blocks
Logidex .NET Library
Other Sources of Free Code

Evaluating Code: FxCop

Source Code Checklist

Chapter 8: Generating Code

Understanding Code Generation

A Code-Generation Example
Code-Generation Taxonomy
Brainstorming Code-Generation Uses

Code Generation for .NET

Code Generation in Visual Studio .NET
.NET Code-Generation Tools

Code Generation in Download Tracker

Deciding Whether to use Code Generation

Code-Generation Checklist

Chapter 9: Tracking and Squashing Bugs

Risk Management

Risk Assessment
Risk Control
Maintaining the Top Five Risks List
Bug Triage

QA and Testing

Types of Software Testing
QA for the Lone Wolf
Building a Test Network

Bug-Tracking Tools

Choosing a Bug-Tracking Tool
Using a Bug-Tracking Tool

Bug-Squashing Checklist

Chapter 10: Logging Application Activity

Logging Strategies

Logging during Development
Logging after Shipping

Logging Tools

The Trace and Debug Classes
The EventLog Class
The Enterprise Instrumentation Framework
The Logging Application Block
log4net

Diagnostic Tools

Logging Checklist

Chapter 11: Working with Small Teams

Why Work with a Team?

Managing a Team

Choosing a Team Structure
Tracking Progress
The Peter Principle

Tools for Distributed Teams

E-mail
Instant Messages
Online Workspaces
Wikis
Microsoft SharePoint
Groove
Programmer's Tools

Teams Checklist

Chapter 12: Creating Documentation

Writing End-User Help Files

Understanding User Needs
Choosing Help Topics
Organizing Information
Testing and Feedback
Tools for End-User Help

Creating Developer Help Files

Writing Manuals

Writing Team Documentation

Development Log
Postmortem

Documentation Checklist

Chapter 13: Mastering the Build Process

Developing a Build Process

The Big Picture
Tasks for Daily Builds

Tools for Daily Builds

Daily Build
FinalBuilder
Hippo.NET
NAnt
Visual Build Professional

Continuous Integration

Problems and Solutions

Automating Intractable Tools
Handling Developer Idiosyncrasies
Fixing Broken Builds
Managing Software Versions

Build Process Checklist

Chapter 14: Protecting Your Intellectual Property

Writing Software Contracts

Staking a Claim
Creating the Contract

Licensing Your Software

Public Domain
Open-Source Licenses
Shared-Source Licenses
Proprietary Licenses

Using Obfuscation to Protect Your Algorithms

Why Obfuscation?
Approaches to Obfuscation
Obfuscation in Action

Property Protection Checklist

Chapter 15: Delivering the Application

Writing Robust Installers

Surveying Installation Creators
Choosing an Installation Creator
General Installation Tips

Building a Setup for Download Tracker

Alternatives to Traditional Installers

XCOPY Deployment
No-Touch Deployment

Delivery Checklist