Project Management, Technologies
Is technical debt a recurring problem you face, or is trying to future proof the software you write the best course of action? Today, we take a look at one of the most complex problems when creating software, analyzing the pros and cons of both approaches.
by Scio Team
Software development is… complex. At its core, it’s an interesting challenge where improvement and evolution happen alongside the construction of the software itself, with the possibility that it changes course when you learn new things, get a new perspective, or bring diverse points of view to the table.
As we said elsewhere, developing software is very similar to writing a novel, or painting a picture: it’s as much of a discipline as is a creative exercise, borrowing and modifying itself throughout the project. However, there’s a big difference between a book and software; the software is part of an infrastructure, meant to interact with a user, across an undefined period, which gives this profession a unique challenge: what happens to the code I’m writing today when tomorrow arrives?
A debt to ourselves
“It’s OK to borrow against the future, as long as you pay it off”, are the words of Ward Cunningham, one of the authors of the Agile Manifesto, which revolutionized the way we look at software development. We all know how borrowing money works in our daily life, but what he referred to is a specific concept many in the software industry are aware of: Technical Debt.
As you may know, technical debt is “the implied cost of future refactoring or rework to improve the quality of an asset to make it easy to maintain and extend”; is the knowledge that certain parts of a program may require to be fixed at some point in the future.
There are plenty of reasons why a dev team may incur this “debt” (be it for budgeting, skill, or deadline reasons), but the nature of its payment is stumbling onto issues that need to be fixed quickly, which may bring more issues later that will require further fixes and so on, effectively like trying to pay a loan with a high-interest rate. If you are not careful, you will end up paying it perpetually.
Technical Debt is considered a serious problem and plenty of literature and management advice have been written to mitigate its effects, but like with any kind of loan, it can bring plenty of benefits if chosen and managed correctly. After all, if we take on a debt, it is for something in exchange, be it having cash on hand to accomplish something, or achieving working software to solve the issue at hand.
And the proper way to deal with debt, be it technical or otherwise, is to pay it on time, which in software development means refactoring a lot of the work done.
However, depending on the level of debt accrued by a team, this refactoring may bring a hefty tag, especially if the time between creating the program and improving it allowed many dependencies to flourish, or some of the knowledge behind the construction to get lost (such as the original team changing), so you may want to avoid the need of refactoring as much as possible because you don’t know the context in which the program will be improved. So what then?
A proof of thinking ahead
Futureproofing may be the answer. What futureproofing tries to do is “anticipate and minimize the effects of shocks and stresses due to future events.” This practice is not limited to software, but it can help to try and mitigate some of the problems technical debt will bring, especially if we are thinking ahead of the need for refactoring at a certain point in the future or having to deal with legacy software inside critical systems in any organization.
However, saying it is much easier than doing it, and any approach to futureproofing a system, so it can be tinkered with or without issue decades from now, is a tenuous art at best. After all, how can anyone predict what software will look like in 2050? The solutions we implement may make sense today, but will probably need some explanations later.
A solution could be, to create software that follows a pattern, so its logic can be easily deduced by a future dev team, as well as taking the proper due diligence when choosing tools and frameworks that have a better chance to remain supported or at least accessible in the coming years, or avoiding “monoliths” where a single application is responsible for tons of functions, but one can still get blindsided by a development impossible to foresee.
This brings an interesting conundrum for many developers trying to find the right approach: is it better to futureproof software to try and avoid technical debt, or is better to acquire some debt if that means having the flexibility to refactor software at some point in the next few years?
Two sides of the same coin
The reason is very simple, yet has lots of implications: if you acquire technical debt, you cannot futureproof because you are assuming you will need to change things. If you futureproof it, then you are making stuff that will greatly resist refactoring, making it likely to turn into “legacy” software.
A good approach to finding a solution to this is developing products with a few things in mind, mainly no software product is forever, and everything has a shelf life that we will need to wrestle with at some point.
“Generally, it is not until something breaks when a team realizes they have a big debt needing to be paid”, commented Scio’s PMO, Adolfo Cruz, about this issue. “It’s more common when a product is brand new and it’s still building its user base. The volume of transactions is low at first, so you may not see any problems, but if the scalability wasn’t planned well, then it’s more likely that debt will flow under the radar until it’s too late, so it’s important to take steps to prevent this.”
The trick is trying to push back that point as much as possible, having the proper procedures to ensure the code can be fixed. A good commenting discipline, for example, can save a lot of headaches while refactoring an application, letting whoever has to modify it knows what can break and what depends on every function. This can work as futureproofing without going into a lot of technical debt, as many of the problems when trying to refactor old programs is the fact that the code sometimes is not very clear, and in places of a lot of personnel turnover (like a government agency), it’s easy to let cracks grow.
The useful approach, then, is considering both of these concepts as the two sides of the same coin: the delicate balance that is developing good software amidst the needs of the now and the later. A great software development team should strive for products that pass the test of time, while also knowing that nothing is perfect, and using the need for refactoring as a tool, not only a problem.
What do you consider is the best approach when creating software? An application with some debt that will let you fix it in the future if it needs to, or building something hard to repair that may stand the test of time?
Entrepreneurship, Nearshore, Outsourced Engineering Team, Project Management, Successful Outsourcing
By Scio
The importance of soft skills in the workplace cannot be overstated, and doubly so for remote work, when coordinating a team you may not know in person is the core of a successful project. But how to apply those skills?
It’s no secret that managing an effective team requires a special kind of talent, one able to bring the best of every individual in the team, while also keeping everyone on the same page, looking at the same goals. In the old days, you could achieve it by having close proximity with your collaborators, keeping an eye on their needs and difficulties, and doing your best to lessen them to create an effective working environment.
But yeah, that was when the office environment was a given, and managing was a face-to-face affair. However, in the New Normal, where remote work is becoming commonplace, probably with coworkers living in entirely different continents, the skill set necessary to complete a well-done project is changing.
How do you communicate an effective company culture remotely? What do you need to manage talent through a screen? Here at Scio, where working remotely has been the norm since the very beginning (both with clients and collaborators), we know how important these skills are, and how they will become more sought after as this organization model becomes more commonplace.
1. Communicating through a Zoom call: More difficult than you think!
Hey, raise your hand if this situation is a tiny bit familiar to you:
Trying to make a joke on zoom – YouTube
Yeah. As we all know very well, conducting a videoconference is tough, as reading your coworker’s body language, emotions and predispositions are nearly impossible at a distance. Humans are social creatures, designed to pick up on gestures and the tiniest social cues while talking, and doing so through the barrier of a Zoom call is an important skill to attain.
That’s why implementing clear communication rules, and enforcing them effectively is so important. Simple etiquette rules (like turning the mic off when not speaking, giving space to questions and answers, or RVSP any invitation), assigning a person the specific task of conducting the call, as well as being clear if the call is more formal (i.e. presentations with clients) or informal (like a brainstorming session) can make a world of difference in the way a team functions.
Once your collaborators internalize these rules, further strategies will be easier to implement, and you will avoid awkward scenarios like that one.
2. The importance of choosing the right tools
“An artisan is as good as his tools”, the shared wisdom says. And that’s true whether you are talking about making a vase or developing a software app; selecting your tools well is just as important as the technical knowledge applied behind.
Zoom is a good example of the pros and cons of these tools. There are plenty of reasons why Zoom became the choice to work remotely during the pandemic (it’s friendly to use and offers a good range of basic options), but that doesn’t mean this software lacks drawbacks (like its lax security) you need to take into account.
The same is true for any tool you have at your disposal to manage teams and projects, and learning to choose and use them effectively is a valuable ability in any remote team. There are plenty of options to try and decide, but also don’t be afraid to discard anything that is not helping the team to reach their objectives.
Here at Scio, for example, beyond the usual suspects (Microsoft Teams, Zoom, Trello, etc.) we developed some internal tools, like an internal guide with the names and positions of everyone in the company, or a proprietary clocking-in page, that we continually improve and tailor to fill the needs of our clients and developers, making sure all of our developers and collaborators have any piece of information they might need.
3. Remote company culture is possible
As we mentioned, certain skills are needed to do remote work well, and these will grow in importance as more projects realize the potential of Nearshore development. The importance of soft skills has grown in recent times, as being able to communicate with your team is just as important as the technical talent you have behind. So what do you need?
- Have clear expectations: For anyone joining an organization remotely, knowing exactly what’s required of them helps build boundaries and focus efforts on things that matter. Lay them out at the beginning, and should have no problems making everyone work towards the same goal.
- Create working structures: For remote teams, lack of structure on a given day can be an obstacle to productivity. That’s why good team leaders establish a clear schedule of deadlines and meetings and explain in certain terms where a particular collaborator fits into the workflow.
- Determine delivery: In a traditional office, the time in front of the computer seemed to be just as important as the work being delivered, which of course is unsustainable in a remote environment. This is why an effective manager keeps track of the actual output every review (let’s say, once a week), to determine the effectiveness of the collaborator, who can set their rhythm with flexibility. As long as the project delivers by the agreed deadline, everything else becomes unnecessary.
- Encourage social interactions: The best teams have chemistry and rapport behind their collaboration, and managing that remotely is truly a challenge. That’s why social interactions are important; celebrating important holidays, giving them channels to communicate freely, and organizing activities for fun help a lot and creates familiarity between co-workers that otherwise will never happen.
- Give ongoing feedback: Good feedback is the lifeblood of any team, and for remote teams, doubly so. Being gentle with it, but also effective and certain, is an important skill for everyone on a team (not only leaders), and learning how to give and receive feedback is critical to delivering better and better projects.
4. The Key Takeaways
So, what does this all mean? That the best remote teams are those with strong structural support behind that lets their talent be used to its maximum potential. So we can have these few takeaways of the soft skills behind an effective remote working environment
- Pure technical knowledge can only get you so far. Managing with a wide range of skills helps everyone feel part of a team in order to achieve objectives.
- Remote working needs certain flexibility to function, but firm boundaries keep the team focused and productive, from a simple call to delivering a whole project.
- A good company culture needs to be clear and well communicated, and implementing it effectively means the difference between a good team and a so-so one.
This is clear for us in Scio, as our Nearshore model is designed to use these methods to their fullest, and guarantee that any project you have in mind has the right team for you.
Agile Methodology, Customer Experience, Project Management, Successful Outsourcing
If you search on the Internet for «agile project initiation» you are going to find a LOT of templates. People want structure and easy answers, so of course, these simple answers rise to the top of every search. Many (if not most) of the templates offered are pared-down formats from the Project Management Book of Knowledge (PMBOK) Project Initiation Documents (PID). There is nothing basically wrong with the idea of using templates or most of the templates offered, except – they tend to become prescriptive when they should be taken as guidance.
From the Agile Manifesto: «…we have come to value:
Working software over comprehensive documentation,»
With that in mind, we should ask – why do we document agile projects? Often, the answer is – because it is required (by someone) when in reality the answer should be – to communicate. But again, that simple answer fails to guide us to the necessary outcome:
- Documentation should be a natural part of agile project initiation, but not the goal. It should proceed from on-going discussions between stakeholders, the product owner and the development team that is developed in Sprint 0, but it must not end there. The conversations and the documentation of outcomes must continue through the lifecycle of the project and the product.
-

