เป็นการแนวทางออกแบบที่ช่วยให้การปรับปรุงและการบำรุงรักษาซอฟต์แวร์สามารถทำได้อย่างมีประสิทธิภาพ โดยการใช้แนวคิดของการแสดงภาพสรุป (abstraction) การแยกองค์ประกอบ (decomposition) การซ่อนการทำงาน (encapsulation) การซ่อนข้อมูล (information hiding) การนำเสนอ (representation) การใช้ API การใช้ REST การเชื่อมต่อและการทำงานร่วมกัน (couplings and cohesion) และการใช้หลักการ SOLID ในการออกแบบ รวมถึงการใช้ไดอะแกรมเพื่อตรวจสอบความผิดพลาดในการออกแบบ
การแสดงภาพสรุป (abstraction) เป็นการนำเสนอสิ่งที่ซับซ้อนในรูปแบบที่เรียบง่ายโดยมุ่งเน้นการนำเสนอสิ่งที่สำคัญหรือปัญหาที่สนใจเท่านั้น เช่น ในมุมของการสื่อสารกับทีมงาน เวลาที่เราคุยกับผู้ออกแบบหน้าจอ เราจะพูดคุยเกี่ยวกับมุมมองของการใช้งานโดยไม่พูดถึงสถาปัตยกรรมของระบบ และเมื่อเราคุยกับฝ่ายประกันคุณภาพเราจะพูดคุยเกี่ยวกับการทดสอบ เป็นต้น หรือในมุมของการเขียนโปรแกรมเชิงวัตถุ คลาสจะเป็นภาพรวมของออบเจกต์ที่มีลักษณะและพฤติกรรมคล้ายคลึงกันโดยเน้นไปที่ลักษณะทั่วไปและพฤติกรรมที่ใช้ร่วมกัน
โครงสร้างของภาษาโปรแกรม (language structure) เป็นการเข้าใจความสามารถของภาษาโปรแกรมและนำมาใช้ในการเขียนโปรแกรมอย่างมีโครงสร้างโดยใช้ คลาส เมธอด ฟังก์ชั่น ซึ่งการเขียนโปรแกรมอย่างมีโครงสร้างจะช่วยให้การปรับปรุงซอฟต์แวร์ในภายหลังง่ายขึ้นโดยทีมพัฒนาไม่ต้องเสียเวลามากในการทำความเข้าใจว่าโปรแกรมทำงานอย่างไร เช่น การใช้ออบเจกต์ promise แทนการใช้ asynchronous callback
การแยกองค์ประกอบ (decomposition) เป็นการแยกย่อยองค์ประกอบสิ่งที่ต้องการจะสร้างซึ่งเราสามารถแยกลงไปจนได้คลาส เมธอด และฟิลด์ ยิ่งสามารถแยกย่อยจนองค์ประกอบนั้นเป็นอิสระคือมีสเปก อินเตอร์เฟส ชุดทดสอบ เป็นของตนเองได้ยิ่งดี แน่นอนว่าอาจจะมีบางเรื่องที่ยังคงมีความซับซ้อนแต่มันควรจะน้อยมากๆ การแยกองค์ประกอบสามารถทำได้ 2 แบบคือจากบนลงล่าง (top-down decompsition) คือเริ่มจากสิ่งที่ต้องการและแตกแยกย่อยออกมาเป็นองค์ประกอบที่ต้องมี ปัญหาที่อาจจะพบคือเมื่อเราเข้าสู่การออกแบบในรายละเอียด (low-level design) เป็นไปได้ว่าการออกแบบบางอย่างอาจจะขัดแย้งกัน เช่น กิจกรรมบางอย่างอาจจะไม่เหมาะที่จะอยู่ในคลาสตามที่กำหนดมาในขั้นตอนการออกแบบภาพรวม เพราะในขั้นตอนดังกล่าวนั้นส่วนใหญ่จะเป็นการตัดสินใจในเบื้องต้นซึ่งอาจจจะไม่เหมาะสมก็ได้ อีกแบบหนึ่งคือจากล่างขึ้นบน (bottom-up compoistion) เป็นการออกแบบส่วนย่อยๆแล้วค่อยๆนำมารวมกันจนได้ภาพใหญ่ที่ต้องการ วิธีนี้จะช่วยให้เราสามารถออกแบบโปรแกรมที่นำกลับมาใช้ใหม่ (reuse) ได้ค่อนข้างดี แต่ปัญหาที่อาจจะพบคือเราอาจจะได้ภาพใหญ่ที่อาจจะเบี่ยงออกไปจากความต้องการบ้าง
การซ่อนการทำงาน (encapsulation) เป็นวิธีการที่เราซ่อนรายละเอียดภายในของออบเจกต์หรือโมดูลจากโลกภายนอก และเปิดเผยเฉพาะชุดอินเทอร์เฟซหรือสิ่งที่เป็นภาพรวมที่กำหนดไว้เท่านั้น โดยเราจะเก็บข้อมูลและเมธอดไว้ในคลาสซึ่งแสดงถึงพิมพ์เขียวสำหรับการสร้างวัตถุซึ่ง ข้อมูลจะถูกเก็บไว้เป็นส่วนตัว (private) และการเข้าถึงจะถูกควบคุมโดยวิธีการหรือคุณสมบัติที่เป็นสาธารณะ (public) ทำให้รายละเอียดการใช้งานถูกซ่อนจากโปรแกรมภายนอก โดยโปรแกรมภายนอกสามารถโต้ตอบกับออบเจกต์ผ่านอินเทอร์เฟซที่กำหนดเท่านั้น
การซ่อนข้อมูล (information hiding) เป็นการซ่อนรายละเอียดของการใช้งานหรือการทำงานภายในของโมดูลหรือส่วนประกอบจากโลกภายนอก เป้าหมายของการซ่อนข้อมูลคือการลดความซับซ้อนของระบบซอฟต์แวร์โดยการสรุปรายละเอียดการใช้งานและเปิดเผยเฉพาะชุดอินเทอร์เฟซหรือภาพสรุปที่กำหนดไว้ซึ่งคอมโพเนนต์หรือโมดูลอื่นๆสามารถนำไปใช้ได้ การซ่อนข้อมูลสามารถทำได้ผ่านวิธีการต่างๆ เช่น การห่อหุ้ม (encapsulation) การแสดงภาพรวม (abstarction) การแบ่งโปรแกรมออกเป็นโมดูล (modularity) และการแยกส่วนที่แตกต่างออกมา (separation of concerns) การนำเสนอ (representation) จากสเปกที่ได้มาคำอธิบายในสเปกนั้นไม่สามารถนำมาใช้เขียนโปรแกรมได้โดยตรง แต่ต้องผ่านขั้นตอนการออกแบบซึ่งจะเป็นการกำหนดว่าจะเขียนโปแกรมอย่างไร จึงต้องแปลงข้อมูลจากสเปกไปเป็นการออกแบบซึ่งอธิบายด้วยรูปแบบไดอะแกรมซึ่งจะประกอบด้วยกล่องรูปทรงต่างๆและลูกศรที่บอกทิศทางการทำงานซึ่งจะอธิบายขั้นตอนการทำงานของโปรแกรม รวมถึงระบุในรายละเอียดว่าต้องมีคลาสอะไร เมธอดอะไร ฟิลด์อะไร ส่วนใดต้องปกปิด ส่วนใดต้องเปิดเป็นสาธารณะ จากไดอะแกรมจึงจะไปสู่การเขียนโปรแกรม ดังนั้นจะเห็นว่าจากแนวคิดมาสู่การเขียนโปรแกรมเป็นการเปลี่ยนผ่านจากภาพรวม (abstract) มาสู่สิ่งที่จับต้องได้ (concrete) แต่ในระหว่างการพัฒนาอาจจะมีสิ่งที่ต้องทบทวนย้อนกลับไปยังสเปก ดังนั้นอาจจะมีความยุ่งยากอยู่บ้างในการพยายามอธิบายส่วนของโปรแกรมในรูปแบบภาพรวมเพราะผู้ใช้งานจะไม่เข้าใจภาษาโปรแกรม นอกจากนี้แต่ละฝ่ายที่ร่วมงานกันอยู่อาจจะสนใจเอกสารคนละแบบ เช่น ฝ่ายประกันคุณภาพอาจจะสนใจไดอะแกรม ขณะที่ผู้ใช้งานจะสนใจเสปกมากกว่า