We examine 10 tips that will help you to uncover the important soft skills your service provider must have, plus key technical questions
Hiring a software developer or development agency can be difficult, but maybe not for the reasons that you thought?
That’s because a lot of people will view hiring a software developer as being similar to hiring a mechanic. You have some very specific tasks that you need to give the developer and the developer just needs to go do those tasks and Bob’s your uncle. Now, unless you are also a professional software developer yourself, with years of experience in providing solutions that users want to use, then there is a very high probability that you don’t know what you don’t know.
The problem is compounded because a lot of software developers will be all too happy to do whatever you ask them to do, without much question, much like the hiring-a-mechanic metaphor.
The difference between software development and car repair is that software development is a creative endeavor. Much of what we do is like written words in a novel. Deciding what words to put down on a page requires understanding the intent of what needs to be created and the skill to do it well. There are lots of decisions that need to be made during the development process, and getting minor things incorrect are where bugs appear, sometimes even quite significant product ending bugs (i.e., puts you out of business).
That is only the least of it. If a software developer is really looking out for your best interest, then that developer is more like a consultant. The many years of experience the developer brings should be communicated through recommendations whenever there are better ways to do things that the requester had not realized could be done.
But even more than that, a developer/consultant should be keenly aware of user psychology and be able to advise on when a design is going to work well or not. There may even be times when user experience is tested by the product sponsor, communicating directly with users, and the product sponsor has declared what needs to be created, but what is requested is still suboptimal. The developer/consultant should raise that concern with the product sponsor. This requires the developer to be a peer in business understanding.
Finding developers who care enough to raise concerns is rare. This article will help you find those rare qualities that a software developer should have, and understand when you have found a developer who is truly going to look out for your best interest, save you money, time, and heartache.
Now, let’s look at ten tips for selecting a SaaS software development agency or independent software developer.
Trust in any relationship is important, but in software development a lack of expert feedback can be very costly. We'll examine:
Developers, specifically those who are working by the hour or even on a fixed budget, are generally motivated by developing software. In one respect, this is a good thing. You want developers who are going to be interested in developing software!
The problem is that they’re not incentivized, or often even motivated, to deeply understand the business side of the applications that they are building in such a way as to feel competent to offer feedback on what should be done and why it should be done that way.
Often, software developers 1) have seen a great number of software products built in various industries and contexts and 2) have a keen sense of what users will be willing and able to do. These two capabilities are quite important and useful to individuals who are sponsoring the building of an application. These product sponsors, who hire the developers, are oftentimes unaware of what they don’t know. Ideally, a software developer is going to make these individuals aware when there is some important aspect of the project that is not recognized as important and is being wrongly implemented.
Generally, there is a lot of risk for the software developer to speak up and suggest something. There is a lot of emotional energy that goes into such an activity, and the developer is often put in the role of keeping their head down and cranking out software rather than offering suggestions. That is where the risk comes in. To swim upstream means risking offending or taking on a role that was not given to the developer.
As a product sponsor, you want to look for a software developer who is willing to offer suggestions. Interestingly, what if the product sponsor does not accept the suggestion of the software developer? That is what we will cover next.
I have encountered a number of individuals in software development who are willing to offer suggestions, but when those suggestions are not taken, I have at times seen developers that don’t react well to that and will sometimes become difficult to work with.
The product sponsor needs to not only look for a developer who is willing to offer suggestions, but also one who is willing to allow the product sponsor to make the final decision.
As a product sponsor, you want to look for a developer who has an attitude of concern for building things correctly, but a willingness to come under the authority of the product sponsor. As a product sponsor, you may want to ask questions about project work the developer was involved in previously where they offered a suggestion, and it was not taken. Ask the developer how he or she responded to this.
Ultimately, as a product sponsor, you want to create an environment where there is free and open discussion. You want to work with a software developer who is particularly welcoming of an environment that has open discussion. In asking the software developer to be willing to discuss things, the product sponsor should also be willing to discuss things.
In other words, you want mutual respect. In order to get mutual respect, you will need to ensure that you have a software developer that is capable of interacting with you as a peer. If either one of you feel as if you are beyond the capabilities of the other, then there is a high probability that there will not be a mutual respect and environment of open discussion. This should be considered when looking at the qualifications of a software developer.
Arguably, one of the most important skills of a software developer is the ability to understand your design.
The ability for a software developer to understand your product designs is super important. You are trusting a developer or agency to create something for you, and the developer expects to be paid for the time it takes to create it. You want the developer to understand what you are requesting because as a feature is created, you don’t want to later find out that it was not as you envisioned it to be. The time involved in fixing the issue is typically paid by the product sponsor. Especially if you hired a developer on a time-and-material basis, every minute that the developer is working for you, you are being charged you for that time.
It gets particularly messy when the project is a fixed bid project. Often, there will be considerable pushback from the developer, and potentially some ill-will may develop. If the fix takes a considerable amount of time, and the developer is being asked to do it within the fixed bid project, then disagreement over what was designed may ensue. Depending upon how much work is required, this can create a particularly difficult situation and put the project timeline in jeopardy, and perhaps also the relationship with the developer, which can also have negative impacts.
Here are a couple tests you could conduct in order to determine if you are able to work with an individual.
Describe a feature you will want built and ask the developer what he or she heard. If you don’t yet have a design - maybe you are looking for a software developer to help you with designing (good choice by the way) - then pick something totally fictitious, perhaps some software that you have used in the past, and explain that software’s design.
Each time the developer responds with the details you requested, but something is missing, be sure that you don’t make any assumptions that he or she, “must have understood.”
If the developer left out detail Y about feature X, then ask him or her, “Well, what about detail Y of feature X?” It could be simple enough that in the line of questioning the person forgot to mention that feature. If the developer looks confused, and you are absolutely sure you did a fine job of explaining, that might be a red flag? The only way to be sure is to have two or three designs handy so that you can ask brand-new questions.
Go with your gut on this. If you feel like you are not connecting with the developer, then perhaps this is not a good fit? As a last-ditch effort, you could ask what the developer thought about the line of questioning, whether he or she felt the questions were fair or not, and what he or she thought about their performance.
Perhaps there is a problem with the way you were asking questions? If you receive feedback that something was not understood because of the way you phrased something, then definitely take another stab at it and this time using the feedback that you received. If that solves the problem, then perhaps there is no problem at all?
Take your time on this and make sure that you have plenty of design questions that you can run by the developer in order to get a good read on your ability to work with the developer. This is an extremely important step and should not be taken lightly.
Even if you have a background in software development, it is important that your developer be able to explain complex or abstract topics in easy to understand ways.
It is so important to know what your software developer is doing for you in your application. There are lots of complicated things that the software developer is going to be doing, and you should know what those are. Most likely, you are not a software developer. So how are you going to know what your software developer is doing for you?
There is a very simple answer to that question: The software developer is going to tell you what he or she is doing in a way that you can completely understand.
You might be thinking to yourself, “There is no way that I am going to be able to understand what a software developer is doing.” You might further be thinking, “I just want it done, I don’t really care to know what this person is doing.” Well, I totally understand having that point of view. The thing is, you are the manager of that software developer. Like it or not, you must know what the software developer is doing so that you can ensure that your money is being properly utilized on the right things.
All engineering is about making various trade-offs. Software development is no exception. As a software developer is developing, there will be a number of decisions the software developer needs to make. This is after deciding on the technologies to use, which is also a big and important decision. Hopefully, you were involved in that decision as well.
The ideal software developer is going to be involving you in important decisions, and maybe even some not so important decisions. Excellent communication is the key. That communication is a two-way street. You need to be available to the software developer and the software developer needs to be communicating with you about all the various decisions and assumptions the software developer had to make during the course of developing your product.
What we are going to do in this section is offer a couple of tests that you can use to examine the software developer. I like to call this the grandmother test. Some grandmother’s might be quite sophisticated in their use of technology, but at least at the time of this writing, most grandmothers are not very technically astute.
The description that the software developer gives for the questions that you ask should be the kind you would expect a typical grandmother to be able to understand. In other words, the description should be so easily understood that any adult with typical mental abilities would be able to grasp the explanation.
So how are you going to test to see if a software developer is going to communicate in the ways just outlined? You should start by finding out if your software developer is able to explain a complex subject to you in an intelligible way. Ask your software development candidate to explain how a modern web application works. Here are some items that you should be expecting to hear about in that description:
It is okay if you do not understand these topics before going into the line of questioning. What you are looking for is a willingness for explaining these different areas of the web application, and an ability to explain them in a way that is easy for a non-technical person. Feel free to ask about a specific framework that is mentioned, a database technology the developer likes to use, or language that the developer is particularly fond of. Ask “why.” Why that framework? Why use that language? What do you like about it? What do you not like about it?
Again, it doesn’t matter if you don’t know the actual answer. What matters is that you are able to understand and the developer is willing to take the time to explain.
An alternative to this might be asking the software developer to train you on how to ride a bike as if you had never seen a bike before.
While interviewing for a contract position to assist a training company, I was asked to provide this exact training to the interviewer. It is quite interesting how unnatural this seems. You really have to think about things differently. This is such an easy thing for most people to understand because we have grown up around bicycles. To imagine somebody not knowing how to ride a bicycle, or even having a grasp of what a bicycle is, can be quite a strange thing to contemplate.
That’s what makes this exercise quite excellent. It requires the software developer to I think in a very different kind of way. This gives the product sponsor an insight into the way a software developer thinks, which is quite valuable. The other way in which this is quite a good exercise, is that everybody knows the subject. Nobody has the upper hand. It is a level playing field.
When the software developer uses words like tire or peddle, be sure to play dumb and ask what that is. Remember, you don’t know what a bicycle is. Also, keep in mind the grandmother test. Can anybody understand what is being communicated, assuming that the person does not know what a bicycle is?
Lastly, you should come to the discussion with the software developer with a communication plan. A communication plan is often used in project management. It outlines how people are going to communicate during a project. This develops a standard upon which everyone is going to commit.
As the product sponsor, you should be getting feedback from the software developer on your intentions regarding this communication plan. If there is significant pushback, then there is a high likelihood that you are going to have difficulties in getting information from this software developer. In my way of thinking, if you are getting pushback, then this is probably a strong indicator of future difficulties.
Don’t confuse pushback with feedback. The software developer may have ways in which he or she is used to working and those ways might be perfectly acceptable. You will need to determine what things are must-haves versus what things can be negotiated.
Some things that you may want to include in the communication plan are as follows:
You may also want to consider the schedule and how development is progressing against the schedule. Everything you want to check on should be indicated with a cadence, such as weekly or monthly or upon completion, or some other predefined schedule.
Even if you're a professional in software design, alternate perspectives are important. Is your developer a peer that can help you create better designs?
It is so common for people new to designing solutions to design solutions that are too complicated, costly and not to the liking of users. This happens in all kinds of creative endeavors. New composers will write compositions that are far too complicated and nobody wants to listen to them. New architects will create structures that nobody can afford to build. And new artists will create paintings that are far too creative and strange and no studio will feature them.
A software developer should be expert in developing solutions to difficult problems. If a software developer is relatively new to designing solutions, then designs may fall prey to the new designer’s predilection towards building more complicated designs than are warranted.
While interviewing software developers, you will want to ensure that you are working with a software developer that has designed several applications. You will want to ask about specific applications the developer has created, and determine if the complexity was on par with what you want to create. It may be helpful getting the developer talking about the designs he or she developed and find out the particulars about why certain technologies were used versus others.
It is also fairly common for technical people to want to explore some new technology, and your project may become their opportunity to try a new technology and get paid for it. There are times when that is quite warranted and helpful. Other times, it will be more cost-effective if the software developer sticks with technologies that are inside their wheelhouse. This isn’t specifically a design topic, but it can come up in design because the developer may decide to include the new technology within a design in order to sneak it in.
Ultimately, even if you have a background in software development, you want to look for a developer who is going to be your peer, or better yet has considerably more experience than you have. By working with such an individual, you will have the opportunity to improve upon the designs that you have developed. Also, the developer will be able to develop technical designs that you might not have been involved in.
It is best to have a developer who can design both the business and the technical sides of an application and do it well.
Many developers are concerned only with building what you want. This is great if that’s all you want, but that shouldn’t be what you want. Instead, you should want people aside from you and your own mind, to review what you’ve come up with and suggest alternatives that you can evaluate. It happens often that when we are close to ideas that we’ve created, we can get attached to these ideas and not see alternatives that are right in front of us. A developer should care enough to ask tough questions and explore alternatives.
Here are some taglines of various development companies, altered slightly in order to protect them, but the meaning and sentiment is retained. Notice their focus:
These are all examples of companies focused on software development. That is not necessarily a bad thing. After all, if you are looking to have somebody develop some software for you, why not have someone focused on software development? Isn’t it just a marketing message anyway? Maybe?
By way of comparison, our tagline is: “Where SaaS products are built with risk reduction measures that support your investment.”
In other words, there is a deep concern for protecting your investment, and it is “you” focused, not focused on development, placing developers on a project and what’s important to the agency. You should look for a software developer or agency that treats your product as if it were their own. When the primary focus is on doing what is best for you, then the software development will naturally be a product of that focus.
According to Oxford Languages, a “yes-man” is “A weak person who always agrees with their political leader or their superior at work.” Synonyms are sycophant, lackey and flunky. These pejoratives are reasonable ways of describing a software developer that just goes along with the product sponsor. Not that a software developer should be contrarian, but a developer worth his or her salt will politely disagree, when appropriate, offer suggestions and add value.
I have worked with a lot of software developers. Some of them are quite opinionated, while others are quiet and just do what they’re told. Some care too much, and others don’t care nearly enough. It is rare to find a software developer that is somewhere in the middle, but that is exactly what you want.
When talking with a software developer, be sure to ask how important it is that work be completed exactly the way it is designed. What you should be looking for here is someone who expresses an interest in being able to review your design work and offer suggestions. This person should also be willing to accept your design even if it goes against the design the software developer proposed.
Such an individual is demonstrating the ability to walk that line between being a yes-man and being obstinate.
Is the service provider willing to provide support both immediately after and as application usage grows?
Building a substantial software application is no trivial matter. If you hire someone to support your software application, who didn’t write your application, that person will have to spend time in discovery in order to support a software application developed by someone else. This is also a non-trivial endeavor.
That is why you want to have the software developer or agency that you hired to develop your software also support your software. Such an individual or individuals know how the application works and are able to quickly recognize symptoms and find solutions. Even if you have only an MVP, it is important that you get the software back into operation ASAP, in the event of failure.
Be sure to check if the software developer or agency is equipped to support your application. Is there a willingness to support on a time-and-material basis or only with a support agreement? One or the other might be preferable. You should pick the one that works the best for you. Ideally, a service provider will give you an option. Just note that the time-and-materials support will often not get priority treatment, whereas a support agreement will often have a quicker turnaround time.
Experience building software applications is important, but does the service provider have experience building SaaS applications? Does the service provider understand:
Building a SaaS application has a kind of life-cycle. Consider, for example, our depiction of risk through a typical SaaS development project.
This illustrates the steps a SaaS product ideally goes through. It is life-cycle like, in that, as one adds new features after the product is initially built, one should always go back to the proof of concept, exploring with users the need for such a feature, and then prototyping, again working with the users, etc.
At the start of the initial product build, there is some kind of discovery of the need that a software product might address. There is a lot more that goes into that but let’s just say that the next step would be developing what the application will actually do. This would be followed by the creation of an MVP. Lastly, the application would be scaled to accommodate a theoretically unlimited number of users.
This is an extremely short version of the life-cycle of a SaaS product, leaving out many details. Many software developers are only interested in being engaged starting at the MVP or possibly the prototype stage, but only to the extent that the developer is building something. In fact, the developer might not even be aware that the previous 2 steps should have occurred.
Even if this is all that you might want from a software developer - you are only aiming at getting somebody to program your application - the best candidate for producing an excellent product is one who understands and is capable of leading people through the entire life-cycle of building a SaaS application.
Having this kind of understanding and experience is important for being able to make the kind of decisions that would typically be made in the course of developing a software application. The ability to excel in the areas described in this article, such as tips 2, 4, 7, and 10, are greatly enhanced by having this full life-cycle understanding.
At each stage of development, there are different goals to the application. For many software developers, there is only one mode of software development: Building artistic code they are proud of. This might be exactly what you want when you are scaling and in production mode. This is definitely not what you want when you are at the very earliest stages, and also in the early stage of MVP development. In later stages of the development of the MVP, you may want to start developing code that is more robust and maintainable.
When a software developer is always in the mode of developing the best possible work he or she can develop, this isn’t always satisfying the goals of the application. In fact, this may destroy a good portion of the runway for the application and perhaps even put the product’s future in jeopardy.
That’s just how important it is to have someone who understands SaaS development. The constraints of software development in other areas, are often quite different from that of SaaS development.
Another important consideration in SaaS development, that is often not present in other development projects, is the need to scale the application to a theoretically unlimited number of users. We’ll cover this more in tip 9, but briefly, it is not a trivial endeavor to scale an application to such a large volume. The number of non-functional quality attributes of the application grows significantly as one endeavors to provide this capability, because these quality attributes become important.
You will want to find a software developer who has experience in developing applications that can scale. Such software developers need to have knowledge of, and experience in, the various techniques necessary to build an application with such capabilities. Although you may encounter a software developer who is very skilled, and has been developing software applications for a long time, that doesn’t mean the software developer is skilled at developing a production worthy and scalable SaaS application.
Most software developers will create whatever you ask them to. Few will try to minimize your scope and look out for your best interest.
What is required in order to produce a software product that people are willing to use? Even getting people interested in using your MVP may require significant development of common features, referred to as table stakes. These are features, that all software in the particular class of software your product falls within, must have in order to even just begin competing.
With the proliferation of software in every aspect of people’s lives, the demands and expectations are quite high. Many times, people expect software to do amazing feats of engineering and then complain because it cost $8.99 on the app store.
With such challenges, it is important to be able to find areas where one can minimize development.
Consider these two application designs:
1: Users can enter the configuration of the application within a sophisticated graphical drag-and-drop canvas.
2: Users can configure the application using simple select lists, a few check boxes and some fill in the blank text fields.
The first one will obviously take considerably longer to build. If you were to show users these two designs and ask then which one they preferred, the obvious choice would be option 1. A better approach would be to not show them option 1. Ask them if option 2 would satisfy the needs of configuration. You might ask the users to rate their approval of such a way of creating the configuration.
The other incredibly important aspect of these two designs is how often a user will need to go perform this configuration. If this configuration is required on a daily basis, and the productivity of option 1 is significantly better than option 2, then it might make more sense to do option 1, but not necessarily.
It might be that with some simple changes, such as templating common configuration options, option 2 might suddenly become the better-performing alternative. Sure, it doesn’t look as sexy, but is sexy important in this context? It depends on the application, but if this is a business application, and you are solving a problem that a user has, sexy is often not necessary and sometimes detracts from the user experience.
Having a software developer who can offer alternatives, that will save on your investment, can be of significantly high value to the overall success of the project. Often, software developers are not going to be interested in offering the easier alternative, particularly if you are paying them by the hour. You want to look for software developers who are focused on the success of the project and having the view of developing a great reputation as being more important than short-term financial success.
Within specific features you might be reducing the amount of scope to the absolute minimum, but do you even need that feature in the first place? Your knee-jerk reaction is likely to proclaim with a hardy, “YES!” When people design products they feel that they are doing something very useful. They know that if they build something they feel is useful, others will also believe it to be useful. It turns out that there are lots of examples of applications that never found traction in the marketplace. There are also lots of applications with lots of features that people don’t use very much.
So whether you want to believe it or not, your great creation, that thing you designed that you are absolutely sure people are interested in, may turn out to not be very useful at all. That is why you must develop each feature with a great deal of skepticism and user involvement. Consider if there might be:
You must consider that each feature is a significant responsibilities that you will carry with you for the life of a product. This is what some refer to as it feature debt. Just like a loan that you have to pay on month-after-month, a feature is a liability that you continue to pay interest on throughout the life of the product.
When you upgrade software, you have to upgrade this features well. This means you also have to test the feature over and over again, whenever the application changes, in order to make sure that you have not introduced a bug into the feature.
A software developer that is invested in your success will continually look for ways to minimize the number of features that you must add to your application. When interviewing a software developer, ask if it is important to reduce the number of features in an application, and why he or she believes it so. A lot of contract software developers will have a hard time coming up with a reason for doing so, but a software developer is in the perfect position to offer alternatives such as the ones in the list above.
As an aside, you would be forgiven for thinking that adding features is simply about the initial cost of building, and the cost of future upkeep. It turns out there are other issues, and again, retaining a software developer who is focused on minimizing features is extremely important.
Each additional feature that you add to your application will continue to bog down your ability to quickly make changes to the application. Particularly, when you are in the MVP stage, spending a bunch of time on a feature that nobody is going to use can be substantially impactful to your product runway and ability to reach product/market fit.
The problem is, as you make additional features, you have to continually be mindful of the existing features and making sure that the new feature is not impacting the old feature in a negative way.
Adding features to your application can be negatively impactful to the user experience. Having features that users don’t believe are useful will confuse the users. Users will wonder why the feature is there and think that they might be missing something important.
What controls are in place in order to ensure that software development technical decisions are made correctly most of the time?
As we mentioned before, each thing you want to build has a number of components to it, and within the technology there are a lot of assumptions that need to be made during software development. Making the right assumptions, a vast majority of the time, requires understanding intent more than the letter of the law, so to speak.
The software developer needs to understand what you are trying to do. So what control mechanisms does your software developer have in place to ensure that you will get what you are expecting to receive?
The user story is a great mechanism for controlling what gets produced. Without going into all the details of a user story, there are three primary components to a user story:
This is all written from a business perspective. It is supposed to be as if the user were describing what the user wanted. This can be handed off to a developer and then developed into greater detail to include a technical design.
When talking to a prospective software developer, ask for the preferred way of documenting what work needs to be completed. The user story is a very common way of doing that. I have found that is incomplete. So ask the developer if there are other mechanisms he or she likes to use in order to complement the user story or some other mechanism the developer prefers.
The user story is not the only way to document, but it is a very good way because it helps to detail the intent of a given feature.
As I mentioned, I believe the user story is an incomplete artifact to use for software development. In addition to the user story, one needs to define the technical aspects of the feature that is going to be created. Depending upon the complexity, there may be portions of the feature that require technical planning.
For user interfaces, the user story also needs to be accompanied by a mock-up of the page that should be created. Sometimes, even that is not enough. In the past, I have made use of storyboards to help illustrate how a user will navigate through a responsive page based upon the events that arise while interacting with the page. Many pages are very dynamic and can be interacted with in many ways.
So be on the lookout for some of these other mechanisms that a developer might use to develop your application.
How difficult is it to scale and how do you know you've arrived at scale?
You may have heard that making use of cloud computing is an ideal way for scaling up and down automatically as demand increases or decreases? There’s a lot of wisdom in that statement, but it is far from the whole story. To a certain extent, one can just add some servers and experience benefits, but a lot depends upon how your application is architected, and it won’t take long before that scheme will fail to produce the desired results.
Creating an application that is capable of scaling to a theoretically infinite number of users is a non-trivial design activity.
These are only just a few high-level issues that need to be considered when creating a scalable application. A software developer candidate should be experienced in dealing with some or all of these issues and many more.
Once the application is created, you need to test the application to ensure that it will handle the load that you are intending to push at it. You might consider asking a software developer how he or she would approach testing for scale. What experience has the software developer had in testing applications under immense load?
Just starting a new application, how is it possible to have redo work? An inclusive tip, getting this right requires performance in several of the previous tips.
As we have discussed in many of the tips above, communication is such an important aspect of the product development process. I cannot stress enough the importance of a software developer routinely communicating with the product sponsor. I likewise cannot stress enough the importance of the products sponsor making themselves available for such communication.
When communication is lacking, it is inevitable that there will be redo work. That redo work will cost you money, time and if it is time critical that you get the product into the market, such a timeline can be in jeopardy.
A software developer should have controls in place to ensure that development is done right the first time. We talked about the user story as an important control, and indeed it is. A regular control that is not often utilized is showing the product sponsor what was built, while it is being built, to ensure that it is built accurately. This is such a simple step, yet it is often not utilized.
You will need to check to see if your software developer is willing to check in regularly on things that are being built. Not everything needs to be checked in on, but there ought to be a regular cadence of check-in, particularly around more complex features.
At some point there can be diminishing returns and higher costs, but as a general rule, having more controls in place is better. Understand the software developer’s full complement of project controls to ensure that things are built right the first time.
Hiring a software developer is no trivial matter. If you take the approach that you just:
Then, well, good luck to ya!
There is so much more to hiring and managing a software developer. Hopefully, these 10 tips have given you some insight on what you need to look for. I wish you the best in your product development journey.