Deep Dive Engineering Flashcards
key drivers for conceptualizing collaboration and communication
- Greater knowledge sharing and innovation:
- Provides each team member a 360-degree view
- Reduces duplication of effort
- Supports coordination activities and workflow
- Supports Quality Assurance
key mechanisms for collaboration
- Screen Sharing
- Screen Casts (recorded videos)
- Screen Shots
- Mockups (text files, paper, Microsoft excel)
key mechanisms for Communication
- Video Conversation
- Audio Conversation
- Instant Messaging
YAGNI
You Aren’t Gonna Need It
Usually used in combination with refactoring and Test Driven Development.
SOLID
Single Responsibility Principle, maximize cohesion
Open/Closed Principle:
“software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification”;
Liskov Substitution Principle
“Functions that use pointers or references to base classes must be able to use objects of derived classes without knowing it.”
Interface Segregation Principle:
“clients should not depend on the interface that they don’t use”
Dependency Inversion Principle:
If a class has dependencies on other classes, it should rely on the dependencies’ interfaces rather than their concrete types.
Refactoring
a disciplined technique for restructuring an existing body of code, altering its internal structure without changing its external behavior
- Remove duplication and unused code
- Increase abstraction
- Change to code structure to make it modular and simpler
- Increase reuse or implementing design patterns
- Increase cohesion, reduce coupling
- Change poor design or code
- Implement coding standards
Techniques used for defining system architecture
- Expert Judgment
- Whiteboard, AIP diagram
- Existing Enterprise Guidelines & Constraints
design techniques used for JIT
- Expert Judgment
- Whiteboard
three key aspects of adoption of DevOps
- people,
- process
- technology
Component Tests
verify portions of a system such as database, file systems, or network end points
System Tests
These tests exercise a complete software system including external interfaces