This is an article for those of you who are self-taught or coming out of an accelerator/bootcamp program for software development, who are wondering what’s left to do before you land that first software development job.
This is based on my experience of hiring people in this situation for several companies.
First things first; yep, you’re at a slight disadvantage vs. “classically trained” software developers or engineers from University programs.
No, that disadvantage is not insurmountable. If you combine your dev education with other attributes (like your great non-software experience), and apply it in the right role selection, you’re golden. It’s a great time to be getting into software.
Unlike the specialized roles that sometimes require Master’s level education in specific areas, full-stack roles are constantly available.
The reason being: small software teams need excited generalists, who can demonstrate competency throughout the tech spectrum (from updating WordPress websites to building out new infrastructure in the cloud).
You’ll find many unfilled full-stack roles in the IT / tech organizations of non-technology organizations (ex. mortgage providers, agrifood manufactures, automotive parts suppliers).
Google, Facebook, Amazon, Shopify, Square etc. are key destinations for excellent talent, and pay appropriately. Non-SaaS organizations that are doing meaningful technology work struggle in that hiring landscape and are willing to hire from bootcamp programs and develop non-degree talent in house.
Front-end refers to the part of the software that users can interact with. While it includes mobile apps and web sites, it also includes documentation, email, and social systems that accompany software solutions.
From a new-grad, employers expect:
- Demonstrable skills in one or two modern UI technologies. In 2022 that means React + Redux, Swift, Dart/Flutter, Kotlin, etc.
- Object-oriented design principles and design patterns: Factories, Singletons, Decorators, Observers are common-place.
- Understanding views, models, controllers, and related patterns (MVVM and MVC).
- Concern for user experience and design. You should have an opinion if the interface is mixing serif and non-serif fonts, image alignment is inconsistent, or the affordance of a key action is low.
- Constructive relationships with people testing, critiquing, or evaluating your work. Testers, QA, managers, stakeholders, and clients need to have positive, creative relationships with you.
- Examples of accurate, and well-edited technical written communication.
- Hate to say it, but knowing how to administer a WordPress instance is a friendly docs bonus.
Most students of software start their journey on writing back-end code. Back end code is rewarding to author, testable, structured, and ripe with technology options. It’s the good stuff other devs like to look at and discuss.
Though unless your job specifically concerns DX, it tends to be far from the value your team creates. So the key skill is knowing enough to know what’s fit for purpose.
New grads are assumed to have:
- Working knowledge of RESTful API design and protocols of the web request/response pattern (ex. Content-Type, CORS, headers, cookies) .. as REST and HTTP are the protocols of choice for modern tech.
- Though, the future of APIs is event-driven. Academic understanding of events, buses, cloud functions is helpful.
- Comprehensive understanding of relational databases; how to query with SQL, table design, relationships between models.
- The technology of the DB rarely matters (Postgres, Microsoft, Oracle, MySQL, etc.) as the principles are universal.
- Knowing how to profile a slow query is extremely helpful, and a skill you can pick up quickly.
- Understanding how documentation stores (ex. NoSQL) and key-value caches (ex. Redis) differ from relational databases, and when to use which, is important when developing new features or products.
- Performance monitoring and profiling in general, using tools like Firebase, Crashlytics, Microsoft Insights, Papertrail, etc. is key for keeping back-end services up and running. Practical experience in keeping your work up and running under load is great.
While often part of the “back-end”, infra is becoming a field on its own, as it can be represented as code and configuration.
This is where self-taught and bootcamp developers often have an advantage over University programs — few degree programs have infra in the curriculum.
Employers love to see:
- Experience with a few “clouds”: Azure, AWS, or Google Cloud being the most important.
- Understanding of the role Docker + containerization play in software deployment. Kubernetes configuration is a next-level skill, and likely not worth the attention it gets in the computing community.
- Experience working in a work management tool (Jira, Azure DevOps, Trello etc.) with a pipeline that does integration and deployment.
- Once again, cloud functions and storage buckets are more often the right ways to build back-end services.
Sometimes people feel that their experience in Bootcamp was great, but not enough to land them software development work. A couple of practical next-steps:
- If you have a Bachelor’s degree in another field, and a bootcamp credential, you may qualify for a post-grad program in software development at your community college. These programs are often awesome: an intense year of programming up-skilling, sometimes coupled with a co-op program. In Kitchener-Waterloo, Conestoga College offers a program like this that I’ve hired out of several times.
- There are many Business Analyst roles at technology companies that require expert understanding of a field, coupled with project management and technical software skills. BA roles often have career paths into QA and Solutions Engineering, and they are sometimes attached to a software team. The role may seem junior, but it puts you at the intersection of valuable business work and technology. BA also has career paths into management, sales, and other orgs. It’s a very flexible role in technology companies.
- Software companies need application support, and support engineers who learn the deep technical aspects how software works for clients. Application Support Engineer is a fast growing field, replacing the old “customer support” + “Tier 3 developer” model into a shared role. The role generally has a well-defined career path into software development for those who stand out.
Hope you find this helpful, and good luck getting into the field!