kentoh - Fotolia
How do software developers and architects work together?
Work is more fun when developers and architects have a relationship that is collaborative, not adversarial or absentee. Here's how real teams join forces to build quality software.
NEW YORK -- Architects and developers work together on software projects. They both code, and they both shape and implement the vision for the software. They share many of the same skills.
But developers and architects also have some key differences and, as a rule, have to segment their responsibilities.
"Leadership is the primary function of a software architect," said Sonya Natanzon, solutions architect at Guardant Health, an oncology-focused blood testing and analytics company in Redwood City, Calif., at the O'Reilly Software Architecture event here this week. Architects lead people, technical direction and the software vision through requirements and roadmaps.
Whether you're a developer assigned to work with an architect on a software project, an architect that drives software quality in an enterprise build, or a senior developer considering the next step for your career, understanding each other's roles and responsibilities will bring the best possible result.
Differences between developer and architect roles
The software architect produces the artifacts and is responsible for the outcomes. However, architects can't go it alone. Architects need developers.
Architects gather high-level expectations for the software project, and plan how to get there, said Joseph Dotson, a software engineer at Quicken Loans, a Detroit-based mortgage lending company. Architects conceptualize the project for developers. Developers provide feedback that improves that plan and create the code that balances business values, such as time-to-market and product reliability.
Architects are there for the entire software development life cycle, not just the start. They identify the problem/project, design and implement the concept, and then enhance and maintain the live product.
One of the biggest questions facing architects is whether to code or not to code, Natanzon said. "Can I really call myself an architect if I don't code every day?" Her advice is to code when it matters, such as proof-of-concept builds and the scaffolding for greenfield software. It helps to serve as the lead developer on one project. Natanzon wants architects to go deep into development work periodically -- don't leave it behind, but don't get lost in it.
Developers have senior, junior and peer team members to resolve coding conundrums, review builds and share tool knowledge. By contrast, architects are often the only technical lead on a project, in liaison with other professionals across the business. There are cases where companies may assign multiple architects to important projects or direct software, IT and enterprise architects to collaborate on multiple builds.
"I like when we have more than one architect on a team," said Elizabeth Young, systems engineer at O'Reilly Auto Parts, a Springfield, Mo., retailer with more than 5,000 locations throughout the U.S. Two architects are better than one, because they work off of each other and provide peer review. There might be a gap in a proposed architecture plan that developers don't catch, but another architect easily notices, Young explained.
Natanzon similarly recommended that architects train senior developers to be their peers. It's not cheap to have multiple architects on a single project, but the benefits can justify the choice.
Architect specializations in enterprise IT
While these job titles vary from company to company, there are general expectations for each role:
- Enterprise architect: Devises process and patterns for the organization to meet its objectives, through technologies, human resources and information assets.
- Solution architect: Creates a technical vision for engineering related to a particular business need or problem. They work with technical architects and technical leads.
- Software architect: Works with business stakeholders for requirements and with developers to implement software design. Also called a product or application architect.
- IT architect: Creates the infrastructure and tools to support, secure and improve the business's software products and data assets. In some organizations, multiple platform architects own portions of IT, and cloud-focused projects rely on a cloud architect. Work together to build better software
Work together to build better software
While the joke is that architects are developers who can draw diagrams, architecture is never a clean and pretty picture when faced with shifting business demands and normal development constraints, Natanzon said. Leadership skills enable architects to navigate conflicts toward a compromise that satisfies the important requirements -- and to adjust as the project goes along.
"There's a back and forth [with architects]," said Kai Holnes, a software developer for ThoughtWorks, a Chicago consulting firm. Holnes, who presented at the conference, works with architects in a collaborative relationship. Together, they ensure that the vision matches an achievable product, and that a satisfactory product materializes.
For example, a software architect selects a project's style and language, approves the tools to build and support the project, and sets guidelines for coding practices. The developers then organize into working groups based on user stories, which get reprioritized as the project progresses. Those devs might also propose a new automation platform to speed up programming or ensure deployment consistency.
Sonya Natanzonsolutions architect at Guardant Health
There are ways to foster collaboration between developers and architects:
Speak up. Developers should ask lots of questions when they work with architects, Holnes said. Understand why the architect makes certain decisions, and repeat back information to ensure a shared understanding.
Developers and architects collaborate best when the thought process is public. Context matters. For example, the architect announces that the team will build a web app feature for online shoppers with Python, even though two developers are experts in Go. Go would ensure high performance, but the whole team doesn't use it yet, and the retailer they work for wants the capability ready for a major product launch. In this case, Python is the right choice to balance benefits and constraints. On another project, however, the architect might ask developers to choose the language.
Skill up across roles. Just as code-savvy architects can benefit a project, architecture-savvy developers are an asset. Quicken Loans' Dotson was a developer, became an architect, then moved back to engineering. "I just like being able to build things with my hands," he said. "But I still keep up with modern architecture."
Dotson helps create tools for internal software teams, such as infrastructure-as-code tooling. He spends time with platform architects to get a sense of what they need, and how to create it.
Developers and architects should communicate extensively throughout projects, but that's just a start. Quicken Loans has an enterprise standards group, a cross-functional team of architects, engineers and other stakeholders who collaborate on guidance for software projects. Get democratic input from product, engineers, QA, and build processes that drive value.
Focus on value. Developers dread ivory tower architects, who treat architecture as an academic exercise without practical input. Developers like freedom, while architects champion process and engineering discipline. In practice, process must serve developers, not the other way around, Natanzon said.
The unifying factor for developers and architects is that everyone works toward quality software that fulfills a business need. "We have to ship working code that brings business value. If you don't have that, then your architecture has no value," she said.