Bridging the Software Engineering Hiring Gap
There are thousands of open software engineering roles in Greater Boston and other technology hubs. It can take companies 3 - 6 months to recruit and hire software developers. In order to maintain the velocity of software product development to keep their customers and investors happy, companies are hiring external software development agencies to augment their internal development teams.
While it is, of course, important that the software development agency has the technical talent and client services to successfully meet your needs, there are some specific capabilities you should look for if the code will be handed off to internal teams for further development.
Software is a product that is continuously worked on and improved over months and years. A robust codebase is one that can be easily understood by developers that have recently joined the team so that they can quickly make an impact on the business. Some of the process-oriented best practices, critical for software development firms to hand-off code to internal teams for further development are the following:
Documentation: Documentation has widely different definitions across different software development organizations. All code delivered to you should include:
- Overview of the product
- Steps to run software locally
- API Documentation
- Code configuration items, e.g. where to obtain API keys
- Description of 3rd party integrations
Documentation ensures that once a member of your internal software engineering team is asked to build upon the pre-existing code, they can quickly ramp up on the prior work and start adding features as soon as possible. Another key aspect of documentation is where it resides. The codebase documentation should reside in a central location that is easy to find, share and search, such as the main readme section of the code repository.
User Story Development: Many companies develop User Stories, a description of a software feature that describes the user, how the code change will impact the user, and why. By carefully defining user stories into small enough Software development agencies can make hand-off to an internal development team easier by linking user stories to the code that achieves the feature described in the story.
Test-Driven Development: In test-driven development, each new feature begins with writing a test (in code) to assert the behavior of the feature. Beginning with a test, rather than the implementation, focuses the developer on the requirements. Then, the test is run to confirm that it fails, which is expected since no feature code has been written. Next, the code is written and all tests are run to confirm that the new code meets the test requirements, while not breaking or degrading any existing features. If all tests do not pass, the feature code must be adjusted until they do. The tests written for the new feature also help ensure future features do not cause any regressions to this new feature.
Pull Request (PR) Reviews: Many companies believe that PR reviews are a time-consuming luxury that can be skipped. Pull requests let you tell others about changes you've pushed to a source code control system, e.g. GitHub. Once a pull request is sent, interested parties can review the set of changes, discuss potential modifications, and even push follow-up work if necessary. The dialogue and engagement of the team around pull requests is invaluable to keeping the internal and external teams on the same page as well as proactively identifying potential issues.
Continuous Deployment: When building web applications and APIs a common strategy for seamlessly releasing new features is Continuous Deployment. Once a feature is successfully developed, the tests have passed, and PR Reviews are conducted, the feature is merged into the production branch of the codebase. By leveraging Continuous Deployment services, code merged into the production branch is automatically deployed to production (website, product, etc). This strategy helps engineers focus their efforts on shipping features.
Software developers love to talk about tools. While the agency should be tool agnostic, the more important area to inquire about is the agency’s development processes. The agency should be comfortable adapting on the tools used, given the tools support the processes that’ll be used for the project.
A project management tool is needed to execute the software development processes highlighted above, preferably one that enables kanban. Kanban is a method for managing the creation of software features with an emphasis on agile, continuous delivery. There are numerous software development kanban tools on the market, including GitHub Issue Tracker, Jira, and Waffle. Kanban tools ensure that there is a consistent set of project priorities across both the internal and external development teams so that the most important user stories are being built. In addition, these tools make it clear what everyone is working on at any given time.
While an agency should be happy to use whatever tools their client are using, when we are asked we recommend the following tools:
- Source Code Control: GitHub
- Project Management/Kanban: Waffle
- Continuous Integration/Deployment: Circle CI
- Cloud Platform: Heroku
Hiring a software development agency is a great way to fill the gaps in your engineering team until you are able to recruit, hire, and train additional engineers to join your company. Please make sure you make the right agency choice by ensuring that the software development processes the agency uses enable a seamless hand-off to your internal team to accelerate your product development and enable continuous improvement.