The Full Stack Developer Your Essential Guide to the Everyday Skills Expected of a Modern Full Stack Web Developer — Chris Northwood The Full Stack Developer Your Essential Guide to the Everyday Skills Expected of a Modern Full Stack Web Developer Chris Northwood Te Full Stack Developer: Your Essential Guide to the Everyday Skills Expected of a Modern Full Stack Web Developer Chris Northwood Manchester, UK ISBN-13 (pbk): 978-1-4842-4151-6 ISBN-13 (electronic): 978-1-4842-4152-3 https://doi.org/10.1007/978-1-4842-4152-3 Library of Congress Control Number: 2018964579 Copyright © 2018 by Chris Northwood Tis work is subject to copyright. All rights are reserved by the Publisher, whether the whole or part of the material is concerned, specifcally the rights of translation, reprinting, reuse of illustrations, recitation, broadcasting, reproduction on microflms or in any other physical way, and transmission or information storage and retrieval, electronic adaptation, computer software, or by similar or dissimilar methodology now known or hereafter developed. Trademarked names, logos, and images may appear in this book. Rather than use a trademark symbol with every occurrence of a trademarked name, logo, or image we use the names, logos, and images only in an editorial fashion and to the beneft of the trademark owner, with no intention of infringement of the trademark. Te use in this publication of trade names, trademarks, service marks, and similar terms, even if they are not identifed as such, is not to be taken as an expression of opinion as to whether or not they are subject to proprietary rights. While the advice and information in this book are believed to be true and accurate at the date of publication, neither the authors nor the editors nor the publisher can accept any legal responsibility for any errors or omissions that may be made. Te publisher makes no warranty, express or implied, with respect to the material contained herein. Managing Director, Apress Media LLC: Welmoed Spahr Acquisitions Editor: Louise Corrigan Development Editor: James Markham Coordinating Editor: Nancy Chen Cover designed by eStudioCalamar Cover image designed by Freepik (www.freepik.com) Distributed to the book trade worldwide by Springer Science+Business Media New York, 233 Spring Street, 6th Floor, New York, NY 10013. Phone 1-800-SPRINGER, fax (201) 348-4505, e-mail To everyone who makes those contributions to society that add up to a better world. Table of Contents About the Author ��������������������������������������������������������������������������������������������������� xiii About the Technical Reviewer ���������������������������������������������������������������������������������xv Acknowledgments �������������������������������������������������������������������������������������������������xvii Chapter 1: T he Modern Web ������������������������������������������������������������������������������������� 1 Rise of the Web ����������������������������������������������������������������������������������������������������������������������������� 3 Mobile Web ����������������������������������������������������������������������������������������������������������������������������������� 5 The State of HTML ������������������������������������������������������������������������������������������������������������������������� 5 Applications vs� Web Sites ������������������������������������������������������������������������������������������������������������ 7 Keeping Up ������������������������������������������������������������������������������������������������������������������������������������ 8 Summary 9 Chapter 2 P lanning Your Work �������������������������������������������������������������������������������� 11 Identifying Requirements ������������������������������������������������������������������������������������������������������������ 14 Defning the Work ������������������������������������������������������������������������������������������������������������������������ 17 Tracking the Work 22 Scrum ������������������������������������������������������������������������������������������������������������������������������������ 23 Kanban 28 Continuous Improvement ������������������������������������������������������������������������������������������������������������ 33 Prioritization & Estimation ���������������������������������������������������������������������������������������������������������� 35 Managing Bugs ��������������������������������������������������������������������������������������������������������������������������� 40 Continuous Delivery �������������������������������������������������������������������������������������������������������������������� 42 Summary 45 v Table of ConTenTs Chapter 3: U ser Experience ������������������������������������������������������������������������������������ 47 Information Architecture ������������������������������������������������������������������������������������������������������������� 49 Getting the User Experience Right ���������������������������������������������������������������������������������������������� 52 Polishing the User Experience 56 Implementing the User Experience ��������������������������������������������������������������������������������������������� 60 Summary 66 Chapter 4: D esigning Systems �������������������������������������������������������������������������������� 67 System Architectures ������������������������������������������������������������������������������������������������������������������ 68 Identifying Concepts ������������������������������������������������������������������������������������������������������������������� 70 Identifying User Interactions ������������������������������������������������������������������������������������������������������� 75 Handling Commonalities ������������������������������������������������������������������������������������������������������������� 76 Working with Legacy and External Dependencies ���������������������������������������������������������������������� 76 Component Interactions �������������������������������������������������������������������������������������������������������������� 77 Applications vs� Modules ������������������������������������������������������������������������������������������������������������ 80 Cross-Functional Requirements �������������������������������������������������������������������������������������������������� 81 Caching ��������������������������������������������������������������������������������������������������������������������������������������� 82 Designing for Failure ������������������������������������������������������������������������������������������������������������������� 83 Designing Modules ��������������������������������������������������������������������������������������������������������������������� 84 Refactoring���������������������������������������������������������������������������������������������������������������������������������� 90 Tools �������������������������������������������������������������������������������������������������������������������������������������������� 91 Changing Your Architecture ��������������������������������������������������������������������������������������������������������� 92 Summary 93 Chapter 5: E thics ���������������������������������������������������������������������������������������������������� 95 Privacy ���������������������������������������������������������������������������������������������������������������������������������������� 96 Cognitive Load ���������������������������������������������������������������������������������������������������������������������������� 99 Energy Usage ���������������������������������������������������������������������������������������������������������������������������� 100 Trust ������������������������������������������������������������������������������������������������������������������������������������������ 101 Summary 102 vi Table of ConTenTs Chapter 6: F ront End ��������������������������������������������������������������������������������������������� 103 HTML 103 From Server to Browser ������������������������������������������������������������������������������������������������������������ 104 Styling ��������������������������������������������������������������������������������������������������������������������������������������� 111 Components ������������������������������������������������������������������������������������������������������������������������������ 121 Responsive Design �������������������������������������������������������������������������������������������������������������������� 125 Progressive Enhancement 128 To Progressively Enhance, or Not? �������������������������������������������������������������������������������������� 130 Mobile First �������������������������������������������������������������������������������������������������������������������������� 131 Feature Detection ���������������������������������������������������������������������������������������������������������������� 133 Progressive Enhancement of Styles ������������������������������������������������������������������������������������ 133 When Not Using Progressive Enhancement 134 Search Engine Optimization ������������������������������������������������������������������������������������������������������ 135 Build Tools ��������������������������������������������������������������������������������������������������������������������������������� 137 Summary 139 Chapter 7: T esting ������������������������������������������������������������������������������������������������� 141 Test-Driven Development ���������������������������������������������������������������������������������������������������������� 141 Test Pyramid ����������������������������������������������������������������������������������������������������������������������������� 143 Behavior-Driven Development 148 Three Amigos 149 Manual Testing 152 Visual Testing 153 Cross-Functional Testing ����������������������������������������������������������������������������������������������������������� 154 Summary 156 Chapter 8: J avaScript ������������������������������������������������������������������������������������������� 159 Asynchronicity �������������������������������������������������������������������������������������������������������������������������� 160 JavaScript in the Browser ��������������������������������������������������������������������������������������������������������� 163 Offine-First Development ��������������������������������������������������������������������������������������������������������� 166 Document Object Model ������������������������������������������������������������������������������������������������������������ 169 Server-Side JavaScript ������������������������������������������������������������������������������������������������������������� 170 vii Table of ConTenTs JavaScript Modules ������������������������������������������������������������������������������������������������������������������� 171 Structuring Your JavaScript ������������������������������������������������������������������������������������������������������ 175 JavaScript Types ����������������������������������������������������������������������������������������������������������������������� 175 Object-Oriented Programming �������������������������������������������������������������������������������������������������� 180 Functional Programming ����������������������������������������������������������������������������������������������������������� 183 Communicating Between Components ������������������������������������������������������������������������������������� 189 Connecting Components Together �������������������������������������������������������������������������������������������� 194 Testing��������������������������������������������������������������������������������������������������������������������������������������� 197 Build Tools ��������������������������������������������������������������������������������������������������������������������������������� 204 Summary 206 Chapter 9: A ccessibility ���������������������������������������������������������������������������������������� 209 Accessible from the Start���������������������������������������������������������������������������������������������������������� 210 Working with Assistive Technologies ���������������������������������������������������������������������������������������� 211 Dealing with Interactive UI �������������������������������������������������������������������������������������������������������� 214 Testing for Accessibility ������������������������������������������������������������������������������������������������������������ 219 Avoiding Common Mistakes 221 Hover and Focus Styling 221 outline: 0 221 The Order of Headings 222 Multiple h1s 222 Skip Links 222 Buttons vs Anchors 223 The Correct Use of an alt Attribute 223 Icon Fonts 223 Color Contrast 224 Summary 224 Chapter 10: A PIs ��������������������������������������������������������������������������������������������������� 227 API Responsibilities ������������������������������������������������������������������������������������������������������������������� 229 Designing a REST API ���������������������������������������������������������������������������������������������������������������� 231 Securing Your API ���������������������������������������������������������������������������������������������������������������������� 240 viii Table of ConTenTs Event-Based APIs ���������������������������������������������������������������������������������������������������������������������� 243 Discovering APIs ����������������������������������������������������������������������������������������������������������������������� 244 Using APIs ��������������������������������������������������������������������������������������������������������������������������������� 245 Summary 249 Chapter 11 S toring Data ��������������������������������������������������������������������������������������� 251 Types of Databases 252 To SQL, or NoSQL? 254 Where to Store Your Data 255 Accessing Data from Your App 258 Managing Your Data 260 Protecting Your Data 262 Summary 264 Chapter 12: S ecurity ��������������������������������������������������������������������������������������������� 267 Trust and Secrets 267 Responding to Incidents 269 The Golden Rule 270 Threats 273 Security Checklists 278 Injection ������������������������������������������������������������������������������������������������������������������������������� 279 Broken Authentication and Session Management ��������������������������������������������������������������� 279 Cross-Site Scripting (XSS) ��������������������������������������������������������������������������������������������������� 280 Insecure Direct Object References �������������������������������������������������������������������������������������� 281 Security Misconfguration���������������������������������������������������������������������������������������������������� 281 Sensitive Data Exposure ������������������������������������������������������������������������������������������������������ 282 Missing Function Level Access Control ������������������������������������������������������������������������������� 283 Cross-Site Request Forgery (CSRF) ������������������������������������������������������������������������������������� 283 Using Known Vulnerable Components ��������������������������������������������������������������������������������� 284 Unvalidated Redirects and Forwards 284 Passwords 285 Indirect Attacks 290 Summary 292 ix Table of ConTenTs Chapter 13: D eployment ��������������������������������������������������������������������������������������� 295 Twelve Factor Apps 295 One Codebase Tracked in Version Control, with Many Deploys ������������������������������������������� 296 Explicitly Declare and Isolate Dependencies ����������������������������������������������������������������������� 296 Store Confguration in the Environment ������������������������������������������������������������������������������ 297 Treat Backing Services as Attached Resources ������������������������������������������������������������������ 298 Build, Release, Run �������������������������������������������������������������������������������������������������������������� 299 Execute the App as One (or More) Stateless Processes ������������������������������������������������������ 300 Export Services by Port Binding ������������������������������������������������������������������������������������������ 300 Scale Out via the Process Model ����������������������������������������������������������������������������������������� 301 Maximize Robustness with Fast Startup and Graceful Shutdown ��������������������������������������� 301 Keep Development, Staging, and Production as Close as Possible ������������������������������������� 302 Treat Logs as Event Streams ����������������������������������������������������������������������������������������������� 302 Run Admin and Management Tasks as One-Off Processes 303 Developer Machines 303 Production Environments 304 Moving Code into Production 306 Confguring Your Box 308 Infrastructure 310 Immutable Infrastructure 313 Continuous Delivery & Continuous Deployment 314 Summary 316 Chapter 14: I n Production ������������������������������������������������������������������������������������� 319 Fire Drills 320 Run Books 321 Monitoring 325 Responding to Incidents 328 Summary 329 x