Site Reliability Engineering: How Google Runs Production Systems


Betsy Beyer - 2016
    So, why does conventional wisdom insist that software engineers focus primarily on the design and development of large-scale computing systems?In this collection of essays and articles, key members of Google's Site Reliability Team explain how and why their commitment to the entire lifecycle has enabled the company to successfully build, deploy, monitor, and maintain some of the largest software systems in the world. You'll learn the principles and practices that enable Google engineers to make systems more scalable, reliable, and efficient--lessons directly applicable to your organization.This book is divided into four sections: Introduction--Learn what site reliability engineering is and why it differs from conventional IT industry practicesPrinciples--Examine the patterns, behaviors, and areas of concern that influence the work of a site reliability engineer (SRE)Practices--Understand the theory and practice of an SRE's day-to-day work: building and operating large distributed computing systemsManagement--Explore Google's best practices for training, communication, and meetings that your organization can use

Coaching Agile Teams: A Companion for ScrumMasters, Agile Coaches, and Project Managers in Transition


Lyssa Adkins - 2010
    More and more frequently, ScrumMasters and project managers are being asked to coach agile teams. But it's a challenging role. It requires new skills--as well as a subtle understanding of when to step in and when to step back. Migrating from "command and control" to agile coaching requires a whole new mind-set. In Coaching Agile Teams, Lyssa Adkins gives agile coaches the insights they need to adopt this new mind-set and to guide teams to extraordinary performance in a re-energized work environment. You'll gain a deep view into the role of the agile coach, discover what works and what doesn't, and learn how to adapt powerful skills from many allied disciplines, including the fields of professional coaching and mentoring. Coverage includes Understanding what it takes to be a great agile coach Mastering all of the agile coach's roles: teacher, mentor, problem solver, conflict navigator, and performance coach Creating an environment where self-organized, high-performance teams can emerge Coaching teams past cooperation and into full collaboration Evolving your leadership style as your team grows and changes Staying actively engaged without dominating your team and stunting its growth Recognizing failure, recovery, and success modes in your coaching Getting the most out of your own personal agile coaching journey Whether you're an agile coach, leader, trainer, mentor, facilitator, ScrumMaster, project manager, product owner, or team member, this book will help you become skilled at helping others become truly great. What could possibly be more rewarding?

Domain-Driven Design: Tackling Complexity in the Heart of Software


Eric Evans - 2003
    "His book is very compatible with XP. It is not about drawing pictures of a domain; it is about how you think of it, the language you use to talk about it, and how you organize your software to reflect your improving understanding of it. Eric thinks that learning about your problem domain is as likely to happen at the end of your project as at the beginning, and so refactoring is a big part of his technique. "The book is a fun read. Eric has lots of interesting stories, and he has a way with words. I see this book as essential reading for software developers--it is a future classic." --Ralph Johnson, author of Design Patterns "If you don't think you are getting value from your investment in object-oriented programming, this book will tell you what you've forgotten to do. "Eric Evans convincingly argues for the importance of domain modeling as the central focus of development and provides a solid framework and set of techniques for accomplishing it. This is timeless wisdom, and will hold up long after the methodologies du jour have gone out of fashion." --Dave Collins, author of Designing Object-Oriented User Interfaces "Eric weaves real-world experience modeling--and building--business applications into a practical, useful book. Written from the perspective of a trusted practitioner, Eric's descriptions of ubiquitous language, the benefits of sharing models with users, object life-cycle management, logical and physical application structuring, and the process and results of deep refactoring are major contributions to our field." --Luke Hohmann, author of Beyond Software Architecture "This book belongs on the shelf of every thoughtful software developer." --Kent Beck "What Eric has managed to capture is a part of the design process that experienced object designers have always used, but that we have been singularly unsuccessful as a group in conveying to the rest of the industry. We've given away bits and pieces of this knowledge...but we've never organized and systematized the principles of building domain logic. This book is important." --Kyle Brown, author of Enterprise Java(TM) Programming with IBM(R) WebSphere(R) The software development community widely acknowledges that domain modeling is central to software design. Through domain models, software developers are able to express rich functionality and translate it into a software implementation that truly serves the needs of its users. But despite its obvious importance, there are few practical resources that explain how to incorporate effective domain modeling into the software development process. Domain-Driven Design fills that need. This is not a book about specific technologies. It offers readers a systematic approach to domain-driven design, presenting an extensive set of design best practices, experience-based techniques, and fundamental principles that facilitate the development of software projects facing complex domains. Intertwining design and development practice, this book incorporates numerous examples based on actual projects to illustrate the application of domain-driven design to real-world software development. Readers learn how to use a domain model to make a complex development effort more focused and dynamic. A core of best practices and standard patterns provides a common language for the development team. A shift in emphasis--refactoring not just the code but the model underlying the code--in combination with the frequent iterations of Agile development leads to deeper insight into domains and enhanced communication between domain expert and programmer. Domain-Driven Design then builds on this foundation, and addresses modeling and design for complex systems and larger organizations.Specific topics covered include:Getting all team members to speak the same language Connecting model and implementation more deeply Sharpening key distinctions in a model Managing the lifecycle of a domain object Writing domain code that is safe to combine in elaborate ways Making complex code obvious and predictable Formulating a domain vision statement Distilling the core of a complex domain Digging out implicit concepts needed in the model Applying analysis patterns Relating design patterns to the model Maintaining model integrity in a large system Dealing with coexisting models on the same project Organizing systems with large-scale structures Recognizing and responding to modeling breakthroughs With this book in hand, object-oriented developers, system analysts, and designers will have the guidance they need to organize and focus their work, create rich and useful domain models, and leverage those models into quality, long-lasting software implementations.

