Comparing Developers

In order of importance, the factors that matter most towards efficient software development are:

  1. Developing the features in the right order and at the right time.
  2. Mental Model. A good developer will have an excellent mental model of what the application requires and will have provided code that matches that. This seems obvious, but most developers fail to do that and end up making a mess. If your developer is constantly breaking other functionality while they add features or fix bugs, the code is probably a mess because the developer just can't comprehend how it should be organized.
  3. Avoid copy/paste. Copy/Paste is the name we've given to the programming style where the developer copies code from one area and pastes it into another then makes some changes in order to get slightly different behavior in the second location. There is OK copy/paste, and lousy copy/paste. You can tell if you have lousy copy/paste if you ask the developer to fix something, but similar functionality in another area of the application does not get the fix.
  4. Expert in PHP. Familiarization with a particular technology or development tool is not important. This is not important and the more a developer tries to convince you one technology is superior to another, the more you should run from them.

The middle two factors are really about developer competence. The last is included only because many developers feel that the development environment matters and to make it clear to you that when you find a developer like that, you have proof they are not aware of more important factors.

Below are two examples that illustrate what item #1 from above means and how important it is.

Busineses where the software is the product

quick2coach is an example of a company where the product is the software. In other words, quick2coach intends to make money by selling the use of the software that we created for them. Pam, from quick2coach, contacted PNWSoft because she was frustrated that her current developer wasn't able to make the UI like she wanted it. In our initial one or two hour meeting I determined that the developer that she was using was not very experienced. Given the type of product Pam wanted to create, it was obvious to me that the UI had to be very easy and enjoyable to use. This application needed an AJAX UI (see  Wikipedia), but the developer had created a Web 1.0 type of UI.

In addition the developer had created features like login/registration and purchase, that were inappropriate at this time. PNWSoft created a new version of the product, but we did not add the features that let the user login and save their results. This meant that Pam did not have a complete solution that she could go to market with, but she did have the essential UI that she intended to sell. She and her partners used that version to demo to potential customers to determine if the idea had merit. After she proved to herself that it was worth going farther, we added the login and other features necessary to make her product.

This example shows three things. First, the inexperienced developer created a UI that they were capable of creating, instead of a UI that the business demanded.

User Interface

The user interface depends on many factors, including the business, the product, and the users.

If the business has competitors the user interface might need to be more slick than the competitors. If you are creating some new product, then it is probably more important to get something on the market and make it slick later.

Sometimes the benefits of the software are so clear that the user interface does not need several iterations to be good enough. Sometimes the benefits of the product are somewhat difficult to convey and if the user interface is not really easy and intuitive to use, the benefits will be missed.

If the users are few, but use the software frequently throughout the day, the design will have a very different emphasis than if the users are many and infrequently use it. Most web applications have both types of users, where the few are the administrators and the many are the customers.

Most software developers just don't differentiate between the many different factors and end up spending too much time on one area and not the other. An excellent software developer will understand your business, your product, and the users.

Second, the developer didn't recognize that the features that were not related to the Golden Nugget should not be developed until after the Golden Nugget was working and proven to be sellable. Third, Pam didn't recognize what should be done first and what should be implemented later. The end result is that Pam wasted a bunch of money on the wrong developer.

Developers

We don't know this developer, but we don't think they were incompetent. They just didn't have the experience to see how the software affects the business. We hire developers that have similar skill, but our less experienced developers work on larger projects where they follow the lead of someone with more experience.

All PNWSoft developers are employees and we invest in their skills for the long term.

Most software developers do what they are told, but most new software products are created by people that have not created a lot of different businesses and therefore don't know the best path to develop the software and the business. Most need the type of business consulting that PNWSoft provides as a by product of developing the software.

Businesses where the software is not the product

Freightclick is an example of a business where the software is a cost saving tool and a customer convenience feature, not the product. In this example the software is used to buy the real product, which is shipping. Justin had been paying some offshore developers to build a complete solution that both the end users and the internal staff would use to run the business. We reviewed the software and determined that the developer knew how to write software. However, they didn't understand that where the software is going to replace existing processes it must be developed in different phases. Each phase will be deployed and replace a chunk of the existing business processes so that there will be many small changes instead of one big change. The previous developer had created a lot of software and most of it worked, but unfortunately there were bugs in every module. That meant that no module could be deployed separately to phase out different parts of the current business processes. Justin put a lot of money into this developer until he recognized this lesson. By the time he contacted PNWSoft he knew he wanted to do just a small phase instead of the whole thing. Had he contacted PNWSoft at the start, he wouldn't have had to learn that lesson the expensive way.

The developer was probably charging less per hour than PNWSoft. We suspect this because they only provided offshore developers. They didn't have anyone like John Taves and Mike Hayer who have not only the software development skills but more importantly the business experience that could guide Justin to the right plan. In the long run PNWSoft was a bargain.

Conclusion

When searching for a software developer, you should make sure that the developer has significant business experience. That knowledge should be aparent in your initial interview where you describe what you want to accomplish. The developer should ask a lot of questions and challenge your views on how your business should be developed. If they don't, they most likely don't know how to organize the development so that it has frequent releases and the features are implemented in an order that maximizes your return on investment and minimizes your risk.