Initial documentation is just a strawman
Documents gathered from product owners and key stakeholders are starting points, not final documents. Documents developed by a designated team member to fill out a template are strawmen to be examined, discussed, questioned, and used as a base for the ongoing development of understanding within the entire project team.
- Living documentation formats should be preferred over static. In smaller projects, it may not be necessary to manage documentation formally, but in most cases using the same concepts as those used for source code management is a valid guideline. Properly maintained, living documentation answers the questions, «when was this decision made? by whom?» and gives a revision history that tells the story when necessary, but only makes it apparent when needed. It needs to include simple artifacts of these discussions – photographs of whiteboards, screenshots of modified mockups, etc. – in preference to notes developed after the fact and out of the sight of the team.
- During Sprint 0, the aim must be to develop enough trust among the project team members to allow questions and dialog to form the base for a common understanding of those items that are included in most PID templates. If initial documentation is «handed down from on high» to team members without open, trusting discussion – it cannot be internalized by the team and it will not respond to the inevitable changes that will come as discovery and learning continue throughout the project. Agile software development embraces change by allowing the project team to recognize the inconsistencies and discoveries that will come out during development, surface them and deal with their impact through discussion and collaborative negotiation.
And before we get too far away from it – there are some really strong ideas in the Agile Modeling page on Agile/Lean Documentation. Honestly, though, there is a lot of information in that reference that should really be digested as a part of understanding agile, not as a guideline for a new project. For that purpose, this short piece is a better resource. But, if the outcome of project initiation is not a bunch of filled out PID templates that we can all take back to our cubicles and file away – What is it?
Agile Project Initiation is All About Communication
With the ideas we have mentioned in mind, we have to acknowledge that open, trusting, collaborative communication does not happen automatically in an agile project team. There are natural stages that every group will go through before they can have the kind open discussion needed without fearing it will harm relationships and respect. Discussions need to be wider than the project infrastructure, technology, and user stories, without the feeling an individual is stepping over the boundaries by asking about non-functional issues. We might need to know:
- Does the culture and background of key user profiles matter to the software development team?
- Does the role of key subject matter experts (SMEs) in product development for an organization make a difference to who needs to be included in discussions?
- Are we using a Lean Product Development model with the inclusion of stakeholder users as part of Minimum Viable Product (MVP) development?
- If we are working in a DevOps implementation, how does that change our standard production procedures?
There are all sorts of questions that are not (and cannot be) included in standard PID templates but could be critical to a specific project. If we don’t discuss our viewpoints and ask questions, we run the risk of assuming we have a common understanding and making decisions based on those assumptions. Every project, every team, every organization is different. In the best case, we can open ourselves up to collaborative discussion by getting the team together, face-to-face during project initiation, for dialog and team building using team games and facilitation with a bias to being productive, explorative, and fun. Using these techniques, we can strengthen the bonds and shared risks necessary to maintain a successful project throughout its lifecycle.
In cases where face-to-face project initiation is not possible (hopefully more rare than the rule), much can be accomplished with video/voice meetings if they are relatively short and like agile documentation, structured just enough to ensure the meetings reach necessary outcomes and allow for continued direct discussions among stakeholders in the team when needed. There is nothing much worse than sitting in a meeting where a long, passionate discussion between two team members seems to be sucking all the air out of the room – and the meeting outcomes are lost.
This piece is relatively short and again, more of a guideline than a prescription for agile project initiation, as it should be if we are to «eat our own dog food.» Bottom line:
- Don’t be afraid to pull out a template when you start your next project, or when you look at it – crumple it up and throw it away so you can start your own list based on what you know and don’t know.
- What you think you know or don’t know are assumptions and should be treated as such both during project initiation and throughout the project. Only a discussion with open questions between team members can validate ideas and give us a basis for moving forward. And the assumption that is understood as valid today may not be completely correct at another time.
- Documentation must be limited to what is necessary when it is necessary and maintained throughout the project as living knowledge. Agile documentation should not be the domain of one person or one role. It must be available and dynamic – allowing everyone on the team to contribute when necessary – in a wiki-style rather than as a bunch of locked Word documents.
- Agile project initiation should focus on both the productive side – bringing together the information needed to organize the project, initialize environments, and the functional user stories needed, as well as the people/team side – developing the understanding, trust, and communication necessary to work collaboratively throughout the project. Ignoring either side is perilous. Assuming the job is done at the end of Sprint 0 is fatal.
Scio is a vendor of agile, nearshore services for software development projects with our customer base in North America. We can provide project-based or dedicated teams as required for each situation. We would be glad to discuss how our broad base of experience and skills could help you be successful with your next project. Contact us for more information.
Customer Experience, Nearshore, Project Management, Successful Outsourcing
As a provider of nearshore successful software development services, Scio has a proprietary interest in assuring the success of our customers’ outsourcing projects. But of course, in that respect, we’re no different than any service provider. So, it could easily be said that this article and more that will follow on this critical subject have a built-in bias we can’t ignore. We want you to understand our experience, our
business model, and how it shapes our approach to providing outsourced services. We hope that understanding will lead you to explore working with us and to hire our team. So yes, this is an exercise in self-interest…. But that said, we also have an interest in promoting improvement in our industry and the knowledge of critical success factors (CSFs) for the outsourcing of software development. This certainly isn’t a new subject – both the buyers and the sellers of outsourcing services have been trading tips, CSFs, and white papers on the subject for years. A quick Google search will turn up thousands of papers from professional societies, trade journals, buyers and suppliers in the field. But it is a sufficiently rich subject, with ongoing learning and improvement, to continue the conversation among participants. Do we have important information to add? We believe we do and we’re willing to expose our knowledge and experience so you can judge for yourself. To begin the discussion, let’s set a few common terms in context:
- Outsourcing is a broad subject and different industries approach it from different angles. In basic terms, we’re only discussing the outsourcing of software development, but many of the lessons learned in outsourcing across other industries do apply. The term comes from tying together the words used to describe «outside resourcing» – bringing resources from outside a company to meet business needs. With that in mind, outsourcing can describe the contract of work to a provider in the same building, city or country, just as well as it can describe the outsourcing of work to a provider in a different country or a different continent.
- Information Technology (IT) Outsourcing is generally considered to be a subsector of Business Process Outsourcing (BPO) that involves operation, management and maintenance of IT services and infrastructure within an organization. Although technical skills are necessary to maintain aspects of IT operations, generall software development is not the primary driver of IT outsourcing contracts.
- Offshore or Offshoring is a term that, like outsourcing, has many meanings specific to the industry where it is used. For our purposes, it means the use of service providers with working hours that have very little or no overlap with their clients. Generally, these providers are on different continents with completely opposite work periods. A great deal of successful software development outsourcing is done by offshore providers so it is not intended to have a negative connotation. But, in many software development projects, communication and collaboration are key and in that respect, using offshore services requires special adaptations that both the client and the provider must be aware of and enforce.
- Nearshore or Nearshoring in our context refers to the contracting of work to providers in a different country that shares significant working hours overlap and often shares a border, region or continent. Scio is a nearshore provider of software development services to North American clients. Our services leverage the benefits of a nearshore relationship with our clients so the situations where we work best tend to exploit those advantages. Successful software development outsourcing relies to a large degree on the relationship between the client and the service provider and the requirements of the work itself. Some software development can leverage nearshore advantages better than others. Some providers have adopted practices that lower the risks inherent in software development outsourcing, regardless of their physical proximity to their client teams. Regardless, understanding the differences between offshoring and nearshoring of software development projects is an important subject for all participants in the industry. There is no «one size fits all» as evidenced by the growth of both nearshore and offshore development centers within large outsourcing consultancies.
- Agile Software Development is a methodology that is widely used across the software development industry. It is based on the idea that software development projects should be composed of short, iterative cycles producing valuable software incrementally while allowing for the evolution of the results based on constant consultation and interaction with the client and user base. The methodology itself is constantly improving and allows for adaptation to many situations. Because of this flexibility, the agile practices adopted for one project or practiced by a development team will vary, but overall the basic principles as they apply to client and team interactions and software quality during a project are expected to remain.
- Scrum Software Development is an extension of the agile framework for software development down to the team level. It includes descriptions of roles, processes, and ceremonies that strengthen agile principles and give structure to the software development process. Like agile, it is an adaptable methodology but it does include more detail specific to the software development process. Scio provides software development teams using a proprietary implementation of agile and scrum. Not all software development projects require agile or scrum, but most can benefit from some level of integration with the methodologies.
- Distributed Agile Teams are a part of the outsourcing of software development when you use either nearshoring or offshoring of a part of your agile team. In agile/scrum methodology, a premium is placed on open and frequent, face-to-face interactions between the development team and the product owner from the client-side. But, agile is also practical and adaptable, so there are practices that help to overcome the team isolation and improve interaction when parts of your team are remote. Scio is a provider of distributed agile teams for software development and integrates the practices necessary to assure success in these situations in all our projects.
What is a Successful Software Development for You?
It is hard to discuss «success» without knowing what it means to clients in general and it is almost impossible for a specific project to be «successful» unless all participants understand what it means from the start. In simple terms, most people would say without thinking it means providing software on time, on or under-estimated costs and that delights users – but that simple definition ignores all the trade-offs and pitfalls that need to be avoided or mitigated and the stakeholders who must be satisfied to arrive at a successful outcome. In researching the literature on this subject, an
IEEE literature review came upon the subject that found some interesting results:
Top 5 CSFs for Success in Software Development Outsourcing
- Contract Flexibility
- Trustworthy Relationship Management
- Competitive Bidding
- Consultation and Negotiation
- Quality Management
Last 5 CSFs for Success in Software Development Outsourcing
- Time Management
- Culture Awareness
- Intellectual Property Rights
- Data Security and Privacy
- Detailed Specification of Product and Project
These results came from a specific set of criteria concerning the basis of the outsourcing contract and relationship, as well as the contract and contract management – rather than a soft assessment of project outcomes, so it is probably not what you might think at first. But consider the elements of the top 5:
- Contract flexibility, like agile practices in software development, this allows the project to evolve in various ways to reach a successful outcome. It is a realization of the simple fact that at the outset of a project, and throughout the development cycle, participants don’t know what they might discover or how they will work together. A flexible contract, instead of locking them into a tight box, provides a framework for realizing opportunities not foreseen at the beginning of a project or dealing with unexpected issues that might derail the project. A good contract focuses on the objectives of the outsourcing relationship rather than operational details.
- Trustworthy relationship management gives everyone involved the ability to bring issues up without fear and mistrust. It allows open negotiation during the development process without bringing everything to a screeching halt. Again, it acknowledges the established truth of software development – there are things we don’t know and opportunities we haven’t considered that will be discovered as we move forward. We won’t be able to consider them if we don’t have a relationship of trust between the players.
- Competitive bidding, when it is done not just on price, but on a range of weighted factors, helps to increase the feeling of trust and control between the service provider and the client. Everyone understands what is important from the outset or has explored the issues until a successful conclusion is reached. Blind bidding, where bids are submitted, but no discussion or negotiation occurs among the top bidders and the potential client do not build this level of understanding however. No amount of paper and diagrams can substitute for the level of understanding that can be reached in direct, verbal negotiation.
- Consultation and negotiation are a realization of the fact that constant communication is necessary in all software development projects to insure the development is on track to meet the goals set out in the beginning of the project or, where needed, the teams can negotiate in good faith to reach alternative outcomes that better fit the situation as it has developed. Virtually all software development projects need both a mechanism to ensure open communication and negotiation.
- Quality management, not just against a set of detailed requirements (that is number 15 in this list after all). When everyone is involved in quality, it becomes a key to reaching a successful outcome. But as the agile methodology guides us, only if the management of quality is a continuous process throughout the incremental software development process. If it can only provide feedback at the end of prescribed phases or the end of the project, the risk of going off-the-rails becomes too large and failure to reach the necessary outcomes of a project area almost assured.
Now, of course, you are likely to see a different list in your head or have a specific list of CSFs in mind for a project. But list brings up an important consideration – what weight should you put on the need to deal with change and to work successfully with your vendor throughout a project or relationship? And it is important to understand, this is a result of the frequency of a CSF being identified among several papers, not the weight it was given in any one paper, if indeed weights were given. So the number of times a CSF was mentioned in the surveyed literature produces the order of the list.
Nearshore? Offshore?