Sprint: How to Solve Big Problems and Test New Ideas in Just Five Days


Jake Knapp - 2016
    And now there’s a sure-fire way to solve their problems and test solutions: the sprint.While working at Google, designer Jake Knapp created a unique problem-solving method that he coined a “design sprint”—a five-day process to help companies answer crucial questions. His ‘sprints’ were used on everything from Google Search to Chrome to Google X. When he moved to Google Ventures, he joined Braden Kowitz and John Zeratsky, both designers and partners there who worked on products like YouTube and Gmail. Together Knapp, Zeratsky, and Kowitz have run over 100 sprints with their portfolio companies. They’ve seen firsthand how sprints can overcome challenges in all kinds of companies: healthcare, fitness, finance, retailers, and more.A practical guide to answering business questions, Sprint is a book for groups of any size, from small startups to Fortune 100s, from teachers to non-profits. It’s for anyone with a big opportunity, problem, or idea who needs to get answers today.

The Pragmatic Programmer: From Journeyman to Master


Andy Hunt - 1999
    It covers topics ranging from personal responsibility and career development to architectural techniques for keeping your code flexible and easy to adapt and reuse. Read this book, and you'll learn how toFight software rot; Avoid the trap of duplicating knowledge; Write flexible, dynamic, and adaptable code; Avoid programming by coincidence; Bullet-proof your code with contracts, assertions, and exceptions; Capture real requirements; Test ruthlessly and effectively; Delight your users; Build teams of pragmatic programmers; and Make your developments more precise with automation. Written as a series of self-contained sections and filled with entertaining anecdotes, thoughtful examples, and interesting analogies, The Pragmatic Programmer illustrates the best practices and major pitfalls of many different aspects of software development. Whether you're a new coder, an experienced programmer, or a manager responsible for software projects, use these lessons daily, and you'll quickly see improvements in personal productivity, accuracy, and job satisfaction. You'll learn skills and develop habits and attitudes that form the foundation for long-term success in your career. You'll become a Pragmatic Programmer.

Eloquent JavaScript: A Modern Introduction to Programming


Marijn Haverbeke - 2010
    I loved the tutorial-style game-like program development. This book rekindled my earliest joys of programming. Plus, JavaScript!" —Brendan Eich, creator of JavaScriptJavaScript is the language of the Web, and it's at the heart of every modern website from the lowliest personal blog to the mighty Google Apps. Though it's simple for beginners to pick up and play with, JavaScript is not a toy—it's a flexible and complex language, capable of much more than the showy tricks most programmers use it for.Eloquent JavaScript goes beyond the cut-and-paste scripts of the recipe books and teaches you to write code that's elegant and effective. You'll start with the basics of programming, and learn to use variables, control structures, functions, and data structures. Then you'll dive into the real JavaScript artistry: higher-order functions, closures, and object-oriented programming.Along the way you'll learn to:Master basic programming techniques and best practices Harness the power of functional and object-oriented programming Use regular expressions to quickly parse and manipulate strings Gracefully deal with errors and browser incompatibilities Handle browser events and alter the DOM structure Most importantly, Eloquent JavaScript will teach you to express yourself in code with precision and beauty. After all, great programming is an art, not a science—so why settle for a killer app when you can create a masterpiece?

