As a company, we talk about career growth a lot, which may be surprising for a flat organization. But these aren’t conversations about how to become a manager, director, or VP; they’re about how to grow skills, responsibilities, and knowledge. Of course, we have developers who have been hacking on websites and the like since childhood. We have developers who have graduated from a four-year university with a degree in Computer Science. We have developers who have graduated from our Apprenticeship Program, starting their journey with little to no development experience at all. We have developers who have been actively building software for more than a decade, who have degrees in philosophy. No matter the journey each of these developers are on, there is a common goal: continuous growth.
In tech, as in life, if you aren’t learning, you’re dying. The industry changes so fast that if you aren’t continuously working on your skills and you stop asking why and how, your knowledge becomes irrelevant in just a few years. Sure, basic fundamentals of architecture and data are there, and you’ll be able to recognize them on projects that you start in a new language. But as Objective C and Java have evolved to Swift and Kotlin for native mobile applications and web development rides a continuous wave of changes and trends, so too will these things pass.
In talking about growth as a developer, and growing your career as a developer (which can go in a few different directions), we’ve found that some area fundamentals stay stable, even as the technology itself changes.
So, let’s break it down.
From your life as a developer all the way through sharing your knowledge with the greater community, continuous growth and learning will follow you throughout.
Junior → Developer
So, you’ve graduated with a CS degree, gone through a bootcamp, been through an apprentice class, etc. Congratulations! Welcome to this wonderful, interesting, and wild world of tech. There are a vast variety of tools available for you to use to create something fantastic. The boundaries of what you can build are only limited by your imagination.
With so many avenues to explore outside the classroom environment, figuring out how best to continue to improve your skills can be daunting. Here’s a map at a glance:
Learning and self-reflection
How can you work on your skills if you don’t know what needs work? Reflection and feedback will help direct you.
Approach coding tasks systematically
Figure out which parts of the existing codebase you will need to work on to complete your task, then identify what parts of the entire application rely on those parts of the codebase.
Get involved in PR conversations
It’s easier to try to figure out the decisions someone has made when you are looking at a PR that addresses a specific task.
Pay lots of attention to detail
When you started learning, getting conversant with the basic concepts was more important than nailing every. last. detail. Now it’s the details that are important, and that will make the difference in your success.
Start monitoring developer community news
Follow blogs and Twitter feeds for big name developers in your language. They are usually testing, trying, and hacking most often and have likely made libraries that you will regularly use on client projects. Their insights are what many senior developers look to.
Take a deeper dive with Stuart Kent’s How Junior Developers can Level Up.
Learning
Advice from developer Yuri Ramocan
The ability to learn new skills is important for everyone to master, in my opinion. New skills are an asset. They make you more interesting, well-rounded, and employable. I genuinely love learning new skills—especially those that I can teach myself. That is partially why I took so well to computer programming. Self-teaching at my own pace made computer programming more enjoyable. Generally speaking, it is now possible to learn how to code for free and on your own time. This makes the career path to software development much more accessible (and quicker). But what happens after you’re already considered a “software developer?”
Soon after starting at Detroit Labs I was placed on a project in which the learning curve was steep. There was a lot of “ramping up” I had to do to get up to speed with everyone else. After a few months on the project, I rolled off and found myself with a lot more “free” time. My primary thought at the time was: “what do I do in the interim?” I felt that I was lagging behind because I hadn’t been keeping up with the latest tech. I must have failed myself while I was working on the project because I didn’t learn Kotlin and Haskell and Machine Learning all while I was trying to actually do my job.
Oh…and I forgot to become a React Jedi to boot.
What were my next steps supposed to be? How was I going to catch up?
In retrospect, it seems that many of my worries were fueled by fear of not growing quickly enough. Perhaps I would be exposed as an impostor if I weren’t well-versed in 40 different programming languages and at least conversational in some of the most complex topics in artificial intelligence right. now. So rather than getting overwhelmed, I made (a semblance of) a plan. What did I do? Here it is:
Take a break
It is easy to fall down the “I have to do this now” rabbit hole. In my experience, however, rarely does this attitude produce anything fruitful in the long-term. Mental exhaustion is a thing and burning out does happen. By giving yourself a mental break—or pacing yourself, at the very least—you’ll prevent yourself from burning out and be a more productive developer because of it. Besides, knowing a little bit of everything in the short-term won’t help you as much as learning one thing well (but more on that later).
Start from the beginning
This one may seem pointless to some. Yes, although you might have already thought you were done with the fundamentals after finishing your 300-hour “zero to hero” development bootcamp course, there is always more to learn. Revisiting official documentation, retrying helpful tutorials, and (I cannot stress this one enough) reading books will help re-establish those fundamentals you learned as a wee little baby developer.
Now that you have more experience, you might even gain more clarity on lower-level concepts by starting again from the beginning. Besides, with the ever-evolving nature of technology, revisiting fundamentals is a good habit to start anyway. By doing so, you give yourself a better chance of unlearning old tricks and opting for new ones.
Learn Yuri’s strategy for continuous growth in his post, How should software developers continue to learn?
Team Growth
How do we become software developers with the knowledge and skill to do our work well? Training junior developers is an essential piece of building a successful team, but it’s a complex and challenging task. The lessons learned here are drawn from experiences training, coaching, and mentoring over 40 junior developers in the past 2 years, and successes, failures, challenges, and rewards will be discussed.
Choose well
As a team lead or a more senior developer who is invested in growing the careers of newer developers, focus on “teachability.” Developers who aren’t afraid to ask questions, and are willing to engage in the process of finding an answer, will likely also be open to feedback, communicate, collaborate and resolve conflict more effectively.
Find the right fit
Bringing new strengths to any team requires team buy in, in order for the relationship to be successful. This is especially true of bringing on a junior. The “right fit” will bring new strengths to the team while also challenging them in areas where we all struggle: feedback, communication, and knowledge sharing are just a few possible improvements.
Set expectations
With vary levels of experience, senior team members may be expected to dedicate time to mentoring and coaching this junior developer. It’s important to set and manage the expectations with the team prior to the new addition so that there are clear, and fair
Pair up
Pair programming from the start is one of the quickest and most effective ways to ramp up a junior developer who is new to the team, new to a language or platform, new to development, or all of the above.
Find a balance between structure and freedom
Freedom interspersed with structure can accelerate learning and increase motivation and enthusiasm. If you give a junior developer assigned time to work on a personal passion project, you can significantly build his/ her skills and confidence. Make sure you also encourage the side project to have requirements in difficulty and complexity with regular project demos.
Good Habits
Development is about much more than code quality and speed. As developers, we have to continuously grow our skills, communicate with our team and clients, mentor teammates, plan our work, and execute myriad other tasks. We recently took a company-wide Labs poll on the habits that successful teammates possess and wanted to share what we’ve found with the developer community.
Knowledge Share
In any programming language, there are big names that many developers strive to be like, at least when it comes to code. But what is it about these developers that makes them admired role models? Are they highly experienced, and usually the people who actually write the language? Yes. Do they put out tutorials and talk about programming in a way that is useful, awesome, flashy, and at times intimidating? Yes, yes, yes, and yes.
I met and asked Android Developer Jake Wharton about his following and how he built up such a portfolio of expertise at a conference last year. As it turns out, it’s not a magical thing that he does. Yes, it requires a lot of work, and a pairing of personal and professional interest, but he does what all of you are able to do: speak, write, help, and show what you do and what you’re interested in, with consistency.
Sharing what you know can be as big as presenting at a large conference in another country, writing an ebook guide on a topic that you know a lot about, or as humble as thoughtfully answering questions on Stack Overflow. The broad spectrum of knowledge sharing allows for growth on four levels: Personal, Team, Company, and Community. No matter your career plans, sharing what you know can open up opportunities that you never thought possible!
(Gasp) Public Speaking
We have a large group of developers here at Labs who are interested in, or are actively speaking at, conferences around the world on both technical and team or career-related advice. Every single one of these speakers started out like you! They knew about a technical topic, they had a specific angle with their viewpoint, and they wanted to share what they knew. While an international developer conference can be intimidating, start small. Speak at a meetup group or give a lunch and learn. Ask for feedback, refine your talk, and pitch it to local conferences.
There’s no faster way to get really good at a skill than to realize that you will have to explain it to a room full of people. You learn to build rapport with a room full of people, which is a translatable skill no matter what you want to do — but especially valuable if you want to be any kind of leader.
I asked our Director of Training and Development, Erika Languirand, for some insight. “This is straight personal gain. Through all of the sharing, and speaking, and teaching that I have done throughout the community (I’m a Girl Develop It Detroit co-founder among others) and at conferences, I have security in my field. I love this company, but if we folded tomorrow, I know who my first three calls would be. Speaking gives you security in your field. It helps other people say, ‘That person knows about that field and we should try to hire them.’”
Blogging
I may be a bit biased, but writing about what you know is a low barrier to entry if you’re thinking about starting to share what you know. This can be contributing to your company’s blog (if applicable), or starting a personal one. The importance is having some consistency.
Blogging contributes to your company, the community (especially if it is a tutorial), and also your personal portfolio. Are you wanting to take a deeper dive into a niche area? Write about it. Did a Stack Overflow question inspire you or — let’s be honest — make you angry enough to want to show how you solve the problem? Write about it. You can always go back into those SO threads and link to your post. You can share your tutorial with language-specific weekly newsletters like Android Weekly and Swift Weekly. If you’re proud of what you built for work, the open source community, or a personal project, write about it and share what you’ve learned.