Effective Software Development for the Enterprise Beyond Domain Driven Design, Software Architecture, and Extreme Programming

Gespeichert in:
Bibliographische Detailangaben
1. Verfasser: Tutisani, Tengiz (VerfasserIn)
Format: Elektronisch E-Book
Sprache:English
Veröffentlicht: Berkeley, CA Apress L. P. 2023
Ausgabe:1st ed
Online-Zugang:DE-2070s
Tags: Tag hinzufügen
Keine Tags, Fügen Sie den ersten Tag hinzu!

MARC

LEADER 00000nam a2200000zc 4500
001 BV049876203
003 DE-604
005 00000000000000.0
007 cr|uuu---uuuuu
008 240919s2023 xx o|||| 00||| eng d
020 |a 9781484293850  |9 978-1-4842-9385-0 
035 |a (ZDB-30-PQE)EBC30550680 
035 |a (ZDB-30-PAD)EBC30550680 
035 |a (ZDB-89-EBL)EBL30550680 
035 |a (OCoLC)1380465440 
035 |a (DE-599)BVBBV049876203 
040 |a DE-604  |b ger  |e rda 
041 0 |a eng 
049 |a DE-2070s 
082 0 |a 658.0551 
100 1 |a Tutisani, Tengiz  |e Verfasser  |4 aut 
245 1 0 |a Effective Software Development for the Enterprise  |b Beyond Domain Driven Design, Software Architecture, and Extreme Programming 
250 |a 1st ed 
264 1 |a Berkeley, CA  |b Apress L. P.  |c 2023 
264 4 |c ©2023 
300 |a 1 Online-Ressource (344 Seiten) 
336 |b txt  |2 rdacontent 
337 |b c  |2 rdamedia 
338 |b cr  |2 rdacarrier 
500 |a Description based on publisher supplied metadata and other sources 
505 8 |a Intro -- Table of Contents -- About the Author -- About the Technical Reviewer -- Acknowledgments -- Preface -- Chapter 1: Introduction -- History of Inefficient Monoliths -- Why People Avoid Building Effective Software -- Learning Curve -- Quality over Quantity -- Highly Paid Experts -- Naive Hopes to Survive -- Software Development Perfectionism as a State of Mind -- Is It Crazy? -- Desire Behind Perfectionism -- Is It Worth It? -- Six Pillars of Effective Software -- #1. Meet Users' Expectations -- #2. Allow No Defects -- #3. Scale Out Horizontally -- #4. Have No Dedicated Production Support Team -- #5. Accelerate Development Pace -- #6. Double the ROI per Developer, Team, and Software -- Summary -- Chapter 2: Cross-cutting Concerns -- Execution, Leadership, Management -- Importance of Software Development Transformation -- How to Achieve Software Development Transformation -- Transformation Is for Everybody -- Ad-Hoc Tasks vs. Process -- Hands-on Leaders -- Overall Support from Management -- Organizational Structure -- A Couple of Important Definitions Upfront -- Forming Organizations -- Forming Subsystems -- Forming Microservices -- Forming Teams -- Feature Teams -- Platform and Infrastructure Teams -- Forming Programs, Projects, Requirements, and Deliveries -- Organizational Silos -- Horizontal Silos -- Vertical Silos -- Autonomy vs. Reuse -- Processes, Ongoing Efforts, Teams -- Agile or Waterfall -- Transparent Teams -- Managing Work in Progress -- One for All, All for One -- Transformation from Inside -- Culture -- Professionalism in Software Development -- Trust -- Delegation of Responsibilities -- Identifying Talent -- Relaxed Team Atmosphere -- Work-Life Balance -- Candid Feedback -- Change of Mind -- Social Aspect of Engineering -- Complexity as Job Safety -- Team Spirit -- Keep It Fun -- Recruitment -- Supporting Role of Recruitment 
505 8 |a Hire Best -- Quickly, Fancy, Right -- Corrective vs. Preventive -- Summary -- Chapter 3: From Customer Insights to Internal Requirements -- Understanding Customers' Needs -- Partnership and Customer Focus -- Interview Customers -- Knowledge Exploration Exercises -- Stage #1: Casual Discussions -- Stage #2: Free-Formed Sketches -- Stage #3: Charting the Landscape -- Organization's Response to Customers' Needs -- From Customer Interview to Organizational Transformation -- Navigating the Context Map to Find Fit -- Why Form a New Subdomain? -- Cost of Introducing a Subdomain -- Requirements and Story Writing -- Ubiquitous Language: What Is It? Why Is It Important? -- Who Writes Stories? -- Ubiquitous Language in Requirements -- Writing Executable Specifications -- Halfway into Gherkin -- All the Way into Gherkin -- Planning Work -- Prioritized Backlog -- Feasibility -- Managing Dependencies -- Parent Subdomain Prescribes Child Subdomain Dependencies -- Classify Dependency -- Dependency Goes First -- Dependency Is Functional. Integration Is Technical -- Valuable Stories (Verticals) -- Technical Stories -- Carrying Out Work -- Definition of Done -- Estimates vs. Velocity -- Your Estimate Is Your Deadline -- Achieving Predictability -- Summary -- Chapter 4: Design and Architecture -- Architecture as a Cross-cutting Concern -- Definitions and Purpose -- Software Architecture -- Software Architect -- Is Architecture Dead? -- Brainstorm Before Coding -- Reuse Knowledge -- Architecture as a Service -- Partnership with Domain Experts -- Teams and Microservices -- Architecture Supports Organizational Growth -- Architecture in Analysis and Requirements Gathering -- Upfront Design Supports Gap Analysis -- Doing It in Practice -- Knowledge Exploration and Architecture -- Caveat of a Technical Solution -- Architecture Body of Knowledge -- Architecture Landscape 
505 8 |a Buy vs. Build -- Good Architectures -- Doing It in Practice -- It Is Okay to Postpone Decisions -- Architecture and Technology -- True Value of Software -- Is Technology King? -- Domain -- Using Technology -- Vendor Lock-in -- Unavoidable Level of Technology -- Abstractions Can Help -- Beware of Technologists -- Consolidate Technologies -- Domain Model Kinds -- Rich Domain -- Anemic Domain -- Big Ball of Mud -- Domain-Driven vs. Data-Driven -- Other Anti-Patterns -- Life with Anemic Domains -- Layered Software Architecture -- Popular Application Layering Patterns -- How Many Layers? -- Other Popular Layered Architectures -- Microservices -- Clarification of Terminology -- Implementing Microservices -- Integration -- Autonomy and Scale -- Scale Out -- Reusability vs. Duplication -- Evolving an Ecosystem of Microservices -- Monolithic UI Backed by Microservices -- Client-Side UI Composition -- Server-Side Page Fragment Composition -- Command Query Responsibility Segregation (CQRS) -- Employ Rich Domain to Generate Read Models -- Avoid Vendor Lockdown -- Path to Event-Driven Architecture (EDA) -- Building Cloud-Ready Applications -- Twelve-Factor App -- Containerization -- Avoiding Cloud Vendor Lock-In -- Dev-Prod Parity Locally -- Performance -- Performance vs. Clean Design -- Designing Components That Need to Be Fast -- Front-End Application Architecture -- Built-In Security -- Databases -- Database Technology Is Irrelevant to Design -- In-Memory Identity Value Generation -- Application Database vs. Data Warehouse -- Versioned Databases -- Architecture and Implementation -- Tactical DDD -- Evolving Design -- Writing Domain Layer's Code -- Consolidate Development Tools and Languages -- Architecture for Testable Systems -- Testable Code -- Testable Application -- Architecture for Deployable Systems -- Versioning -- Containerization 
505 8 |a Architecture for Maintainable Systems -- Mindset Shift-No Tech Debt -- Working Systems -- Common Maintenance Tasks -- Fixing It Twice -- Simple vs. Complex Systems -- Summary -- Chapter 5: Implementation and Coding -- Cross-cutting Concerns Related to Coding -- Professionalism of a Coder -- Put Talent into Important Tasks -- Continuous Improvement -- Continuous Refactoring -- Limit Works in Progress -- Quality vs. Quantity -- Code Reviews -- Designing Code -- Implementation of Architecture -- Code Design Techniques -- Essence of Object-Oriented Programming -- Confusion About OOP -- OOP Distilled -- Purpose of Design Patterns -- Composition vs. Inheritance -- Opportunities for Patterns -- Implementing Code -- Tactical DDD Patterns -- Entity -- Entities That Look Like DTOs -- Active Record Entities -- Module -- Enforcing Modular Architecture -- Repository -- Relational Database Mismatch with Repository -- Non-Relational Database Mismatch with Repository -- How About Reports? -- Factory -- Warning About Gang of Four Factory Patterns -- Command -- Warning About Commands -- Declarative Design in Code -- Front-End Development -- Front-End Repositories and Services -- Hosting Static Assets for Front-end -- Developing for Various Form Factors -- Keep Pushing the Limits -- Exception Handling -- Why Catch Exceptions? -- Why Throw Exceptions? -- Law of Demeter for Exception Handling -- Handling Globally Unhandled Exceptions -- Testing Code -- Unit Testing -- Unit Test Coverage Fallacy -- How Many Unit Tests Are Enough? -- Multiple Asserts in a Single Unit Test -- TDD, ATDD, and BDD -- TDD Is Faster Than Unit Testing -- Commonalities Between TDD, ATDD, and BDD -- Code Deployment and Maintenance -- CI/CD Before Development -- Planning Deployment When Developing -- Planning Maintenance When Developing -- Summary -- Chapter 6: Testing and Quality Assurance 
505 8 |a Testing Processes and Principles -- Who Is For and Who Is Against? -- Quality Is Team's Responsibility -- Test Everything, Automate Everything -- Why -- How -- Importance of Test Automation -- Who Owns Test Automation? -- Automate in Time -- Apply Best Practices -- Blur the Line -- Test Design and Architecture -- Test Types -- Integration vs. Functional Tests -- Test Case per Requirement -- Test Automation Design Patterns -- Crux of Test Case Patterns -- Gherkin Test Case Pattern -- Scenario Object Pattern -- Page Object Pattern -- Predominant Misuse of Page Object Pattern -- Test Object Pattern -- Layered Test Architecture -- Ubiquitous Language in Test -- Test Data Management -- Unit Test Data -- Integration Test Data -- Functional Test Data -- End-to-End Test Data -- Implementing Automated Tests -- Delayed Automation -- Early Automation -- Enhancing Deployments with Test Automation -- Fast Feedback and Compensating Actions -- Fast Feedback Accuracy -- Continuous Deployment -- Summary -- Chapter 7: Deployment -- Culture of Releases -- Why Release Software? -- Unimportance of Releases -- What Is the Catch? -- CI/CD-Deployment Foundation -- Continuous Integration -- Briefly About Artifacts -- Continuous Deployment -- Building Deployment-Ready Applications -- Developing Deployable Units -- Ensuring Smooth Deployments via CI/CD -- Dev-Prod Parity -- Effects of Containerization on Deployments -- Summary -- Chapter 8: Maintenance and Support -- Maintenance-Free Mindset -- Organization's Approach to Maintenance -- Support-Oriented Organizations -- Award-Winning Support Teams -- Who Prevents Problems? -- Maintenance-Aware Mindset -- Maintaining Applications in Practice -- Fix Root Cause, Not Surface -- Building Blocks of Maintainable Systems -- Summary -- Afterword: Wrap-up -- References -- Index 
776 0 8 |i Erscheint auch als  |n Druck-Ausgabe  |a Tutisani, Tengiz  |t Effective Software Development for the Enterprise  |d Berkeley, CA : Apress L. P.,c2023  |z 9781484293843 
912 |a ZDB-30-PQE 
943 1 |a oai:aleph.bib-bvb.de:BVB01-035215653 
966 e |u https://ebookcentral.proquest.com/lib/hwr/detail.action?docID=30550680  |l DE-2070s  |p ZDB-30-PQE  |q HWR_PDA_PQE  |x Aggregator  |3 Volltext 

