The Full-Stack Apprenticeship Technical Standard
We are coming into 2019, and more people are exploring software engineering as a career than ever. For most people, the economy hasn’t changed much over the last few years. If you were working in a low-wage service job 3 years ago, chances are you’re still around the same income level. How is it that, as a society, we have failed to create a pathway of opportunity for our people to prosper?
For thousands of years, humans have not been taught at accredited four-year universities — they received knowledge passed down through years of experience in apprenticeship. If someone wanted to transition into engineering in 2019, they are bombarded with options. Learn this language! This framework! Specialize here!
How do we extract the signal, and forget about the noise?
The Full-Stack Apprenticeship Standard presents the following as a set of baseline competencies for the next generation of full-stack engineers, as well as some recommended tools for implementation:
- Cloud (AWS) Infrastructure
- React, React-Native
- Monolithic & Serverless Architectures
- SQL & NoSQL
- Security-centric design
When creating a standard, it is crucial to benchmark against the best-in-class your industry has to offer. For engineers who identify foremost as builders, AWS offers the best platform on the marketplace. Microsoft & Google target large corporate work-forces & data-dependent organizations — not necessarily builders. Their suite of products is unparalleled and growing fast, from Cognito authentication and API gateway for “serverless” computing with Lambda, to containerized deployments with ECS, relational and NoSQL databases and limitless storage in S3. AWS offers a very generous free-tier. They also provide numerous tools for data, video, and photo analysis and just about anything you could dream up.
For those looking to create the products of the future, AWS offers $1000 credit towards server-costs. The ‘Builders Tier’ — the name says it all. While Google’s cloud tools may not have the range of AWS, their Firebase products are a complete set of back-end services to support rapid development of business-logic light applications. Their GSuite family of products are excellent.
React & React Native
One of the interesting aspects of software development is that there are almost infinite ways to get the job done. This can be painful, especially for those looking to learn and become productive — analysis by paralysis of options. React.js & React Native are the perfect answer for less-experienced engineers seeking to build experiences for the web & mobile platforms, and will only continue to improve.
Monolithic & Serverless Architecture
The most important aspect towards delivering a product to market is delivering a product that works. ‘If it clicks, it ships’ is not necessarily the best philosophy, but it helps you launch & get market feedback faster. Nobody wants to spend a bunch of time on an idea that turns out to be a bust.
Accordingly, learning basic application architecture should be focused on creating the product that is secure, stable, and scalable. Everything else is noise. A combination of monolithic & serverless infrastructure gives you the best of both worlds — maintainability, ease of development, low-cost & speed. For creating monolithic applications, one option is Express.js, or one can push it further by using it’s successor Koa.js, written by the same team and an improvement on Express.
For serverless architecture, we recommend the Serverless framework & platform. They provide an an intuitive command line utility to help you provision your API endpoints, and deploy code in seconds. Setting up your infrastructure is a breeze, coming down to editing a YAML file.
SQL & NoSQL
Relational databases, such as PostgreSQL, help you create more complex customer experiences — being able to create relationships between your data helps ensure you can display what your users care about, without waiting forever for multiple API calls to return and be filtered in their browser.
NoSQL (NoStandardQueryLanguage) databases are incredibly helpful for those looking to build simpler functionality, independent features, or complementary services based on your user behavior, and pair incredibly well with serverless functions. Quick to prototype, a NoSQL database such as DynamoDB can more adequately be described as a ‘key-value’ store. You enter a key, it has a corresponding value — build out a messaging or notification system.
Security Centric Design
If selling a product or service, storing information users information, it is unacceptable to not consider the security of their information. They are handing you their trust and you must do your best to not disappoint them. Cross-Site-Request Forgery (CSRF) is a concern, and you should definitely sanitize your SQL input if you are using a relational database. That’s where ORM’s could come in handy. Security doesn’t have to be hard, but should be baked into your product from the start. There are easy wins to be had using modules like `helmet` and modern authentication providers like Okta, Auth0 or AWS Cognito.
A professional needs to have a set of tools to get the job done. These tools are a proposal for the skills a new full-stack engineer acquires. To learn this, does not require going to college. It doesn’t cost a lot money. It takes time, and a few people usually help along the way.
Is a standard necessary? I would argue that having one is valuable for a few reasons. First, to reduce the cognitive load on new engineers. Providing a practical, profitable skillset will give them the confidence they need to move forward. Second, if trying to wrangle a team of apprentices towards working on projects, scaling up from 1, to 2, to 5, to 10 — having that same underlying foundational knowledge will be very helpful for helping people move past roadblocks. Additionally, having a shared infrastructure through AWS makes everyone responsible for devops at a certain level. Specialists will arise, whether through interest or necessity, but having that shared base will greatly decrease learning curves for taking on new projects, codebases & new teammates.
Visit our website or email us at email@example.com if you are interested in expanding your technical skills in the Seattle area. We will try to connect both, and have some exciting things coming soon to help facilitate that & expand opportunity all over the world.