We find these kinds of communication problems come up in many aspects of the provider/client relationship in outsourced software development. Agile and scrum development practices address these problems well, but in the case of offshore services, the agile model becomes stretched in ways that require adaptations that can be costly or distracting in the course of project operations. That is not to say that nearshore distributed teams, a model we use frequently, do not require specialized planning and adaptations, but it is part of our standard practice package, not something we do on a one-off basis. We find all projects benefit from attention to better communication and tighter relationships between our teams and their product owners. And we have that built-in advantage of nearshore; our development team is working in real-time with the client team. There is a lot more to discuss successful software development outsourcing – and we will be doing just that as we continue to provide information from the field.
Agile Methodology, Customer Experience, Outsourced Engineering Team, Product Development, Project Management, Successful Outsourcing
Of course, the first question for anyone looking at this is – what is the difference? Let’s start by saying that we’re not speaking specifically about “product engineering” – although it plays a part in this discussion. We’re actually looking at software development teams broadly, how they work and what they can (and can’t) do for your development efforts.
Today’s IT environments can be complicated beasts – with unique mixes of internal and remote API’s, web services, service-based components, virtualized infrastructure, and various open source, proprietary and custom applications. Orchestrating this architecture to provide the internal and external business services for an organization is an increasingly critical operational concern. Depending on the size and complexity of the environment, it is likely to be managed by one or more skilled engineers who are focused on the security, standardization, automation, scalability, availability and reliability of IT systems.
Traditionally, software development teams have been separated from this complexity to some degree by internal standards for application architecture and operation developed by IT. But, as the maturity of IT environments has progressed and agile has become the standard of the tech industry, software development teams are gradually being integrated into combined engineering and engineering teams under DevOps implementations. At this point, there are many different levels of integration between IT engineering and software development teams and if you are considering outsourcing a project – knowing what you are asking for is an important part of your research and decision process.
So, let’s set up a scenario: You are about to embark on a custom software development project. For the sake of this discussion, let’s assume the application to be developed is strategic and tied to your business model. With so many applications and systems available on the market, if it wasn’t – you would probably just adapt an off-the-shelf application for your purpose. You have a charter and description of the business problems your custom application needs to address, a general budget and executive support. The decision has been made to outsource this project rather than do it in-house.
With that in mind, let’s insert some different conditions that could make a significant difference in your needs for an outsourced team:
- New, but fully-backed venture with basic organizational structure but with no IT engineering beyond office systems automation and help desk.
- Existing IT team with legacy experience but little experience with modern infrastructure or IT operation patterns. No dedicated development team or significant custom applications.
- Traditional operations, IT and software development but siloed – not integrated other than by operational standards.
- An enterprise-level organization with a fully-integrated IT operations and development team in a DevOps style implementation with a significant portfolio of custom applications that are under continuous development and/or maintenance.
- A new venture of an existing entity that is expected to operate as a free-standing organization based to a large extent on the services provided by the new application(s) developed during the project.
There are other complexities we could imagine, but for the most part, they can be addressed as variations of these five scenarios and the basic conditions we set up for this discussion.
1. The New, Mostly Naked, Venture
As a new and growing company, there is always (or there should be) pressure to be efficient and do things right from the beginning. If you have a technical leader in your team and/or a significant part of your operation is based on leveraging software applications to provide your services, there is a natural tension – should you focus on your customers, your value proposition and lead your software development at the product level (leaving the actual development to an outsourcing partner), or should you build and control everything in-house? We’ve covered this question before and it is a significant decision – but now, we’re considering a little deeper level of thought. If you are considering an application that will actually support all or a significant part of the services you offer and your revenue – the proper operation and maintenance of that application is a strategic decision.
Your application must be:
- Planned with a set of operational standards in mind.
- Scalable, so it can grow along with your business without significant rewrites and basic changes in architecture.
- Logically broken into maintainable and extensible modules so it can be enhanced and the value of individual services can increase as they find their place in your portfolio.
- Reliable across upgrades, changing loads, and new features through the full product lifecycle.
- Economical to operate and maintain based on a solid architecture and the ability to leverage automation across all levels of development, deployment, and maintenance.

