Skip to content

Instantly share code, notes, and snippets.

Show Gist options
  • Save explicitcontextualunderstanding/3beaf682642e6ee20e4a7363f9143089 to your computer and use it in GitHub Desktop.
Save explicitcontextualunderstanding/3beaf682642e6ee20e4a7363f9143089 to your computer and use it in GitHub Desktop.

Revisions

  1. explicitcontextualunderstanding created this gist Jan 26, 2025.
    117 changes: 117 additions & 0 deletions gistfile1.txt
    Original file line number Diff line number Diff line change
    @@ -0,0 +1,117 @@
    - Assessing the quality of a software architecture from a repository requires a multi-faceted approach. You need prompts that explore different aspects of the architecture. Here are some prompts categorized for clarity:
    - **I. Understanding and Clarity:**
    - * **High-Level Overview:**
    * "Can you provide a high-level diagram or description of the main components and their interactions?"
    * "What are the core responsibilities of this system?"
    * "What are the major architectural patterns or styles used (e.g., microservices, layered, event-driven)?"
    * "Explain the rationale behind choosing this specific architectural approach."
    * "What are the key architectural decisions that were made early on, and why?"
    * **Component Deep Dive:**
    * "Choose a key component. Can you describe its purpose, inputs, outputs, and dependencies?"
    * "How are different modules or services organized? What are the boundaries and responsibilities of each?"
    * "Explain the communication mechanisms between different components (e.g., REST, gRPC, message queues)."
    * "How is state managed within the system and across components?"
    * **Information Flow:**
    * "Trace the journey of a specific request or data point through the system."
    * "How is data transformed and validated as it moves through the architecture?"
    * "Describe the error handling mechanisms at different architectural levels."

    - **II. Maintainability and Evolution:**
    - * **Modularity and Cohesion:**
    * "How easy is it to understand and modify a single component without affecting others?"
    * "Are components well-defined with clear responsibilities and high cohesion?"
    * "Are there any components that seem to have too many responsibilities?"
    * "How are common functionalities or concerns (e.g., logging, authentication) handled across the system?"
    * **Loose Coupling:**
    * "How coupled are the different components? What would be the impact of changing one component on others?"
    * "Are there any circular dependencies between components?"
    * "Are interfaces well-defined and stable?"
    * "How are changes in external dependencies managed?"
    * **Extensibility and Adaptability:**
    * "Imagine you need to add a new feature [describe a plausible feature]. How would the current architecture accommodate it?"
    * "How easy is it to integrate with other systems or services?"
    * "Is the architecture flexible enough to adapt to changing business requirements or technology trends?"
    * **Code Readability and Conventions:**
    * "Review a randomly selected module. Is the code clear, well-commented, and consistent?"
    * "Are there established coding standards and architectural guidelines? How well are they followed?"
    * "Is the naming convention consistent and meaningful across the codebase?"

    - **III. Scalability and Performance:**
    * **Scalability Strategies:**
    * "How does the architecture support scaling to handle increased load (both horizontally and vertically)?"
    * "Are there any potential bottlenecks in the architecture?"
    * "How are resources (e.g., databases, caches) scaled?"
    * "Is the system designed for concurrency and parallelism?"
    * **Performance Considerations:**
    * "What are the key performance metrics for the system?"
    * "Are there any built-in monitoring or tracing capabilities to identify performance issues?"
    * "Are there any obvious performance anti-patterns present in the architecture?"
    * "How is caching implemented and managed?"

    - **IV. Security:**
    - * **Security Principles:**
    * "How are security concerns addressed at the architectural level?"
    * "What are the key security considerations for each component or layer?"
    * "Are there any potential security vulnerabilities inherent in the architecture?"
    * "How is authentication and authorization handled?"
    * **Data Security:**
    * "How is sensitive data protected at rest and in transit?"
    * "Are there mechanisms in place to prevent common security attacks (e.g., SQL injection, cross-site scripting)?"

    - **V. Testability:**
    * **Testability of Components:**
    * "How easy is it to write unit tests for individual components?"
    * "Are components designed to be easily mockable or stubbed for testing purposes?"
    * **Integration Testing:**
    * "How are interactions between different components tested?"
    * "Is there a clear strategy for integration testing?"
    * **End-to-End Testing:**
    * "How is the overall system tested from an end-user perspective?"
    * "Is the architecture conducive to end-to-end testing?"

    - **VI. Dependencies and Coupling:**
    * **Dependency Management:**
    * "How are dependencies between components managed and tracked?"
    * "Are there any unnecessary or overly complex dependencies?"
    * "Are dependency injection or other inversion of control principles used effectively?"
    * **External Dependencies:**
    * "What are the external dependencies of the system (e.g., libraries, frameworks, third-party services)?"
    * "How are these dependencies managed and versioned?"
    * "What is the strategy for handling potential failures or changes in external dependencies?"

    - **VII. Technology Choices:**
    * **Rationale for Technologies:**
    * "Explain the rationale behind the choice of specific technologies and frameworks used in the architecture."
    * "Were alternative technologies considered? Why were the current choices made?"
    * "Are the chosen technologies appropriate for the problem being solved and the team's skillset?"
    * **Technology Consistency:**
    * "Is there a consistent use of technologies and patterns across the system?"
    * "Are there any areas where the technology choices seem mismatched or inconsistent?"

    - **VIII. Documentation and Communication:**
    * **Architectural Documentation:**
    * "Is there up-to-date documentation describing the architecture?"
    * "Is the documentation clear, concise, and easy to understand?"
    * "Does the documentation cover the key architectural decisions and rationale?"
    * **Communication of Architecture:**
    * "How is the architecture communicated to new team members or stakeholders?"
    * "Are there any regular architecture review sessions or discussions?"

    - **IX. Code-Level Structure:**
    * **Adherence to Principles:**
    * "Does the code follow SOLID principles or other relevant design principles?"
    * "Are there any obvious violations of these principles?"
    * "Is there evidence of code duplication or other code smells?"
    * **Use of Design Patterns:**
    * "Are appropriate design patterns used where applicable?"
    * "Are the patterns implemented correctly?"

    - **How to Use These Prompts:**
    * **Adapt to your context:** Not all prompts will be relevant to every project. Select the ones that are most important for your specific needs and goals.
    * **Encourage discussion:** These prompts are starting points for conversation and exploration. Don't just expect yes/no answers. Encourage explanations and justifications.
    * **Look for evidence:** Ask for concrete examples in the code or documentation to support claims about the architecture.
    * **Involve different stakeholders:** Gather input from developers, architects, testers, and operations personnel for a more comprehensive view.
    * **Be constructive:** The goal is to identify areas for improvement, not to find fault. Frame feedback in a positive and helpful way.
    * **Iterate and refine:** Architectural assessment is an ongoing process. Regularly revisit these prompts and adapt them as the system evolves.

    By using these prompts thoughtfully, you can gain a deeper understanding of the strengths and weaknesses of your software architecture and identify opportunities for improvement.