Ask HN: Overwhelmed with new job. Feeling totally stuck.
I once worked as an intern back-end web application developer, and it wasn't too challenging because most of the frameworks I worked with had an immense amount of online resources to learn from. And the code base wasn't too big so it was easy to pick up on.
But at my new job I'm working with a 20+ year old enterprise code base that relies on internal tools with ambiguous documentation. I don't have a mentor assigned to me, but I do work closely with the lead engineer to ramp up. A good portion of what he says goes over my head, so I either ask for clarifying questions or take notes and do research on my own.
There's a lot I don't know. I made an effort to keep notes of everything my coworkers and lead engineer say, as well as documenting my progress in learning all the technologies. In some ways I'm expanding my knowledge daily, but I don't think it's quickly as I'd like, and sometimes when my coworkers ask if I understand how x or y works and I don't, it seems like I've made no progress on learning at all.
This is my 2nd month here. The first month I spent setting up my dev environment and waiting to be granted permissions to various services. Now that I have a real assignment, I slog through this massive code base and have no idea what I'm doing. I ask for help but have a lot of stupid questions and feel like I'm wasting everybody's time because I can't resolve things on my own. I generally have a good idea of what I don't know and how to learn it, but in a lot of cases I don't know what I don't know and thus don't know what to ask, or how to ask a good question.
Maybe I'm being too hard on myself since I've only just started working and it's my 2nd month, but a part of me feels like I should be getting better at figuring things out a lot faster.
18 comments
[ 2.8 ms ] story [ 51.2 ms ] threadPerhaps you can befriend someone else who started around the same time and talk to them, I bet they're feeling something similar.
Anyway, I do think what you're being too hard on yourself. You're probably developing meta-knowledge: you may not know the details of the code & tools, but you're learning the underlying concepts and who to talk to about what.
You should also be able to ask your manager for feedback on how you've been coming up to speed, or ask what's typical for people new to the job.
Three to 6 months is often stated as a ramp up time, so I wouldn't be too worried about your 2nd month.
Also, there will be a lot of code & tools you never learn well. That's ok, its not about the stuff you don't know, it's about the stuff you do know.
A couple of vectors to approach the situation:
- Start top down. Understand what the entire system or product is supposed to do at the macro level. Understand the main architectural components, what the role of each is and how they interact with each other and users or the outside world. Once you can understand the big picture, the individual lines of code have a context that helps understand their purpose and how they perform it.
- Discuss with your lead engineer what his expectations are for your progress. Very senior people I have talked to will claim that it takes 6 months - 1 year before a new hire can really start to contribute. Longer if it is a legacy system as you are facing. Something like, 'Once I am up to speed, what kind of tasks or projects will you expect me to take on? Can you give a few specific examples (maybe things that actually are on the list today) and give a time line for how long you'd expect it to take me to get them done? This can be a bit dicey depending on the style of the manager, but it's good to learn their style in addition to their expectations of your performance.
What really helped me at first was having another engineer I could latch onto and do a lot of pair programming (sometimes just watching over his shoulder). If you are on a project all by yourself where nobody else knows the system either, that's a lot tougher to do.
I find that the more that you plan to do with knowledge, the easier it is to learn it (and then be able to do something with it). The simplest thing is taking notes to help pay attention in class (which you are doing). But you can work from that basic principle in other ways. For instance, you can say "let me see if I understand this right" and explain back the information. You could also make it a point to always make some kind of guess, even if it is obviously a wrong one. Finally, you may want to find people who like to talk and ask them various questions. Some engineers are impatient and do not like explaining things a second time, but others are not like that. You may be able to find what you need to know in indirect ways.
There is a lot you can do and you sound like a conscientious person, so if you make a healthy and consistent effort, then you should be fine in the long run.
Here's some advice which may help. Focus on smaller problems. If you need to solve a problem with an internal tool with poor docs, tell yourself you're not going to solve the problem right now. Right now, you're just going to improve the docs. So dive into the tool and focus on one method at a time. Read the source, the tests (if they exist), and update the docs with the knowledge you gain. Stay focused on each individual aspect of the tool until you're an expert on it before moving on.
This way you'll be in a position of ever-expanding authority, you'll inevitably arrive in a position where you can solve the original problem easily using the internal tool, and you'll have created some docs which will be useful to other people on the team!
We always have new developers start by writing unit tests and documentation for the most used components of our codebase as determined by profiling. This way we are always improving our most important code, and at the same time teaching the largest percentage of our code to the new dev at the same time. With core components that are used everywhere, the new dev can literally ask anyone else on the team for help. This can help the new dev by allowing him/her to spread out what he/she thinks are dumb questions without feeling as embarrassed. Then by the time the next planning session has accounted for the larger bucket of dev capability, we have some great bugfixes, and the new dev is more confident and ready to specialize more.
If it doesn't feel better in a couple months, definitely consider quitting. You'd probably be happier on almost any other team.
Edit: downvoted by people who pawn off their crapwork on the newbies :P
Once they get those first few simple issues done, they're quickly assigned increasingly more complex issues.
Also, do you have any regular feedback loop with your immediate supervisor/manager? Having a regular one-on-one can be a great way to get some perspective on how they think you're doing. You're probably being sort of impatient with yourself and are doing fine :)
Congratulations, you've just found your virtual mentors here on HN!
Now-- go find your own local, real-life mentors. Seek out senior engineers, grab some coffee, share a meal together, ask for their specific advice. Pro-Tip: make a friend, don't ask 'will you be my mentor'.
Ideally, you'll want 3-5 go-to-guys with whom you can share ideas, compare notes, and get solid feedback. Think of it as building your own personal brain trust. The onus is on you to make this happen.
1. grep for the string 'Find Clients' to find the UI
2. Note the URL that it hits when you click it
3. grep for a unique fragment of that URL to find where the routes are stored. Make sure you grep for something 'static', so if the url is '/search/query.html?action=search_clients' you could grep for 'query.html'.
4. The route should map to some code that implements it. grep for the controller or whatever else you find in the routes.
5. Once you've found the controller, something there should retrieve a list of clients. Find out how it's hitting the database.
Then you should know enough to tack on a new button in the UI and modify the controller to hit the database in a different way. Something as simple as 'grep' I never used in college or high school, but use all the time having needed it on the job for the past couple years.