Architect Roles across OpenMRS

Key takeaway: In order to realize our product vision, we need senior technical architects with responsibilities that we all agree on and share.

Part 1: Intro to Architect Roles

In the post It’s Time: Our Community Roles & Descriptions Need Updating, @jennifer recently explained the connection between the OpenMRS mission and that it’s time to update some critical community roles.

If we are fundamentally a project to empower a global ecosystem of suppliers (implementers) to serve countries’ self-identified needs, then a big part of our community’s value proposition rests on the usability and quality of our software.

We have come incredibly far, thanks to hard work from many people.

Our Product Dashboard explains that our current top 3 strategic priorities are:

  1. End-user experience (after all, patient care is a priority!)
  2. Implementer experience (easier distro deployment & maintenance)
  3. Data Exchange (since other systems and sites need data for good patient care)

:warning: In order to achieve our vision, mission, and the strategic product goals that support organizations depending on OpenMRS, the OpenMRS community needs consistent support from full-time Senior Architects.

These are not roles that will just attend meetings and give verbal guidance or write documents: in our case, the Architects would be intimately involved at the code level and would provide direct, detailed, technical mentorship for organizations and contributors throughout the community. (I.e. this is much, much more than posting meeting reminders, recycling agendas, etc. These are hands-on technical roles.)

Role Descriptions to follow in this thread for:

What we need from you: Our Technical Action Committee has given their input on these first drafts of the roles. We’d like wider community input into these roles - let us know your thoughts and feedback on these specific roles in this thread!

Questions about what’s next? Stay tuned for our “What’s Next” post, where we will discuss how we might actually fill these roles.

4 Likes

Part 2: Requirements and Activities that Apply to All 4 Roles

Shared Requirements (Applies to All 4 Roles)

  • Self-driven work ethic. Self-starter who loves taking initiative and seeing things through to completion.
  • Problem solver. Love for coding and solving problems. Sees need to multiply their efforts - e.g. finding a new framework out there that makes everyone’s work efficient. You are curious and have a strong desire to continuously learn new technologies.
  • Enjoy a diverse workplace. Willing to work with, coach, and learn from folks from very diverse cultures. Desire to mentor & pair-program with others.
  • Excellent communication skills. We’re a distributed team, so frequent and clear written communication is a must. As a leader you need to clearly communicate complex technical concepts to both technical and non-technical audiences. Able to talk to stakeholders at different levels of technical knowledge. Can evangelize the team’s cause within and outside of the organization. Balance collaboration with forging ahead.
  • Mission-Driven: Impact in healthcare is a priority for you. Prior experience with the healthcare field is a plus but is not required.
  • Work Experience
    • Software development experience in a technology company.
    • Deep familiarity with how open source projects are developed. Likely past experience contributing to major open source projects.
    • Experience with managing teams & overseeing development.
    • Nice-to-Have: Experience with LMIC setting (e.g. awareness of resource requirements, on-prem deployment practices). Experience outside of the typical ICT4D industry is also highly desirable (fresh ideas).

Shared Activities (Applies to All 4 Roles)

  • Lay the Groundwork for Others
    • Motivates team members around a direction.
    • Prioritize the work themes and specific tasks. Take user stories and break down into technical tasks that more junior community members can work on
    • Coordinate team members’ efforts - watches for duplication, delegates work based on contributors’ skills and allocates learning experiences.
  • Pro-Actively Coach
    • Mentoring community members. Strong collaboration and mentorship skills. Excellent PR reviews - uses structured PR review processes to mentor others and synchronous pairing sessions.
    • Pair Programming to help unblock squad/team devs.
    • Clear expectations from junior/mid/senior devs. Clear principles: “When writing code, this is what we’re looking for.” Apply decision making process for how to engage particular people in issues, e.g.:
      1. Is person able to do this issue on their own?
      2. If not, are you prepared to do pair programming on this issue?
      3. If not, is there someone else who can provide mentorship?
      4. If not, reassign ticket to different person.
  • Lead Engineering by example.
    • Actively engineering contributions in modern technology. Get the gritty, tricky stuff done or at least started and stable enough that others can join in. Works alongside the other engineers.
    • Prioritizing. Demonstrated ability to prioritize work, especially amidst multiple competing stakeholders and projects. Addresses or delegate fires. Identifies technical debt and helps prioritize.
  • Forward-thinking Systems Design
    • Tech Stack & Modelling Decisions: proactively anticipates and mitigates engineering risks or inefficiencies. Considers tradeoffs between different software frameworks.
    • Makes decisions & moves forward but doesn’t just say “this seems like the right way”. Understands sustainability & implementer implications of their engineering decisions.
    • Sets standards, guidelines, and oversees their application.
  • Technical Writing: Good demonstration of technical writing - e.g. clear examples of documentation that helps teach others about how a complex framework works, including sample problems to work through.
  • Implementer Support: Technical guidance to organizations implementing OMRS on how they go about doing that. Someone implementation developers can turn to to work through technical issues they have or system design issues they have (e.g., fitting OpenMRS into an existing clinics infrastructure, advice on how to setup integrations with third-party software).
2 Likes

Part 3: Frontend Architect

Role & Skills Required:

  • Break down Requirements & Designs: Translate UX designs and high-level problems/user stories into coherent, workable problems that developers of multiple skill levels can work on

  • Day to day: Work with designers & product managers to understand the application. Work with the other developers to build it. Collaborate closely with the project manager to coordinate the team.

  • Awareness of EMR goals, and the challenges specific to healthcare.

  • Deep understanding of modern JavaScript, CSS and HTML. Experience writing well-structured JavaScript applications using frameworks such as React.

  • Familiarity with microfrontend architecture patterns

  • Stays current with the ever-evolving world of frontend development

