Podcast
Questions and Answers
Which of the following is NOT a method to break foreign key relationships?
Which of the following is NOT a method to break foreign key relationships?
What does an architectural smell indicate?
What does an architectural smell indicate?
Which refactoring method is associated with the principle of Independent Deployability?
Which refactoring method is associated with the principle of Independent Deployability?
Which addition is NOT a suggested refactoring for improving Horizontal Scalability?
Which addition is NOT a suggested refactoring for improving Horizontal Scalability?
Signup and view all the answers
Which of the following is a refactoring strategy for the principle of Isolation of Failures?
Which of the following is a refactoring strategy for the principle of Isolation of Failures?
Signup and view all the answers
What is the main purpose of the Agile project management framework?
What is the main purpose of the Agile project management framework?
Signup and view all the answers
Which principle emphasizes the importance of continuous delivery in Agile development?
Which principle emphasizes the importance of continuous delivery in Agile development?
Signup and view all the answers
In the context of Scrum, what is the role of the Product Owner?
In the context of Scrum, what is the role of the Product Owner?
Signup and view all the answers
Which of the following is NOT a pillar of Scrum?
Which of the following is NOT a pillar of Scrum?
Signup and view all the answers
What is the main focus of Extreme Programming (XP) in the software development process?
What is the main focus of Extreme Programming (XP) in the software development process?
Signup and view all the answers
What does 'self-organizing teams' imply in Agile principles?
What does 'self-organizing teams' imply in Agile principles?
Signup and view all the answers
Which statement best describes the concept of 'Continuous Integration' in Extreme Programming?
Which statement best describes the concept of 'Continuous Integration' in Extreme Programming?
Signup and view all the answers
Which aspect is prioritized according to the Agile Manifesto?
Which aspect is prioritized according to the Agile Manifesto?
Signup and view all the answers
Which of the following are advantages of using Software as a Service (SaaS)?
Which of the following are advantages of using Software as a Service (SaaS)?
Signup and view all the answers
What is a primary drawback of multi-tenant systems?
What is a primary drawback of multi-tenant systems?
Signup and view all the answers
Which of the following best describes microservices architecture?
Which of the following best describes microservices architecture?
Signup and view all the answers
What is a potential issue with multi-instance systems?
What is a potential issue with multi-instance systems?
Signup and view all the answers
Which of the following describes synchronous service interaction?
Which of the following describes synchronous service interaction?
Signup and view all the answers
What is a common security concern with multi-tenant systems?
What is a common security concern with multi-tenant systems?
Signup and view all the answers
What are the implications of using asynchronous service communication?
What are the implications of using asynchronous service communication?
Signup and view all the answers
Which of the following is a feature of container-based systems?
Which of the following is a feature of container-based systems?
Signup and view all the answers
What is the characteristic of data sharing among microservices?
What is the characteristic of data sharing among microservices?
Signup and view all the answers
According to the CAP Theorem, what can a web service not provide at the same time?
According to the CAP Theorem, what can a web service not provide at the same time?
Signup and view all the answers
What is a key feature of the Saga Pattern?
What is a key feature of the Saga Pattern?
Signup and view all the answers
How can compensating transactions be handled when a transaction fails?
How can compensating transactions be handled when a transaction fails?
Signup and view all the answers
Which type of failure is characterized by issues affecting the availability of a service?
Which type of failure is characterized by issues affecting the availability of a service?
Signup and view all the answers
What is a common problem with monolithic applications?
What is a common problem with monolithic applications?
Signup and view all the answers
What is the first step in splitting a monolithic application into microservices?
What is the first step in splitting a monolithic application into microservices?
Signup and view all the answers
What is the purpose of using tools like Hibernate in database management?
What is the purpose of using tools like Hibernate in database management?
Signup and view all the answers
What contributes to feature creep in software development?
What contributes to feature creep in software development?
Signup and view all the answers
Which of the following best describes a service in software architecture?
Which of the following best describes a service in software architecture?
Signup and view all the answers
What is meant by 'Separation of Concerns' in software design?
What is meant by 'Separation of Concerns' in software design?
Signup and view all the answers
Which non-functional quality attribute is related to the software’s ability to perform under expected conditions?
Which non-functional quality attribute is related to the software’s ability to perform under expected conditions?
Signup and view all the answers
How does software compatibility affect software design?
How does software compatibility affect software design?
Signup and view all the answers
In a Model-View-Controller (MVC) architecture, which component is responsible for updating the views?
In a Model-View-Controller (MVC) architecture, which component is responsible for updating the views?
Signup and view all the answers
What is a critical factor when choosing technologies for a system?
What is a critical factor when choosing technologies for a system?
Signup and view all the answers
What does controlling complexity in a software system require as components increase?
What does controlling complexity in a software system require as components increase?
Signup and view all the answers
Study Notes
Agile
- Agile is a project management framework.
- It breaks down project development into dynamic phases, focusing on rapid product delivery.
- Key principles focus on individuals, working software, customer collaboration, and responding to change.
- Based on incremental development and delivery.
Agile Manifesto
- Values individuals and interactions over processes and tools.
- Prioritizes working software over comprehensive documentation.
- Emphasizes customer collaboration over contract negotiation.
- Values responding to change over following a plan.
Software Development Process
- Define a product feature list.
- Select one feature for the next development increment.
- Refine the feature description.
- Implement the feature and write automated tests.
- Integrate the feature into the system and run general tests.
- Deliver the system increment or a full system release if all features are complete.
12 Agile Principles
- Deliver software early and continuously.
- Welcome changing requirements, even late in the development cycle.
- Deliver working software frequently, using it as the primary measure of progress.
- Business people and developers must work together throughout the project.
- Simplicity – the art of maximizing the amount of work not done – is essential.
- Self-organizing teams are the best way to build software.
- The team reflects on how to become more effective and adjusts its behavior accordingly.
Extreme Programming (XP)
- A development technique based on incremental planning and user stories.
- User stories are written with a customer representative.
- Small releases, with minimal features, are implemented first.
- Frequent and small releases follow the initial release.
- Test-driven development is emphasized, writing tests before code to define expected behavior.
- Continuous integration ensures that as soon as a task is completed, it is integrated into the system and automatically tested.
- Refactoring, improving code structure, readability, efficiency, and security, is continuously performed.
Scrum
- A lightweight framework for organizing projects.
- Defines roles, including the Development Team, Product Owner, and Scrum Master.
- Uses a Product Backlog as a to-do list of items (PBIs), such as bug fixes, features, and improvements.
- Implements Sprints, which are 1-4 weeks long development cycles for product increments.
- Holds daily Scrum meetings to assess progress and discuss daily work.
Scrum Pillars
- Transparency: All information should be readily available to everyone.
- Inspection: Artifacts and progress should be frequently inspected.
- Adaptation: Adjust actions to improve effectiveness.
Knowledge Sources
- User: User stories and scenarios.
- Technology: Utilizing new technologies.
- Product: Experience with existing products and research on them.
- Domain: Expertise in the relevant work area (e.g., finance, event booking).
Tradeoff Factors
- Simplicity vs. Functionality
- Control vs. Automation
- Familiarity vs. Novelty
Feature Creep
- The tendency for features to grow exponentially as user needs and demands increase, often leading to issues with complexity and project scope.
Software Architecture
Definitions:
- Component: An element of a project implementing a set of features. It may be a collection of services used by other components.
- Module: A set of components providing a specific service.
- Service: A coherent unit of functionality.
Design Issues:
- Non-functional product characteristics: Security, performance, maintainability, etc.
- Product lifetime: The product's ability to evolve.
- Software reuse: Leverage existing components or open-source software.
- Number of users: Scalability for varying user populations.
- Software compatibility: Maintaining compatibility with existing systems.
Non-Functional Quality Attributes
- Responsiveness: How quickly the system responds to requests.
- Reliability: Consistent performance as expected.
- Availability: Continuous service delivery.
- Security: Protecting the system and user data.
- Maintainability: Ease of updating and adding features.
- Resilience: Continued operation despite failures or attacks.
Controlling Complexity
- Complexity increases rapidly as the number of components grow.
- Decomposition of components is essential for managing complexity.
- Technology choices should be made carefully, considering their impact on the overall system architecture.
Design Guidelines
- Separation of Concerns: Assign distinct responsibilities to different components.
- Implement Once: Avoid redundant code by reusing existing components.
- Stable Interfaces: Ensure consistent interactions between components.
Distribution Architecture
Client-Server:
- Clients access shared databases to perform logic operations on the data.
- Example: Web applications with a server managing data requests from clients.
Model-View-Controller (MVC):
- Client: Browser – Controller – View
- Server: Model
- The model is decoupled from its presentation.
- Each view registers with the model, requiring refreshing when the model changes.
Technology Choices
- Influences the overall system architecture and can be costly and difficult to change during development.
Salesforce Example
SaaS (Software as a Service) Benefits:
- Periodic cash flow from subscriptions, providing payment flexibility.
- Updates are automatically received by all clients simultaneously.
- New versions can be deployed immediately after testing.
- User data collection is simplified.
SaaS Customer Perspective:
- Pros: Accessible from multiple devices, no upfront costs, immediate updates.
- Cons: Privacy regulations, security concerns, network constraints, vendor lock-in.
Multi-Tenant Systems
- Users share a single database schema.
- Items are tagged with user identifiers to provide isolation.
Pros:
- Resource utilization optimization.
- Simplified update management for a single database.
- Customizable user interfaces through user profiles.
Cons:
- Infexibility due to a fixed schema for all users.
- Security concerns as the database is a single point of failure.
- Limited scalability.
Multi-Instance Systems
- Individuals have their own customized systems, including database type and security controls.
VM-Based:
- Software and database operate on client virtual machines.
- Suitable for 24/7 data access and frequent data sharing.
Container-Based:
- Isolated software and database running in containers.
- Suitable for microservices architectures with minimal data sharing.
Pros:
- Greater flexibility and scalability for customer-specific needs.
- Enhanced security and resilience through data isolation.
Cons:
- Higher cost due to the use of cloud virtual machines.
- Complex update management that affects multiple instances.
Microservices Architecture
- Microservices are small, stateless services with a single responsibility.
- Low coupling ensures minimal dependencies between services.
- High cohesion reduces inter-service communication requirements.
- Individual services are scalable and can be independently developed.
- Development time for a microservice is estimated at 2 weeks with a team of 8-10 developers.
Service Interaction:
- Synchronous: One service directly calls another and waits for a response.
- Asynchronous: A request is pushed into a queue, with the response given later through a different queue.
Service Communication:
- Direct: Messages are directly sent to a service's address.
- Indirect: Messages are sent to a message broker that forwards them to recipients.
Data Distribution and Sharing:
- Each microservice manages its own data.
- Data sharing should be minimal and primarily read-only, with dedicated services responsible for updates.
- Mechanisms to update replicated data should be in place.
- Tolerance to some data inconsistency is expected.
CAP Theorem
- It's impossible for a web service to simultaneously guarantee:
- Consistency: All services return the correct response to each request.
- Availability: All requests eventually receive a response.
- Partition-tolerance: Tolerance for delayed or lost messages between services.
Saga Pattern
- Each business transaction spanning multiple services is implemented as a Saga.
- A Saga is a sequence of local transactions within a larger transaction.
- If a local transaction fails, compensating transactions are used.
Saga Coordination:
- Choreography: Local transaction publishes an event, triggering subsequent transactions.
- Orchestration: A coordinator manages the execution of local transactions.
Compensating Failed Transactions:
- Backward model: Undo changes made by previously executed transactions.
- Forward model: Implement a "retry later" policy for the failed transaction.
Failure Management
- Unexpected failures are inevitable.
Types of Service Failures:
- Internal: Detected by the service and reportable to the requestor.
- External: Impact the availability of the service.
- Performance: Heavy loads leading to slow or unresponsive service.
Splitting the Monolith
- Monolithic applications are appropriate only when updates are infrequent.
Problems with Monolithic Applications:
- Long lifetime requires inevitable updates.
- Low code cohesion, even if unrelated code is kept together.
- Small changes may require redeployment of the entire monolith.
Solution:
- Identify separation points between services, representing "seams" within the monolith.
- Create packages for each service context and move the code accordingly.
Splitting Databases
- Understand which parts of the code read and write from the database.
- Detect database constraints.
- Break foreign key relationships using techniques like exposing data via APIs, shared static data, or shared mutable data handled by a dedicated service.
Architectural Smells and Refactoring
- Architectural Smell: A commonly used architectural decision that negatively impacts system quality attributes.
- Design Principles: Blueprint for architectural design.
- Architectural Smells: Indicator that the design deviates from principles.
- Refactoring: Strategies to align code with design principles.
Example Smell-Refactoring Pairs:
-
Independent Deployability: Refactoring: Pack each service into a separate container.
-
Horizontal Scalability:
- Refactoring: Add service discovery.
- Refactoring: Add a message router (load balancer).
- Refactoring: Add a message broker (message queue).
-
No API Gateway:
- Refactoring: Add an API gateway at the edge of the architecture.
-
Isolation of Failures:
- Refactoring: Add a message broker (failure tolerance).
- Refactoring: Implement a circuit breaker.
- Refactoring: Use timeouts.
- Refactoring: Implement a bulkhead.
-
Decentralization:
- Refactoring: Split the database (eventual consistency).
- Refactoring: Add a data manager.
- Refactoring: Merge services.
- Refactoring: Split teams by service.
Studying That Suits You
Use AI to generate personalized quizzes and flashcards to suit your learning preferences.
Related Documents
Description
This quiz covers the fundamentals of Agile project management, including its key principles and the Agile Manifesto. Learn about the software development process in Agile and the 12 guiding principles that help teams deliver software effectively. Test your understanding of how Agile enhances collaboration and adaptability in projects.