{"id":550,"date":"2023-12-27T11:18:37","date_gmt":"2023-12-27T11:18:37","guid":{"rendered":"http:\/\/localhost:8082\/?p=550"},"modified":"2024-09-25T09:59:23","modified_gmt":"2024-09-25T08:59:23","slug":"three-easy-ways-to-improve-offshore-software-development","status":"publish","type":"post","link":"http:\/\/localhost:8082\/2023\/12\/27\/three-easy-ways-to-improve-offshore-software-development\/","title":{"rendered":"Three easy ways to improve offshore software development"},"content":{"rendered":"\n
\"\"<\/figure>\n\n\n\n

Photo by Drew Dau<\/a> on Unsplash<\/a><\/em><\/p>\n\n\n\n

Offshore development is pretty common these days, but well-performing offshore teams are less so. Broken and incomplete features, delivered slower than expected, with increasing tech debt and a degraded codebase, are the hallmarks of outsourced and offshore development.<\/p>\n\n\n\n

Being on the receiving end of a poorly performing remote development team is distressing, especially if you\u2019ve tried everything you can to fix the situation but poor-quality interactions and high levels of rework remain the norm. It\u2019s even more upsetting if you previously had an excellent local development team you waved goodbye to.<\/p>\n\n\n\n

Lacking the expertise to manage a remote development team increases the chance of things going wrong, and not having deep enough pockets to withstand the difficulties can be catastrophic. Unfortunately, these experiences are only too familiar.<\/p>\n\n\n\n

1. Knowing what to build<\/h4>\n\n\n\n

Expecting developers to magic something from a vague idea or a one-sentence user story isn\u2019t a particularly helpful approach. Whilst technical staff are great at solving relatively well-bounded technical problems, they are dire at stepping into the customer\u2019s shoes. Offshore software developers don\u2019t usually speak to end users anyway.<\/p>\n\n\n\n

Understanding stakeholder needs is the foundation of every software product and should be a continuous and ongoing activity. But moving beyond ideas and concepts is hard work because you need to really think about what should be done.<\/p>\n\n\n\n

It\u2019s not enough to ask users, \u201cTell me what you want\u201d, because they don\u2019t always know how to answer the question. Really understanding their needs and devising appropriate solutions is what requirements gathering is all about, a human activity that takes time and patience to do well.<\/p>\n\n\n\n

Somebody must decide which features will best satisfy users and stakeholders, and when precisely to deliver them. Product decisions are highly visible, long-lasting and impact real users, making product ownership challenging but incredibly valuable and very rewarding.<\/p>\n\n\n\n

Read more: How to gather better software requirements<\/a><\/p>\n\n\n\n

2. Communicating effectively<\/h4>\n\n\n\n

Teams with poor software requirements don\u2019t deliver well on them. Remote, outsourced and offshore teams with poor requirements fare even worse. I have never come across an underperforming development team that didn\u2019t also have a requirements problem.<\/p>\n\n\n\n

Select a few requirements from your team to inspect. Are they clear and effective? Do they convey the outcome required? Report back and tell me what you find.<\/p>\n\n\n\n

Developers need a clear understanding of what to do. Some developers tolerate ambiguity better than others. However, they still need a clear understanding of what to do.<\/p>\n\n\n\n

User stories describe what is needed and provide sufficient information for the developer to make the right decisions. Technical design and implementation are not prescribed, unless there is good reason to do so, as the developer\u2019s job is to figure that out.<\/p>\n\n\n\n

Refinement sessions ensure developers understand the stories and can work without unexpected blockers or the need for unplanned, ad-hoc conversations. Well defined user stories are your best chance of building what is required and avoiding waste and re-work later on.<\/p>\n\n\n\n

Read more: How to write better software requirements<\/a><\/p>\n\n\n\n

3. Working well together<\/h4>\n\n\n\n

Developers struggle when the people who can answer questions are not readily accessible or available. Remote developers struggle more due to their lack of co-location and increased reliance on written communication. Difficulty getting answers in real-time, waiting on emails and language barriers are all things a local development team would never face.<\/p>\n\n\n\n

Understand the offshore developers and accommodate their needs as best as possible, avoiding the temptation to impose local processes without first assessing their suitability. Meet up in real life, put some faces to names and get to know each other.<\/p>\n\n\n\n

Offshore teams that work similar hours to the local business can more readily act as an extension of the local workforce. Active engagement and good communication between both sides support more intensive ways of working, such as a local Product Owner-led, remote Scrum team.<\/p>\n\n\n\n

Alternatively, many offshore teams perform best when they are responsible for end-to-end feature development rather than bouncing part-finished work between distributed teams. This avoids the need to collaborate, reduces decision latency and promotes maximum workflow.<\/p>\n\n\n\n

Read more: Remote development<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"

Photo by Drew Dau on Unsplash Offshore development is pretty common these days, but well-performing offshore teams are less so. Broken and incomplete features, delivered slower than expected, with increasing tech debt and a degraded codebase, are the hallmarks of outsourced and offshore development. Being on the receiving end of a poorly performing remote development […]<\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"closed","ping_status":"closed","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[17],"tags":[],"class_list":["post-550","post","type-post","status-publish","format-standard","hentry","category-software-requirements","missing-thumbnail"],"_links":{"self":[{"href":"http:\/\/localhost:8082\/wp-json\/wp\/v2\/posts\/550"}],"collection":[{"href":"http:\/\/localhost:8082\/wp-json\/wp\/v2\/posts"}],"about":[{"href":"http:\/\/localhost:8082\/wp-json\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"http:\/\/localhost:8082\/wp-json\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"http:\/\/localhost:8082\/wp-json\/wp\/v2\/comments?post=550"}],"version-history":[{"count":5,"href":"http:\/\/localhost:8082\/wp-json\/wp\/v2\/posts\/550\/revisions"}],"predecessor-version":[{"id":824,"href":"http:\/\/localhost:8082\/wp-json\/wp\/v2\/posts\/550\/revisions\/824"}],"wp:attachment":[{"href":"http:\/\/localhost:8082\/wp-json\/wp\/v2\/media?parent=550"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"http:\/\/localhost:8082\/wp-json\/wp\/v2\/categories?post=550"},{"taxonomy":"post_tag","embeddable":true,"href":"http:\/\/localhost:8082\/wp-json\/wp\/v2\/tags?post=550"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}