You completed your coding bootcamp or graduated from CS and now you know how to code, and you are looking for that first job, gig, or looking to build the product that has been in your head for the last five years. Yay! Congrats, you are now at the starting line of your career, the career you have worked so hard for.
The path is set for what's next, it may be:
- freelancing contracts
- or start a company to build the product of your dreams
Regardless of your next path, you need to also think about how to continue to grow your software development skillset. And it takes continuous learning, in an unstructured environment.
In this phase, learning and growth is less prescriptive and more random than a structured learning environment. In the learning environment, the process is very linear, one foot after the other and you will find the finish line.
In this phase, you can't see the finish line, it is unpredictable, for example, if job seeking, you may have job offers right now, or you may not be getting any callbacks for interviews, changing or starting careers can be a struggle.
me: Hi, I just graduated a coding bootcamp and excited to start working with a team to build some great software!
company: How many years of experience do you have?
me: None, I am just getting started, here is a portfolio project I built at the bootcamp
company: I am sorry we are only looking for candidates with 1 - 2 years of experience
me: How can I get experience if companies don't give me an opportunity? Ugh!
There is no silver bullet, getting into a new career is hard work, you have to find what makes you different from all the other candidates, apply to many open positions and leverage your social network to seek out opportunities. If you are still struggling, here are some ideas that may help.
Get Involved with the community
Reach out to non-profit community organizations and offer your coding skills for free, by helping non-profits you can make connections, and you can continue to refine skills.
Make sure you are honest about what you can and cannot do. Do not over-promise time or capability, you want your work to reflect a great recommendation for your career.
Define your commitment to helping in a clear way, I would recommend small size deliverables so that you clearly state your expectations and can be measured at the point of delivery. Get feedback for your delivery, was it what the client wanted? Maybe ask them to recommend you on linked-in, if they like your work.
Some examples: Website maintenance/improvements, building custom forms/apps for internal processes and workflows, creating data driven dashboards for aggregate monitoring of statistics that help the company.
Contribute to your favorite open-source project
Have some favorite open source tool or technology that you want to support? Jump into the discord or slack community, ask questions, try to answer questions from others, look at the issues in the project, see if you can write test cases to reproduce some of the problems people are having. Look for issues marked for first-timer, see if you can do one, if you get stuck ask a question. I would recommend that you commit 2 - 4 weeks to a given project before looking to do something else. Also, choose a project that you understand, either as a user or you understand the technology.
How to continually grow as a developer?
The above is a great way to start your career and to get some experience, but if just getting started you still may have a long way to go in terms of learning how to fully build products. The journey from knowing "how to code" to knowing how to build comprehensive "software as a service" products is a large gap. The good news is that you have a solid layer in which to close that gap.
Importance of how to think in code
You may have learned to code, but have you learned how to think in code? For example, when creating a project from scratch, how do you design your data structures? how do you organize your code? how do you separate UX logic from business logic from service logic? In other words, you may have learned all the pieces, and maybe one way to assemble the entire puzzle, is it always the right approach?
I would recommend reading the following books to help you expand and grow as a developer when thinking about code:
Architecture and APIs
When you start thinking about code, you will start to care more about the design specification more than the implementation details, you will learn how you can create boundaries between layers to make your applications more reliable and flexible over time. This idea of design or architecture is a deep topic and there are several patterns to dig into. I would look at the following:
Authentication and Authorization
Identity is one of the most important aspects of any product, it is important to understand how identity will work in your product and how to manage roles and responsibilities. Think about the user types, and what each type needs to do. Also, think about your users' ability to leverage security systems, and finally about the data your system holds, what protection level do you need. I would recommend avoiding username/password protection systems unless this is a simple application. Look into OAuth:
- Google OAuth
- Github OAuth
- Auth0 or Okta
Product Management and Marketing
Documentation is one of the most under appreciated and most important aspects of any application you build, it takes several iterations to get quality documentation. You need to know your audience and you need to clearly provide tools and resources that help them use your product successfully.
Product management is the process of continuously listening to and informing your users and leads about the product, carrying any insights gained about the users' needs and their wants, but also knowing your capabilities and do not over-promise. Communicate timelines of deliverables and provide a place where users can see your product status, changelog, and resources. Prioritize the log of requests and ship as often as you possibly can.
But wait, there is more, but that is enough for now, you are growing a career as a developer, you will need to know all of these things and more over time, but you can't learn them overnight, so create some goals and work towards them. You can get there, give yourself projects and practice, write a journal describing what you have learned, and iterate.
Billing and Payments
Every product needs to handle billing, the process of taking forms of payment and documenting with invoices and receipts. To add payments to your application, leverage API tools like stripe, and if you are selling digital assets look at tools like gumroad.
You can do it!
As you continue to learn and grow by building side projects, take a look at hyper.
hyper is an API service that gives you all the backend services you need to quickly build "software as a service" applications, it is like having your own software architect for your backend services.