34 votes

Struggling with first dev job - seeking advice

This is my cry for help.

I'm a newer programmer who just got hired for my first actual programming job a few months ago. Before now the only things I really made were simple python scripts that handled database operations at my last job. I live in an area with no opportunities, and so this new job I got is my saving grace at this point. For the first time in my life I can have actual savings and can actually work on moving to an area with opportunities. However...

Everything is falling apart. I have no idea how this place has survived this long. There is no senior dev for me to go to. There are no code reviews. There is no QA. There is a spiderweb of pipelines with zero error handling or data-checking. Bugs are frequent and go undetected. The database has no keys or constraints, and was designed by a madman (so it's definitely not normalized whatsoever). I already have made a bunch of little scripts handling data-parsing tasks that are used in prod, and I've had to learn proper logging and notifications on errors along the way, and have still yet to learn how to do real tests (I ordered a book on pytest that I plan on going through). I am so paranoid that at any moment something I made does something unexpected and destroys things (which... kinda actually happened already).

We're in the long and arduous process of moving away from this terrible system to a newer, better-designed one but I'm already just so lost and... lonely? There's a few separate dev "teams" but one is outsourced and the other is infamously unapproachable and works on a completely different domain. There's no one there to catch me if/when I make mistakes except myself. The paranoia I have over my programs is really getting to me and already affecting my health.

I guess I just want advice on what I should do in this situation. Is this a normal first experience? I care deeply about making sure the things I make are good and functional but I also don't have the experience to forsee potential issues that may come up due to how I'm designing things. And how can I cope with the paranoia I'm feeling?

EDIT: It takes me a while to write responses, but I want everyone to know that I really appreciate all your advice and kind words. It does mean a lot to me! I'm doing my best to take in what everyone has said and am working on making the best of an atypical situation. I'm chronically hard on myself, but I'm gonna try to give myself a bit more grace here. Again, thanks so much for all the thoughtful replies from everyone. :)

22 comments

  1. [8]
    DeaconBlue
    Link
    You are a junior developer. You should not have to have this kind of fear. Whenever I have juniors express this kind of thing to me, I try to assure them that they literally cannot be at fault for...

    The paranoia I have over my programs is really getting to me and already affecting my health.

    You are a junior developer. You should not have to have this kind of fear.

    Whenever I have juniors express this kind of thing to me, I try to assure them that they literally cannot be at fault for anything yet. If there is a senior that approves pull requests, the senior is in a position to be at fault. If there is a process in place to prevent things from breaking and it doesn't catch your mistakes, it is a poorly designed system. You are at a point where you are supposed to be learning from mistakes, but in no way are you in a position to be blamed for anything.

    You have none of these things in place, but that is not your fault. A lack of guardrails is a company problem, not the fault of the person they put there.

    With that in mind, you should take this opportunity to learn how guardrails are supposed to work and start putting some up where you can. Learn about unit tests, learn about integration tests, learn how pipelines work and how to make them spit out more verbose information. You might not be able to normalize the databases, but you can at least put some tests up that ensure you handle things properly.

    Learn what you can and try to leave work at work, though I know how hard that can be.

    55 votes
    1. [7]
      cadeje
      Link Parent
      Thanks so much. I'm trying to take it a little easier, but I'm generally an anxious person so it's hard. I'm trying to set things up so I can leave work at work and sleep better, but the nature of...

      Thanks so much. I'm trying to take it a little easier, but I'm generally an anxious person so it's hard. I'm trying to set things up so I can leave work at work and sleep better, but the nature of the company is very... tense, to say the least. Additionally, the fact that it's remote makes it even harder to step away mentally.

      My last mistake was a fairly large one that was caused partly because I would "test" things by physically looking stuff over instead of having an actual test. Lesson learned. I'm spinning it into an opportunity to really dig into learning how to do unit tests, integrations tests, etc. I figure that would be a decent way to help myself be less worried about things failing.

      I should probably pick up meditation too while I'm at it lol.

      12 votes
      1. [5]
        teaearlgraycold
        Link Parent
        It should help if you have a physical location where you do your work (out at least, one where you do not: at home). Then you won’t turn your relaxation spaces into work spaces. I’m sorry to hear...

        It should help if you have a physical location where you do your work (out at least, one where you do not: at home). Then you won’t turn your relaxation spaces into work spaces.

        I’m sorry to hear your first job in this field isn’t so good. You should look for a position where you can get good mentorship.

        16 votes
        1. [3]
          infpossibilityspace
          Link Parent
          Definitely this, work at your local library or something like that. If that's not an option, maybe a room in the house that can be dedicated to work only - no recreational items or miscellaneous...

          Definitely this, work at your local library or something like that. If that's not an option, maybe a room in the house that can be dedicated to work only - no recreational items or miscellaneous storage and use that as a delimiter.

          You could mimic a commute by having your morning tea/coffee while standing outside for 10 minutes, I find the morning breeze helps clear my head before starting the day.

          6 votes
          1. cadeje
            Link Parent
            Yeah, having a morning ritual has been incredibly helpful. I started taking walks every day in the morning, and I try to remember to take walks in the middle of the day, just for clarity. I think...

            Yeah, having a morning ritual has been incredibly helpful. I started taking walks every day in the morning, and I try to remember to take walks in the middle of the day, just for clarity. I think without them I'd be completely burnt out by now.

            I live in just one room basically and working without two monitors (and my good chair) is pretty rough, so I don't think the library is much of an option sadly. Having a specific work area is a big priority for me whenever I move, though.

            1 vote
          2. teaearlgraycold
            Link Parent
            I would walk to my favorite coffee shop and back every morning when I worked remotely during the pandemic.

            I would walk to my favorite coffee shop and back every morning when I worked remotely during the pandemic.

        2. elight
          Link Parent
          👆🏻👆🏻👆🏻👆🏻👆🏻

          👆🏻👆🏻👆🏻👆🏻👆🏻

      2. elight
        Link Parent
        The anxiety is understandable. This is a big opportunity for you so you seem to feel like there's a lot to lose if it goes south. Again, understandable. Learn what you can. Save as much money as...

        The anxiety is understandable. This is a big opportunity for you so you seem to feel like there's a lot to lose if it goes south. Again, understandable.

        Learn what you can. Save as much money as you can. Just because they shouldn't blame you doesn't mean they won't. They've obviously given you more responsibility than they should, by not having staff level people there to grow you. They may make other similar bad management calls.

        Speaking from 5 years management experience, plenty of shitty managers will throw people under the bus instead of protecting people who are trying hard to do the right thing. Hoping you have a wiser manager who is fighting the good fight.

        Hang in there. You're trying to do right.

        Also, look at Test Driven Development. It made me into so much of a better dev, back about 20 years ago. Not sure what sort of Python books/docs there are out there for it. The original book is written for Java. A lot of the same ideas apply but you have to be able to read Java.

        9 votes
  2. [2]
    BroiledBraniac
    Link
    This seems like a very abnormal experience, being the sole developer as a junior on a team like this. That being said, getting thrown into the deep end is the best way to learn sometimes. Have you...

    This seems like a very abnormal experience, being the sole developer as a junior on a team like this. That being said, getting thrown into the deep end is the best way to learn sometimes. Have you asked about your company hiring anyone else? Have you spent off hours applying to other junior jobs with full team? It doesn't sound like your situation is long-term sustainable, and also very stressful. Bearing that kind of responsibility is good experience, and everyone has an experience breaking prod at some point. I would just look into ways to save yourself in the long run.

    19 votes
    1. cadeje
      Link Parent
      I'm definitely weighing my options. At this point, I need to stick it out for a while longer so I can at least move to an area that has jobs. On the brighter side I'm learning a million things at...

      I'm definitely weighing my options. At this point, I need to stick it out for a while longer so I can at least move to an area that has jobs. On the brighter side I'm learning a million things at a breakneck pace, so this is valuable experience.

      I've mentioned my worries with being the sole dev on this end, and they've indicated that they might hire another person, but it's kinda up in the air. I get the sense I'm all they can afford for the time being.

      9 votes
  3. [3]
    winther
    Link
    First off, the paranoia is not something you should have to deal with. And also beyond the scope of what random internet people likely can help with. Best advice I can give, is that you should...

    First off, the paranoia is not something you should have to deal with. And also beyond the scope of what random internet people likely can help with. Best advice I can give, is that you should really not feel everything is your responsibility. You can do your best, but if everything is falling apart and you are the only one - that falls entirely on management. It is their responsibility to make that work, not you.

    Your situation sounds worse than it should be and there are better options out there. However, as you will probably learn quickly in this industry, much of the tech world is held together by duct tape and random scripts. The ideal environment with proper design and tests and QA processes sadly doesn't exist everywhere. And where it does exist, it is not perfect and the duct taped mess of a code will also be there in the best of places.

    It has happened about 2 or 3 times for me that the only other dev quit a month after I started (I swear, I don't smell that bad), leaving me alone to learn the codebase and setup on my own. It can be an immense opportunity for personal growth and learning, though it really requires a management team around you that are supportive for your situation and making sure that you shouldn't feel responsible for absolute everything. And that they have it as a top priority to get you at least one more team member.

    15 votes
    1. [2]
      cadeje
      Link Parent
      Yeaaah, I'm also just susceptible to paranoia about things. I always try to think of every way a situation could go wrong, which is probably not the worst quality to have in a programmer. But it...

      Yeaaah, I'm also just susceptible to paranoia about things. I always try to think of every way a situation could go wrong, which is probably not the worst quality to have in a programmer. But it also gets out of hand when I just feel like something is smelly with my code but can't figure out how to make it better, and I find myself obsessing over it. It also gets out of hand when you're working with a system where things already go wrong all the time.

      I think I do have a general problem of feeling responsible over everything that happens in my field of view, and that's something I need to work on somehow. Management has made it clear that they're giving me room to learn and make mistakes, but those mistakes can still hurt the actual company and have caused people problems. It's hard not to feel the weight of responsibility when I see the consequences of tiny oversights. I had a whole set of pipelines silently break for days because I forgot to set a specific parameter in a single line of code.

      5 votes
      1. winther
        Link Parent
        Yes, hold on to that skill, as it is incredibly valuable to be able to think of things that go wrong - and of course find ways to prevent it. I still struggle with similar worries and one way to...

        I always try to think of every way a situation could go wrong, which is probably not the worst quality to have in a programmer.

        Yes, hold on to that skill, as it is incredibly valuable to be able to think of things that go wrong - and of course find ways to prevent it. I still struggle with similar worries and one way to remedy is to use that to make the system more error prone, build test and safety into the system so everyone can sleep at night. Though that requires time and more people.

        It's hard not to feel the weight of responsibility when I see the consequences of tiny oversights. I had a whole set of pipelines silently break for days because I forgot to set a specific parameter in a single line of code.

        Don't worry, that stuff still happens to senior developers (...). But it does sound like you need to setup some sort of staging/testing environment, so your stuff doesn't get rolled straight into production? Though I realize that can probably be hard to find time to create if you are dealing with production problems daily. The trick here will be to convince management that things might need to go slower for a while, so you can get some room to invest in a better system environment that will benefit everybody long term.

        4 votes
  4. [2]
    elguero
    Link
    Oh boy, I’m sorry that you ended up in such a mess. To reaffirm what has already been said. This is not what a junior position should be like. At the same time, it is what it is. And there is a...

    Oh boy, I’m sorry that you ended up in such a mess. To reaffirm what has already been said. This is not what a junior position should be like.

    At the same time, it is what it is. And there is a thing called radical acceptance. Which means to completely embrace and, well, accept reality as it is. Those are the cards you have been dealt.

    How is your relationship to your supervisor? Tech lead, team lead, whatever they are called. Are there more people in your team working around that code? Do they know the situation? Do they have your back?

    Like others have said. The sorry state the system you’re working on is not your responsibility.

    Probably a huge issue is prioritizing and triaging issues. What is the next step to take? So I would start making a long list of things that you see that should be done. Again, is there someone else working with you that can support? Even if they are not a dev.

    8 votes
    1. makesey
      Link Parent
      I would also suggest talking to your superior or similar about this, if your relationship allows for this. Your concerns are of good intention. You want to do good work, but are missing the needs...

      I would also suggest talking to your superior or similar about this, if your relationship allows for this.
      Your concerns are of good intention. You want to do good work, but are missing the needs to do it (be it time, knowledge, or missing processes/tools). And you also worry about your own health, which is a good trait of you!

      Your supervisor should care about both things. Their job is to provide you with everything you need to do your job as good as you can. They should also care about you and your health.

      A good supervisor will listen to your concerns, and will want to help you overcome the challenges. It's the best for everyone, you, your superior and the company.

      3 votes
  5. [2]
    umlautsuser123
    (edited )
    Link
    No!! I have felt this way before, when I felt like I couldn't depend on people and they didn't get what was wrong / seemed to not take similar ownership. General advice: Make sure you're...

    I guess I just want advice on what I should do in this situation. Is this a normal first experience?

    No!!

    I'm already just so lost and... lonely?

    I have felt this way before, when I felt like I couldn't depend on people and they didn't get what was wrong / seemed to not take similar ownership.

    General advice:

    • Make sure you're protecting your personal time and sanity. Ask yourself what you need to do to feel like it's not your responsibility and write it down. Do not settle for "it is my responsibility," really try to think about this.
    • Take cues from the people around you. It's true our job is to stress about things in our domain. But also, you're a junior, it is actually not your job to stress about things in isolation.
    • CYA (Cover your ass). Document things to your boss proactively (doesn't have to be serious, but just so they are aware). I have seen it blow back on people / myself if you go outside of expectations / needs and you make a mistake; your work and your solutions should be well-known so it's not seen as you cowboying stuff or "failing" at the responsibilities you took to be nice.
      • If you do have a really overwhelming problem, and you make a concise but informative description of the problem to your manager, they can potentially help (either by ordering the other engineers to help, or by telling you to not worry about it).
        • Unapproachable engineers may actually just be not chatty. This one might respond well if you have specific asks.
    • Understand what needs fixing vs what is bad code. If it can wait until tomorrow (unlikely to create serious production issues), it's probably just bad code. You can live with it for a surprisingly long time, which it sounds like they have if they have no tests or error handling.

    Also, feel free to DM me! I've been doing the engineer thing for 6 years, I'm just okay at the gig but can probably provide some basic help on code and work. When I was growing up, I knew no one in tech, much less in engineering. And I was awkward at making friends for a long time too. It was hard to navigate professionally, and if I can help someone else, I'd like to.

    6 votes
    1. cadeje
      Link Parent
      Thanks so much for the advice. That first bulletpoint especially is something I will definitely make myself do. I don't know what it is, but I find myself taking responsibility for everything when...

      Thanks so much for the advice. That first bulletpoint especially is something I will definitely make myself do. I don't know what it is, but I find myself taking responsibility for everything when I know better and am incredibly self-aware about it.

      Take cues from the people around you. It's true our job is to stress about things in our domain. But also, you're a junior, it is actually not your job to stress about things in isolation.

      Okay, this is something that I think I should've covered more, and is probably a big culprit to my mental state. Everyone I work with is stressed out and overwhelmed. It's the company culture at this point, and it's hard to force myself to be zen and step away from that. I remember when I started I approached everything as an outsider so I felt a lot more at peace with things, but now that I'm more embedded in the process, it's been getting to me. Though, this job has been very character-building haha.

      I really appreciate your offering to help, and I think I may take you up on that. I got into this field later than I would have liked, so I don't have the benefit of knowing other devs. I thought about joining programmer communities, but I honestly don't really have the mental bandwidth for fast-paced chatrooms anymore, and the prevalent online programmer "culture" is uh... not for me.

      Again, thank you so much for the advice! :)

      4 votes
  6. creesch
    Link
    Others already have given great advice, in fact I'd say that most replies you have gotten so far are good advice. Feeling a little bit lost when starting in a new field can be normal. However, not...

    Others already have given great advice, in fact I'd say that most replies you have gotten so far are good advice.
    Feeling a little bit lost when starting in a new field can be normal. However, not to the degree you are describing it does very much sound like you have been thrown into the deep end here.

    Having said that, most experts in the field will always have some degree of self-doubt and paranoia about the quality of their work. Having a bit of imposter syndrome is something I'd say is even healthy. When you no longer question the work you do is when you should be really worried. But, that is more advice for further down your career path, as it is not yet as applicable here.

    I do feel like you have identified a lot of areas where your current company is lacking. As others have said, while stressful, it is an opportunity to quickly learn a lot of the basics. At the same time, don't walk into the trap of making yourself feel responsible for all the shortcomings in the organization. That is a sure way to work yourself into a burnout in a short period. A better way to approach this is likely to put all the things you see on a list, a backlog of sorts and see it as part of a study path.
    You mentioned ordering a book, which is of course fine certainly if you learn better from books. But don't forget that there is an entire internet out there with learning resources. Of course there is a lot of things to shift through, learning platforms there can be a great tool. Coursera for example has a lot of university provided courses which will give you a very solid basis.

    You already found Tildes, I'd certainly keep coming here for advice. From what I have seen in the past certainly as far as python goes there is quite a few people with knowledge in that area.

    As far as tackling the actual problems you see:

    • Besides the code you are writing, only one thing at the time should have priority. Tackle infrastructure things as projects, don't try to learn and do everything at once.
    • Tackling the things that impact you the most. Should be obvious, but I figured I'd mention it anyway.
    • Do not aim for perfect, aim for better than you found it. If pipelines currently have zero error handling. Some error handling is already better than no error handling. The same goes for things like unit tests, don't try to aim for a certain coverage first. Aim to cover newly written code as that is much more productive.
    • Keep a log of your successes. Someone made a thread about this a while ago on Tildes and I thought it is a great idea. We often forget about successes, if you keep a log of them or something that reminds you it might help you in keeping your sanity.
    5 votes
  7. [2]
    conniereynhart
    Link
    Regarding "real testing"... I can recommend the testcontainers framework. In a nutshell, with testcontainers you can spin up a real dockerized database instances (or any other docker containters...

    Regarding "real testing"... I can recommend the testcontainers framework. In a nutshell, with testcontainers you can spin up a real dockerized database instances (or any other docker containters for that matter), and then run your tests against these dedicated temporary test instances.

    A lot of times, tests with database interactions - if there are any at all - simply mock what the database is supposed to return, but there is no real database access taking place when running the test. Sometimes, tests also use so-called "in-memory" helper databases to kind of mimick the actual production database; this is already a bit better, but still not the real deal. With testcontainers, you can start a real postgres/mysql/mongodb/etc. database server instance, and run your tests against these instances. This is especially useful if you want to test custom SQL functions or procedures.

    Testcontainers is available for a multitude of programming languages (and also plays together with pytest).

    You mentioned emotional stress and fear of breaking things... As others have already stated, you should not be in that position as a junior dev, especially as a new hire. I can only say that for myself as a senior dev, I would also have constant fear of breaking things if it were not for thorough testing.

    2 votes
    1. adutchman
      Link Parent
      If you use an ORM, you could also test with a SQLite database. I decided to do that, as it is easier to set up, and my worry was not the ORM and the Database, but my own C# code.

      If you use an ORM, you could also test with a SQLite database. I decided to do that, as it is easier to set up, and my worry was not the ORM and the Database, but my own C# code.

  8. Pistos
    Link
    Having most people in your team or department not care is not great, but it's also actually a big opportunity. If nobody cares what you do, then nobody will get in your way when you start setting...

    Having most people in your team or department not care is not great, but it's also actually a big opportunity. If nobody cares what you do, then nobody will get in your way when you start setting things right. Start a test suite, and begin growing it over time. Establish linting rules to your own liking. Start a culture that actually does code reviews, even if it's just you doing it to others' code at first. Set up the CI pipelines. Change libraries, frameworks, languages to whatever you think is best for each case. Set an example, and be part of the solution, instead of part of the problem(s) -- i.e. go against the don't-care, low-quality culture, and blaze some cultural trails, maybe even establish some norms by your example.

    If you repeatedly demonstrate initiative with tangible results, you could even try to leverage that into getting a promotion, where you'll get even more decision-making power, with which you can establish (and enforce?) better practices.

    2 votes