The software industry is facing a workforce shortage of unprecedented proportions.
The bureau of labor statistic is projecting a shortage of 1 million people over the next five years, when they compare the number of jobs that will be posted that require a Computer Science degree with the number of graduates the university system will be able to turn out within that same time window. Looking at this huge gap, it's time fot the industry to look at vocational programming schools and apprenticeships as a viable way to solve this problem.
This approach is not just about pulling best talent from out of schools like Epicodus, Tech Academy, Treehouse, the Code Fellows, and PDX Code Guild, but it is also about setting all students up for success and finding an onramp into the industry upon graduation. Paid apprenticeships that are profitable to business owners provide a path towards development talent retention.
Many of today’s programming students graduate into a job market that demands on-the-job experience. This gap between basic education and hardened work skills represents the biggest challenge to Portland becoming the next great technology hub. This gap needs to shrink or, better yet, disappear….and it is our belief that it starts with employer-funded paid apprenticeships.
The goal of the Open Source Apprenticeship Model is to create entry-level programming positions that benefit employers, workers, and the software community at-large.
To summarize the benefits:
- Paid entry-level opportunities provided within the open source community.
- Higher quality work, via more human quality assurance.
- Extended (4 month) paid interview for new hires with finite timeline.
- Leadership/mentorship opportunity provided for existing programmers.
- 35+% percent profit margin on work produced.
- Minimal cash investment (~$8k per 2 internships offered).
The different levels are broken down into Student (4 months), Apprentice (4 months), Junior Programmer (2 years), and Programmer (3+ years). Success criteria for each are:
Tier 1: Student (4 months)
Students should start with basic computer literacy (mouse+keyboard, email, typing, etc.) and some professional experience (timeliness, good communication, etc.), though this is intended for a broad audience. Prerequisite skills should be:
- Computer literacy
- Git and GitHub
- Rudimentary programming
- Rudimentary HTML
- UNIX command line basics
Our strong recommendation for this phase is a vocational programming school like Epicodus, PDX Code Guild, Code Fellows or an online program like Treehouse or Thinkful. The cost for this has typically ranged from $3,000 to $5,000 depending on the curriculum.
Tier 2: Apprentice (4 months)
After completing 4 months of intensive, full-time programming training, graduates are inducted into a professional work environment where they continue to develop their skills and provide valuable, billable work. By now, their experience has eclipsed the prerequisites and they should be acquiring a basic familiarity with:
- HTML/CSS
- Javascript & JQuery
- PHP, Java, Python, Ruby or ASP (control structures, conditionals, OOP, arrays, variables)
- Theming experience with CMS or Framework (Drupal, Rails, etc.)
- Coding standards specific to their CMS or Framework
- Database fundamentals
- QA Fundamentals
- Ticketing system exposure (Jira, Redmine, etc.)
Daily activities should include ½ hour per day code review or coaching with Staff Programmers/Coaches and weekly activities should include brief group meeting (3-4 interns + coach + 1 Senior Programmer) to discuss challenges.
The recommended employee arrangement should be minimum wage, 32 hours per week, and limited to a 4-month term. This setup ensures success for all parties, including the employer.
Ideally, projects for interns will be non-billable historical projects with existing technical specification and a completed codebase (for reference). There should be billable manual quality assurance from user stories on real projects for 1 (and certainly no more than 2) days per week and the business goals for these internships should center around offsetting hourly wage and "coaching" salary costs.
Apprentice goals should be to increase familiarity with HTML and framework competence while introducing libraries and DOM-level Javascript (JQuery, etc.), and other fundamental toolsets (Github, Basecamp, JIRA, etc.).
Tier 3: Junior Programmer (2 years)
Once someone has completed training and apprenticeship, they will be ready for more independent billable work. This tier is lower paid, allowing for learning and mistakes that people are likely to make early in their career. It also helps to offset the cost of coaching they will likely require. Entering Junior Programmers should now have 1+ year of work experience, 3 months of training + a 2 month internship, or 1 year non-directed professional development experience to be properly prepared for a Junior Prgrammer role.
Their prerequisite technical skillset (above) should be well vetted at this point and their intermediate skill should resemble:
- Advanced HTML/CSS + SASS & Compass
- Intermediate Javascript & JQuery
- PHP, Java, Python, Ruby or ASP (control structures, conditionals, OOP, arrays, variables)
- Theming experience within a CMS or Framework (Drupal, Rails, etc.)
- Coding standards specific to their CMS or Framework
- Database optimization
- Advanced Unix command line
- Compass
- Feature exports / configuration management
- Library creation
- Framework design patterns (dependency injection, hooks)
- Behavior-driven development (BDD)
- Essential understanding of the web security model (same-origin policy, cookies, SQL & code injection, XSS, XSRF)
- Build tools and task runners (varies somewhat by company, examples are npm, grunt, capistrano, composer)Ideal projects:
Ideally, their projects would be billable client work with other developer oversight and coaching. Their goals would then be to increase HTML, drupal building, theming, module and jQuery competence while introducing advanced topics like Solar Search, AngularJS, etc. Mastery of toolset (Github, Basecamp, etc.).
Hours of recommended oversight/interaction are:
- 7+ hours/day of individual programming.
- 1 hour/day of pair programming, code review or coaching with Mid-Level Programmer.
- 1 hour/weekly group meeting (3-4 Juniors + 1 coach) to discuss challenges.
The recommended employment structure for the Junior Programer role is an entry level full-time salary plus benefits on a 2-year limited term. In the Portland area salaries could range from $35K to $55K per year, with full compensation after benefits reaching $50K to $70K.
Tier 4: Programmer (3-5 years)
Once a developer has completed their term as a Junior Programmer, they should have the equivalent of 3 years worth of experience under their belt. They are now ready for a role in the company as a regular staff programmer and, after another 3-5 years, they should be ready to move into a Senior role. In the Portland area these salaries can range from $55K to $75K - with Senior roles paying above that, potentially well into 6 figures.
This is an open source plan and a call to provide a career onramp into an amazing industry with huge opportunity. If we all work to take it, improve it, scale it, and modify it to suite our business needs we will be solving a problem with workforce shortage that will otherwise continue to plague us for decades to come. I encourage any company for whom this piques and interest to reach out with questions or comments on what is working for them.