Insights from 6 Months of Software Architectural Reviews: Lessons Learned and Best Practices for Engineers

R.K. Hari Krishna
Givelify Engineering
4 min readMay 20, 2023

--

At Givelify, we understand the importance of establishing a strong architectural foundation for our engineering projects. That’s why we have set up the Architecture Review Board (ARB) to drive good architecture and ensure the quality of our software solutions. I believe that every organization should have an architecture review board to provide oversight and guidance in architectural decision-making. Since its inception, the Architecture Review Board has played a crucial role in shaping our engineering practices and culture.

One of the goals of the Architecture Review Board is to share insights in order to help over all engineering excellence. Furthermore, part of our commitment at Givelify is to share this knowledge with the wider engineering community. Here are some valuable lessons we have learned since the establishment of the Architecture Review Board.

Lessons Learned:

Take time to design your software: Avoid the common practice of designing software while implementing it. Design should precede implementation to ensure a solid architectural foundation.

Suggestions:

  • Create a software design document.
  • Consider different architectures and conduct a cost-benefit analyses.
  • Flow chart user requirements and create system diagrams.
  • Devote attention to database schema design.
  • Pay attention to key nomenclature and its alignment with our company brand and customers.

Think about the impact on all users: Design products with the holistic view of serving all users, ensuring completeness, scalability, and avoiding negative consequences for any user group.

Suggestions:

  • Engage with leaders from other teams to understand the broader impact.
  • Test, simulate, or conduct pilot runs to assess the impact on all supported products.
  • Foster communication and collaboration with product managers, systems architects, and peers in other teams.

Get involved in the business/product side: Engineers should not only focus on building what is outlined in user stories but also understand the broader context, advocate for complexity, and engage in cross-functional collaboration.

Suggestions:

  • Participate in backlog grooming sessions.
  • Involve frontend, backend engineers, and Quality Owners in design feasibility meetings.
  • Engage with the app reviews channel for valuable insights.
  • Connect with support team members and gather feedback from customers’ experiences.
  • Familiarize yourself with the Product Brief.

Conduct collaborative architecture sessions within your teams: Architecture should be a collaborative effort, involving the entire team to promote effective engineering and design.

Suggestions:

  • Schedule regular architectural discussions using tools like Zoom whiteboard, Lucidchart, or Mural.
  • Develop a culture of continuous architecture, making it an integral part of the sprint culture.
  • Encourage team members to gain an understanding of front-end, mobile, backend, and devops systems.
  • Embrace a holistic approach to engineering.

Prioritize reliability: Consider potential points of failure, scalability, and error conditions to ensure future-proof and resilient systems.

Suggestions:

  • Identify single points of failure and include mitigation plans in the engineering roadmap.
  • Plan for scalability to handle increased volume.
  • Establish protocols for handling error conditions and boundary violations.

Plan your product launch: Careful planning, including rollback procedures and pilot tests, is vital for successful product launches.

Suggestions:

  • Identify potential issues and define mitigation approaches.
  • Determine the necessary information for effective support. What information does the on-call team need to know.
  • Quantify risks to enable proactive preparation.

Administer your products effectively: Consider the mechanisms for administering products and systems, including logging services, product metrics, and the ability to make dynamic updates.

Suggestions:

  • Evaluate the need for an admin panel and collaborate with the appropriate stakeholders.
  • Discuss long-term roadmap with the product team.
  • Identify logging services and product metrics tools to gather insights for both engineering and product teams.

By implementing these valuable lessons and suggestions, organizations can enhance their engineering practices and drive architectural excellence.

I strongly believe these lessons are not limited to a specific team or company; they resonate with any engineering team striving to deliver high-quality software solutions. Regardless of the industry or domain, these principles hold true and can greatly benefit any organization.

Taking the time to design software properly, considering the impact on all users, and engaging in cross-functional collaboration are universal practices that lead to more complete and scalable solutions. Conducting collaborative architecture sessions within teams promotes effective engineering and design, while prioritizing reliability ensures future-proof systems. Thoughtful planning of product launches and effective administration of products contribute to overall success.

My hope for all engineers is to keep pushing boundaries and striving for architectural excellence, knowing that these lessons are universally applicable and can drive success in any engineering endeavor.

--

--

R.K. Hari Krishna
Givelify Engineering

VP of Technology at Givelify; Electrical Engineer; Tinkerer; Technology with purpose; Advocate for inclusive engineering culture