Photoshoot at Cluster 8/1/16
If you are a new venture and you want to spend your time focusing on your customer, the value of your services, and managing feature-fit, you shouldn’t expect an outsourced development team to simply take on these issues from day one. They may deliver a wonderful application that provides everything you need, except the five points above. Although your customers will be happy, you have just purchased a load of technical debt. Like any loan, it will come due at some point and the longer you wait to deal with these shortcomings – the more expensive they will be to retire.
So as an entrepreneur with enough problems on your plate, you have a choice (remember – our scenario is that you’re going to outsource this project):
- Dig in and hire a really competent engineering team that has real world experience in larger operations and understands where you are going. It is going to be expensive, time-consuming and at times – frustrating. You will have more expertise sitting around than you need in the early days, but it is an investment you need to make in lieu of the cost of redoing much of your early work when all your predictions come true. You don’t want to have to operate your business while changing the undercarriage as it speeds down the road. Once you have your engineering team and they understand your business model and where you are headed, they can manage your outsourced development team – but with both sides being new to you it is likely to be a fairly inefficient match in the beginning. Expect six to nine months to hire, train, and begin your project and another period of time integrating your outsourced team (which you also have to select) and your in-house engineering to the point where the combined team can be productive.
- Find an outsourcing partner that can provide the engineering skills as a part of the team they provide. If you find the right vendor, the team should be scalable with the resources you need, when you need them. The application should be designed with the five points above in mind from the start. If the vendor operates as a partner with your organization, doing that part of the development and operation successfully is part of their value proposition to you. If the outsourced team has broad experience (as they should) they will bring to the table a range of solutions you may not find otherwise. They have worked in the market and delivered solutions in many different situations. Finding the right vendor will not be as quick as it might be if you were only looking for an outsourced development team (there are many pretenders in the field), but in the end, you should be able to get your project running faster, with better efficiency, lower cost, and risk.
The choice is yours and (of course) there are other factors you may have to consider in your situation – but at a high level, if cost, time-to-market, and lowering distractions from your emerging business are concerning, an outsourced engineering and development team would seem to be a strong option.
2. Existing IT Team, No Internal Software Development Team & Little or No Current Experience with Custom Apps and Modern Infrastructure
At first, this would seem to be a simple match for an outsourced development team – and in some cases it may be. But, the lack of current experience with custom application development and modern infrastructure in this situation should be concerning. Companies in this position tend to be service-based, SMB/E organizations with established client bases, regional strength in their market and a strong, competitive need to grow. As we pointed out at the beginning, we are assuming there is a budget for this project and the company is committed to outsourcing but – they have an existing market and they can’t afford to burn their existing customers while they transition to a new or expanded level of services. Because of that limitation, even without considering the eventual operation and maintenance of the new application once it is released, an organization in this position can’t afford to overburden their existing staff with development of a mission-critical, custom application and the operational planning needed while they continue to serve and maintain their existing services. The staff must be involved in the changes but only to the extent that they need to be to be able to take a role as things move forward.
Again, we come down to some choices:
Hire one or two technical leads/product and project managers who will take the position of planning the new application, its architecture, and operational requirements while managing the outsourced development team. They will need to be much more experienced than the existing IT team so there will be some initial friction and it will (again) take time, be costly and frustrating. It will take time to get them up to speed and integrated into the team before an outsourced development team can be selected and put to work. The reason to use only one or two resources, in this case, is to hold down costs, but doing so will only make each resource more critical and (probably) more expensive.
- Hire outside consultants to develop the operational architecture, requirements and train your internal team. Since the internal team is unlikely to be large or have the skills necessary, there will still be a need to hire additional internal resources, but it can be delayed to some extent. The downside of this strategy is that when experienced staff is added eventually, they may or may not agree with the direction put in place by the consultants and there may be a period of realignment and unexpected technical debt. Also, the use of external consultants to manage all or part of the work done by the outsourced development team can create an “arms length” relationship with the development team that can make it difficult to have the level of collaboration and trust you need to avoid communication problems, especially with agile development.
- Find an outsourcing partner that can provide the engineering talent as a part them team they provide. If you find the right vendor, the team should be scalable with the resources you need, when you need them. If the outsourced team has broad experience (as they should) they will bring to the table a range of solutions you may not find otherwise. They have worked in the market and delivered solutions in many different situations. If you want to transition the outsourced team out at some point, you will still need to hire additional staff for operations and maintenance of your new applications, but you should be able to have them work in parallel with your outsourced team during the transition and lower the burden significantly.
Any of the three options could be successful but if you find the right outsourcing vendor, it would be a faster, less costly and less risky route to get your project going. But, of course, it depends on finding an outsourcing vendor with the option to include engineering skills in their team and to have a flexible approach to providing the team you need.
3. Siloed Operations, IT & Software Development Teams
This scenario lends itself to slightly larger and more technically-based operations than we discussed in the second scenario. This is the type of organization we expect to find in an established ISV with a strong client list in a specific vertical. Their operations are usually as they have been for a decade or more. Their IT staff is established and has a strong operational base. Their software development team is well-versed in their existing applications, the technologies they use and the customer base they work with. If they didn’t have to step out of that box to build this new application, we can easily assume they wouldn’t need to outsource and their engineering is just fine for what they are doing today.
But that is the rub. We’re examining a scenario where they need to extend themselves into new technologies and possibly change their operations significantly. And because we’re assuming their teams are informal, separate silos – we’re also assuming they know about the higher efficiencies they could achieve if they began to shift to a DevOps methodology but – again, like our second scenario, they have existing customers and products/services in the field to maintain and support. Like most companies in this situation, their backlog of feature requests for their existing software is just what they can handle at the moment. Adding another layer of work would just mean something would have to give. An outsourced development team, in this case, makes sense and this organization is likely to have customer-facing product development well-in-hand. But, what they don’t have is a scalable organization to match the importance of the project and a broad understanding of new technologies and architectures they need to consider to streamline their organization.
So, in this case, an outsourcing vendor who can bring in engineering experience as a part of their team skill and experience, a flexible, scalable team makeup and willingness to work in a partner role to help their existing team rethink and realign their operations could be a real asset. It is risky to try to do both at once with the same team, but if both teams have regular work to do and can collaborate to adapt operations over time it can be an opportunity that would be nearly impossible any other way. Again, the critical step is to have the skilled resources available as an integrated part of the team who can lead the effort to plan architecture and operations before development gets underway and you find that serious adjustment is needed. There are risks in this scenario, certainly, but there is also an upside to making changes in parallel with everyone onboard the organizational development and change initiative.
4. Mature Enterprise with Integrated DevOps style IT and Software Development
Again, we’ve moved the situation up the scale a bit but we’re still committed to outsourcing and we’re still considering what type of a team we need. In this case, the internal team has an implementation of DevOps and even if it is not complete, it is moving forward with staff support and commitment. Like scenarios two and three, our existing team has a number of custom applications in production and knows what it is doing when it comes to operations and development. We can assume they are fully engaged and the time allotted to this project is short, or they would simply hire as needed and do the project internally.
Since this organization has a DevOps implementation, there is already an assumption that new development resources will have experience in both development and systems architecture for continuous development and maintenance. Bringing on a team that doesn’t have that type of cross-functional experience and mindset would be a serious problem. They simply wouldn’t be able to hold up their end. In this case, if the project is to be outsourced, the incoming team must be able to handle both engineering and agile software development if they are going to hold up their end and integrate with the larger team successfully.
5. Spin Out/Off Venture with Software-Based Service
You might think this scenario would be a lot like the first, but spin-out ventures tend to be better positioned and planned simply because they usually come from organizations with a strong market position and goals that are carefully evaluated before the venture is started. In most cases, staff members come from the “mother ship” with a background in product development and deep understanding of the market they are going into. But, because the loss of technical resources inside the home organization could seriously impact production there for a prolonged period, they rarely pull out more than a few senior IT resources. With that in mind, their team is usually fully aware of current technologies and methodologies, even when they may come from an organization that culturally has not be able to move to them as quickly as they might wish.
A spin-out gives this core team an opportunity to move in fresh directions with less organizational baggage and legacy overhead. So, in some ways, they may look like scenario two with little IT in the beginning – but the big difference is they have experience in the product development side of custom software and how supporting systems can be orchestrated. They are better positioned to evaluate partners and decide on the roles they want in-house versus outsourced. Since we said at the beginning that all scenarios would be based on a decision to outsource – the question is still, “Do we just need an outsourced software development team or do we also need an integrated engineering component?”
The decision comes down to how much of the burden the mother organization wants to continue to shoulder and how expensive the “charge-backs” would be if they did. Leaders of spin-outs usually have strong stock incentives to keep costs in line and move relatively quickly to prove their direction is worthy of the risk. If using existing services inside their home company would create complications, slow product development, and increase costs – they will think twice about that direction. Since we have specified that they have already decided to outsource this project, we can assume they are not looking to spend any time taking on problems that do not get their services and products into the market. But that said, we know the IT resources in the venture are limited and if they want to go to a modern continuous release methodology so they can incrementally improve and tune their applications, they will need to have flexible, integrated teams of engineers and developers from the beginning so that their applications are architecturally and operationally sound from the beginning.
Bottom Line
The bottom line here is that software development is shifting away from internally-focused product development, siloed enterprise teams and monolithic applications to incremental release patterns, agile organizations, and customer-focused lean product development. Not everyone is there now. There are many different ways to implement change. But, all of these organizations have chosen to take on custom application development for a strategic initiative, the opportunity now is to do it better with an eye toward the future of their organization. This is just one small part of the change they seek, but it is an important one to consider. So, yes – an outsourced team that brings a range of engineering skills and experience along with their development background can be a big advantage for any of these situations, with a vendor who will operate as a partner in the organization.
Scio provides nearshore, outsourced software development and flexible teams with a range of software development and engineering skills based on our experience in many verticals and situations. Our teams can have flexible roles and their bias is toward agile methodologies broadly. If you have a project in mind, please contact us to discuss how our unique blend of skills and experience can benefit your organization. We would be happy to take the time to listen and provide insight into how we could partner for success.
Agile Methodology, Customer Experience, Nearshore, Product Development, Project Management, Successful Outsourcing
Lean Product Development (or Design), LPD, is gradually becoming a standard methodology in software development in much the same way that agile, scrum and lean have become industry standards. But, as is the case with other «standards» – many people say they have strong implementations, but if your product development team practices LPD principles, you might have trouble trying to integrate their approach. That problem can be troubling if you’ve invested in a rigorous, repeatable process for developing and releasing new software products and then find it difficult to find outsourcing services who understand your goals, your process and can work alongside your team seamlessly.
If you have software applications as a part of your services portfolio or directly to clients and use LPD methodologies, it is important to fully integrate your development team. But, if you are using an outsourcing service, what should you expect? How important is it to integrate your outsourced team?
A Little Level-Setting
In strict thinking, although the term «LPD» is used interchangeably for design and development, there are some differences in focus between the two in implementation. Both are based on Lean, the principles that started with Toyota Manufacturing and have evolved to embrace a process of finding solutions to customer problems that emphasizes iteration, reducing waste, and lowering risk. Broadly, both are informed by the Lean Startup Methodology, but because LPD has been adopted by many large organizations for the development of service and product lines, lessons from Lean Startup are brought down to the product level, rather than at a business model level as they are for startups. And, because we are specifically interested in services, software and software development, rather than manufacturing and the development of physical products, we can include the fact that all LPD implementations favor the use of agile, scrum and kanban as development methodologies.