Running Lean: Iterate from Plan A to a Plan That Works


Ash Maurya - 2012
    We’re building more products than ever before, but most of them fail—not because we can’t complete what we set out to build, but because we waste time, money, and effort building the wrong product.What we need is a systematic process for quickly vetting product ideas and raising our odds of success. That’s the promise of Running Lean.In this inspiring book, Ash Maurya takes you through an exacting strategy for achieving a "product/market fit" for your fledgling venture, based on his own experience in building a wide array of products from high-tech to no-tech. Throughout, he builds on the ideas and concepts of several innovative methodologies, including the Lean Startup, Customer Development, and bootstrapping.Running Lean is an ideal tool for business managers, CEOs, small business owners, developers and programmers, and anyone who’s interested in starting a business project.Find a problem worth solving, then define a solutionEngage your customers throughout the development cycleContinually test your product with smaller, faster iterationsBuild a feature, measure customer response, and verify/refute the ideaKnow when to "pivot" by changing your plan’s courseMaximize your efforts for speed, learning, and focusLearn the ideal time to raise your "big round" of fundingGet on track with The Lean Series Presented by Eric Ries—bestselling author of The Lean Startup: How Today’s Entrepreneurs Use Continuous Innovation to Create Radically Successful Businesses—The Lean Series gives you solid footing in a proven methodology that will help your business succeed.

Personal Kanban: Mapping Work | Navigating Life


Jim Benson - 2011
    People need to be effective.Productivity books focus on doing more, Jim and Tonianne want you to focus on doing better. Personal Kanban is about choosing the right work at the right time. Recognizing why we do the things we do. Understanding the impact of our actions. Creating value - not just product. For ourselves, our families, our friends, our co-workers. For our legacy.Personal Kanban takes the same Lean principles from manufacturing that led the Japanese auto industry to become a global leader in quality, and applies them to individual and team work. Personal Kanban asks only that we visualize our work and limit our work-in-progress. Visualizing work allows us to transform our conceptual and threatening workload into an actionable, context-sensitive flow. Limiting our work-in-progress helps us complete what we start and understand the value of our choices. Combined, these two simple acts encourage us to improve the way we work and the way we make choices to balance our personal, professional, and social lives.Neither a prescription nor a plan, Personal Kanban provides a light, actionable, achievable framework for understanding our work and its context. This book describes why students, parents, business leaders, major corporations, and world governments all see immediate results with Personal Kanban.

Team Topologies: Organizing Business and Technology Teams for Fast Flow


Matthew Skelton - 2019
    But how do you build the best team organization for your specific goals, culture, and needs? Team Topologies is a practical, step-by-step, adaptive model for organizational design and team interaction based on four fundamental team types and three team interaction patterns. It is a model that treats teams as the fundamental means of delivery, where team structures and communication pathways are able to evolve with technological and organizational maturity.In Team Topologies, IT consultants Matthew Skelton and Manuel Pais share secrets of successful team patterns and interactions to help readers choose and evolve the right team patterns for their organization, making sure to keep the software healthy and optimize value streams.Team Topologies is a major step forward in organizational design for software, presenting a well-defined way for teams to interact and interrelate that helps make the resulting software architecture clearer and more sustainable, turning inter-team problems into valuable signals for the self-steering organization.

Making Things Happen: Mastering Project Management


Scott Berkun - 2001
    Each essay distills complex concepts and challenges into practical nuggets of useful advice, and the new edition now adds more value for leaders and managers of projects everywhere. Based on his nine years of experience as a program manager for Internet Explorer, and lead program manager for Windows and MSN, Berkun explains to technical and non-technical readers alike what it takes to get through a large software or web development project. Making Things Happen doesn't cite specific methods, but focuses on philosophy and strategy. Unlike other project management books, Berkun offers personal essays in a comfortable style and easy tone that emulate the relationship of a wise project manager who gives good, entertaining and passionate advice to those who ask. Topics in this new edition include:How to make things happenMaking good decisionsSpecifications and requirementsIdeas and what to do with themHow not to annoy peopleLeadership and trustThe truth about making datesWhat to do when things go wrongComplete with a new forward from the author and a discussion guide for forming reading groups/teams, Making Things Happen offers in-depth exercises to help you apply lessons from the book to your job. It is inspiring, funny, honest, and compelling, and definitely the one book that you and your team need to have within arm's reach throughout the life of your project. Coming from the rare perspective of someone who fought difficult battles on Microsoft's biggest projects and taught project design and management for MSTE, Microsoft's internal best practices group, this is valuable advice indeed. It will serve you well with your current work, and on future projects to come.

