On July 1st I was promoted from Senior Android Engineer to Staff Android engineer. I thought it would be a good time to think back and reflect upon my career as a software engineer, but more specifically as an Android Engineer.
I got my first (and only) Android developer job in September of 2014. At that time I had about 2.5 years of other software development experience, writing C# code for a hospital. The experience was relevant, but I came into the role as a pure beginner with Android. I had written a couple (very, very) terrible apps as my experience. These were on the play store with about 250 total downloads. My code was not reviewed. I didn’t have crashlytics or any metrics set up. I had no way of knowing if the app actually worked in production.
I started as a newbie in September. It took a couple months for me to be trusted to do my own work without direct oversight. Each PR I put up was, lovingly, torn to shreds. Despite being constantly run through the gauntlet from the senior and super-senior devs on my team, this time will always be special to me. I learned so much and built up the confidence I needed as an engineer.
Junior Android Engineer
I am defining “Junior Android Engineers” as developers who have a working knowledge of the Android ecosystem but have little to no experience. They are probably starting a their career or transitioning to new one.
In general, at this level you should have a good idea about how activities, fragments and views work. You should know what an Intent is and how to use them. You need to know other basics, such as how to pass data to fragments, what a Service is, lifecycles and the like. If you don’t know about the latest technologies- that is okay. At this level you should have the basics down.
At this juncture of your career your number one priority should be learning. You will not progress up the ladder without dedicating a lot of time to learning and growing as an engineer. This can take many forms.
Books, such as Clean Code, The Effective Engineer, Working Effectively With Legacy Code, Effective Java, and Head First Design Patterns are tremendously helpful. I have read all of these, learned a lot from each, and highly recommend each one.
I can not recommend the Fragmented Podcast highly enough. Donn and Kaushik do a tremendous job of bringing Android development to live via audio, an incredibly difficult task, mind you. Start at the beginning and listen to them all (or not, but start somewhere!).
Caster.io covers the latest and greatest of Android development in easy-to-understand ways. I learned the fundamentals of MVP, TDD, Dagger, Clean Architecture, and tons of miscellaneous lessons from this site. It’s a bit more advanced, so make sure you take things slow and watch for understanding. The cost can be a bit steep so maybe your company would like to buy it for you.
I am convinced that thorough code review is the single most effective way to learn. Getting your code picked over, line by line, by a senior developer with years and years of experience is going to hyper-accelerate your growth. Be sure you are asking questions and getting to the root behind each suggestion. I would advise against making the changes quickly and moving on. Take your time to soak in each suggestion and learn.
Furthermore, reviewing code by developers better than you is also a lot of fun and makes you see things through their eyes. Why did they pass in a variable here vs grabbing it from a global object? Why is this chunk of code a separate class? Why is it an object vs a util class? Ask these questions and get to the bottom of it!
It is so incredibly valuable to have a talented engineer committing directly to a repository you know intimately. You have the full context (or, at least, you can find it in Jira) and should have familiarity with what objects are being modified. Do not take this for granted, it is a great tool to leverage for learning. Peek around PRs and ask questions!
This stage of your career is almost all about developing your technical prowess and becoming a better engineer. It can be a very fun and rewarding time in your career, but also be a very frustrating time. Keep learning relentlessly and over time you will make it. The code you wrote just a few months ago should have big flags that you can identify and correct effortlessly.
Senior Android Engineer
Once you have a few years of experience under your belt and are contributing at a high level to the team it is just a matter of time before you get promoted to a Senior (L5) Android Engineer. For reference, I was promoted to Senior after 2.5 years.
When you’re at this level you should be able to complete nearly feature in the backlog with little to no oversight. You should have a very good guess at the cause of most bugs in your app. Your code reviews are thoughtful and helpful to junior developers and are you valuable to their career development. The code you check in is rock SOLID (pun intended and relished) and your team can rely on you to produce high-quality code and a great user experience for your users.
This stage of your career is about output. You should be producing at a very high level. Your code should be clean, habitually bug-free, and foster a high-quality app. You should be the go-to person for many parts of your app and be the one of the first to jump on bug fixes.
Staff Android Engineer
When you move up from senior engineer the scope and impact of your work begins to expand. You should be taking more ownership over the end product and further mentoring new hires. You should be pushing for organizational and process change. You should have a pulse on the latest Android libraries and determining whether they’re applicable for your project (and more importantly, why they’re applicable/helpful).
Your code output will very likely dip during this time but your impact should be felt across the organization more than ever. You should be taking on leadership roles and making sure your team is doing everything they should be doing to help the company and the business. Always look out for opportunities to help out your coworkers and present during team meetings.
This stage of your career is about guiding the team and having a bigger impact on the company as a whole. Make sure your whole team is getting their work done and keeping their promise to other stakeholders. Increase your teams velocity. Share your learnings with others. Code review thoughtfully.
As mentioned above, I’ve only been a Staff Engineer for *checks watch* 4 weeks, so I don’t feel fully qualified to expand much further at this point. Look out for updates after my next promotion!