As you might guess from the use of the word design, Lean Product Design implementations are focused on the design of the product, the user interface (UI) in software development terms and how the user interacts with the application. A process flow for a design implementation includes a growing system of sketches of screens (or modules), wireframes and design standards that evolve and become more specific as software development progresses through iterations.
Lean Product Development implementations tend to focus on the features required to satisfy user needs and product goals. So, while both implementations will use agile user story techniques, design-based implementations will be placed more in the context of the UI and user experience. Development implementations will focus more on groups of features and user goals. In practice, the differences between the two are relatively small and depend more on the full project team and their process than anything. A development team with clients that tend to be more visual, literal and unsure of needs may find it easier to be design-focused. A team with clients working on a business process and users with strong, informed opinions may find it easier to be more development-focused. And certainly, there are many blends of the two ways of thinking.
So, What Does This Mean?
There are many software applications that embody process and principles from a software product management point of view. How will they work for you if you decide to use an outsourced software development partner to help bring your application to market? Is one or the other better for software applications or integrating with software development teams? Are there methodologies or points to emphasize with potential partners as you discuss how their product development approach and experience?
From a high level, if your potential vendor has good product development experience and understands the product development cycle fully, the software you use for product management and the implementation of agile they use within their software development process shouldn’t matter a great deal – because they should be able to be flexible and do what is necessary to integrate the teams. If they are using something out of a book or a seminar that they have actually practiced a few times with a client – and that client wasn’t themselves fully committed to formal product management – it will be a distracting challenge for both teams to work through a methodology implementation while developing your application.
5 Questions for Your Potential Partner
Let’s start with a few questions to discuss. And a word about interviews: Don’t ask yes or no questions when you are investigating how a vendor operates and works with clients. Instead, ask open-ended questions that should be answered with more than a few words (if they actually have experience and formal services around the area they are discussing). If you don’t get what you feel is a strong answer, again, ask some open-ended questions that go down a level in detail.
1. Tell me about how you use agile in projects with clients practicing Lean Product Development?
The question here is not «do you use agile?» You need to know how agile informs their work with companies practicing LPD and what value they believe their implementation brings their customers. They should also include their practices within agile, such as scrum, extreme programming (XP), or kanban. If they don’t go into this level, ask another open-ended question for more detail.

