Beyond the obvious criteria such as the technology stack expertise, domain experience, and value, hiring a software development partner (i.e. outsourcer) is entirely about trust. For my part, I’ve worked in the software industry for nearly 25 years, but only five of those years have been as an outsourcer. For the first 20 years, I was on the other side of the proverbial table where I hired and/or worked with many outsourcers. With few exceptions, I found the experiences working with outsourcers to be, at best, bitter-sweet and, at worst, absolute nightmares.
At a micro level, the reasons for the nightmares were some combination of poor communication, over-promising and under delivering, and feeling nickeled and dimed for highly questionable “increases in scope” that led to an endless stream of “change orders” (i.e. demands for more money to do the same job).
At a macro level, I find the performance of most software development partners to be some combination of dishonesty, coin-operated behavior, and low quality of work.
When we started CodeStringers, our leadership team wanted to be different — to genuinely set ourselves apart from the typical outsourcer. In fact, our first tag line was “upsource your software development” because we associate the word “outsource” with the aforementioned bad behaviors, and we wanted to define ourselves in a manner that illustrated our deliberate effort to be different.
The values and associated behaviors we wanted to institutionalize within CodeStringers were: integrity, innovation, and craftsmanship.
Organizational integrity, or the lack thereof, manifests itself in many ways through the lifecycle of a business relationship, but it all starts at the very beginning of a typical client/outsourcer relationship. It usually begins like this:
You call an outsourcer to build a new software application. Maybe you’ve got a detailed specification and user interface designs. Or maybe you just have a few pages of notes. After an initial meeting to get acquainted, you ask the outsourcer for a price and timeline to deliver on your requirements. A few days later, the outsourcer gives you the budget and the time frame that you were hoping to hear, and you agree to move forward.
As the planning gets underway, it becomes clear that your requirements were not complete. Perhaps you’re missing entire features from your plan. Perhaps you have all features listed, but you did not provide detailed acceptance criteria and use cases (definition of done, in agile terminology). Perhaps you did not provide user interface designs. Regardless of the form of the missing requirements, the outsourcer points out the scope increase and tells you that the budget and timeframe have increased significantly– so much so that you would never have agreed to the “new” (i.e. correct) budget and time frame if you had known about it during the bidding stage.
This is where the nightmare begins. The client is now locked into a relationship with an outsourcer who they feel cheated by, and consequently the two parties no longer trust each other and are unable to create a successful software product.
So what should have happened?
Most importantly, the outsourcer should have collaborated with you during the pre-sales process to point out the missing requirements and done one of the following:
- Provide some assistance in planning without charging you (betting that their effort will result in you awarding them the business);
- Suggested that a paid “discovery” phase is needed during which requirements would be more fully defined to ultimately get to a more accurate estimate;
- Offered to structure the relationship not as a fixed bid for a defined scope, but rather providing a team of personnel acting as an extension of your organization on a monthly cost-per-resource basis such that changes in scope and refinement of requirements can be handled during the development process, much like an internal software development organization would function.
Accurately setting a client’s expectations and clearly communicating is critical to the success of a partnership. Starting off any partnership based on telling lies in order to secure your business under false pretenses, and then gouging you thereafter, is a short-term strategy that CodeStringers does not embrace.
Many outsourcers are like vending machines. Put in coins and code comes out. In other words, they build EXACTLY what you ask them to build, nothing more. Worse yet, the software development partner may even know that the client’s product is likely to fail but they build it anyway. And to add insult to injury, the outsourcer may include language in the contract saying that all intellectual property is jointly owned.
CodeStringers feels that this behavior is egregious and shameful. Our goal is NOT simply to build code for our clients, rather we exist to make our clients more successful. This often means:
- Pushing back on a client when ideas are ill conceived. Anyone who’s worked in software knows that ideation is part of the design thinking process and that many ideas should not ultimately see the light of day. Problem is that many outsourcers view their job as saying “yes” to whatever the client requests without questioning the problem being solved or the solution being defined. I do not view that as our job. I view our job as the exact opposite… to be your partner in building software that sees success in the form of user adoption and, for commercial offerings, revenue, and profitability. We routinely challenge the ideas our clients have in order to make them better and I cannot think of an engagement to date in which our team contributed to or directly invented intellectual property for our clients.
- Ideate for the client. Good outsourcing partners will make the effort to understand your market, competitors, buyers, users, and the problems your product is intending to solve and will then generate their own ideas about how the product might more effectively and uniquely solve those problems. This often leads to the creation of intellectual property.
- Allow clients to own all intellectual property invented during a partnership. CodeStringers standard contracts clearly state that all intellectual property is owned by our client.
Most people think of craftsmanship at an individual level. A cabinet maker is a craftsman. That word is less frequently used to describe organizations.
Organization attributes are often a function of the culture of the organization. Every organization has a culture. Some, however, were not intentional, meaning that senior leadership of the organization didn’t make culture a priority such that the culture was organic – a function of the personalities of the people in the organization.
When we started CodeStringers, we defined a set of core values to which we expect every member of our team to embrace and internalize. Chief among those is craftsmanship.
Craftsmanship is about building high quality, manageable, high-performance software, which ultimately comes down to the quality of the code. We recruit and train personnel to share this value. I tell our team members the same thing I tell my children: Mistakes are tolerated. Failing to own and fix them is not.
At an organizational level, we describe this trait as being “product focused” versus “project focused”. Project-focused organizations spend more time trying to obtain the client’s acceptance so they can end the project, be paid, and move onto the next. Product-focused organizations set standards internally that are often higher than those of the client.
Whether you choose to give CodeStringers a shot at your business or not, we encourage you to evaluate the vendors you do consider against these criteria as they will ultimately ensure a higher probability of success.
However, if you buy into our philosophy and you are looking for a software development partner, then please contact us. We would honor the opportunity to help bring your ideas to life.
- Listen To Your Customers
- What Have We, As Software Outsourcers, Learned From The Pandemic?
- CodeStringers Named by Inc. Magazine as the Number 12 Fastest Growing Private Company in California
CodeStringers – A quality-focused boutique software development company