9 Things We Learned with a Distributed Java Team
In just a few months, traditional working arrangements have been upended by the Coronavirus pandemic. Because of lockdowns and shutdowns affecting every industry, companies have been forced to implement remote work practices. For example, Martin Fowler, a well-known Agile software design advocate, has discussed the impact of the Covid-19 crisis in his recent article series.
Whether the project is being conducted in-person or remotely, communication is a key part of any successful Agile project. Unfortunately, several challenges often get in the way of effective communication, and these issues can doom projects before they begin.
These challenges fall under 3 main categories:
- Building trust
- Information gathering
- Cultural differences
Following an Agile playbook doesn’t guarantee success on its own. Consequently, on any project, it’s critical to fully commit to upholding the highest standards of transparency, accountability, and trust among your project teams and stakeholders.
In the spring of 2019, we launched a project to re-engineer a Java application for a global manufacturing company. Their Java app is a manufacturing execution system (MES), “an information system that connects, monitors and controls complex manufacturing systems and data flows on the factory floor. The main goal of an MES is to ensure effective execution of the manufacturing operations and improve production output.” It was a critical part of the client’s workflow, so not only did it need to be efficient, it had to be reliable as well.
We were faced with several challenges at the start of this project. These challenges included a lack of consistent standards, the need for a complicated database migration/upgrade, and a development team located across multiple countries. The backend team is primarily located in Egypt, but the project initially started in Italy. The frontend developers are in France and oversight comes from the United States. This project is an international effort.
In this article, we’ll discuss the tangible solutions we achieved during the first phase of this Java legacy re-engineering project. Although we worked with a distributed development team, we adopted a set of Agile best practices that every team could adhere to. This helped create a baseline for our success, and we seamlessly migrated to a remote work setting like other companies working through the Coronavirus pandemic.
Jump to 9 Lessons
- Emphasize Relationships and Trust (Everything Starts Here!)
- Highlight Your Technical Expertise
- Define Ground Rules
- Establish Common Definitions
- Agree on Your Priorities
- Use the Right Agile Tools for Remote Teams
- Nail Your Onboarding Procedures
- Cultivate a Team Culture
- Have an Improvement (and Failure!) Mindset
9 Keys to Our Distributed Team’s Success
With our Agile software development team working across three countries, we asked ourselves what best practices and methods would be the most effective. As we established our processes, some elements were already included in our Agile methodology. However, other elements were less intuitive and had to be developed and refined as we learned to reconcile various cultural perspectives and ways of thinking.
We compiled a set of 9 best practices that have helped us work smarter and more efficiently across three different countries, languages, and cultures.
Emphasize Relationships and Trust (Everything Starts Here!)
In order to complete a project successfully, it’s important that you build a community based around trust and transparency. For instance, trust and transparency are an integral part of Agile methodology. Daily stand-ups and sprint planning are designed to keep everyone involved in the development process on the same page.
Our legacy Java revamp project consisted of three backend developers in Italy (now in Egypt) and two front-end developers in France with each team receiving directives from our office in the United States. Therefore, communication and trust were critical to the success of the project. An important lesson that we learned early on is that meeting someone face-to-face is preferable since it expedites the relationship-building process.
Though they spoke the common language of code (Java, in this case), our internal team’s visit to France and Italy wasn’t without some degree of culture shock. Communication barriers quickly broke down over lunches when the developers were able to learn more about each other’s respective backgrounds in a more relaxed and personable environment.
Research shows that most communication is non-verbal. Unfortunately, when working remotely some of those critical cues and signals are easily missed. That meant our team’s onsite visits were very important. After returning to Egypt, even though they weren’t in contact as frequently as onsite, the developers felt they better understood their French and Italian counterparts.
Building trust enables teams to be comfortable and express their vulnerabilities, and this helps strengthen ties and promote collaboration. As a result, developers felt more at ease by knowing that mistakes are normal. No one should hide their differences or try to mask imperfections.
In a healthy Agile environment of trust and transparency, it’s okay and even encouraged to “fail fast, fail forward.” The objective is to use these teachable moments to pivot quickly on the path to success.
For more information about Java, check out our blog
Highlight Your Technical Expertise
Don’t be afraid to demonstrate your technical skills. This was important for our Egyptian team as they started working onsite with their counterparts in France and Italy. The ability to quickly align on technical discussions builds a sense of camaraderie and trust.
Though separated by cultural and linguistic differences, the common thread is technology and code. The ability to “speak the same language” of Java was critical to helping our developers embrace a healthy rapport across remote teams.
Define Ground Rules
Agile daily stand-ups are meant to ensure everyone is on the same page about the direction and vision of the project. These meetings help everyone work together, quickly identify issues, and work through blockers and challenges. You may do everything you can to prevent it, but things can still get messy at times.
We identified three ground rules for setting our team up for success:
- Connect with your remote team frequently (everyone should feel aligned and valued).
- Adhere to a “One-team, one vision” attitude at all times.
- Stay mindful of what information you’re sharing and exchanging with your colleagues (this affects the outcomes of the application you’re building).
Every successful long-term relationship requires transparency, communication, and alignment on expectations. By following these three ground rules, our teams stayed focused and aligned although we were separated by thousands of miles.
Looking for more than Java? Check out what we can offer you!
Establish Common Definitions
Early on, our team learned the importance of using a common business vocabulary. Although our dispersed team shared English and Java as common languages, sometimes, phrases or terms could be used differently across cultural contexts. Nailing this point was key to avoiding confusion and guaranteeing unity and cohesion around the shared vision of the project.
Agree on Your Priorities
Agile moves fast, and in order for everyone to stay focused and aligned, it’s important to keep your priorities top-of-mind at all times. While Agile adapts well to changing priorities, misalignment can still happen among project teams.
For example, one day you might focus on developing new features. The timeline says the sprint is ending in one week, so your team will work hard to finish the work that was already started. But suddenly, the release is extended by two weeks, and the timeline shifts to focus on bug fixes. This shift can create extra confusion. As a result, it’s critical that you stay aligned on priorities in a fast-moving Agile development team environment, so you can pivot when needed.
Use the Right Agile Tools for Remote Teams
Our teams have learned that having the right tools in place at the right time is critical to any project’s success.
Here are some of the resources they leveraged to eliminate headaches and make their workflows more seamless:
- Jenkins helped our team build and test software to ensure they met the expected quality and standards for all business requirements.
- Ticket tracking software (such as Jira) let team members track all tasks, user stories, or bugs that needed be addressed in the agile development lifecycle.
- Microsoft Teams and Zoom helped our teams communicate effectively with one another.
Nail Your Onboarding Procedures
Proper onboarding is an essential part of any team’s successful start and ongoing success. However, Agile can present onboarding challenges. Due to the fast-paced nature of Agile, one developer has described onboarding new teammates in the following terms: “It’s like trying to discuss a complex topic with someone when you are sprinting around the track.” Another put it this way: “It’s challenging to focus on what you’re doing while also giving them the amount of information he or she needs.”
Consequently, it’s critical to have proper onboarding procedures in place. For instance, you can have new team members cycle through the project and attempt different work tasks in order to become familiar with the project when they join the team. These procedures help ensure everyone is setup for success from day one, and it helps speed up trust and relationship building with the rest of the team.
Cultivate a Team Culture
Cultivating a team culture that is aligned and unified around a shared business and technology vision is another thing Agile does very well. However, methodology alone can’t solve linguistic, cultural, and geographic differences in one sitting.
Our team members found that it’s very helpful to research important elements of the team’s culture before going onsite. Being aware of certain protocols, manners, humor, and what’s accepted professionally are best practices that will improve collaboration among teams from different environments.
Some people might discover that certain technical and business terminologies don’t mean the same things across different cultures. This another reason why you should have a shared business vocabulary within your development environment.
Have an Improvement (and Failure!) Mindset
You should always strive to improve, but you should also understand that mistakes will happen along the way. By giving your team the permission to “fail fast and fail forward,” you’ll help them feel comfortable and help them do their best work. The key is to put processes in place that give your team the proper space to grow, learn, and experiment.
These processes include:
- Improving the sizing of tasks to ensure the best use of resources; for example, this may help you obtain more accurate overtime counts.
- Adding additional procedures as needed, such as mid-sprint ceremonies; this helps ensure additional planning and retrospective lead to proper outcomes.
- Separating the business and technical focus of the project by creating technical debt for non-essentials (to be resolved later).
- Changing the sizing mechanism for user stories (instead of estimating by hours, you can estimate by complexity).
By adopting a culture of continuous improvement, we’re always on the lookout for ways to operate at maximum efficiency and save time, energy, and costs. Through this process of continuous iteration and enhancement, we maintain a forward-thinking ideology, and we’re never afraid to confront roadblocks or change with tradition.
We strive to combine our critical thinking and problem-solving skills with our project management expertise to deliver the best products and outcomes possible for our clients.
Looking for an extended Java team that’s the cheese to your macaroni?
The Integrant development team has uncovered a number of benefits that have resulted from transition to working remotely. Agile is the main source of these benefits, but one methodology alone can’t do everything. At the end of the day, human initiative and alignment are required to ensure everything operates effectively.
Here are some key findings:
In addition to typical Agile benefits associated with planning and communications, there are additional advantages to working in Agile with remote teams.
Distributed dev teams maintain a higher caliber of engineering talent because they are not limited by location.
Agile helps teams update processes, complete tasks, and shift directions easily.
Agile enables the adoption of new design best practices across diverse cultures.
Adoption of continuous alignment and standard meetings leads to continuous improvement for individuals and the team as a whole.
Leverage the skills of each developer to plug holes where needed and increase the likelihood of team success.
Our story began with a diverse team of developers who came together to re-engineer a complex Java legacy app. Although Agile helps streamline workflows and creates a shared language for collaboration, we needed to establish the right conditions for success.
We needed to figure out how to work together effectively and seamlessly as a distributed team while bringing out the best in each other. Also, we needed to help encourage our developers to trust each other despite differences in language, culture, and worldviews.
Through a combination of Agile methods, useful tools, streamlined onboarding procedures, and a common business and technical vocabulary, we established an efficient Agile environment for our remote teams. At the end of the day, our teams learned that open communication and transparency are the best ingredients for success.
If you’re curious about how Integrant puts Agile methodologies to work across diverse environments to create elegant software products, please contact us to learn how we can help.