One of the many implementations that large organizations have used.
In most cases, scrum will be the task management and basic development guideline, but it may be extended by XP practices. Some teams will be familiar with kanban and some will mention that they might start with scrum and transition to kanban if the project uses a DevOps implementation aimed at continuous development. At a high-level, the choice between scrum and kanban comes down to a philosophy about work and how to manage tasks. Scrum is generally considered to be more structured, using time-boxed iterations (sprints) and depending on the team to properly estimate tasks for each sprint and with specific planning and retrospective sessions for managing task backlog and priorities. Kanban tends to limit the number of tasks a team can have in work at the same time and new tasks are pulled down into development as soon as a slot opens up in the queue. Kanban is generally more flexible for the insertion of new features and less structured, requiring more feature management to avoid creep before the base application is completed.
It is only a guideline, but most teams find scrum to be a good system in application development and might use kanban or a variation after full release when the application is in maintenance or continuous development. Again, team familiarity and experience in adjusting their «standard» implementation to your team is more important than the particular flavor of the methodology they are using. Process mockups and walkthroughs of feature and feedback flow between the teams is an excellent way to evaluate how things might work and adjust to situations.
2. How do you understand the MVP process in lean product development?

Iterative development of a minimum viable product (MVP) is critical in LPD and probably one of the least understood parts of the cycle by non-practitioners. It is also very hard to estimate effort and time for the development team because it involves an open-ended process with key stakeholders and users. The key issue is to understand what they expect and how they will help you towards viable iterations for validation.
If their understanding is more like the top example in this illustration than the second, it is going to require some real thought to ensure you arrive at validation releases that are fully-formed (loveable) but not feature-rich or too simplistic. This is an element of your work as a whole team where you can really assess the ability of your outsourced team to work fully as a partner in product development. Can they come up with creative ways to give a good representation of the core product to users with less effort and time? Can they see the evolution of ideas and pick out key elements in customer feedback? If you expect or have to micro-manage every iteration yourself, you’re not getting a fully-prepared software development team.
3. How will we capture and manage user feedback during validation and following initial release?
Now, of course – a developer could just say, «This is your problem, not mine.» To a degree, they would be right, but you are looking for partner-level answers that indicate a willingness to do whatever is needed to make the product development process work properly and to be in position for the long run if your product is likely to benefit from a continuous development/improvement, DevOps-type release. Possible answers can be all over the board from add-on services that support help desk and application feedback to in-app custom modules. At a minimum, developers should be «in the loop» during validation and early release to assure that application bugs are not being reported as feature requests or issues and a system should be available to allow users to see proposed changes and «vote up or down» features they would value.
Including the development team in the feedback loop has a cost, but it avoids a lot of thrash when a feature is not working as expected, allows the developers to be proactive with corrective actions and to understand needs directly from a user’s words, rather than summaries. Again, what you are looking for is not a specific answer but that your partner is willing and able to understand what you need from a product perspective and provide creative solutions.
4. What are our options for capturing user metrics?
This requirement is, of course, very similar to capturing user feedback, so solutions can range from custom reporting within the application to third-party services and application libraries. In this case, the richness of options is key so you can evaluate different aspects of customer acquisition, feature usage, time to complete a process, etc. These features don’t exist in «average» applications, but they can be added relatively easily during development, especially if you compare the effort required to add them at some later point. You will have to get into detail about the kinds of metrics you feel might be most useful for your application and situation, but a strong developer team should be able to give you a range of options for implementation and some sort of dashboard for generating reports.
5. What do you do to assure that quality issues don’t get in the way?
It may seem a bit off point to discuss quality in an LPD focused question set, but the quality is far and away one of the biggest issues when it comes to unexpected project delays. You can’t expect stakeholders and users to be fully engaged in the product development process if planned releases are delayed or major features don’t appear fully formed as promised. A really good application that is unstable or has a poorly designed user interface is a big distraction from the goals of LPD project.
The best answers to this question include test-driven development, test automation, continuous integration and the tools that could eventually come into play if you choose to go into continuous development. The best case is to make this decision upfront, but things don’t always work out that way. Your primary aim should be to ensure you are in a position to move to that level when you need to without backtracking or having less than full test coverage and to leverage quality assurance tools and processes proactively from the beginning. Your team should be able to focus on feature execution and user experience as they do their acceptance and not buggy code or user interface inconsistencies.
The answers to this question should cover many of the issues of how teams will work and communicate. If they don’t, push follow-up questions in that direction specifically. If you have read anything about outsourcing, you already know that successful agile teams require strong open dialog and collaboration. Don’t let easy answers push you off this point. Understand fully how your project will deal with quality, communication, and ownership of the project goals.
There are a lot more questions you could ask, but these should get you started. The point is to have a conversation with your prospective vendor and come to an understanding of the methodologies they have utilized, the capabilities they bring to the table, and the customer experience you can expect. A conversation can clear up a lot more issues than a written response to an RFI or a proposal for work and give you a better idea if this is a group you can see your team working with. If you are actually looking for a long term partner and not just a team for a short engagement, it would be wise to have that conversation in person – in your offices or theirs. If it requires some travel, it is just part of the expense of finding a good match. It is much better to have your first face-to-face meetings in a positive, forward-looking atmosphere than when a project is underway and you’ve realized that a lot needs to be done to iron out issues.
Scio is a vendor of outsourced, nearshore software development services to our clients in North America. We provide teams with a background in Lean Product Development as a part of our service portfolio. We use agile methodologies and adapt them to the situation and needs of our clients. If you are interested in how we could partner with your organization to build a great set of new products – Contact Us. We would be glad to take the time to discuss your needs.