3 Likes

Part 4: Backend Architect

About the OpenMRS Backend:

The OpenMRS Platform is a modular, database-agnostic, Java-based application providing the key resources and services needed to support an extensible electronic medical record system. Many different organizations and countries have built solutions on top of this platform, making it very important to provide stability, reliability, security, and a clear upgrade path while working with a worldwide community of developers.

Role Overview:

  • Plan to modernize OpenMRS: Need more modern software stack, amidst reality that this needs to work in situations with not highly technical staff who will not understand more complex things.
  • Security: work with security experts on handling custom parts of our application with regard to Security - e.g. Authentication & Authorization is in the application. Consider security issues when reviewing PRs and committing code. Demonstrate security best practices for new code and when refactoring existing code.
  • Integration: Vision for how to integrate vast space in healthcare IT into the EMR - complex data exchange, that data will need to leave or make its way into the EMR. e.g. integrations (Radiology, Pharmacy, HR)
  • Dig through mountains of code and figure out areas of tech debt and legacy complexity

Skills Required:

  • Excellent communication skills
  • Deep understanding of Java and the standard Java Servlet stack
  • Strong familiarity with the Spring & Hibernate frameworks (beyond just Spring Boot)
  • Deep familiarity with REST and at least some experience working with FHIR (has gone beyond using APIs - understanding of REST framework & experience developing APIs)
  • Knowledge of the healthcare space and particularly the challenges facing EHRs.
2 Likes

Part 5: DevOps Architect

About our Infrastructure:

We are looking for someone to help us maintain, upgrade, and improve our growing infrastructure. If you’re passionate about anticipating developer needs and preparing for scale, you’re looking in the right place. Some technologies we are currently using: Ansible, Puppet, Terraform, OpenStack, Docker, nginx, the Atlassian suite (Bamboo, Confluence, Jira), Discourse, Wordpress, OAuth2, SAML, LDAP, and MySQL.

Role Overview:

  • Responsible for proactively leveraging tools to make managing our infrastructure as easy as possible.
  • Prepare OpenMRS to be ready for Cloud. This includes working closely with the backend lead to help design OpenMRS so that it can leverage current best practices for deploying to the cloud.
  • Serve as a devops expert for implementers, to provide guidance on deploying and maintaining openmrs.
  • Security: Strong awareness of security issues, especially as it relates to keeping our infrastructure secure.
  • Maintain community infrastructure:
    • Maintain critical tools the community relies on (and their related servers) such as Discourse, Atlassian suite: Confluence, Jira, Bamboo (without this we can’t release software), openmrs.org, all om.rs links, demo & qa environments, JetStream server uptime
    • Supports & ensure successful maintenance of all OpenMRS login services such as our LDAP Server
    • Respond to and troubleshoot downtimes of community assets

Skills Required:

  • Puppet and especially Ansible experience (as configuration tools for infrastructure maintenance)
  • Terraform experience (for setting up new servers)
  • Docker expertise
  • Atlassian experience (specifically Confluence, Bamboo, and Jira)
  • LDAP, OAuth2 experience; some knowledge of SAML (for authentication maintenance and improvements)
  • Knowledge of scripting languages commonly used for infrastructure maintenance such as Bash, Python or Ruby
2 Likes

Part 6 (last one): Senior Data Engineer

  • Experienced leader of engineering strategy and implementation of data pipelines and data warehousing.
  • Engineering Architecture Lead: Leads the design of data extraction processes and data architecture to ensure system scalability, performance, data integrity and ease data access and use. Understands and thoughtfully applies existing good-practice data engineering frameworks, analytics engines & tools, instead of trying to build wholly bespoke engine solutions.
  • Design Solution Sub-Tooling: Collaborates with technical stakeholders to determine best practices and implementation of non-functional requirements such as exception/error handling and performance optimization.
  • Mentorship: Draws on substantial experience to coach, review PRs, document, shepherd complex code, and regularly set examples for less experienced developers to follow. Helps build global data management capacity in the OpenMRS community.
  • Strategize Quick-Wins and a Solid Foundation: Strategically sets up several quick-wins (e.g. flattened SQL DB) and builds longer term foundation that offers more scalable, sustainable solutions (e.g. may include higher-level libraries that enable flexibility/able to create varying views the user may need)
  • Community Engineering Advocacy: Advocates for needs & contributes with platform team to enhance performance
3 Likes

Thank you @grace and @jennifer and all who have worked so hard to develop these roles and clearly lay out the need for them within our community. These are all really well articulated and I’m very excited to see this effort move forward.

2 Likes

I’m very excited to see this finally reach the light of day. Filling these roles should help us ensure the continued growth and sustainability of many projects the community has undertaken. Thanks @grace and @jennifer for your work getting these developed!

1 Like

Thanks @grace & @jennifer along with others for helping to drive this forward.

We’ve often heard from organizations and countries: “How can we help?” As a community, I don’t think we can sit back and expect someone else to take care of filling these roles. I would ask everyone in the community to consider these roles:

  • If you’re a leader, how can your organization or country commit to filling one or more of these roles for the OpenMRS community?
  • If you’re a funder, how can you direct your funding to sustainably support one or more of these roles for the OpenMRS community?
  • If you’re a developer, how can you influence your organization to commit to filling one or more of these roles for the OpenMRS community?

This is also the time for everyone to review the descriptions @grace has outlined and let us know if you see aspects of those roles that are missing or if you have suggestions on how the roles might be better defined.

3 Likes