Choosing a Development Company
There are a lot of things to consider of when choosing a software design and development firm. A company's portfolio and references are a great way to get started, but there are additional aspects that are often overlooked when comparing prospective companies to take on a project.
We've come up with a list of practices that we use when designing and developing applications. We find all of these practices important in helping us to create great software. Other firms may disagree, or have alternate approaches. This gives you a good starting point to determine questions when investigating who to hire for your next project.
Design & Markup
-
Design Capabilities
Graphic design should be part of a software company's core competencies. Design is clearly one of the most important aspects of an application or website. The design dictates how the application works and how it is presented to the end-user.
Web design is interactive, and shouldn't be treated as a static or standalone component of the application. You will get much better results when developers and designers work closely together to create an application, since the design will evolve as the application is built.
-
Design Balance
Development companies should consider all aspects of design:
- Visual Design - The look and feel of the website
- Application Design - The interaction between screens/pages of the application
- Experience Design - The overall experience of the user with the business and technology
Software applications should be attractive, functional, and easy to use. Careful attention must be paid to the balance between the different aspects of design to craft the overall experience of the website, and effectively communicate the site's content. An application can fail on other aspects of design even when it is "pretty."
Visual designers should pay special attention to classical principles of design such as: unity, balance, harmony, contrast, repetition, variety, emphasis, proportion, functionality, attraction, genuineness, proximity, color theory
Application designers should pay close attention to usability principles such as: user control, task flow, motivation, consistency/standards, error prevention and recovery, flexibility, game theory, real world conventions/metaphors, help & documentation
-
Standards Based Markup
Developers should build web applications using web standards. This means that markup is standards-compliant, free of clutter, and uses HTML tags that best describe the proper structure of the page.
Web standards make the site go beyond what "just works" to ensure the best compatibility not only for today's browsers, but for future browsers. The web is an ever evolving place, and markup based on web standards is more likely to render correctly as new technologies are introduced.
Style information should be places in external stylesheets. This significantly decreases the file size of most webpages, increases performance, and makes it easier to do overall maintenance on the application's design.
-
Search Engine Optimization
Development companies should be mindful of SEO best practices, and abstain from using questionable SEO techniques that might get you delisted from search engines.
The best SEO strategy is to write great content about your area of expertise and use that content to build inbound links to your website. There are also technical implementations of a website that influence SEO, and should be carefully crafted to best reflect the content of the site to search engines:
- Optimized page titles and copy
- Friendly URLs
- Meta keywords, descriptions, and robots.txt
- Well structured markup and effective headers
- Image alt tags
- Keyword density
- Google sitemaps
-
Defensive Design
Things often go wrong when we least expect them. Users shouldn't feel stupid or confused when errors occur. Designers should build applications with clear language and provide helpful links when things go wrong. This includes:
- Form validation and errors
- Custom page-not-found page (404 errors)
- Custom application error pages (500 errors)
- No search results found
- Out of stock or unavailable items
-
Unobtrusive JavaScript
JavaScript adds interactivity to applications using animation, effects, and partial page loading techniques such as Ajax. Software developers should clearly separate JavaScript from the HTML markup to make pages load faster, and make testing easier. Developers should always exercise caution that applications continues to work when JavaScript is disabled.
We strongly believe developers should use a JavaScript framework such as Prototype or jQuery. These frameworks aid in developing code quickly by vastly simplifying the process of making applications work correctly in all modern browsers. They are used extensively by tens of thousands of developers and are well tested.
-
Quality Assurance
Software companies should test and ensure browser compatibility in all modern browsers, which includes:
- Windows - Firefox, IE6, IE7, IE8, Chrome, Safari, Opera
- Mac - Firefox, Safari
- Linux - Firefox
Programming
-
Technology Choices
Development shops should not focus on a single technology as a solution to every problem. Good developers know how to choose the right technology to fit the task at hand on your budget. It is their responsibility to evaluate various tools and recommend what what they believe would fit your project best.
Most companies have a preference for certain technologies. However, companies that tie themselves to a specific programming language might be short-sighted attempting to solve problems that are already solved better elsewhere.
The most popular programming languages for building web-based applications today are PHP, Ruby, Python, Java, and .NET. The most popular database solutions are MySQL, SQLite, Postgres, and Oracle.
-
Collective Code Ownership
Software companies should practice the idea of collective code ownership. This is the idea that everyone shares responsibility for all of the code written. This means that a single developer is never a blocking point for getting new features added or issues resolved.
Since code should always have complete automated test coverage, this makes it easy for additional developers to jump into a project without fear of breaking existing functionality.
-
Short Delivery Cycles
Development companies should deliverer continuous value to clients on a very tight feedback loop. The sooner working code is delivered, the easier it is to stay on track.
Iterative development is a way of slicing up software functionality into iterations. The software is then incrementally developed in a cycle where it is planed, designed, tested, and deployed on a regular basis. This is usually done in 1-2 week time-boxes, where working code is deployed at the end of each cycle. It is always easier to see progress being made when changes are deployed regularly.
There are many advantages to working this way. One of the most important of these is that it accommodates changing requirements in the project. It also exposes risks early on, and helps find and correct defects over several iterations.
-
Scripted Deployment
Development Companies should have their deployment process automated. This means that deploying code to production should be scripted so that it is near instantaneous to update the live site.
Scripted deployment aids in releasing software quickly and frequently, and makes it easy to rollback changes when problems occur.
-
Continuous Integration
Development companies should use continuous integration; a practice where software is automatically verified to work whenever code is added or changed. The sooner developers are aware of bugs or integration problems that break the build, the less time they spend debugging those problems.
-
Staging Environment
Development companies should provide a staging environment to review your website during development. This will enable you to watch changes as the application is developed, and identify any potential problem areas.
-
Automated Test Coverage
All code should be developed in parallel with a test suite that ensures that the code works correctly. Software projects written without full unit and functional tests are bound to be buggy, difficult to update, and likely to fail.
Developing with tests helps maintain a sustainable pace of development. As an application grows larger, the logic naturally becomes more complex. Tests give developers confidence to make add new features and increase performance without fear of breaking the application.
Any development company that doesn't test or tells you that tests are a waste of time doesn't understand how to write quality software. You'll eventually pay the price for their short-cuts.
-
Error Notification Tools
Developers should equip applications with error notification tools that send email or other notifications if the end-user encounters problems in the application code. Developers should be responsive to fixing bugs in production code as quickly as possible.
-
Performance
Software companies should be able to make hardware recommendations based on the traffic you anticipate, and how well you want your website to perform.
Unnecessary performance optimizations should be deferred until they are needed. Application performance should be measured using load testing before spending your money to make costly optimizations that might not help.
Web based applications should be built on an architectures that will scale to adapt to increase in traffic over time.
-
Installation and Deployment
You shouldn't be sent code and expected to figure it out from there. A Software company should work with you to install and deploy the software to your servers. They should also be available for future support and updates to the application.
If a company doesn't provide hosting, they should have experience with a few different hosting companies, and be able to recommend a good host when you're ready to deploy.
Culture
-
Version Control
Any reasonable software company will keep their code under version control. This is a way of tracking and saving different versions of the code so that it is easy to track and retrieve previous versions of that code.
Version control is the only way to reliably work with code as a team that ensures work is never lost or overwritten by another developer. Version control makes it dead simple to create large changes to the site without breaking existing functionality.
The version control software a company chooses to use is largely a matter of preference, with the most important aspect being that a company uses version control at all. Some of the most popular options today for version control are Git, Mercurial, SVN, CVS, and Perforce.
-
Open Source Software
Developers should take advantage of, and contribute back to open source software.
Open source software is software written and distributed for free by passionate developers in the community. It is a great way to leverage solutions to existing problems that smart developers have already solved. There is a good chance that much of your application's needs might be simplified using an open source library that someone has already written. Taking advantage of this software reduces costs, and makes development quicker.
Software companies that are passionate about software will write code, fix bugs, and contribute back to the open source projects that they use. This helps hone skills and give back to the community of developers that share great code.
-
Publications
Developers truly passionate about a certain technology may write a book or other publications about design and technology. Technical books rarely make much money, so these are often done more as a way of sharing expertise and helping to educate others. A book often reflects a breadth of knowledge about a technical subject.
-
Public Speaking
Leaders in the development community often speak at conferences dedicated to software development and design. These venues are a great way to share ideas with other luminaries in the field.
-
Transparency
Development companies should practice a culture of transparency with their clients. They should always be honest and up-front about the progress and status of the project. Clients should be able to adjust resources and hours dedicated to the project at any time.
Transparency is also about responsibility. Development companies should be able to admit when they make mistakes, and take measures to make sure that the same mistakes don't happen again.
-
Email & Phone Support
Actual developers should be available by both phone and email for technical support or questions. Tight communication with clients is the best way to build software that solves their problems the best.
-
Development Pace
Software companies should work at a sustainable pace that doesn't require developers to work long nights and weekends to launch on time. Developers work best when they well-rested. Companies that overwork their developers will inevitably sacrifice quality and introduce more bugs into the code.
-
Respect
Development companies should always be respectful. Developers should never be condescending or talk down to clients. They should always be patient and explain technology in a way that the client understands.
Let's Talk
Contact us to find out more and get started on your next project.
Download our PDF for a single-page overview of our services.
