Chapter 1: Introduction to Software as a Service, Agile Development, and Cloud Computing
- 1.0 Concepts and Prerequisites
- 1.1 Introduction
- 1.2 Software Development Processes: Plan and Document
- 1.3 Software Development Processes: The Agile Manifesto
- 1.4 Software Quality Assurance: Testing
- 1.5 Productivity: Conciseness, Synthesis, Reuse, and Tools
- 1.6 SaaS and Service Oriented Architecture
- 1.7 Deploying SaaS: Cloud Computing
- 1.8 Deploying SaaS: Browsers and Mobile
- 1.9 Beautiful vs. Legacy Code
- 1.10 Guided Tour and How To Use This Book
- 1.11 Fallacies and Pitfalls
- 1.12 Concluding Remarks: Software Engineering Is More Than Programming
Chapter 2: How to Learn a New Language
- 2.0 Concepts and Prerequisites
- 2.1 Prelude: Learning to Learn Languages and Frameworks
- 2.2 Pair Programming
- 2.3 Introducing Ruby, an Object-Oriented Language
- 2.4 Ruby Idioms: Poetry Mode, Blocks, Duck Typing
- 2.5 CHIPS: Ruby Intro
- 2.6 Gems and Bundler: Library Management in Ruby
- 2.7 Fallacies and Pitfalls
- 2.8 Concluding Remarks: How (Not) To Learn a Language By Googling
Chapter 3: SaaS Application Architecture: Microservices, APIs, and REST
- 3.0 Concepts and Prerequisites
- 3.1 The Web's Client-Server Architecture
- 3.2 SaaS Communication Uses HTTP Routes
- 3.3 CHIPS: HTTP and URIs
- 3.4 From Web Sites to Microservices: Service-Oriented Architecture
- 3.5 RESTful APIs: Everything is a Resource
- 3.6 RESTful URIs, API Calls, and JSON
- 3.7 CHIPS: Wordguesser
- 3.8 Fallacies and Pitfalls
- 3.9 Concluding Remarks: Continuity From CGI to SOA
Chapter 4: SaaS Framework: Rails as a Model-View-Controller Framework
- 4.0 Concepts and Prerequisites
- 4.1 The Model-View-Controller (MVC) Architecture
- 4.2 Rails Models: Databases and Active Record
- 4.3 CHIPS: ActiveRecord Basics
- 4.4 Routes, Controllers, and Views
- 4.5 Forms
- 4.6 CHIPS: WordGuesser on Rails
- 4.7 Debugging: When Things Go Wrong
- 4.8 CHIPS:Hello Rails
- 4.9 Fallacies and Pitfalls
- 4.10 Concluding Remarks: Rails as a Service Framework
Chapter 5: SaaS Framework: Advanced Programming Abstractions for SaaS
- 5.0 Concepts and Prerequisites
- 5.1 DRYing Out MVC: Partials, Validations and Filters
- 5.2 CHIPS: Rails Intro
- 5.3 Single Sign-On and Third-Party Authentication
- 5.4 Associations and Foreign Keys
- 5.5 Through-Associations
- 5.6 RESTful Routes for Associations
- 5.7 CHIPS: Associations [PLACEHOLDER]
- 5.8 Other Types of Code
- 5.9 Fallacies and Pitfalls
- 5.10 Concluding Remarks: Languages, Productivity, and Beauty
Chapter 6: Mobile and Desktop SaaS Clients: JavaScript Introduction
- 6.0 Concepts and Prerequisites
- 6.1 JavaScript: The Big Picture
- 6.2 Introducing ECMAScript
- 6.3 Classes, Functions and Constructors
- 6.4 The Document Object Model (DOM) and jQuery
- 6.5 The DOM and Accessibility
- 6.6 Events and Callbacks
- 6.7 AJAX: Asynchronous JavaScript And XML
- 6.8 Testing JavaScript and AJAX
- 6.9 CHIPS: AJAX Enhancements to RottenPotatoes [PLACEHOLDER]
- 6.10 Single-Page Apps and JSON APIs
- 6.11 Fallacies and Pitfalls
- 6.12 Concluding Remarks: JavaScript Past, Present and Future
Chapter 7: Requirements: Behavior-Driven Design and User Stories
- 7.0 Concepts and Prerequisites
- 7.1 Behavior-Driven Design and User Stories
- 7.2 SMART User Stories
- 7.3 Lo-Fi User Interface Sketches and Storyboards
- 7.4 Points and Velocity
- 7.5 Agile Cost Estimation
- 7.6 Cucumber: From User Stories to Acceptance Tests
- 7.7 CHIPS: Intro to BDD and Cucumber
- 7.8 Explicit vs. Implicit and Imperative vs. Declarative Scenarios
- 7.9 The Plan-And-Document Perspective on Documentation
- 7.10 Fallacies and Pitfalls
- 7.11 Concluding Remarks: Pros and Cons of BDD
Chapter 8: Software Testing: Test-Driven Development
- 8.0 Concepts and Prerequisites
- 8.1 FIRST, TDD, and Red-Green-Refactor
- 8.2 Anatomy of a Test Case: Arrange, Act, Assert
- 8.3 Isolating Code: Doubles and Seams
- 8.4 Stubbing the Internet
- 8.5 CHIPS: Intro to RSpec on Rails
- 8.6 Fixtures and Factories
- 8.7 Coverage Concepts and Types of Tests
- 8.8 Other Testing Approaches and Terminology
- 8.9 CHIPS: The Acceptance Test/Unit Test Cycle
- 8.10 The Plan-And-Document Perspective on Testing
- 8.11 Fallacies and Pitfalls
- 8.12 Concluding Remarks: TDD vs. Conventional Debugging
Chapter 9: Software Maintenance: Enhancing Legacy Software Using Refactoring and Agile Methods
- 9.0 Concepts and Prerequisites
- 9.1 What Makes Code “Legacy” and How Can Agile Help?
- 9.2 Exploring a Legacy Codebase
- 9.3 Establishing Ground Truth With Characterization Tests
- 9.4 Comments and Commits: Documenting Code
- 9.5 Metrics, Code Smells, and SOFA
- 9.6 Method-Level Refactoring: Replacing Dependencies With Seams
- 9.7 The Plan-And-Document Perspective on Working With Legacy Code
- 9.8 Fallacies and Pitfalls
- 9.9 Concluding Remarks: Continuous Refactoring
Chapter 10: Project Management: Scrum, Teams, and Version Control
- 10.0 Concepts and Prerequisites
- 10.1 It Takes a Team: Two-Pizza and Scrum
- 10.2 Using Branches Effectively
- 10.3 Pull Requests and Code Reviews
- 10.4 Delivering the Backlog Using Continuous Integration
- 10.5 CHIPS: Agile Iterations
- 10.6 Reporting and Fixing Bugs: The Five R's
- 10.7 The Plan-And-Document Perspective on Managing Teams
- 10.8 Fallacies and Pitfalls
- 10.9 Concluding Remarks: From Solo Developer to Teams of Teams
Chapter 11: Design Patterns for SaaS Classes
- 11.0 Concepts and Prerequisites
- 11.1 Patterns, Antipatterns, and SOLID Class Architecture
- 11.2 Just Enough UML
- 11.3 Single Responsibility Principle
- 11.4 Open/Closed Principle
- 11.5 Liskov Substitution Principle
- 11.6 Dependency Injection Principle
- 11.7 Demeter Principle
- 11.8 The Plan-And-Document Perspective on Design Patterns
- 11.9 Fallacies and Pitfalls
- 11.10 Concluding Remarks: Frameworks Capture Design Patterns
Chapter 12: Dev/Ops: Deployment, Performance, Reliability, and Practical Security
- 12.0 Concepts and Prerequisites
- 12.1 From Development to Deployment
- 12.2 Three-Tier Architecture
- 12.3 Responsiveness, Service Level Objectives, and Apdex
- 12.4 Releases and Feature Flags
- 12.5 Monitoring and Finding Bottlenecks
- 12.6 Improving Rendering and Database Performance With Caching
- 12.7 Avoiding Abusive Database Queries
- 12.8 CHIPS: The benefits of caching in SaaS
- 12.9 Security: Defending Customer Data in Your App
- 12.10 The Plan-And-Document Perspective on Operations
- 12.11 Fallacies and Pitfalls
- 12.12 Concluding Remarks: Beyond PaaS Basics