Datensatz im Suchindex

_version_ 1819316789488648192
any_adam_object
author Tutisani, Tengiz
author_facet Tutisani, Tengiz
author_role aut
author_sort Tutisani, Tengiz
author_variant t t tt
building Verbundindex
bvnumber BV049876203
collection ZDB-30-PQE
contents Intro -- Table of Contents -- About the Author -- About the Technical Reviewer -- Acknowledgments -- Preface -- Chapter 1: Introduction -- History of Inefficient Monoliths -- Why People Avoid Building Effective Software -- Learning Curve -- Quality over Quantity -- Highly Paid Experts -- Naive Hopes to Survive -- Software Development Perfectionism as a State of Mind -- Is It Crazy? -- Desire Behind Perfectionism -- Is It Worth It? -- Six Pillars of Effective Software -- #1. Meet Users' Expectations -- #2. Allow No Defects -- #3. Scale Out Horizontally -- #4. Have No Dedicated Production Support Team -- #5. Accelerate Development Pace -- #6. Double the ROI per Developer, Team, and Software -- Summary -- Chapter 2: Cross-cutting Concerns -- Execution, Leadership, Management -- Importance of Software Development Transformation -- How to Achieve Software Development Transformation -- Transformation Is for Everybody -- Ad-Hoc Tasks vs. Process -- Hands-on Leaders -- Overall Support from Management -- Organizational Structure -- A Couple of Important Definitions Upfront -- Forming Organizations -- Forming Subsystems -- Forming Microservices -- Forming Teams -- Feature Teams -- Platform and Infrastructure Teams -- Forming Programs, Projects, Requirements, and Deliveries -- Organizational Silos -- Horizontal Silos -- Vertical Silos -- Autonomy vs. Reuse -- Processes, Ongoing Efforts, Teams -- Agile or Waterfall -- Transparent Teams -- Managing Work in Progress -- One for All, All for One -- Transformation from Inside -- Culture -- Professionalism in Software Development -- Trust -- Delegation of Responsibilities -- Identifying Talent -- Relaxed Team Atmosphere -- Work-Life Balance -- Candid Feedback -- Change of Mind -- Social Aspect of Engineering -- Complexity as Job Safety -- Team Spirit -- Keep It Fun -- Recruitment -- Supporting Role of Recruitment
Hire Best -- Quickly, Fancy, Right -- Corrective vs. Preventive -- Summary -- Chapter 3: From Customer Insights to Internal Requirements -- Understanding Customers' Needs -- Partnership and Customer Focus -- Interview Customers -- Knowledge Exploration Exercises -- Stage #1: Casual Discussions -- Stage #2: Free-Formed Sketches -- Stage #3: Charting the Landscape -- Organization's Response to Customers' Needs -- From Customer Interview to Organizational Transformation -- Navigating the Context Map to Find Fit -- Why Form a New Subdomain? -- Cost of Introducing a Subdomain -- Requirements and Story Writing -- Ubiquitous Language: What Is It? Why Is It Important? -- Who Writes Stories? -- Ubiquitous Language in Requirements -- Writing Executable Specifications -- Halfway into Gherkin -- All the Way into Gherkin -- Planning Work -- Prioritized Backlog -- Feasibility -- Managing Dependencies -- Parent Subdomain Prescribes Child Subdomain Dependencies -- Classify Dependency -- Dependency Goes First -- Dependency Is Functional. Integration Is Technical -- Valuable Stories (Verticals) -- Technical Stories -- Carrying Out Work -- Definition of Done -- Estimates vs. Velocity -- Your Estimate Is Your Deadline -- Achieving Predictability -- Summary -- Chapter 4: Design and Architecture -- Architecture as a Cross-cutting Concern -- Definitions and Purpose -- Software Architecture -- Software Architect -- Is Architecture Dead? -- Brainstorm Before Coding -- Reuse Knowledge -- Architecture as a Service -- Partnership with Domain Experts -- Teams and Microservices -- Architecture Supports Organizational Growth -- Architecture in Analysis and Requirements Gathering -- Upfront Design Supports Gap Analysis -- Doing It in Practice -- Knowledge Exploration and Architecture -- Caveat of a Technical Solution -- Architecture Body of Knowledge -- Architecture Landscape
Buy vs. Build -- Good Architectures -- Doing It in Practice -- It Is Okay to Postpone Decisions -- Architecture and Technology -- True Value of Software -- Is Technology King? -- Domain -- Using Technology -- Vendor Lock-in -- Unavoidable Level of Technology -- Abstractions Can Help -- Beware of Technologists -- Consolidate Technologies -- Domain Model Kinds -- Rich Domain -- Anemic Domain -- Big Ball of Mud -- Domain-Driven vs. Data-Driven -- Other Anti-Patterns -- Life with Anemic Domains -- Layered Software Architecture -- Popular Application Layering Patterns -- How Many Layers? -- Other Popular Layered Architectures -- Microservices -- Clarification of Terminology -- Implementing Microservices -- Integration -- Autonomy and Scale -- Scale Out -- Reusability vs. Duplication -- Evolving an Ecosystem of Microservices -- Monolithic UI Backed by Microservices -- Client-Side UI Composition -- Server-Side Page Fragment Composition -- Command Query Responsibility Segregation (CQRS) -- Employ Rich Domain to Generate Read Models -- Avoid Vendor Lockdown -- Path to Event-Driven Architecture (EDA) -- Building Cloud-Ready Applications -- Twelve-Factor App -- Containerization -- Avoiding Cloud Vendor Lock-In -- Dev-Prod Parity Locally -- Performance -- Performance vs. Clean Design -- Designing Components That Need to Be Fast -- Front-End Application Architecture -- Built-In Security -- Databases -- Database Technology Is Irrelevant to Design -- In-Memory Identity Value Generation -- Application Database vs. Data Warehouse -- Versioned Databases -- Architecture and Implementation -- Tactical DDD -- Evolving Design -- Writing Domain Layer's Code -- Consolidate Development Tools and Languages -- Architecture for Testable Systems -- Testable Code -- Testable Application -- Architecture for Deployable Systems -- Versioning -- Containerization
Architecture for Maintainable Systems -- Mindset Shift-No Tech Debt -- Working Systems -- Common Maintenance Tasks -- Fixing It Twice -- Simple vs. Complex Systems -- Summary -- Chapter 5: Implementation and Coding -- Cross-cutting Concerns Related to Coding -- Professionalism of a Coder -- Put Talent into Important Tasks -- Continuous Improvement -- Continuous Refactoring -- Limit Works in Progress -- Quality vs. Quantity -- Code Reviews -- Designing Code -- Implementation of Architecture -- Code Design Techniques -- Essence of Object-Oriented Programming -- Confusion About OOP -- OOP Distilled -- Purpose of Design Patterns -- Composition vs. Inheritance -- Opportunities for Patterns -- Implementing Code -- Tactical DDD Patterns -- Entity -- Entities That Look Like DTOs -- Active Record Entities -- Module -- Enforcing Modular Architecture -- Repository -- Relational Database Mismatch with Repository -- Non-Relational Database Mismatch with Repository -- How About Reports? -- Factory -- Warning About Gang of Four Factory Patterns -- Command -- Warning About Commands -- Declarative Design in Code -- Front-End Development -- Front-End Repositories and Services -- Hosting Static Assets for Front-end -- Developing for Various Form Factors -- Keep Pushing the Limits -- Exception Handling -- Why Catch Exceptions? -- Why Throw Exceptions? -- Law of Demeter for Exception Handling -- Handling Globally Unhandled Exceptions -- Testing Code -- Unit Testing -- Unit Test Coverage Fallacy -- How Many Unit Tests Are Enough? -- Multiple Asserts in a Single Unit Test -- TDD, ATDD, and BDD -- TDD Is Faster Than Unit Testing -- Commonalities Between TDD, ATDD, and BDD -- Code Deployment and Maintenance -- CI/CD Before Development -- Planning Deployment When Developing -- Planning Maintenance When Developing -- Summary -- Chapter 6: Testing and Quality Assurance
Testing Processes and Principles -- Who Is For and Who Is Against? -- Quality Is Team's Responsibility -- Test Everything, Automate Everything -- Why -- How -- Importance of Test Automation -- Who Owns Test Automation? -- Automate in Time -- Apply Best Practices -- Blur the Line -- Test Design and Architecture -- Test Types -- Integration vs. Functional Tests -- Test Case per Requirement -- Test Automation Design Patterns -- Crux of Test Case Patterns -- Gherkin Test Case Pattern -- Scenario Object Pattern -- Page Object Pattern -- Predominant Misuse of Page Object Pattern -- Test Object Pattern -- Layered Test Architecture -- Ubiquitous Language in Test -- Test Data Management -- Unit Test Data -- Integration Test Data -- Functional Test Data -- End-to-End Test Data -- Implementing Automated Tests -- Delayed Automation -- Early Automation -- Enhancing Deployments with Test Automation -- Fast Feedback and Compensating Actions -- Fast Feedback Accuracy -- Continuous Deployment -- Summary -- Chapter 7: Deployment -- Culture of Releases -- Why Release Software? -- Unimportance of Releases -- What Is the Catch? -- CI/CD-Deployment Foundation -- Continuous Integration -- Briefly About Artifacts -- Continuous Deployment -- Building Deployment-Ready Applications -- Developing Deployable Units -- Ensuring Smooth Deployments via CI/CD -- Dev-Prod Parity -- Effects of Containerization on Deployments -- Summary -- Chapter 8: Maintenance and Support -- Maintenance-Free Mindset -- Organization's Approach to Maintenance -- Support-Oriented Organizations -- Award-Winning Support Teams -- Who Prevents Problems? -- Maintenance-Aware Mindset -- Maintaining Applications in Practice -- Fix Root Cause, Not Surface -- Building Blocks of Maintainable Systems -- Summary -- Afterword: Wrap-up -- References -- Index
ctrlnum (ZDB-30-PQE)EBC30550680
(ZDB-30-PAD)EBC30550680
(ZDB-89-EBL)EBL30550680
(OCoLC)1380465440
(DE-599)BVBBV049876203
dewey-full 658.0551
dewey-hundreds 600 - Technology (Applied sciences)
dewey-ones 658 - General management
dewey-raw 658.0551
dewey-search 658.0551
dewey-sort 3658.0551
dewey-tens 650 - Management and auxiliary services
discipline Wirtschaftswissenschaften
edition 1st ed
format Electronic
eBook
fullrecord <?xml version="1.0" encoding="UTF-8"?><collection xmlns="http://www.loc.gov/MARC21/slim"><record><leader>10938nam a2200433zc 4500</leader><controlfield tag="001">BV049876203</controlfield><controlfield tag="003">DE-604</controlfield><controlfield tag="005">00000000000000.0</controlfield><controlfield tag="007">cr|uuu---uuuuu</controlfield><controlfield tag="008">240919s2023 xx o|||| 00||| eng d</controlfield><datafield tag="020" ind1=" " ind2=" "><subfield code="a">9781484293850</subfield><subfield code="9">978-1-4842-9385-0</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(ZDB-30-PQE)EBC30550680</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(ZDB-30-PAD)EBC30550680</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(ZDB-89-EBL)EBL30550680</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(OCoLC)1380465440</subfield></datafield><datafield tag="035" ind1=" " ind2=" "><subfield code="a">(DE-599)BVBBV049876203</subfield></datafield><datafield tag="040" ind1=" " ind2=" "><subfield code="a">DE-604</subfield><subfield code="b">ger</subfield><subfield code="e">rda</subfield></datafield><datafield tag="041" ind1="0" ind2=" "><subfield code="a">eng</subfield></datafield><datafield tag="049" ind1=" " ind2=" "><subfield code="a">DE-2070s</subfield></datafield><datafield tag="082" ind1="0" ind2=" "><subfield code="a">658.0551</subfield></datafield><datafield tag="100" ind1="1" ind2=" "><subfield code="a">Tutisani, Tengiz</subfield><subfield code="e">Verfasser</subfield><subfield code="4">aut</subfield></datafield><datafield tag="245" ind1="1" ind2="0"><subfield code="a">Effective Software Development for the Enterprise</subfield><subfield code="b">Beyond Domain Driven Design, Software Architecture, and Extreme Programming</subfield></datafield><datafield tag="250" ind1=" " ind2=" "><subfield code="a">1st ed</subfield></datafield><datafield tag="264" ind1=" " ind2="1"><subfield code="a">Berkeley, CA</subfield><subfield code="b">Apress L. P.</subfield><subfield code="c">2023</subfield></datafield><datafield tag="264" ind1=" " ind2="4"><subfield code="c">©2023</subfield></datafield><datafield tag="300" ind1=" " ind2=" "><subfield code="a">1 Online-Ressource (344 Seiten)</subfield></datafield><datafield tag="336" ind1=" " ind2=" "><subfield code="b">txt</subfield><subfield code="2">rdacontent</subfield></datafield><datafield tag="337" ind1=" " ind2=" "><subfield code="b">c</subfield><subfield code="2">rdamedia</subfield></datafield><datafield tag="338" ind1=" " ind2=" "><subfield code="b">cr</subfield><subfield code="2">rdacarrier</subfield></datafield><datafield tag="500" ind1=" " ind2=" "><subfield code="a">Description based on publisher supplied metadata and other sources</subfield></datafield><datafield tag="505" ind1="8" ind2=" "><subfield code="a">Intro -- Table of Contents -- About the Author -- About the Technical Reviewer -- Acknowledgments -- Preface -- Chapter 1: Introduction -- History of Inefficient Monoliths -- Why People Avoid Building Effective Software -- Learning Curve -- Quality over Quantity -- Highly Paid Experts -- Naive Hopes to Survive -- Software Development Perfectionism as a State of Mind -- Is It Crazy? -- Desire Behind Perfectionism -- Is It Worth It? -- Six Pillars of Effective Software -- #1. Meet Users' Expectations -- #2. Allow No Defects -- #3. Scale Out Horizontally -- #4. Have No Dedicated Production Support Team -- #5. Accelerate Development Pace -- #6. Double the ROI per Developer, Team, and Software -- Summary -- Chapter 2: Cross-cutting Concerns -- Execution, Leadership, Management -- Importance of Software Development Transformation -- How to Achieve Software Development Transformation -- Transformation Is for Everybody -- Ad-Hoc Tasks vs. Process -- Hands-on Leaders -- Overall Support from Management -- Organizational Structure -- A Couple of Important Definitions Upfront -- Forming Organizations -- Forming Subsystems -- Forming Microservices -- Forming Teams -- Feature Teams -- Platform and Infrastructure Teams -- Forming Programs, Projects, Requirements, and Deliveries -- Organizational Silos -- Horizontal Silos -- Vertical Silos -- Autonomy vs. Reuse -- Processes, Ongoing Efforts, Teams -- Agile or Waterfall -- Transparent Teams -- Managing Work in Progress -- One for All, All for One -- Transformation from Inside -- Culture -- Professionalism in Software Development -- Trust -- Delegation of Responsibilities -- Identifying Talent -- Relaxed Team Atmosphere -- Work-Life Balance -- Candid Feedback -- Change of Mind -- Social Aspect of Engineering -- Complexity as Job Safety -- Team Spirit -- Keep It Fun -- Recruitment -- Supporting Role of Recruitment</subfield></datafield><datafield tag="505" ind1="8" ind2=" "><subfield code="a">Hire Best -- Quickly, Fancy, Right -- Corrective vs. Preventive -- Summary -- Chapter 3: From Customer Insights to Internal Requirements -- Understanding Customers' Needs -- Partnership and Customer Focus -- Interview Customers -- Knowledge Exploration Exercises -- Stage #1: Casual Discussions -- Stage #2: Free-Formed Sketches -- Stage #3: Charting the Landscape -- Organization's Response to Customers' Needs -- From Customer Interview to Organizational Transformation -- Navigating the Context Map to Find Fit -- Why Form a New Subdomain? -- Cost of Introducing a Subdomain -- Requirements and Story Writing -- Ubiquitous Language: What Is It? Why Is It Important? -- Who Writes Stories? -- Ubiquitous Language in Requirements -- Writing Executable Specifications -- Halfway into Gherkin -- All the Way into Gherkin -- Planning Work -- Prioritized Backlog -- Feasibility -- Managing Dependencies -- Parent Subdomain Prescribes Child Subdomain Dependencies -- Classify Dependency -- Dependency Goes First -- Dependency Is Functional. Integration Is Technical -- Valuable Stories (Verticals) -- Technical Stories -- Carrying Out Work -- Definition of Done -- Estimates vs. Velocity -- Your Estimate Is Your Deadline -- Achieving Predictability -- Summary -- Chapter 4: Design and Architecture -- Architecture as a Cross-cutting Concern -- Definitions and Purpose -- Software Architecture -- Software Architect -- Is Architecture Dead? -- Brainstorm Before Coding -- Reuse Knowledge -- Architecture as a Service -- Partnership with Domain Experts -- Teams and Microservices -- Architecture Supports Organizational Growth -- Architecture in Analysis and Requirements Gathering -- Upfront Design Supports Gap Analysis -- Doing It in Practice -- Knowledge Exploration and Architecture -- Caveat of a Technical Solution -- Architecture Body of Knowledge -- Architecture Landscape</subfield></datafield><datafield tag="505" ind1="8" ind2=" "><subfield code="a">Buy vs. Build -- Good Architectures -- Doing It in Practice -- It Is Okay to Postpone Decisions -- Architecture and Technology -- True Value of Software -- Is Technology King? -- Domain -- Using Technology -- Vendor Lock-in -- Unavoidable Level of Technology -- Abstractions Can Help -- Beware of Technologists -- Consolidate Technologies -- Domain Model Kinds -- Rich Domain -- Anemic Domain -- Big Ball of Mud -- Domain-Driven vs. Data-Driven -- Other Anti-Patterns -- Life with Anemic Domains -- Layered Software Architecture -- Popular Application Layering Patterns -- How Many Layers? -- Other Popular Layered Architectures -- Microservices -- Clarification of Terminology -- Implementing Microservices -- Integration -- Autonomy and Scale -- Scale Out -- Reusability vs. Duplication -- Evolving an Ecosystem of Microservices -- Monolithic UI Backed by Microservices -- Client-Side UI Composition -- Server-Side Page Fragment Composition -- Command Query Responsibility Segregation (CQRS) -- Employ Rich Domain to Generate Read Models -- Avoid Vendor Lockdown -- Path to Event-Driven Architecture (EDA) -- Building Cloud-Ready Applications -- Twelve-Factor App -- Containerization -- Avoiding Cloud Vendor Lock-In -- Dev-Prod Parity Locally -- Performance -- Performance vs. Clean Design -- Designing Components That Need to Be Fast -- Front-End Application Architecture -- Built-In Security -- Databases -- Database Technology Is Irrelevant to Design -- In-Memory Identity Value Generation -- Application Database vs. Data Warehouse -- Versioned Databases -- Architecture and Implementation -- Tactical DDD -- Evolving Design -- Writing Domain Layer's Code -- Consolidate Development Tools and Languages -- Architecture for Testable Systems -- Testable Code -- Testable Application -- Architecture for Deployable Systems -- Versioning -- Containerization</subfield></datafield><datafield tag="505" ind1="8" ind2=" "><subfield code="a">Architecture for Maintainable Systems -- Mindset Shift-No Tech Debt -- Working Systems -- Common Maintenance Tasks -- Fixing It Twice -- Simple vs. Complex Systems -- Summary -- Chapter 5: Implementation and Coding -- Cross-cutting Concerns Related to Coding -- Professionalism of a Coder -- Put Talent into Important Tasks -- Continuous Improvement -- Continuous Refactoring -- Limit Works in Progress -- Quality vs. Quantity -- Code Reviews -- Designing Code -- Implementation of Architecture -- Code Design Techniques -- Essence of Object-Oriented Programming -- Confusion About OOP -- OOP Distilled -- Purpose of Design Patterns -- Composition vs. Inheritance -- Opportunities for Patterns -- Implementing Code -- Tactical DDD Patterns -- Entity -- Entities That Look Like DTOs -- Active Record Entities -- Module -- Enforcing Modular Architecture -- Repository -- Relational Database Mismatch with Repository -- Non-Relational Database Mismatch with Repository -- How About Reports? -- Factory -- Warning About Gang of Four Factory Patterns -- Command -- Warning About Commands -- Declarative Design in Code -- Front-End Development -- Front-End Repositories and Services -- Hosting Static Assets for Front-end -- Developing for Various Form Factors -- Keep Pushing the Limits -- Exception Handling -- Why Catch Exceptions? -- Why Throw Exceptions? -- Law of Demeter for Exception Handling -- Handling Globally Unhandled Exceptions -- Testing Code -- Unit Testing -- Unit Test Coverage Fallacy -- How Many Unit Tests Are Enough? -- Multiple Asserts in a Single Unit Test -- TDD, ATDD, and BDD -- TDD Is Faster Than Unit Testing -- Commonalities Between TDD, ATDD, and BDD -- Code Deployment and Maintenance -- CI/CD Before Development -- Planning Deployment When Developing -- Planning Maintenance When Developing -- Summary -- Chapter 6: Testing and Quality Assurance</subfield></datafield><datafield tag="505" ind1="8" ind2=" "><subfield code="a">Testing Processes and Principles -- Who Is For and Who Is Against? -- Quality Is Team's Responsibility -- Test Everything, Automate Everything -- Why -- How -- Importance of Test Automation -- Who Owns Test Automation? -- Automate in Time -- Apply Best Practices -- Blur the Line -- Test Design and Architecture -- Test Types -- Integration vs. Functional Tests -- Test Case per Requirement -- Test Automation Design Patterns -- Crux of Test Case Patterns -- Gherkin Test Case Pattern -- Scenario Object Pattern -- Page Object Pattern -- Predominant Misuse of Page Object Pattern -- Test Object Pattern -- Layered Test Architecture -- Ubiquitous Language in Test -- Test Data Management -- Unit Test Data -- Integration Test Data -- Functional Test Data -- End-to-End Test Data -- Implementing Automated Tests -- Delayed Automation -- Early Automation -- Enhancing Deployments with Test Automation -- Fast Feedback and Compensating Actions -- Fast Feedback Accuracy -- Continuous Deployment -- Summary -- Chapter 7: Deployment -- Culture of Releases -- Why Release Software? -- Unimportance of Releases -- What Is the Catch? -- CI/CD-Deployment Foundation -- Continuous Integration -- Briefly About Artifacts -- Continuous Deployment -- Building Deployment-Ready Applications -- Developing Deployable Units -- Ensuring Smooth Deployments via CI/CD -- Dev-Prod Parity -- Effects of Containerization on Deployments -- Summary -- Chapter 8: Maintenance and Support -- Maintenance-Free Mindset -- Organization's Approach to Maintenance -- Support-Oriented Organizations -- Award-Winning Support Teams -- Who Prevents Problems? -- Maintenance-Aware Mindset -- Maintaining Applications in Practice -- Fix Root Cause, Not Surface -- Building Blocks of Maintainable Systems -- Summary -- Afterword: Wrap-up -- References -- Index</subfield></datafield><datafield tag="776" ind1="0" ind2="8"><subfield code="i">Erscheint auch als</subfield><subfield code="n">Druck-Ausgabe</subfield><subfield code="a">Tutisani, Tengiz</subfield><subfield code="t">Effective Software Development for the Enterprise</subfield><subfield code="d">Berkeley, CA : Apress L. P.,c2023</subfield><subfield code="z">9781484293843</subfield></datafield><datafield tag="912" ind1=" " ind2=" "><subfield code="a">ZDB-30-PQE</subfield></datafield><datafield tag="943" ind1="1" ind2=" "><subfield code="a">oai:aleph.bib-bvb.de:BVB01-035215653</subfield></datafield><datafield tag="966" ind1="e" ind2=" "><subfield code="u">https://ebookcentral.proquest.com/lib/hwr/detail.action?docID=30550680</subfield><subfield code="l">DE-2070s</subfield><subfield code="p">ZDB-30-PQE</subfield><subfield code="q">HWR_PDA_PQE</subfield><subfield code="x">Aggregator</subfield><subfield code="3">Volltext</subfield></datafield></record></collection>
id DE-604.BV049876203
illustrated Not Illustrated
indexdate 2024-12-24T10:21:35Z
institution BVB
isbn 9781484293850
language English
oai_aleph_id oai:aleph.bib-bvb.de:BVB01-035215653
oclc_num 1380465440
open_access_boolean
owner DE-2070s
owner_facet DE-2070s
physical 1 Online-Ressource (344 Seiten)
psigel ZDB-30-PQE
ZDB-30-PQE HWR_PDA_PQE
publishDate 2023
publishDateSearch 2023
publishDateSort 2023
publisher Apress L. P.
record_format marc
spelling Tutisani, Tengiz Verfasser aut
Effective Software Development for the Enterprise Beyond Domain Driven Design, Software Architecture, and Extreme Programming
1st ed
Berkeley, CA Apress L. P. 2023
©2023
1 Online-Ressource (344 Seiten)
txt rdacontent
c rdamedia
cr rdacarrier
Description based on publisher supplied metadata and other sources
Intro -- Table of Contents -- About the Author -- About the Technical Reviewer -- Acknowledgments -- Preface -- Chapter 1: Introduction -- History of Inefficient Monoliths -- Why People Avoid Building Effective Software -- Learning Curve -- Quality over Quantity -- Highly Paid Experts -- Naive Hopes to Survive -- Software Development Perfectionism as a State of Mind -- Is It Crazy? -- Desire Behind Perfectionism -- Is It Worth It? -- Six Pillars of Effective Software -- #1. Meet Users' Expectations -- #2. Allow No Defects -- #3. Scale Out Horizontally -- #4. Have No Dedicated Production Support Team -- #5. Accelerate Development Pace -- #6. Double the ROI per Developer, Team, and Software -- Summary -- Chapter 2: Cross-cutting Concerns -- Execution, Leadership, Management -- Importance of Software Development Transformation -- How to Achieve Software Development Transformation -- Transformation Is for Everybody -- Ad-Hoc Tasks vs. Process -- Hands-on Leaders -- Overall Support from Management -- Organizational Structure -- A Couple of Important Definitions Upfront -- Forming Organizations -- Forming Subsystems -- Forming Microservices -- Forming Teams -- Feature Teams -- Platform and Infrastructure Teams -- Forming Programs, Projects, Requirements, and Deliveries -- Organizational Silos -- Horizontal Silos -- Vertical Silos -- Autonomy vs. Reuse -- Processes, Ongoing Efforts, Teams -- Agile or Waterfall -- Transparent Teams -- Managing Work in Progress -- One for All, All for One -- Transformation from Inside -- Culture -- Professionalism in Software Development -- Trust -- Delegation of Responsibilities -- Identifying Talent -- Relaxed Team Atmosphere -- Work-Life Balance -- Candid Feedback -- Change of Mind -- Social Aspect of Engineering -- Complexity as Job Safety -- Team Spirit -- Keep It Fun -- Recruitment -- Supporting Role of Recruitment
Hire Best -- Quickly, Fancy, Right -- Corrective vs. Preventive -- Summary -- Chapter 3: From Customer Insights to Internal Requirements -- Understanding Customers' Needs -- Partnership and Customer Focus -- Interview Customers -- Knowledge Exploration Exercises -- Stage #1: Casual Discussions -- Stage #2: Free-Formed Sketches -- Stage #3: Charting the Landscape -- Organization's Response to Customers' Needs -- From Customer Interview to Organizational Transformation -- Navigating the Context Map to Find Fit -- Why Form a New Subdomain? -- Cost of Introducing a Subdomain -- Requirements and Story Writing -- Ubiquitous Language: What Is It? Why Is It Important? -- Who Writes Stories? -- Ubiquitous Language in Requirements -- Writing Executable Specifications -- Halfway into Gherkin -- All the Way into Gherkin -- Planning Work -- Prioritized Backlog -- Feasibility -- Managing Dependencies -- Parent Subdomain Prescribes Child Subdomain Dependencies -- Classify Dependency -- Dependency Goes First -- Dependency Is Functional. Integration Is Technical -- Valuable Stories (Verticals) -- Technical Stories -- Carrying Out Work -- Definition of Done -- Estimates vs. Velocity -- Your Estimate Is Your Deadline -- Achieving Predictability -- Summary -- Chapter 4: Design and Architecture -- Architecture as a Cross-cutting Concern -- Definitions and Purpose -- Software Architecture -- Software Architect -- Is Architecture Dead? -- Brainstorm Before Coding -- Reuse Knowledge -- Architecture as a Service -- Partnership with Domain Experts -- Teams and Microservices -- Architecture Supports Organizational Growth -- Architecture in Analysis and Requirements Gathering -- Upfront Design Supports Gap Analysis -- Doing It in Practice -- Knowledge Exploration and Architecture -- Caveat of a Technical Solution -- Architecture Body of Knowledge -- Architecture Landscape
Buy vs. Build -- Good Architectures -- Doing It in Practice -- It Is Okay to Postpone Decisions -- Architecture and Technology -- True Value of Software -- Is Technology King? -- Domain -- Using Technology -- Vendor Lock-in -- Unavoidable Level of Technology -- Abstractions Can Help -- Beware of Technologists -- Consolidate Technologies -- Domain Model Kinds -- Rich Domain -- Anemic Domain -- Big Ball of Mud -- Domain-Driven vs. Data-Driven -- Other Anti-Patterns -- Life with Anemic Domains -- Layered Software Architecture -- Popular Application Layering Patterns -- How Many Layers? -- Other Popular Layered Architectures -- Microservices -- Clarification of Terminology -- Implementing Microservices -- Integration -- Autonomy and Scale -- Scale Out -- Reusability vs. Duplication -- Evolving an Ecosystem of Microservices -- Monolithic UI Backed by Microservices -- Client-Side UI Composition -- Server-Side Page Fragment Composition -- Command Query Responsibility Segregation (CQRS) -- Employ Rich Domain to Generate Read Models -- Avoid Vendor Lockdown -- Path to Event-Driven Architecture (EDA) -- Building Cloud-Ready Applications -- Twelve-Factor App -- Containerization -- Avoiding Cloud Vendor Lock-In -- Dev-Prod Parity Locally -- Performance -- Performance vs. Clean Design -- Designing Components That Need to Be Fast -- Front-End Application Architecture -- Built-In Security -- Databases -- Database Technology Is Irrelevant to Design -- In-Memory Identity Value Generation -- Application Database vs. Data Warehouse -- Versioned Databases -- Architecture and Implementation -- Tactical DDD -- Evolving Design -- Writing Domain Layer's Code -- Consolidate Development Tools and Languages -- Architecture for Testable Systems -- Testable Code -- Testable Application -- Architecture for Deployable Systems -- Versioning -- Containerization
Architecture for Maintainable Systems -- Mindset Shift-No Tech Debt -- Working Systems -- Common Maintenance Tasks -- Fixing It Twice -- Simple vs. Complex Systems -- Summary -- Chapter 5: Implementation and Coding -- Cross-cutting Concerns Related to Coding -- Professionalism of a Coder -- Put Talent into Important Tasks -- Continuous Improvement -- Continuous Refactoring -- Limit Works in Progress -- Quality vs. Quantity -- Code Reviews -- Designing Code -- Implementation of Architecture -- Code Design Techniques -- Essence of Object-Oriented Programming -- Confusion About OOP -- OOP Distilled -- Purpose of Design Patterns -- Composition vs. Inheritance -- Opportunities for Patterns -- Implementing Code -- Tactical DDD Patterns -- Entity -- Entities That Look Like DTOs -- Active Record Entities -- Module -- Enforcing Modular Architecture -- Repository -- Relational Database Mismatch with Repository -- Non-Relational Database Mismatch with Repository -- How About Reports? -- Factory -- Warning About Gang of Four Factory Patterns -- Command -- Warning About Commands -- Declarative Design in Code -- Front-End Development -- Front-End Repositories and Services -- Hosting Static Assets for Front-end -- Developing for Various Form Factors -- Keep Pushing the Limits -- Exception Handling -- Why Catch Exceptions? -- Why Throw Exceptions? -- Law of Demeter for Exception Handling -- Handling Globally Unhandled Exceptions -- Testing Code -- Unit Testing -- Unit Test Coverage Fallacy -- How Many Unit Tests Are Enough? -- Multiple Asserts in a Single Unit Test -- TDD, ATDD, and BDD -- TDD Is Faster Than Unit Testing -- Commonalities Between TDD, ATDD, and BDD -- Code Deployment and Maintenance -- CI/CD Before Development -- Planning Deployment When Developing -- Planning Maintenance When Developing -- Summary -- Chapter 6: Testing and Quality Assurance
Testing Processes and Principles -- Who Is For and Who Is Against? -- Quality Is Team's Responsibility -- Test Everything, Automate Everything -- Why -- How -- Importance of Test Automation -- Who Owns Test Automation? -- Automate in Time -- Apply Best Practices -- Blur the Line -- Test Design and Architecture -- Test Types -- Integration vs. Functional Tests -- Test Case per Requirement -- Test Automation Design Patterns -- Crux of Test Case Patterns -- Gherkin Test Case Pattern -- Scenario Object Pattern -- Page Object Pattern -- Predominant Misuse of Page Object Pattern -- Test Object Pattern -- Layered Test Architecture -- Ubiquitous Language in Test -- Test Data Management -- Unit Test Data -- Integration Test Data -- Functional Test Data -- End-to-End Test Data -- Implementing Automated Tests -- Delayed Automation -- Early Automation -- Enhancing Deployments with Test Automation -- Fast Feedback and Compensating Actions -- Fast Feedback Accuracy -- Continuous Deployment -- Summary -- Chapter 7: Deployment -- Culture of Releases -- Why Release Software? -- Unimportance of Releases -- What Is the Catch? -- CI/CD-Deployment Foundation -- Continuous Integration -- Briefly About Artifacts -- Continuous Deployment -- Building Deployment-Ready Applications -- Developing Deployable Units -- Ensuring Smooth Deployments via CI/CD -- Dev-Prod Parity -- Effects of Containerization on Deployments -- Summary -- Chapter 8: Maintenance and Support -- Maintenance-Free Mindset -- Organization's Approach to Maintenance -- Support-Oriented Organizations -- Award-Winning Support Teams -- Who Prevents Problems? -- Maintenance-Aware Mindset -- Maintaining Applications in Practice -- Fix Root Cause, Not Surface -- Building Blocks of Maintainable Systems -- Summary -- Afterword: Wrap-up -- References -- Index
Erscheint auch als Druck-Ausgabe Tutisani, Tengiz Effective Software Development for the Enterprise Berkeley, CA : Apress L. P.,c2023 9781484293843
spellingShingle Tutisani, Tengiz
Effective Software Development for the Enterprise Beyond Domain Driven Design, Software Architecture, and Extreme Programming
Intro -- Table of Contents -- About the Author -- About the Technical Reviewer -- Acknowledgments -- Preface -- Chapter 1: Introduction -- History of Inefficient Monoliths -- Why People Avoid Building Effective Software -- Learning Curve -- Quality over Quantity -- Highly Paid Experts -- Naive Hopes to Survive -- Software Development Perfectionism as a State of Mind -- Is It Crazy? -- Desire Behind Perfectionism -- Is It Worth It? -- Six Pillars of Effective Software -- #1. Meet Users' Expectations -- #2. Allow No Defects -- #3. Scale Out Horizontally -- #4. Have No Dedicated Production Support Team -- #5. Accelerate Development Pace -- #6. Double the ROI per Developer, Team, and Software -- Summary -- Chapter 2: Cross-cutting Concerns -- Execution, Leadership, Management -- Importance of Software Development Transformation -- How to Achieve Software Development Transformation -- Transformation Is for Everybody -- Ad-Hoc Tasks vs. Process -- Hands-on Leaders -- Overall Support from Management -- Organizational Structure -- A Couple of Important Definitions Upfront -- Forming Organizations -- Forming Subsystems -- Forming Microservices -- Forming Teams -- Feature Teams -- Platform and Infrastructure Teams -- Forming Programs, Projects, Requirements, and Deliveries -- Organizational Silos -- Horizontal Silos -- Vertical Silos -- Autonomy vs. Reuse -- Processes, Ongoing Efforts, Teams -- Agile or Waterfall -- Transparent Teams -- Managing Work in Progress -- One for All, All for One -- Transformation from Inside -- Culture -- Professionalism in Software Development -- Trust -- Delegation of Responsibilities -- Identifying Talent -- Relaxed Team Atmosphere -- Work-Life Balance -- Candid Feedback -- Change of Mind -- Social Aspect of Engineering -- Complexity as Job Safety -- Team Spirit -- Keep It Fun -- Recruitment -- Supporting Role of Recruitment
Hire Best -- Quickly, Fancy, Right -- Corrective vs. Preventive -- Summary -- Chapter 3: From Customer Insights to Internal Requirements -- Understanding Customers' Needs -- Partnership and Customer Focus -- Interview Customers -- Knowledge Exploration Exercises -- Stage #1: Casual Discussions -- Stage #2: Free-Formed Sketches -- Stage #3: Charting the Landscape -- Organization's Response to Customers' Needs -- From Customer Interview to Organizational Transformation -- Navigating the Context Map to Find Fit -- Why Form a New Subdomain? -- Cost of Introducing a Subdomain -- Requirements and Story Writing -- Ubiquitous Language: What Is It? Why Is It Important? -- Who Writes Stories? -- Ubiquitous Language in Requirements -- Writing Executable Specifications -- Halfway into Gherkin -- All the Way into Gherkin -- Planning Work -- Prioritized Backlog -- Feasibility -- Managing Dependencies -- Parent Subdomain Prescribes Child Subdomain Dependencies -- Classify Dependency -- Dependency Goes First -- Dependency Is Functional. Integration Is Technical -- Valuable Stories (Verticals) -- Technical Stories -- Carrying Out Work -- Definition of Done -- Estimates vs. Velocity -- Your Estimate Is Your Deadline -- Achieving Predictability -- Summary -- Chapter 4: Design and Architecture -- Architecture as a Cross-cutting Concern -- Definitions and Purpose -- Software Architecture -- Software Architect -- Is Architecture Dead? -- Brainstorm Before Coding -- Reuse Knowledge -- Architecture as a Service -- Partnership with Domain Experts -- Teams and Microservices -- Architecture Supports Organizational Growth -- Architecture in Analysis and Requirements Gathering -- Upfront Design Supports Gap Analysis -- Doing It in Practice -- Knowledge Exploration and Architecture -- Caveat of a Technical Solution -- Architecture Body of Knowledge -- Architecture Landscape
Buy vs. Build -- Good Architectures -- Doing It in Practice -- It Is Okay to Postpone Decisions -- Architecture and Technology -- True Value of Software -- Is Technology King? -- Domain -- Using Technology -- Vendor Lock-in -- Unavoidable Level of Technology -- Abstractions Can Help -- Beware of Technologists -- Consolidate Technologies -- Domain Model Kinds -- Rich Domain -- Anemic Domain -- Big Ball of Mud -- Domain-Driven vs. Data-Driven -- Other Anti-Patterns -- Life with Anemic Domains -- Layered Software Architecture -- Popular Application Layering Patterns -- How Many Layers? -- Other Popular Layered Architectures -- Microservices -- Clarification of Terminology -- Implementing Microservices -- Integration -- Autonomy and Scale -- Scale Out -- Reusability vs. Duplication -- Evolving an Ecosystem of Microservices -- Monolithic UI Backed by Microservices -- Client-Side UI Composition -- Server-Side Page Fragment Composition -- Command Query Responsibility Segregation (CQRS) -- Employ Rich Domain to Generate Read Models -- Avoid Vendor Lockdown -- Path to Event-Driven Architecture (EDA) -- Building Cloud-Ready Applications -- Twelve-Factor App -- Containerization -- Avoiding Cloud Vendor Lock-In -- Dev-Prod Parity Locally -- Performance -- Performance vs. Clean Design -- Designing Components That Need to Be Fast -- Front-End Application Architecture -- Built-In Security -- Databases -- Database Technology Is Irrelevant to Design -- In-Memory Identity Value Generation -- Application Database vs. Data Warehouse -- Versioned Databases -- Architecture and Implementation -- Tactical DDD -- Evolving Design -- Writing Domain Layer's Code -- Consolidate Development Tools and Languages -- Architecture for Testable Systems -- Testable Code -- Testable Application -- Architecture for Deployable Systems -- Versioning -- Containerization
Architecture for Maintainable Systems -- Mindset Shift-No Tech Debt -- Working Systems -- Common Maintenance Tasks -- Fixing It Twice -- Simple vs. Complex Systems -- Summary -- Chapter 5: Implementation and Coding -- Cross-cutting Concerns Related to Coding -- Professionalism of a Coder -- Put Talent into Important Tasks -- Continuous Improvement -- Continuous Refactoring -- Limit Works in Progress -- Quality vs. Quantity -- Code Reviews -- Designing Code -- Implementation of Architecture -- Code Design Techniques -- Essence of Object-Oriented Programming -- Confusion About OOP -- OOP Distilled -- Purpose of Design Patterns -- Composition vs. Inheritance -- Opportunities for Patterns -- Implementing Code -- Tactical DDD Patterns -- Entity -- Entities That Look Like DTOs -- Active Record Entities -- Module -- Enforcing Modular Architecture -- Repository -- Relational Database Mismatch with Repository -- Non-Relational Database Mismatch with Repository -- How About Reports? -- Factory -- Warning About Gang of Four Factory Patterns -- Command -- Warning About Commands -- Declarative Design in Code -- Front-End Development -- Front-End Repositories and Services -- Hosting Static Assets for Front-end -- Developing for Various Form Factors -- Keep Pushing the Limits -- Exception Handling -- Why Catch Exceptions? -- Why Throw Exceptions? -- Law of Demeter for Exception Handling -- Handling Globally Unhandled Exceptions -- Testing Code -- Unit Testing -- Unit Test Coverage Fallacy -- How Many Unit Tests Are Enough? -- Multiple Asserts in a Single Unit Test -- TDD, ATDD, and BDD -- TDD Is Faster Than Unit Testing -- Commonalities Between TDD, ATDD, and BDD -- Code Deployment and Maintenance -- CI/CD Before Development -- Planning Deployment When Developing -- Planning Maintenance When Developing -- Summary -- Chapter 6: Testing and Quality Assurance
Testing Processes and Principles -- Who Is For and Who Is Against? -- Quality Is Team's Responsibility -- Test Everything, Automate Everything -- Why -- How -- Importance of Test Automation -- Who Owns Test Automation? -- Automate in Time -- Apply Best Practices -- Blur the Line -- Test Design and Architecture -- Test Types -- Integration vs. Functional Tests -- Test Case per Requirement -- Test Automation Design Patterns -- Crux of Test Case Patterns -- Gherkin Test Case Pattern -- Scenario Object Pattern -- Page Object Pattern -- Predominant Misuse of Page Object Pattern -- Test Object Pattern -- Layered Test Architecture -- Ubiquitous Language in Test -- Test Data Management -- Unit Test Data -- Integration Test Data -- Functional Test Data -- End-to-End Test Data -- Implementing Automated Tests -- Delayed Automation -- Early Automation -- Enhancing Deployments with Test Automation -- Fast Feedback and Compensating Actions -- Fast Feedback Accuracy -- Continuous Deployment -- Summary -- Chapter 7: Deployment -- Culture of Releases -- Why Release Software? -- Unimportance of Releases -- What Is the Catch? -- CI/CD-Deployment Foundation -- Continuous Integration -- Briefly About Artifacts -- Continuous Deployment -- Building Deployment-Ready Applications -- Developing Deployable Units -- Ensuring Smooth Deployments via CI/CD -- Dev-Prod Parity -- Effects of Containerization on Deployments -- Summary -- Chapter 8: Maintenance and Support -- Maintenance-Free Mindset -- Organization's Approach to Maintenance -- Support-Oriented Organizations -- Award-Winning Support Teams -- Who Prevents Problems? -- Maintenance-Aware Mindset -- Maintaining Applications in Practice -- Fix Root Cause, Not Surface -- Building Blocks of Maintainable Systems -- Summary -- Afterword: Wrap-up -- References -- Index
title Effective Software Development for the Enterprise Beyond Domain Driven Design, Software Architecture, and Extreme Programming
title_auth Effective Software Development for the Enterprise Beyond Domain Driven Design, Software Architecture, and Extreme Programming
title_exact_search Effective Software Development for the Enterprise Beyond Domain Driven Design, Software Architecture, and Extreme Programming
title_full Effective Software Development for the Enterprise Beyond Domain Driven Design, Software Architecture, and Extreme Programming
title_fullStr Effective Software Development for the Enterprise Beyond Domain Driven Design, Software Architecture, and Extreme Programming
title_full_unstemmed Effective Software Development for the Enterprise Beyond Domain Driven Design, Software Architecture, and Extreme Programming
title_short Effective Software Development for the Enterprise
title_sort effective software development for the enterprise beyond domain driven design software architecture and extreme programming
title_sub Beyond Domain Driven Design, Software Architecture, and Extreme Programming
work_keys_str_mv AT tutisanitengiz effectivesoftwaredevelopmentfortheenterprisebeyonddomaindrivendesignsoftwarearchitectureandextremeprogramming