Cracking the PM Interview: How to Land a Product Manager Job in Technology


Gayle Laakmann McDowell - 2013
    Cracking the PM Interview is a comprehensive book about landing a product management role in a startup or bigger tech company. Learn how the ambiguously-named "PM" (product manager / program manager) role varies across companies, what experience you need, how to make your existing experience translate, what a great PM resume and cover letter look like, and finally, how to master the interview: estimation questions, behavioral questions, case questions, product questions, technical questions, and the super important "pitch."

Working Effectively with Legacy Code


Michael C. Feathers - 2004
    This book draws on material Michael created for his renowned Object Mentor seminars, techniques Michael has used in mentoring to help hundreds of developers, technical managers, and testers bring their legacy systems under control. The topics covered include: Understanding the mechanics of software change, adding features, fixing bugs, improving design, optimizing performance Getting legacy code into a test harness Writing tests that protect you against introducing new problems Techniques that can be used with any language or platform, with examples in Java, C++, C, and C# Accurately identifying where code changes need to be made Coping with legacy systems that aren't object-oriented Handling applications that don't seem to have any structureThis book also includes a catalog of twenty-four dependency-breaking techniques that help you work with program elements in isolation and make safer changes.

Lean UX: Applying Lean Principles to Improve User Experience


Jeff Gothelf - 2012
    In this insightful book, leading advocate Jeff Gothelf teaches you valuable Lean UX principles, tactics, and techniques from the ground up—how to rapidly experiment with design ideas, validate them with real users, and continually adjust your design based on what you learn.Inspired by Lean and Agile development theories, Lean UX lets you focus on the actual experience being designed, rather than deliverables. This book shows you how to collaborate closely with other members of the product team, and gather feedback early and often. You’ll learn how to drive the design in short, iterative cycles to assess what works best for the business and the user. Lean UX shows you how to make this change—for the better.Frame a vision of the problem you’re solving and focus your team on the right outcomesBring the designers’ toolkit to the rest of your product teamShare your insights with your team much earlier in the processCreate Minimum Viable Products to determine which ideas are validIncorporate the voice of the customer throughout the project cycleMake your team more productive: combine Lean UX with Agile’s Scrum frameworkUnderstand the organizational shifts necessary to integrate Lean UXLean UX received the 2013 Jolt Award from Dr. Dobb's Journal as the best book of the year. The publication's panel of judges chose five notable books, published during a 12-month period ending June 30, that every serious programmer should read.

Designing Data-Intensive Applications


Martin Kleppmann - 2015
    Difficult issues need to be figured out, such as scalability, consistency, reliability, efficiency, and maintainability. In addition, we have an overwhelming variety of tools, including relational databases, NoSQL datastores, stream or batch processors, and message brokers. What are the right choices for your application? How do you make sense of all these buzzwords?In this practical and comprehensive guide, author Martin Kleppmann helps you navigate this diverse landscape by examining the pros and cons of various technologies for processing and storing data. Software keeps changing, but the fundamental principles remain the same. With this book, software engineers and architects will learn how to apply those ideas in practice, and how to make full use of data in modern applications. Peer under the hood of the systems you already use, and learn how to use and operate them more effectively Make informed decisions by identifying the strengths and weaknesses of different tools Navigate the trade-offs around consistency, scalability, fault tolerance, and complexity Understand the distributed systems research upon which modern databases are built Peek behind the scenes of major online services, and learn from their architectures

Design Patterns: Elements of Reusable Object-Oriented Software


Erich Gamma - 1994
    Previously undocumented, these 23 patterns allow designers to create more flexible, elegant, and ultimately reusable designs without having to rediscover the design solutions themselves.The authors begin by describing what patterns are and how they can help you design object-oriented software. They then go on to systematically name, explain, evaluate, and catalog recurring designs in object-oriented systems. With Design Patterns as your guide, you will learn how these important patterns fit into the software development process, and how you can leverage them to solve your own design problems most efficiently. Each pattern describes the circumstances in which it is applicable, when it can be applied in view of other design constraints, and the consequences and trade-offs of using the pattern within a larger design. All patterns are compiled from real systems and are based on real-world examples. Each pattern also includes code that demonstrates how it may be implemented in object-oriented programming languages like C++ or Smalltalk.