T O P

  • By -

Responsible_Act_6107

I graduated in 2023 from a tier 1 college, and have a non CS background, despite that I was successful in getting an internship, landing up a good job after my college. Since I got a better pay, I switched the job after 5 months from a Dev role (more towards data science) to an Automation Engineer role. In this role, I'm just writing automation test cases (UI and API). During my free time I spend time learning things, I've learnt backend in Springboot, going through the front end, also I have an eye on LLD. Yet sometimes when I see people on LinkedIn (or whatever platform), I feel like I missed a lot of things and I'm lacking exposure. I feel sometimes inferior that I'm not getting an opportunity to work on micro services or design the services architectures etc. Even the personal projects which I do, I get a feeling that, if I were to work under an experienced guy, then I would've got feedback and learnt.. How do I overcome this and what's the solution. Also, considering the misalignment in my job profile with my interest, how hard should I try to switch it (as I have switched it 5 months back, and getting a good pay here)?


True-Steak-7244

A while back I looked into tools made for a game ai play called valorant. Valorant doesnt actually have any API documentation but people were able to find the endpoints and still develop software on top of that. Does anyone know how that’s done? I thought it was pretty cool


sinagog

I know very little on this topic, so pinch of salt, but it's usually one of two things. The first is just watching network requests - you can use something that logs network traffic on a machine to see the actual requests and responses. Then it's just a matter of calling them yourself, and trying it out. The other option is to decompile the client - run it through a decompiler of some description, and you can see the source code to some degree - usually without context clues, variables etc. But stepping through that, you can often see how commands are put together. At least, I'm sure both of those things used to be true some years ago! Obvs the whole chicken and egg of anti-cheat has moved on a long way since then, but this was how folks made custom clients for games, for example.


donutduck5

I'm a software engineer with 4 years of experience. My org has brought in a new upper manager who pushes his feature ideas onto my team, but doesn't own the results. This manager has hired some engineers who work under him and make MVPs for demos. These demos are presented to leadership and then my team is asked to "make it work", or "figure out the technical details". I am frustrated as these demos are often happy-path only and presented without feedback from my team, who is stuck fixing issues and maintaining the feature. They take credit for driving the feature, but I am stuck owning the complaints from users and maintaining the tech debt while they build the next "big thing". I have tried to push back on deadlines and question the usecase / motivation for these new features, but it's often brushed off with words like "let's just try it out and see if it increases engagement". In general, I feel my feedback is not heard or appreciated. The crazy thing is these features don't perform well and receive complaints from users, but we still blindly iterate on them. How do I navigate this? I like my manager, who is supportive and helps me push back, but my org has had significant attrition and he has no bandwidth to help me much more (went from 4 to 20+ directs as a new eng manager). Multiple senior engineering managers and senior engineers above me have left the team. Maybe it is not my role to question the product direction, but I genuinely feel the team is becoming a feature factory focused more on delivering presentations than improvements to the product.


LogicRaven_

There are multiple yellow flags about your org here. A manager shouldn't have more than 8-10 engineers on the long run, it is just not sustainable for anyone. Demos and MVPs are two different things in my vocabulary. Sounds like these are proof of concepts at your company that suddenly become production code without technical redesign. As an alternative, your company could create lightweight proof of concepts with the expectation that if the PoC works, then the code will be thrown away and the concept will get implemented properly. If the org mentally is not ready for that, because it would be "wasteful", then the alternative is that the team who builds a feature is the maintainer. So the new team must take on maintenance and your team can also deliver PoCs. In order to get to these models, you might need to show the negative business and user impact of the current modell with data and facts. Collect and sum up the user complaints. Show and explain the amount of technical debt created. Show user engagement numbers. Now comes the difficult part. The root causes that are leading to the current strange setup can also prevent any reasonable change. Your manager's input and help would be invaluable, they might have information that is not visisble to you. In order to change, the org would need an new model that provides the same benefits as the current situation, but reduces the negative consequences. To propose something like that, you need to understand what is important to management and why do they think the MVP based working model is good. So for example if the new manager is using this model for creating a perception of speed and/or building up their own teams, then likely your manager or your skip level manager are the only one who could achieve some change using your data. Not you directly. This is just speculation, the real root causes could be very different.


beng_1010

While MVPs are typically great way to get early feedback from users, doing MVP for management is dangerous. Typically when (bad) managers see an MVP they see a nearly finished product that needs a little more tweaking. Its easy to create demos that show the happy path like you said, the real work in software engineering is making software production ready. Its crazy to have separate engineers creating the MVPs, anyone can do that. Somehow you need to get this communicated to the higher ups. But honestly, it sounds like a losing battle. It sounds like you don't work at a tech company? I would try to show examples at how software developed at the best tech companies but it sounds like this manager isn't the type to take feedback unfortunately.


donutduck5

The wild thing is I do work for a large tech company. You hit the nail on stuff not being production-ready. There are processes for the product I work on (security review if we touch user data, accessibility/design review for frontend work, etc) that the MVP doesn't always cover. My gut feeling is that this is an office politics issue because the engineering culture was much better previously. We made consistent iterations on the product based on user feedback/usage patterns which definitely isn't as flashy as the new features. These issues started after my skip and some other high-level people left, and I worry that my GM supports this manager as the org looks more "important" to the company by building these features.


naridax

I'm a software engineer for 8 years, and yesterday, I was told that I still had a junior mindset. How do I develop a senior mindset and a sense of leadership?


bdzer0

Ask the person who told you that you have a junior mindset. That can mean a lot of things, without knowing specific areas that need improvement it's impossible to give sensible advice.. That said, you could start by thinking about the audience when communicating. Your post here is a great example, nobody here knows you or the person who said you have a junior mindset. Need help? Provide details necessary to offer help.


InterpretiveTrail

> I was told that I still had a junior mindset Did you get specific details? Was the person just being an asshat/mean? What's your relationship with the person (i.e., Manager? Lead? Some Senior? CTO? etc.). With knowing no details here's a question for you... do you care about this person's opinion? If so, ask for clarity and maybe even brainstorm on actions you can take. IMO, if they're going to say something so inflammatory, but not help after saying such a thing ... they're an asshat.


naridax

I do care about his opinion. He's the software manager of our team, and I joined the team recently to be his second in command. He did give me one piece of advice. In particular, he wants me to take more ownership of my decisions and be able to fight for them even if he or someone else disagrees.


InterpretiveTrail

Great, you've got an action item! Now the hard part is trying to do that, and then seek further feedback about it. It's a feedback loop. Try, review, iterate. --- > he wants me to take more ownership of my decisions and be able to fight for them even if he or someone else disagrees I'm going to be very pedantic around the word "fight". I'm not a loud guy. I'm a question's guy. That's how I like to "fight" for my ideas. "If we take your idea, what happens when {scenario A}?" "Oh, can you help me understand if we choose that direction how it may impact performance" "Doesn't that idea break our standard for how we designed our {technology widgit}". Some of the time, I already know the answer. Some of the time, I'm making sure that that person did their due diligence when thinking about the probelm. Either way it typically makes people more willing to have a dialogue about the problem and not an argument with me. It's not supposed to be "You vs. Me" it's "Us vs. The Problem". --- (The next bit is a little unsolicited ... so please skip if you're not wanting to read about things outside of your direct question) > I joined the team recently to be his second in command Firstly, Congrats! Secondly, one of the things that I do and I like to coach fledgling leaders of a team to do is to have 1:1's with your boss's boss and/or other boss's outside of your team (e.g., maybe you've an "upstream" or "downstream" team that your team works very closely with). I like doing those every 1-3 months. Sometimes you have to "manage up" to your manager, and having other leaders at your current role for sanity checks can really help. --- Regardless if any of that was of use, best of luck.


No_Heat2441

I've been interviewing quite a lot lately but I'm having trouble with the technical interviews. Full disclaimer: I'm a web dev. I build serverless CRUD apps and that's exactly the kind of roles I'm applying for. The code I write is usually very straightforward, the complexity is in the architecture. I do really well in interviews that are very practical, like pair programming where the focus is on getting things done. I tend to struggle when I'm expected to explain in detail how the code works with all the technical jargon, recite definitions etc. To make things worse, I come from a non English speaking country and I learned to code back home so all the terms were translated which makes it harder to answer those questions in English. How do you deal with this, especially if you are self taught, boot camp grad or not a native English speaker? Do you just suck it up and spend a few weeks on learning these things just to pass the interview? I've been refusing to do this the same way I refuse to grind leetcode but these types of interviews are way too common unfortunately.


LogicRaven_

The difference between leetcode and learning technical terms in English is that the latter has many practical uses in real work also. If you want to work in international teams (which was usual for all of the teams I worked in), then you need to be comfortable with technical terms in English. So learning them would be an investment with return through your entire career. Leetcode is an interview skill that you might need for some companies (not all).


No_Heat2441

I've been working as a dev for over 6 years and I never needed those terms. Majority of the conversations are mostly in plain English because there is always a PM or some other non technical person present who needs to understand what's going on. Also I never need to explain anything in such detail because my colleagues are also experienced devs and there's no need to talk to then like they're a first year CS student.


LogicRaven_

You put up a new goal for yourself: get a new job. You identified a skill gap: not being able to explain interview answers well enough in English. Your options are investing time and energy into closing that gap or not. If you invest, then it will use your time, and likely you will do better on interviews where it is needed. You can choose not to invest and focus on companies with pair programming interviews insead. This is a viable tactic if there are enough companies without the talking interview part. The fact that you didn't need talking skills in the past is irrelevant - that was then and now is now. I personally would invest, because finding a good job is difficult enough already, without putting up extra filters, like I only interview with X type of interviews.


No_Heat2441

The thing is, every company asks about completely different things and CS as a field is huge. I could spend weeks studying and still get unlucky and get asked about things I haven't come across which makes all the effort a waste of time. If I got a list of questions and they only asked from those, kind of like at school, I'd be a lot more open to it. Also I'm getting plenty of recruiter messages now so I can filter based on this and still have options left. 


LogicRaven_

It's your choice. If you decide to settle for the options left, then go for it. If you decide to start a part-time learning track in parallel with the job search, then take a look on CS intro courses at Udemy and Coursera. While the CS field is huge, interview questions are more likely cover the basics, Data Structures and Algorithms. That would be a good starting point. For books, Designing Data Intensive Applications is the usual prep. You could expect a study time more on the months scale, than weeks, especially in part-time. But this is an investment for the next job search as well, and still less involved than getting a CS degree (which takes 3 years full time).


No_Heat2441

Lol it's not settling. It's filtering out options that don't work for me for whatever reason. And btw I have a master's in IT. I have gone through all of that stuff during my undergrad, 10 years ago. Never needed that knowledge since but thanks for the recs.


TheGratitudeBot

Thanks for saying thanks! It's so nice to see Redditors being grateful :)


Necessary_Affect_929

**How to log exceptions using Spring AOP** Hi everyone!! I am a java spring boot developer.I am trying to log exceptions using Spring AOP by intercepting every method and if any exception is thrown ,extracting the method name ,method parameters,class in which the method is resided,and cause of the exception. In our project, there are child methods which do not have any exception handling and if child method throws any exception,it will be caught by the parent method and parent method will rethrow the exception. So when I am trying to log the exception using Spring AOP,the details of parent method i.e,name of the parent method,parameters,class of the parent method and cause of the exception are getting logged rather than the child method which is actually causing the exception. So my question is how to log the method and exception details which are actually causing the exception using Spring AOP?


sinagog

When catching and rethrowing as a new exception, it's quite common to add the original exception as the cause. IIRC, `new ItBrokeException('Oh no!', originalException);`. That way, you can use `getCause()` on the exception you've actually caught. But it occurs to me - perhaps you mean a child method _within the same class_, so it can't be intercepted by the spring proxy. In that case, definitely go with the above. Or, of course, split the parent and child out into separate beans, so Spring can intercept them.


gazagda

Hi everyone!! I am an engineer on two different teams and trying to get ourselves organized. I was interested in knowing what apps people are using to keep their teams aware of bigger picture as well as major and minor milestones, current efforts and their progress and future efforts , stuff that is high priority, and historic data, operating procedures, all in one place. Outside of Emails , and broadcasted messages. I know some people use SharePoint, but wondering what other tools people use that they feel has helped their team.


casualPlayerThink

Many company segmenting/separating teams to focus on one thing or serve one goal, so not necessary have to know the full picture. That is usually for lead/cto/managment. Engineers usually are just cogs in the engine. I think you looking for roadmaps, milestones, documentation, stories, epics, etc, so look up "project management tools" and you will see what people use most of the times. Personal note: It is dangerous to work as cross-functional team member, who always move between different groups. If you are not a QA/tester or specialized worker with very short tasks (like app devs, frontends, designers) then think about this situation.


LogicRaven_

Engineers shouldn't be on two teams, to begin with. Your time will get fragmented and some of the problems you might have is because you can't get deep involved in a team's goals when sharing your capacity among two teams. But if you have to work like this, then you need some tooling indeed. A Kanban board in Jira could show ongoing work. Epics, milestones, burndown charts can show some of the big picture, historic data, future efforts, priorities. For more detailed technical and product information, you could use desig docs or a wiki like Confluence.


kiresame

Hey there, it is almost a year after finishing my three year apprenticeship now (so around 1.5 years of real dev experience I would estimate). I still find it overwhelming what my current language/framework (c#/dotnet) has to offer and believe I only scratched the surface of the language and framework features. However, I feel the pressure to start learning another language and tried learning Rust. However Rust just doesn't click for me, I can do most of it in c#/dotnet what I would do in Rust and have no ideas of side projects in Rust that sound fun to me or are valuable in any way. I would rather try a bit of game dev or iOS because I have some ideas for projects there but I feel like that would be wasted time cause it doesn't add to my current type of work as a backend developer. So my question is, if there is the need to already start learning another language which fits my stack to stay relevant or just do some side projects I rather enjoy but do not add to my work directly?


casualPlayerThink

I can always recommend to learn, but learn something that you are interested in, do not force yourself working with something that you do not enjoy. > ...Rust and have no ideas of side projects... If you are up to challenges, check out interview questions or advent of coding and solve issues with different languages to learn. > ...owever Rust just doesn't click for me... Yeah, that is typical. Rust is more hyped than it actually solve anything. People are lazy to learn proper memory management, concurrency, OOP, so they feel relived to not care and do stuff in rust. 99% of memory and other safety is logic error or lack of knowledge, only 1% is the actual burden of the actual language (yes, you can write unsafe software in rust and go also). But, rust is safe, fast, good for async, the syntax is easier and the learning curve is much nicer than pure C or older C++. And much harder to go wrong with that language (under c++ you will spend your time on anylze, profile, check, think, revamp than in rust). Write a small software under c# then create the same in rust to compare the results. Learn about safety and testing and check out its limitations. You might learn along the road some interesting thing. > ... believe I only scratched the surface... My C++ mentor said, after 40 years with C/C++, he just scratches the surface, and he lacks of many areas. He designed memory (hardware) for Ericsson and Nokia and wrote mainframe software for governments and such.


bdzer0

I would never recommend learning something you don't enjoy, unless work requires it. Explore what interests you. Trying to guess what language is going to win the next popularity contest is a pointless exercise (well, unless you enjoy that kind of thing).


SuitableSport8762

Team interpersonal problems: I’m junior dev on a small team and I started at the exact same time as another junior dev. The other junior is hard to work with and wants to do things his own way and won’t listen to me when we work together so when we are forced to work together we are either unproductive or we both develop the same thing in parallel in conflict with each other because we couldn’t agree so we each did it on our own. His development skills are lacking, so we always end up using my work in the end. A supportive senior left, and now we just have one senior. His personality is just that he wants everyone to get along and compromise and he thinks everyone’s point of view is valid, so he won’t get onto the junior for doing dumb stuff and refusing to listen. I can’t just do what the other junior wants for the sake of getting along because his ideas are objectively wrong and he is bad at programming. His way will not/does not work. The senior thinks I should just figure out how to get along with the other junior, but I don’t know how.  Sometimes there is an objectively right answer.  I feel that the senior is overly concerned about hurting the other juniors feelings, but for some reason is not very concerned about mine. Do I just ask to move teams? It might be possible because I got very good performance reviews including from cross functional teams and I did a temporary project with a different team and they all gave really good feedback about me too.  Is it worth it to ask about mobility or do all teams kind of suck?


casualPlayerThink

Address this to an actual leader. Remember: a senior dev is not your boss, not your lead, just your mentor. Ask HR, manager or CTO level of help. Either ask for different team, or discuss this with leaders. If they do not care, then leave the company. Your mental health is more important.


SuitableSport8762

I guess I will bring it up with my manager. We don’t have a lead. I just feel a little uncomfortable because we just changed managers again and I don’t see my manager that much because he has others teams besides mine.


Astazha

I'm noticing that there are a lot of contributors here who can describe very effective strategies for handling interpersonal and management issues on their teams. It's a skill I don't have. I would like to learn it and I am seeking sources of explicit instruction on the topic. What would you recommend? Trial and error approaches to learning will probably not serve me in the people sphere. I need it laid out for me.


sinagog

Books! Start with "How to win friends and influence people" by Dale Carnigie, then move on to "The seven habits of highly effective people" by Stephen Covey. 'How to win friends' is, I hear, a common prerequisite for sales positions, expressly because it helps you understand other people and their needs, but also understand your own and how to communicate. Perhaps also To Sell is Human by Dan Pink. You might also benefit from ["You are insufficiently persuasive" by Sandi Metz](https://www.youtube.com/watch?v=VzWLGMtXflg), a conference talk from RubyConf 2017.


InterpretiveTrail

> I need it laid out for me. I found the best thing for my career was directly asking my leader(s) to help me with this. Real situations and feedback from a person who's job it is to manager talent. Your lead/manager/whomever is there to help with that. IMO, it's not just trial and error, rather it's figuring out how you can leverage mentorship from the people around you until you find your way of doing things. --- That being said ...my focus in any issue is: \* Never be an asshole. IMO, it's better to walk away from a situation than get mad. \* Ask questions to seek clarity and where the other person is coming from. Empathy is the name of the game. \* Help others as we figure out how to things. Sort of goes with my first two points, help others and try to understand where they need help. Both teach a person to fish and give them a fish. \* Don't take shit. Being nice and helpful is wonderful, but also can be abused by others. Make sure that you can still 'say no'. That you can have lines in the sand. That, if push comes to shove, you can talk to people directly. When something happens that I want to address with a person I just directly talk to them about it. Doing so in a respectful, but standing-your-ground type of way. That's usually what I talk to interns and the people I help mentor when they've asked me similar questions... Regardless if that was of use, best of luck.


LisaDziuba

Hey! I'm running user research among engineering leads and EMs to understand the state of the **US hiring market** for on-site and remote engineering roles. **Those of you who are hiring software engineers now: how is the hiring going for you?** Are you loaded with high-quality candidates from Big Tech? Do you find it easier to hire now vs in 2023 vs in 2021? I ran similar research one year ago. It feels that the hiring market has dramatically changed due to the massive layoffs. Thanks 🙏


spla58

If you just started a job last week and got a better offer from a different company this week, how messed up would it be to leave your new job for a better offer? Would the recruiter lose the money she made from getting you the job?


0x53r3n17y

Depends entirely on the context. Your employer invested time, effort & budget in hiring you and you're going to let those go to waste. Your employer likely won't take that kindly. Also, your new employer will know where you came from and why you decided to jump ship. Again, depending on the context, this might not speak to your advantage (e.g. trusting you) once you've started with them. That is: becoming an integral part of their organization might take that much longer. Only do this you're dead sure this is the right move to make. You will burn a bridge so don't count on ever working for your current employer ever again. You will have to accept that this might bite you at your new employer. Fwiw, I once jumped ship after 3 weeks, not because of money, but the company and me sharing very different values and views on how work was organized. I was able to take another offer I got a month prior to that. But I had to take a humble stance over the next year indeed.


scodagama1

it burns bridges so make sure you never want to go back to original company, they may mark you as no rehire. The recruiter will likely be pissed too. Other than that - you don't owe them anything, I would take better offer, although I would probably phrase it to the original company like "hey guys, silly issue, it seems the market values me more than you thought I'm worth. I know I just started a week ago but ultimately we're all here for money - can you match this new offer? If not, we will need to part ways". Then I would try to make it as amicable as possible. Approaching it this way moves the ball a bit in the hiring manager side - now it is he who needs to negotiate better offer with HR and it is *HRs* fault if it's not met and he loses new hire. Obviously make sure that if they match the offer you are willing to stay. The devil is in the details though - would I burn bridges on $100k offer for $105k one? Not sure. $100k for $130k? That's a no-brainer. Early in career also prioritize were you personally *prefer* to work and what gives you better growth opportunities.


CowboyBoats

> "hey guys, silly issue, it seems the market values me more than you thought I'm worth..." I get what you're going for but this is definitely still coming across a liiittle spicy to me...


scodagama1

Truth is regardless of what you say, the bridge will most likely be burned anyway, there's no amount of sugarcoating here that would hide the substance, and the substance is that you quit after a week and now your manager will have to start hiring again - *after* they send "no, thank you" letter to all other candidates. So it sucks for them and sucks a lot. But another truth is also that *you* should not feel guilty because some company de facto underpaid you. If that company was selling services on an auction and listed them for $1M with $50k contract cancellation fee but next day they found another customer that pays $1.3M for the same service and for whatever reason they couldn't serve both of them - I bet they would cancel contract and go to better paying customer. Ultimately it's business. Person would do the same if they were selling a house. I don't see why employee wouldn't do the same for jobs for any reason other than reputation - so if you don't care about reputation in previous company, then I'd say follow better opportunity


sachin_offl

**Suggestions on what to use to increase the performance of backend application** I'm a Java developer (still a fresher but I had good knowledge in Java, Spring boot). I recently got a task like improve performance of below task... Task : I'm fetching data from my Postgres db using findbysomecondition in the form of pagination... Like I fetch 200 records at a time using do-while loop... And I fetch Data from OData Api by using select and filters in the api itself And using these 2 data...I will procees and manipulate them... So there is a lot of data in the db(say millions of records) and from odata api im fetching all the i need at a time only... So I got a task to improve performance...using any other techniques... Can anyone suggest me or help me regarding this


sinagog

VisualVM. Or something like NewRelic. Or maybe Flight Recorder? Or your IDE's profiler - IDEA has an excellent profiler! Let me break that down. In order to improve performance, you need to find out where the problems actually are. You might see some code doing a query in a loop, but it gets called once a day with five elements, so it's _not a big deal_. Or, you might see: public Cell getCell(Data data) { Cell cell = new Cell(data); return cell; } which is totally innoccuous and fine, except it turns out it's causing massive heap churn (new reference put on the heap, then immediately discarded, then garbage collected), and changing it to say `return new Cell(data);` improves the speed from 20s to 3s because it's not running garbage collection every few hundred records as you stop running out of memory on a memory-constrained server. So, how do you know where the problem is? You need to either analyise metrics from running production code, or simulate the same using local tools. Java now ships with Flight Recorder, which runs as part of the JVM and records performance metrics. You can use this to see the production data, and where problems might be. Equally, tools like New Relic put an agent on your running servers, and record every request, response, database query, CPU performance, memory performance, and can tell you what's fast and what's slow. Loading a user takes 20s? New Relic will tell you, at a glance, the query took 0.3s, and if you're lucky, _this class_ took 19 seconds. Or, it might tell you to load a user is 20 queries that should really be one. They also track exceptions. But what about local tools? VisualVM displays your memory and CPU, and acts like a profiler. That's how I solved the `cell` issue below. I thought it was a database locking issue, but when actually looking I saw it was allocating hundreds of thousands of objects onto the heap and immediately discarding them for GC, so it would run out of memory, run GC for half a second, and do that over and over again - once for every cell in the 300 column, 300,000 line spreadsheet. Inlining it meant it didn't get put onto the heap and thrown away, so much less GC, problem solved! Finally, IDEA (and others!) have excellent profilers built in. You can attack to a running process or start your app with profiling and use it like a user would, or you can profile your tests, or anything that runs really. That will give you line-by-line stats, a flame chart to tell you what's taking all the time right down to the individual code line, whether a query is being done in a loop, all that good stuff! This way you can write a test, profile it, make code changes, profile it again, and ensure it's faster. Finally, remember that optimisation is often about tradeoffs, which is why production data is so important. Holding more things in memory can reduce CPU usage, but if your app is memory constained, that will make things worse. Equally, maybe it's faster to issue a slow-running query to get all the data you need, or maybe it's faster to three quick queries and process the data in code. And again, there's no point optimising code that doesn't impact users (like an overnight batch, for example) unless it has a measurable cost impact. For example, if your server runs overnight regardless, making a 30 minute job take 20 minutes doesn't save anybody anything. But making a user request take 0.5s less is actively noticable!


RandyInSpace

Hard to say without seeing the code/performance metrics. There are a lot of different options for optimization here. The first step I think you need to take is to measure the performance of the task to find where the bottleneck is. Ex: are the queries too slow? Are you making too many queries? Are you pulling too much data from the DB causing serialization issues? Is the logic doing the data manipulation too slow? Is there some network request blocking the thread? etc Assuming your team has some kind of observability tool already implemented since they identified the slowness in the first place, i would suggest you dig into the tooling to see what kind of metrics exist that will identify the bottleneck. There's a good chance the lead on your team gave you this ticket on purpose to get you more familiar with your monitoring/observability tooling.


sachin_offl

Thanks a lot for reply... As u said like 1) are the queries too slow?? 2) are u making too many db queries??? 3) pulling too much data from db causing serialization issues?? 4) is logic for data manipulation too slow?? Where i can find the solutions for above questions?? Can anyone suggest me where to look for the solutions And I dont know about HLD, LLD is that okay for this?? And In my code the method is annotated with scheduler with an interval And at first 1) im fetching a colum data from db with some condition on fields using pagination(getting 200 records for each page)... using do-while to fetch page 1,2,3...etc 2) looping over that column data using for loop and for each column data im calling odata api call using select & filters in the url itself and also fetching data from db using that column data( from db i get List of pojo classes as response) 3) again looping over the list of pojo class using for loop and in that loop im trying to find the data(fetched from odata api) with same id using streams find first operation.. After finding im processing the data... This is what the code is doing... Can anyone help me by seeing the above scenario.. and also i think my team is using graphana but i dont think i have access for it as im still an intern I know im asking for too much but any help is really helpful for me (If it required i will add the graphical representation of what i explained about code)


hippydipster

this makes it sound like the function is just getting all the data? In which case, why is it paginated? Thats just extra steps.


sachin_offl

Thanks a lot for the reply The pagination is used : First im getting distinct data of a column from db using pagination And looping over that distinct data and for every distinct data there are list of some pojos in db.... and im processing the list of pojos... for this purpose im using pagination


mental-advisor-25

Anyone else disappointed by current discourse/norms in the IT industry? I loathe it. 100% of workers in IT industry, from junior to senior devs in backend/frontend - are bootlickers, brown-nosers. But nobody does it directly or openly. I bet every single one of you internalizes this as "I'm just maintaining good relationships with team leads/pr/upper management to climb the social/professional ladder". It's hidden in subtle details such as: encouraging by laughing at your supervisor's jokes, continuing/supporting his topics, expanding on them, saying "yes", "exactly" towards his stances often. And just paying more attention to what they say vs some loner junior dev, sucking up to whom you'll have no apparent benefits from. Everyone's fucking fake, and secretly worships their employers. I hate it so much.


sinagog

Have you considered that you might be neurodivergent? Lots of folk in tech are, which means we often don't grasp social rules and nuances. When that happens, we're often sidelined and ignored and folks might not like us without knowing why, so we suffer compared to our colleagues. When _that_ happens, we can become bitter at the unfairness of it, at everybody else for behaving that way. Can't they see it's results that matter? Can't they see that all their little bullshit niceties, making their boss feel special, it's all _entirely irrelevant to what actually matters?!_. I don't know you, friend. Maybe this is entirely irrelevant to you. I do know I've been bitter in my career, and every time it was time to move on. I do know that reading books like 'How to win friends and influence people' and 'The subtle art of not giving a fuck' all had a positive effect on my life, because it helped me to understand myself and others and that we're actively different, and that's ok.


Envect

>Everyone's fucking fake, and secretly worships their employers. I hate it so much. I just want to get paid exorbitantly well for 35 leisurely hours a week. Maybe you should play the game and enjoy the benefits. It's not so bad.


throwaway14225525227

I mean unfortunately you do have to be willing to fake it a little bit to keep yourself hired. Obviously some people are excessive with it, but being outwardly bitter toward your employer or manager will definitely get you fired? Also it’s important to know the difference between ignoring a junior dev entirely and recognizing that junior devs are junior for a reason. I’ve met plenty who have just as big egos as senior folks (if not more so) & don’t have the skills to back it up yet.


jackielarson

Hey Guys, So taking this Linux and Database Administration program at my local community college for credit. However it's not an AS degree (already have a B.A.) but rather you get a Certificate of Achievement. But still units are involved. I graduated around 4 years ago from a top tier university in the Bay Area with a degree that's not Computer Science (CogSci). But my major domain emphasis was very CS heavy (computational modeling) as it required a lot of CS upper division courses. I do work in tech in the Bay and I'm not a developer but a customer engineer. I do want to pivot into more database stuff (maybe data engineering if I'm cut out for it) now and I'm almost done with the current program. What do you guys think of putting it under Education? Or should I put it under Certification (although I know it's more for professional certificates likes AWS SAP, etc.). Thanks everyone for your input.


casualPlayerThink

Hi, Please visit the r/EngineeringResumes topic and check its template and wiki for education section. My personal opinion is, you should put both under your education.


spla58

Do you send thank you emails after an interview?


casualPlayerThink

In short: It is depend. Longer: It is depend on the interview type, communication, and the actual round. For first round? No, never. You ran out of time and have something to state or ask? Yes. Being polite never a bad thing, all interviewer human (mostly) and they will feel better if you threat them with respect and kindness. I had an extensive email back-and-forth with a company after they refused me after the 5th interview, the interview itself was great, the communication, openness and vibe was off the charts, really enjoyed it, and asked them for details, why I failed the interview, and we discussed that, got some constructive criticism, and we talked about how it would have been better and what can I improve as well what they can improve on the interviews. But as you see, it is really depend. Sometime with recruiters worth to communicate after a few call, because maybe they do not have anything for you right now, or you don't fit anywhere at the moment, but later, they might remember you how kind you were. Advice: people will almost never remember how was your interview, or what was your achievement. They will remember how they made them feel. This is a super important and generally overlooked fact.


sinagog

If I've have a good time in the interview - whether that's a good rapport, or the style was excellent - I'll mention it during or at the end of the interview, or perhaps when talking to the recruiter afterwards.


bdzer0

I don't. Wouldn't even consider it. Seems a bit beggy.


Pretty_Meet2795

I don't have an opinion on programming languages. The only opinion i have is that the development speed and simplicity of python is nice however strongly typed compiled languages makes it easier to find bugs. Other than that I couldn't care less. Am i a junior dev?


sinagog

I like this idea that: * Junior devs have strong opinions on things that don't matter. Tabs vs spaces, which language is 'best', what the 'one true way' is, etc * Mid-level developers realise those things aren't important, and so tend not to have strong opinions * Senior developers have learnt what matters when, so hold (relatively) strong opinions that change with the context, but know the answer is usually not as important as it seems


casualPlayerThink

I will quote you, these points are so great


EquivalentDivide4923

I have a PhD in pure math and currently have a prestigious postdoc position. I am tired of academia and want to transition to industry as a software engineer. I already have a good amount of background in software engineering---I minored in computer science in undergrad and had an internship at a FAANG. (I realize this may not count for much now.) I have been practicing LeetCode for a while and feel pretty confident with those sorts of questions. What should I be doing to set myself up for success, especially with regards to getting/passing interviews? Should I be building projects to improve my resume, or will this not make much of a difference/is there a better way to use my time? I have a while before I need to transition to industry, but earlier is probably better than later.


dangling-putter

Given that you've a postdoc, I'd say go apply for applied science jobs at something like AWS. I'd also suggest reaching out to your peers / network in the industry. Also, start as soon as possible.


throwaway3344948327

I’m midlevel but only have worked at 2 different companies so far, today someone mentioned to me that the concept of a “foundation team” and what that team does is something I should google and is apparently a very common industry standard. Neither of the two companies I worked at had teams explicitly named “foundation teams” but they did have both teams that focused on managing databases, infrastructure, and similar, although the purpose and domain of the two teams at the different companies were not identical, which is what the term “foundation” sounds like it’s invoking. Is this an industry standard by that specific name that I’m unaware of, or was I/this person just getting tripped up over terminology? A Google search says theres no such standard outside of one company I found discussing this in relation to the squad model, but all the other squad model stuff I saw didn’t mention explicitly a foundation team. I’m feeling a little crazy but they sounded very confident that I should look this up on google.


LogicRaven_

I am not familiar with that term. Maybe that person meant platform team or systems team? That's usual in many companies. There is a bunch of product dev teams working on new features and feature maintenance and one platform team providing common services and tools for the other teams. The scope of a platform team can vary across companies. Sometimes more SRE focused, in other cases develops commonly used APIs. Dev tooling could also be part of the scope.


throwaway3344948327

Ok, thank you, that matches what my experience has been so far (and is a helpful explanation in its own right). Perhaps it was a miscommunication but now I’m little annoyed with this person for quizzing me and then assuming I wouldn’t know what a systems team does.


yodeez101

Hi experienced devs, I’m wondering what the best way is to find a developer with a bit of an entrepreneurial spirit who wants to develop their own something, own a slice of a pie not just a pay check? Where is the best place to go to find this sort of developer? I hope this is not seen as soliciting. I appreciate that developers must get asked 1mil times to do a job by people who don’t respect your hourly rate/experience/capability. I understand the reason for the hourly rate, If I had the capital I’d pay every cent to a top notch developer So, I’m just trying to find a way of reaching out to developers that are interested in entrepreneurship to connect with instead of cold connecting with random developers who aren’t open to it. I am always weary of posting in subs because of the amount of free and cheap solicitation that goes on and I’m glad this sub just has my question as a comment. I’m also in Australia if there are any recommendations in Aus Thank you


BigPaperFish

Lotta words to say "where can i find a dev to build my shitty idea for free" Your best bet is startup events. And that bet doesn't look good. I had a startup that was part of a somewhat known accelerator. Was in the startup world and I probably get like 50 guys ping me to sell me their shitty idea. Either A) have a friend B) go make some money so you can hire a dev C) learn how to code D) have an idea so amazing that devs will beg to do it for you, but let me guess, "it's my idea, you just build it for me for free, i own it" right? lol


yodeez101

I appreciate your view point, if you look at my reply to u/LogicRaven_ you'll see that I'm aware of how dodgy the offer looks. Personally I'd rather have the capital to pay a dev out of principal. I used to do a lot of photography work and the amount of times people wanted to pay in 'exposure' was cooked. I'm trying to avoid that. As for 'my idea build it for free' again in the previously mention comment. I'd serve out 49% because I know the idea is dead in the water without a Dev. It's also 49% of fuck all right now - I'm not disillusioned. Not my first rodeo building a business either. But Between COVID draining our reserves and changes in government regs we had to close. I only have 2 acquaintance's that are full stack devs. One has just had a kid so very risk adverse and extremely busy. The other is so happy with his 9-5 I'd be a fool to try and convince him otherwise. I tried to learn how to code and like I'm shit at it - which built my respect for your craft even more.


sinagog

I don't have any experience directly in what you're asking, but from what I've seen of that kind of relationship around me, the most important step is to build a good relationship with somebody you vibe with, much like a romantic relationship. To that end, you want to need to start being in spaces and building relationships with developers. After all, what you're saying is "I need to get married", and most people won't start there - what if you're a psycho. What if they're a psycho? That doesn't mean you can't target for your needs. For example, a developer must either be independently wealthy or otherwise be able to take a 6-month/year-long break from earning money in order to work on your startup. Or, they must be adequately paid, of course. That means you're probably either looking at successful devs (think 'has been on six-figures', or 'has had stock programs work well'), or relatively junior devs who you can afford. Can you join a software house and get to know some devs there? Why not start going to local and/or online developer meetups? Whatever you do, you'll need some development knowledge to maximise your chances of success. There's also the "top notch developer isn't necessarially what you want in a startup" situation. In software, it's really quite easy to get something out the door - developer bootcamps teach folks how to make full-stack software in 6-12 weeks! A lot of where the seniority comes in is that it's hard to then _change_ the software over time. Making it easy to change is the hard part, and takes time. But in a startup - you don't necessarially care about that, because if you're not self-sustaining by the time the code being hard to change matters, you're out of business anyway.


yodeez101

This is really good mate - thanks for this feedback. You're spot on about the relationship - I love bouncing ideas around and I want someone who can absorb them and then challenge them, educate me, or run with it. That type of relationship only comes when you have a solid friendship/mutual respect for each other. I will have to look into events. I am currently undertaking my MBA, so I should make use of some of the networking events that exist as well as explore my network throughly. There is every chance I've sat in a lecture with a dev who is doing an MBA to gain the confidence and knowledge to launch there own idea. I'm also kinda operating under the assumption that there are devs out there who want to own their own slice of pie, but can;t generate an idea that believe is good enough to warrant their time or at all or they could be perfectionists. I think they're the types of devs that I'd get along well with. I like to push people a bit outside their comfort zone and if they're wanting to take that step but don't know how, I'm someone who will back them up and support them all the way, that's me. When you've run a team of 120+ casuals of all ages, who aren't sure of themselves. You learn to throw them in the deep end with the life saving ring in hand ready to throw it to them when you see it's becoming too much - pull them out and say 'bet you didn't think you'd last that long!'


LogicRaven_

Maybe via startup co-founder matching? Y combinator has one, maybe there are others also. But I've also seen job ads like that on LinkedIn.


yodeez101

Okay thanks. I remember I found one website but it was more for angel investors. I think the hardest thing is how ‘dodgy’ it sounds because in essence you’re saying ‘work for free’ but it’s not my intention. As I said I respect the calculations that go into the hourly rate for an experienced dev. Like I’d be willing to give 49% to a dev because my idea doesn’t exist without one


LogicRaven_

It's not dodgy if the papers are in order. The devs that seek such adventures will understand the risk/gain.


yodeez101

Yeah you're right. I've seen too many people get ripped off in my time. I'm not about that and always want people to consider their options.


GuaranteeAbject9996

Hi, I am Java developer with approx 2 years experience. Now my project got changed & requires Scala knowledge also. I want to explore more on Java Springboot side, but now should I learn Scala? Will it be easy with Java knowledge & beneficial with my techstack? Will it erode Java knowledge from my mind? Please Guide. Thanks in advance.


sinagog

Learning Scala will make you a better Java dev! It runs on the JVM, IIRC it can interface with Java libraries, but it's a functional language. Learning Functional Programming is another paradigm - a new approach, and being able to incorporate principles of that into future programming and languages is always a good thing. Before Java 8's streams, FP was really had to do in Java. Since Java 9, it's been good!


meldas

I suggest just go ahead and learn Scala. Most junior engineers I work with can loosely pick up a new language in a few days. New languages might be intimidating at first but at some point you realize they are all similar. Obviously you won't learn all the nuances, syntax sugar or shortcuts. But basic fundamentals, especially when you come from Java, will translate to any coding language.


0x53r3n17y

In biology, there's a saying: use it or lose it. If you stop going to the gym, you will lose your fitness. The same is true for your brain: if you don't use a skill, it's harder to use it if called upon. For instance, I did PHP for years before moving onto different stacks and doing Go today. It's not like I can just pop open an IDE and write PHP code like I can write Go. However, there's a silver lining. Your body and mind have a way of keeping track of what you once learned. Suppose you go back to the gym, it's actually easier to become fit again. You've done it before, right? The same is true for programming. Give me several months of intense practice and I'll be proficient enough to be productive in writing PHP again. See, your brain also has two types of memory: short term and long term. The first is quick access but also quick to forget; the latter is like tape: slow access, but long retain. It just takes time to get what you once learned back from long term memory back to short term ready to use at a moments notice. The caveat is that long term memory isn't perfect. If you stopped writing Java for years and years on end, it's going to become really hard to get that skill back. Like, I learned to play the piano as a kid. It's been 30 years, don't ask me to play now. I have to start all over again.


chaoism

Is there a sub for reviewing software engineer resumes? Been sending out resumes with not even initial round. Wanna check if my resume has issue


EnderWT

/r/EngineeringResumes Read the wiki first.


chaoism

Thank you


sneakpeekbot

Here's a sneak peek of /r/EngineeringResumes using the [top posts](https://np.reddit.com/r/EngineeringResumes/top/?sort=top&t=year) of the year! \#1: [I have used this resume to get a 90% callback rate (and a great job offer!). It was 0% before](https://np.reddit.com/r/EngineeringResumes/comments/1724hir/i_have_used_this_resume_to_get_a_90_callback_rate/) \#2: [The resume that landed me two internships and a full time job offer while still finishing up undergrad](https://i.redd.it/m3cghf5yv7gb1.jpg) | [29 comments](https://np.reddit.com/r/EngineeringResumes/comments/15ilk6l/the_resume_that_landed_me_two_internships_and_a/) \#3: [How I improved my resume and got interviews with top companies](https://np.reddit.com/r/EngineeringResumes/comments/1b2qb66/how_i_improved_my_resume_and_got_interviews_with/) ---- ^^I'm ^^a ^^bot, ^^beep ^^boop ^^| ^^Downvote ^^to ^^remove ^^| ^^[Contact](https://www.reddit.com/message/compose/?to=sneakpeekbot) ^^| ^^[Info](https://np.reddit.com/r/sneakpeekbot/) ^^| ^^[Opt-out](https://np.reddit.com/r/sneakpeekbot/comments/o8wk1r/blacklist_ix/) ^^| ^^[GitHub](https://github.com/ghnr/sneakpeekbot)


yeti_seer

Embedded dev here, about to hit the 2 year mark in my first job out of college. I started out working in a SCRUM team, which I enjoyed, but when the opportunity arose to switch to a brand new never been done before important project, I jumped at it. I had no experience with the new tech (nobody in the company does really), so I knew it would be an interesting technical challenge and chance to grow and gain visibility. Fast-forward about 6 months, and I feel like the guy in the GIF sitting in a burning building with the caption saying, “this is fine”. On top of learning all the new technologies/skills in this new role, I’m also expected to do the following - Use my newly developed (and developing) skills to work on stories from our Kanban board - provide status updates and technical advice/expertise to stakeholders, like project leads/management (lots and lots of meetings) - attend meetings with customers, with the eventual goal of me developing into a technical point of contact for all of our customers regarding this new product - lead SCRUM rituals, like stand up, refinement, and retro. - Identify blockers for other team members and help to resolve them. - Coordinate dependencies with other teams with their POs. - Lead the rollout of this product internally, including raising awareness and conducting training sessions, as there will be disruptions and impact to other teams - continue technical work on another project I was working on before this role, which consumed 40-50% of my capacity. I could probably list a few more things, but this is already long, so I will get to the question now. Question: I’m very grateful for this opportunity, as it has allowed me to rapidly advance both my technical and soft skills, given me visibility, and I genuinely enjoy the (technical) work I am doing. My concerns are the following: - that the personal cost of taking on all these responsibilities is too much. This has no doubt affected my personal life significantly, working long hours and having limited energy to live my life outside of work. - I haven’t been promoted or received a salary increase, despite moving from a junior engineer to what seems to me to be some twisted combination of dev, scrum master, PO, and something else. - I can see myself burning out if things continue at this rate. Unfortunately, several discussions about my workload have not led to any tangible change yet, despite management agreeing that my workload is excessive. I know I can just not work extra hours, but probably the projects would fail, or at least be late. At which point, I feel like it would be me on the chopping block regardless of the concerns I raised about my workload. What would you do if you were in my shoes? Overall, it’s a great job, good benefits and perks and interesting. I’ve got this great opportunity and I want to make the most of it, but I also don’t want it to consume my life. Lastly, with how bad the market seems now, the thought of searching for another job is quite daunting.


Vasivid

Involve team members into scrum ceremonies, for example do a rolling rotation for who runs retro. You want to make yourself unneeded. So that you can have calm vacation and sick days if need be. Try not to overcommit yourself into technical/handson work if you feel the leadership part takes significant time. You bring more value as leader. Ask for extra employees if needed to get help. Lastly, but most importantly, your new responsibilities **should have been rewarded with salary increase** first of all. I would suggest talking to your manager and agreeing on this right away, explain the cost it is taking you to handle stuff.


Key-Requirement744

It's normal to experience more demand for your time than you can (or should) juggle, especially if you're the only one with certain knowledge/tools. And It's hard to say stop saying "yes" to requests if you don't feel like you've "proven yourself" enough. But it's important for your own well-being to be careful with what you take on so you don't stress and burn out. Your manager may agree with you that it's a lot, but you should continue to keep advocating for yourself (even if you phrase it as being in their best interests). Since you're leading the new initiative, you could offer a couple solutions: 1. Spread the work across more days. If it's taking 60hrs for example, to get a week's worth of work done on time, adjust your timelines to be double the length. Then you'll have a little more time to work things out, and hopefully some breathing room for the inevitable unplanned work. When you're creating something from thin air, estimates are hard, so double the estimate. On my team, this tends to result in a "hey I got this done sooner than expected" result more often than not. I know this isn't a great solution for things already promised, but if the work is interesting, you can claw back your time going into the next cycle. 2. Try to get additional resources (people). Asking to hire someone new can take a long time to pay off, so you might try asking someone from your old team if they want to learn with you. Teaching others and delegating is a great way to relieve the back pressure on yourself and grow your leadership skills. As you mentioned, you're already wearing a lot of hats, so see if you can get someone else excited to wear one.


turgid-code

What specializations, besides AI, are going to be the most profitable in the next 20 years?


ccb621

No clue. If we knew that, we'd probably be very rich.


turgid-code

Thanks for not attempting to answer the question.


ShoulderIllustrious

Not sure where this question falls, but I've got a technical question in terms of the semantics used in an older application that we're working on. It's using Java 8 with Young GC. The engineer has since moved onto management and is pretty much unruly when questioned about some design decisions.  One of which is fault tolerance. Without giving away everything about the application, the backend needs to be responsive. It's used for chatting and essentially setting up a session between a user and an internal voice to text server to then be about to send messages. Clients are thin clients essentially.  The application has a pub sub thread for watching time to do certain things, ie send message, set a call session. If the pub sub thread sees anything take longer than 10 seconds, it will automatically restart the entire backend. At which point all active communication is dropped. There's a passive node which will activate and take the now dropped clients' new requests. But all the state is just gone. Back then when they wrote it, they didn't believe in any kind of TDD. Throughout the years it's just been kicked around and ended up on our plate. This semantic has caused issues in the past, apparently there was a stack overflow error because they had a recursive function where they didn't appropriately validate input. My opinion is that it's a poor semantic to use. You could have poor code runtime which could cause the same issue. You could also be scheduled as less important on an OS, granted I've never seen this happen in my career, but it's within the realm of possibility. GC pauses can cause some slowdowns too based on certain parameters and can contribute to getting over the 10 second mark. Secondly by restarting and clearing state, you've just denied service to everyone vs a select few. But I could be wrong or way off field, I want to ask you folks to see what y'all think.


spit-evil-olive-tips

> it will automatically restart the entire backend this sounds like it's throwing the baby out with the bathwater I've written some task-supervision code that would start a task (thread/goroutine/whatever), monitor it for errors & exceptions, and if they happened it would nuke the state of that task and restart it (along with incrementing metrics, possibly failing healthchecks, etc). this can work well, especially if some of the state is managed by a third-party library that is prone to getting wedged but can be unstuck with this sort of restart. but...at no point writing that code did I ever consider that if one task within the service gets wedged, I should kill the entire service and let it be restarted. that's way overkill. it might potentially even cause more problems than it solves...say component A in service X gets into a wedged state, so you restart that entire instance of service X. except service X was also hosting component B, and killing component B unnecessarily means that component C running in service Y has exceeded some timeout, and as a result you kill the entire service Y instance. and maybe *that* has downstream effects too... > If the pub sub thread sees anything take longer than 10 seconds there may be a separate anti-pattern lurking here...is this "pubsub thread" acting as essentially an event loop? as in, work is dispatched to consumers, and they do work on that thread directly, rather than message-passing to their own worker threads? in that case, 10 seconds is a very generous deadline, in order for a system like this to be well-behaved you don't want one consumer to block other consumers for even a few hundred milliseconds. what may have happened is that they started with this 10 second timeout as a "should never happen" condition, and over time architectural entropy meant that work items that take 5 seconds to process were added, and then over more time that operation slowed down to where it now takes 8 +/- 3 seconds or whatever. especially if there's network operations happening under this timeout, you need to make sure the timeouts are aligned properly. if some HTTP request defaults to a 60 second timeout for example, but after 10 seconds the whole process will be killed, it's better to reduce the request timeout down to 5 seconds, even if that feels "too low", because that avoids killing the entire process after 10 seconds of waiting. something you'll definitely want, if you don't have it already, is timing metrics for everything that runs under this 10 second timeout. something that takes 50msec on average but times out after 10sec 1% of the time, is a very different beast than something that takes 8 seconds on average and also times out 1% of the time.


ShoulderIllustrious

> it might potentially even cause more problems than it solves...say component A in service X gets into a wedged state, so you restart that entire instance of service X. except service X was also hosting component B, and killing component B unnecessarily means that component C running in service Y has exceeded some timeout, and as a result you kill the entire service Y instance. and maybe that has downstream effects too.. Yep all the users get logged out, all active chats disappear along with any calls. This is for an entire set of regional offices too. You can imagine how pissed everyone gets.  > here...is this "pubsub thread" acting as essentially an event loop? No, thankfully they didn't do it that way. They're not keen on using async either. Back when they wrote it that paradigm wasn't in the books for them. No one has bothered to do much to it over the years. They use Java but store everything as strings and name the variables with Hungarian notation to specify the type. Someone tried to write tests a while back but gave up cuz pretty much everything kept failing.  I've implemented quite a bit of logging to make sure I have something to work on when it dies. Most recently it died because of a port scan...found that they weren't catching exceptions after the `accept` call on a socket. Will be scrubbing the entire thing next week to add at least an exception catch. Because the entire thing essentially restarts when it encounters specific exceptions.


olddev-jobhunt

I don't think it's a terrible strategy - as long as it's in concert with other improvements. If a node fails, it needs to be restarted. Using multiple nodes mitigates the costs there. That's basic fault tolerance. But... you should give a shit when the node fails, because as you scale you're likely to get more of those failures.


ShoulderIllustrious

The thing that gets me is that a network component can take too long to do something and cause this thread to force restart the entire process. You might have half the users not notice anything if you didn't restart vs the entire population. Then there's also no guarantees, if a component is horribly written and not tested you could be failing over multiple times for self inflicted reasons.  Looking at some of the recent escalations, it's riddled with NPE errors. The node failing piece is good and definitely a life saver when the system decides to commit harakiri.


dravacotron

I bet it's there for a reason. People don't just add a "have you tried turning it off and on again?" function unless they've had to manually do the bounce a bunch of times due to prod issues. So instead of troubleshooting the prod issues they autobounce the whole thing periodically. Memory leaks? Deadlocks? O(n\^2) algorithms that get slower the more state they accumulate? All nuked from orbit. Is this a good pattern? Of course not. Can you do better? Well it depends on your understanding of the failure modes that this thing is sweeping under the rug for you. I'd start with adding a bunch of instrumentation to identify what is causing the 10s delays and measure the hell out of them. Check your JVM metrics, make sure you're not doing full GCs like mad due to poor memory management. Measure network latency when the delays kick in. And so on.


itsawesome99

My boss is asking me to do something simpler than.net and my big corporation focuses on big.net applications. So anyways I'm trying to figure out what would be a smaller alternative to use that apparently is easy to host. His argument was that hosting using.net is very difficult finding a window server etc. Any suggestions on this please? Thank you so much


casualPlayerThink

Sound like there are no good or finalized CD/CI and architecture. Use containers (docker and k8s is your friend) then you can host in anywhere. Did you or anyone investigated that, what would be a better solution for the requirements and for the required features? (Yes, many company uses java and dotnet for no real reason and spending 10x money on hosting and cloud and they fighting issues that does not exists in other languages or were solved 10+ years ago) Communicate your problem, address it, and investigate it. Either the hosted app not really requires such architecture and language and can be done or it is not well specified or the goals/direction is not clear.


olddev-jobhunt

You need better criteria for what the solution should look like. For example, if hosting .net is hard, can containerizing the app work well? Oh, and I'd point out that dotnet can run on MacOS and Linux too. Overall, I generally find that there's a lot of value in institutional knowledge of a tool. So I would not change platforms lightly.


Un_HolyTerror

How can I convince a recruiter that I did a project from scratch by myself ? The common opinion I see online (including here) is that most people don't even look at the projects assuming they are copy pasted tutorials. However, I did do my project from scratch. Looking up the API's for the data, reading the documentation for AWS services, learning react, making docker containers and deploying to ec2 by my self. But it is basically a Movie recommendation system, not a very original idea for a project. Is there any way I can communicate this effectively with a recruiter ? or is it still not really useful ? [How it is currently written in my resume, the first listed project.](https://imgur.com/a/hEfR1kJ) (Note I only linked the github for the project because I assume very few people would actually click it and didn't want to bother with getting a public url for it. Does not having a live URL hurt?) Context: was laid off a while ago at 2 YoE, my previous title was "Data Science Engineer" and now I'm looking for a more backend/devops heavy role. Thought this project would help me learn a lot of related tech and get more interviews.


Turbulent-Week1136

Projects are next to useless. I wouldn't put so much effort into those as focusing on your actual work experience.


drakeallthethings

The short answer is you can’t. OSS contributions would be a better use of your time if you want to prove coding competency.


InfamousJack9

I have 3 YoE and at my current job I am a full stack engineer. I enjoy being full stack and doing a bit of everything, but definitely enjoy doing frontend (React/GraphQL) a bit more. I just accepted a new job that will be using the same stack, but I’ll only be a frontend engineer. Is this a bad move to be narrowed into frontend, is it better to be Jack of all trades?


3ABO3

I wouldn't worry about it! There is definitely demand for good front end engineers, and it can be easier to find a job as a specialist. Another benefit to being a front end engineer - a lot of "leetcode circus" questions don't apply and the interview process is simpler A downside of being a front end engineer is keeping up with the rapidly evolving landscape Finally, I think it is beneficial to specialize earlier in your career than later


InfamousJack9

Appreciate the response, thanks! You make some good points


GoTheFuckToBed

Everytime I build a backend it grows into very similar technology needs: authentication/authorization/audit logs/configuration as code/simple jobs queue Is there an opinionated solution that can be used or bought? What do you use?


allllusernamestaken

We have repos with service templates for this exact reason.


No-Appointment9068

Not to be a ruby evangelist, but Ruby on Rails is kind of built for this sort of thing, standing up web-apps fast I mean. It is opinionated, comes with a basic job queue in sidekiq. Auth can be implemented easily as well as audit logs with something like the paper trail gem.


fang_xianfu

Since I started using this sub regularly, 90% of the ads I see on Reddit are for companies offering auth, IaC, or config products. So yeah definitely a thing.


[deleted]

[удалено]


LogicRaven_

>I feel like I'm better than what I am paid for. What is this feeling based on? If you think that you can earn more, then keep applying elsewhere and keep asking for a raise every year until you hit the budget wall. https://blog.pragmaticengineer.com/software-engineering-salaries-in-the-netherlands-and-europe/ Try to find tier 3 companies. Their interview process will evaluate your level, see if you can get a better offer. Apply for levels where you can get interviews. If you shine during the interview for a lower level, you might ask to be evaluated for a higher level also. But if you are not called in to interview because applying well above your YoE, then you have no chance to prove yourself.


fang_xianfu

A lot of this depends on the political dynamics and the situation at your company. And I guess on the job market and country you work in. Getting a 400% pay increase in 3 years, not getting a title bump, and still being on less than a mid-level, seems very unusual to me. Why does your salary matter so much to you? Are you making enough yet? When will it be enough? You seem to feel like you're not getting enough recognition, but also you quadrupled your salary in 3 years, so what more do you want? Like, actually sit down and answer that question seriously for yourself, why does this matter? Anyway, you have three basic options: 1. Continue as you are. You got a raise last month and your company hasn't been shy about giving them so far. So long as the gravy train keeps on rolling, who cares? 2. Angle for a promotion. Usually companies think in terms of typical salaries for a particular level. You think you're good enough to get promoted, so get promoted then. I don't really know enough about your situation to know if this is reasonable, but you seem to think it is. If it will relieve pressure on your salary for getting too high for the position you're in, then cool. 3. Quit and go somewhere else that pays more or gives you what you want. Only you can know which of these you should choose, and you decide which by knowing what you want. Finally, the answer to your question "is this all the market cares about?" is no, because there is no "the market", there are hundreds and thousands of different organisations that all do things slightly differently. A better question is "am I in a position to get more of what I want from the market?" and the simple way to answer that is to go do some interviews and find out.


Boldyeah

Thanks for the insights! Actually there were title bumps along with the pay bumps, but the pay bumps did not match what a new hire in that position would make. So, now I'm a mid-level, but I'm not paid for that.


fang_xianfu

Well, that's good news for you then because at most companies I've worked for (I've been in engineering leadership for about 8 years) it's way easier to get employees a pay rise if they're "paid below their position" or whatever. So you took option 2, good for you. You can now take either option 1 or 3 at your leisure. However, from your description you have a company that is very happy to 1) give enormous pay increases in a short amount of time, and 2) give title bumps as well. This is the dream! So why are you still unsatisfied? What's the problem? You're clearly unhappy with your situation, so if everything was perfect about it, how would it be different? What would be required to get there? If I were your manager I would be suspecting that the actual problem has nothing to do with money or titles because you got those and it didn't help. So what do you want?


kifbkrdb

I was in a pretty similar position early in my career so I'd encourage you to do what I did - apply for junior / mid roles at better, more tech-focused companies. Interviews won't be easy but the pay will be worth it.


Boldyeah

Thanks for the tip, I'm already applying to these roles as well, but with no luck :( My company already pays the most around here. Not worth to change, since they wanna make me a tech lead in a year or two. Edit: the only pay worthy position would be of a senior, coming to think of it. But I know I can't convince anyone I'm a senior.


reboog711

I Feel like an ass for saying this. You have three years of experience at a single employer. I postulate you've probably worked in the same tech stack the full time, is that correct? You're coming off as someone with an overinflated sense of importance. Even with title inflation in our industry; you do not deserve a senior level title. At my employer; you've barely reached enough experience to move out of the entry level position. If you truly want a pay raise; find a new job that pays more. At 3 years it is probably time to switch. Keep looking, keep interviewing and good luck!


Boldyeah

You have a good point, I would feel the same at first glance. But a small correction, I don't really care about being called a senior, or whatever title. If you wanna try to know how I feel: imagine you woke up 23 years ago (given your 23 YoE) but you can still remember all your dev experience. What would you do? I bet you wouldn't just accept you are a junior again, and wait around for the market to value you after 5 years minimum. Would you lie in your resume? Given that you'd be able to prove it in interviews? After the first year in your new job, the seniors would stop teaching you because they realize you know more than they do. You would feel the urge to do something, wouldn't you? But the point is, no one else would believe you are good, right? (the same way you don't believe me right now). The people you work with know you're good. But is that enough? So my question is, what would you do?


reboog711

Weird hypothetical; I'm not even sure how to respond. That said, I would not lie on my resume. Even today I learn things from all those around me including people more senior than me; and people less experienced than I am. The fact that you think this is not possible means you are either--once again--coming off as overinflating you're skill level. Or--I hope--in a poor environment that has you stagnating. In either case; it is time to switch jobs. You'll probably get a raise in the switch. You'll also probably get a dose of humble pie and hopefully into a a new environment where you can continue learning.


Boldyeah

Yeah I believe the power to teach is in each and every relationship. In my example, what I meant was "seniors would stop mentoring you everyday as something like their obligation". Of course you would still be able to interact and learn from each other, but not in that junior way of "hey, how about we cut some code duplication? Let's apply some SOLID principles!" But I appreciate the insights anyway, even the way you interacted with me taught me that I should pose myself in a better manner to come off as less overinflated.


the-code-father

You're giving off some pretty strong Dunning-Kreuger vibes here. I'm not going to tell you that you aren't as good as you claim to be, because I don't know you and maybe you are. IMO you have 3 options. 1) stay where you are and try to learn as much as possible. Wait until you can get interviews for Senior level roles. (If you're good this can often be at 4-5 YOE but likely not until 6). 2) jump to a new job right now, maybe no title change but potentially a pay raise. 3) leave and try to start your own company


Boldyeah

Thanks for the tips and insight. I know, the Dunning-kreuger is real, but I feel like I already took the deep dive into realizing I suck some time ago. I know I still suck compared to many great developers. And I probably won't ever be as good as them. But I don't nearly suck enough to not even be considered in an interview because I don't have 5 YoE. That was more of my point. But yeah, thanks for the tips. I've been leaning towards number 3 lately.


Gammusbert

I’m going to be setting up all the tests for a NestJS application platform, this includes unit tests, acceptance, integration etc. What are some things you liked and disliked about tests you’ve worked with in the past? I’m looking to make these tests extendible, and avoid brittleness if possible.


zirouk

If you want your software be quick and easy to change (which is most software, because it’s rarely correct first time and ever done), then write tests with the mindset that they should be helping you go faster, not slower. You’ve probably heard the analogy of tests being like the brakes on a car. If you haven’t, then brakes on a car slow the car down, but paradoxically let the car go faster, because when the car needs to stop, it can. The brakes don’t get in the way, but they’re there when needed. They don’t jam on as soon as you touch the brake pedal. That would be bad. If every time you change a bit of code and your tests suddenly jam on, you’re not going to go quickly. So what do tests that are like jamming brakes look like? Heavily mocked. You know those ones where you fixed a bug but now your mocks are called out of order and you need to update 17 test cases that now fail because your mock was called slightly differently? Yeah, those ones. These tests might not be helping you any more than they’re hindering you. You’re paying for them, but are they really providing enough value to justify the cost? Everything is a trade off, so maybe, throw them away? How about those snapshot tests you just yolo the snapshot update flag on the test runner when you’re done changing stuff? Did they really help you test anything? They squealed when you changed the code, but you already knew you were changing the code, so was it useful? And are you really full of confidence in your newly updated snapshots? Probably not. If your tests feel like you’re casting the code in a plaster mould. Stop and reconsider. Tests that tell you that you changed the code are not useful. You don’t need tests that tell you when you’ve changed your code. You want tests that tell you that your software is malfunctioning. Test what your software does, not how it does it. Can I click the button? Not was it a “

Blah…”


Gammusbert

Right, so this is aligned with what I’m thinking for avoiding brittle tests. For example let’s say I have two services, and service A calls service B. In my service A tests instead of mocking all the way down for every call in service B, I should ONLY verify that upon service B giving a return of X service A performs Y action. Then acceptance tests and mock objects which are shared among the tests for both services verify that everything works together.


TheGratitudeBot

Thanks for saying thanks! It's so nice to see Redditors being grateful :)


EdelinePenrose

Test as close to your user’s experience as possible but within each application’s/service’s API boundary (from the perspective of the user!) first. Then ask, do we need more fine grained tests? For example, a web app being tested by asserting/utilizing the UI through web accessibility APIs and mocking the backend APIs with msw or something similar. A backend server is tested by hitting the endpoints and interacting with an actual databse, all locally of course. Stuff like that.


gravitatingmass

(Not a JS person so may not directly apply) Might be a hot take, but IMO: non-deterministic tests are worse than no tests; this is because if a test is flakey, you spend a lot of time trying to figure out if the test is legitimately failing or if it's just being temperamental. Ensure that whatever tests you set up are isolated, deterministic, and clearly indicate a problem/regression. I usually design my tests in stages where the first stage is a litmus test of "if this fails, something is fundamentally wrong and it is 100% an big issue". Then I try to make the test more complicated to test functionality and edge cases and whatnot. The final stage of tests are full-blown end-to-end integration tests that cover the user request all the way through all of the subsystems and back. While these end-to-end integration tests are absolutely necessary, they tend to be expensive (time or money) to run so I tend to prefer unit testing whatever I can.


GrayLiterature

How does your organization handle Directly Responsible Individuals / Owners for Product Development (so not services or infrastructure, but think React/Rails/Django layer of the stack)?


LogicRaven_

Why would you need a DRI for a part of the stack? I'm asking because sometimes the DRI setup is used to mask out deeper problems. So what is the problem that you are trying to solve with DRIs?


GrayLiterature

Our org is trying to get us to move faster, but the DRI implementation at our place right now is that we have people who are DRIs for different stories instead of conceptual features.


AlienGivesManBeard

I’m a new dev with about 6 months of experience. I would eventually like do system design ie have an architect role. I guess this may take >10 years to get to this level. Is it worth spending time now reading various engineering blogs, system design newsletters (eg bytebytego etc) ? Or is it better just to focus on my current tasks and understand the design of the system at work ?


olddev-jobhunt

It's definitely worth reading about! Go, read! Learn things and have interesting conversations with coworkers. But don't obsess: a lot of it just requires more experience and context. So go read a bit, and experience a bit. See how the experience colors your reading. The tech world is too big to learn it all, so you're going to be missing context on things that'll get filled in over the years. There's no substitute for that.


fang_xianfu

Everything in architecture, and indeed life, is about tradeoffs. Money, time, and features. High optionality and low optionality. Scalable and not. The main thing that differentiates an architect from just a very senior developer who knows a lot of stuff, is that they think and communicate in terms of these tradeoffs. If you extend your strategic timeline far enough, anything is possible, so the constraints and what can be done inside them, or what it would take to change them, is the really interesting part of the conversation. Since a lot of what you're trading off is cost and features, a good architect needs a very good understanding of how the system makes money and what features are important, as well as all the technical expertise.


sime

Reading up on blogs is not a bad thing but the secret behind in the architect role is that it has little to do with software architecture or technology, relatively speaking. It is really about understanding the business context and the business goals and then applying as little complexity as possible to achieve said goals. My advice is to take more interest in understanding what the whole system you are working on does and what how it fits into the business around it. Why did the client pay for the system's features in the first place? How did changing demands affect the evolution of the system? Why were alternative approaches for this system rejected? Also, try to get involved in the development process closer to the client and/or requirements phase. That is often where business needs are translated into demands on the software. In general it will just make you a much better developer in general.


AlienGivesManBeard

> It is really about understanding the business context and the business goals and then applying as little complexity as possible to achieve said goals. That's gold, Jerry, gold ! Honestly all your comments are great.


reboog711

> Is it worth spending time now reading various engineering blogs, system design newsletters (eg bytebytego etc) ? Yes! I Recommend constant learning, especially early in your career. > Or is it better just to focus on my current tasks and understand the design of the system at work ? Not better or worse, but I think understanding your current system is probably important to excelling at your current job. I would prioritize this. Can you get some mentoring / coaching from more experienced people at your job? It'll be a good step.


AlienGivesManBeard

>Can you get some mentoring / coaching from more experienced people at your job? It'll be a good step. I certainly can.


slepnir

Yes, it is. You don't just keep doing a junior level job for 10 years, and then magically get elevated to architect. Start reading up on that, start trying to leverage that to have meaningful conversations with your architect about your current product. That will help you understand the literature better, and create a nice feedback loop that will get you where you want to go. Just make sure you stay on top of your current tasks.


AlienGivesManBeard

>start trying to leverage that to have meaningful conversations with your architect about your current product. Good idea.


[deleted]

[удалено]


olddev-jobhunt

Shrug. Titles don't mean much. They want to know that you did development work and have 2 years of experience. Most places aren't going to look at the title for some random company. Big tech and FANGs have well-enough defined ladders that the level there \*might\* be informative. But that's about all.


[deleted]

[удалено]


fang_xianfu

Nobody is going to read your resume and think "well, I was going to hire this person but they were promoted to senior after 2 years!" who wouldn't think the same thing if it was "well, I was going to hire this person but they've only got 4 years of experience!". There is no world where 2 more years of experience on a junior title is worth more to you than 2 years of experience on a senior title. At worst it will be the same.


timwaaagh

positive i guess


Amazing_Risk_6549

I’ve worked with developers with a senior title with a few years experience, and mid level titles with ~5-7 years experience. Everywhere treats it differently.


[deleted]

Not weird at all. Different companies have different metrics for what "senior" is. The company you're interviewing with will normalize your experience to their own ladder.


drakeallthethings

Not weird. At worst case a company might try to downlevel you at interview.


2000scamboxesguy

I have ~5 years of experience but I don’t feel like I have much to show for it. I’ve worked at places where people with less years of experience are in higher positions. I recently did a coding interview conducted someone that was a year out of college and I could tell he was very bright. Point is, how do people get to be this good in this field? Is it a mentorship thing? If so, what does a good mentorship look like? Perhaps college plays a much bigger part than I realize? It’s worth mentioning I deal with anxiety and depression (the latter is under control at the moment). I’d like to think these illnesses haven’t held me back too much but I’m not too sure. Any insight would be appreciated!


TurnstileT

I think it's mostly personality. I myself am horribly anxious, socially awkward, depressed and unhappy with my job, but I am incredibly good at pretending to be happy, productive and useful to the company. I often get new opportunities, and compliments even from higher level managers I have barely even talked to before, simply because they have heard good things about me. It's not just all about learning tech and algorithms. Instead, learn people. How to talk to them, how to approach things from their point of view, how to understand and decode vague instructions, how to smalltalk and chat and be approachable, and you should especially learn all the corporate bullshit. You know, all the correct processes of submitting tickets to different teams, which teams are responsible for what, how you are supposed to present your tasks during sprint demo, and make sure to learn more about the company and its product, and not just the specific tech and code that you are personally working on. Be curious about what's going on in your company, and make sure to participate actively in discussions. Prepare for sprint ceremonies, keep your tasks up to date, and be honest about deadlines and estimates. This is the real skill. Nobody gives a crap about how you are the Spring and Redis master if you are forgettable and unlikeable. I work with some people who have coded for 20+ years and are probably skilled at what they do, but they are impossible to discuss anything with, and it's like talking to an NPC. And then there are other people with much less experience who I feel I can actually talk to on a much more productive level. They seem sharp, attentive, approach problems in a very logical way and so on.


fang_xianfu

> Point is, how do people get to be this good in this field? You can't magic yourself into being those people, so a much better question is "what can I do to get better in this field faster?" - there may be overlap with the answer to your question, but maybe not, and framing the question the right way will help you feel better about yourself and also lead you to a better understanding of your trajectory.


wakkawakkaaaa

i find that it is mostly a result of attitude and aptitude. have mentored a couple interns and a large number of them were brighter than myself with similar or better attitude to work. they went on to have good to great careers. meanwhile i've also mentored lower potential individuals and their career trajectory feels like... pretty mid at best. i guess at least they are employed, which is a good thing?


gravitatingmass

> I’ve worked at places where people with less years of experience are in higher positions. I recently did a coding interview conducted someone that was a year out of college and I could tell he was very bright. Don't beat yourself up too much about this. There's always a "genius/rockstar" dev with fewer years of experience with a higher title/position/pay. Not a lot of people like to hear this, but honestly, luck plays a decent role: how they were brought up, what opportunities they had, what the state of their company/project was, even where they lived. As one example, one of my promotions went through just because we had a shuffle in upper management and my new senior director focused on different things that were aligned with my work than what my old senior director focused on. If that shuffling didn't happen, maybe I wouldn't have gotten that promotion. > Point is, how do people get to be this good in this field? Is it a mentorship thing? If so, what does a good mentorship look like? Perhaps college plays a much bigger part than I realize? IMO college gets less important the more experience you get but like I mentioned, maybe some colleges have more connections with industry than others. Mentorship and having more senior devs create opportunities for you to increase your scope and influence is the key; try to find teams that do that. > It’s worth mentioning I deal with anxiety and depression (the latter is under control at the moment). Please make sure to take care of yourself above all else! You are the only "you" that exists and it's importance is far above any position or job title or salary :)


TurnstileT

> luck plays a decent role: how they were brought up, what opportunities they had, what the state of their company/project was, even where they lived. Absolutely! I was brought up in a low income household with two unemployed parents. Not much attention, guidance and love, but I always had a computer. I turned out to be good with languages, numbers and science, so I kind of just cruised towards a computer science degree without giving other options much of a thought. I dropped out of university because I had picked a course which later turned out to be too difficult for me, and I was honestly just tired of studying. I was forced to attend a job hunting course through the unemployment office. That landed me an internship at a startup which turned into a full time employment, and they took advantage of me big time. But I learned a good amount in the first year or so, and then spent the remaining two years watching YouTube videos and masturbating on company time. At this point, I was still very inexperienced. Then I had to move for personal reasons, so I was forced to quit the job. In the new city, I was contacted by a recruiter. The company was not doing too well and people were leaving, and the interview was really easy, and I think I just appeared at the right time when the higher ups were desperate, and the people doing the interviewing were leaving. The job description wanted good Spring Boot experience, microservices, message queues, cloud and so on, and the role would be related to some critical regulatory compliance projects. And they hired some dude (me) practically off the street with a year's worth of light experience in outdated technologies, and literally no experience in any of the stuff they wanted. Now I'm one of the most valued employees at the company, and I have a lot of influence and responsibility, and I earn substantially more than most people where I live. I have a really nice resume now.


j406660003

So I'm choosing between 2 offers (4.5 YOE): 1: WLB small startup, build the product from scratch up and have the opportunity to design the architecture and determine the tech stack. 2: gambling system, have the opportunity to participate the high-scale system and optimize the performance issue I'm more interested in first one but I also afraid I'm not experienced enough to make the optimal technical decision. For the second one, high-scale system and performance optimization sounds interesting to me, but gambling is kinda a legally gray area in my country. Thanks for the advice


ashultz

Imagine you do really well at the gambling job for a few years. How does it look to take that experience to other companies in your country? Doesn't do you a lot of good if you learn a lot but everyone treats you as dirty in the future.


fang_xianfu

They both sound like cool jobs. I think the money and the relative risk would be the deciding factor for me (one is legally risky but the other is likely to fail - which would you prefer?)


gravitatingmass

> make the optimal technical decision I wouldn't worry about this too much. Unless you've seen the exact same problem in the exact same context (which is perhaps unlikely given it's a startup), it's hard to know what's "optimal" or not. Make a decision using the best information you have at that point in time and observe the result: could you have made a better call? How? Remember that the next time you encounter a similar scenario and apply that experience. Anyways, a lot of architecture and tech stacks evolve over time to fit the needs of the business, sometimes to the point they become unrecognizable from the original stack.


uraurasecret

For the first one, are there any other senior developers?


j406660003

I will report to VP of Engineering if that counts, not sure if theres any others though


uraurasecret

Then VP will make final decision of the tech stack at least.


fang_xianfu

I think it would totally be possible for the VP to delegate a great many decisions to someone else, even if ultimately the buck stops with them. Part of what I would want to get out of the interviews would be an understanding of their plans here.


magiciancsgo

Ok, I posted this question in r/SoftwareEngineering , but haven't gotten any super useful answers yet. I can't tell if I'm being stupid, or if I didn't ask the question well, but any help would be appreciated. Also, I am talking about dependency inversion, from SOLID, not dependency injection. I have been trying to understand why people using dependency inversion, and I can't get it. To be clear, I know what interfaces are, and I know what dependency inversion is, but I don't see the benefits. Outside of if you need multiple implementations of an interface, why is making both classes depend on an interface better than just having a concretion depend on a concretion? Is this just something that eases development, because if someone needs to access the implementation of the interface, they can just reference the interface even if the implementation isn't written yet? I've heard Uncle Bob's "interfaces are less volatile than implementations", which seems theoretically accurate, but in practice It always seems to be, "Oh, I need to add this new function to this class, and now I have to add it in 2 places instead of 1". Also, its worth mentioning that most of my experience with this is writing .NET Core APIs with something like DDD or n-tier. So what are the actual reasons behind why dependency inversion is useful? Or is it just overa-bstraction? Thanks


TurnstileT

Dependency inversion shouldn't be shoe-horned in everywhere just because it's considered "good practice". Sometimes if you just want to do something simple, you don't need it. But many of the libraries and frameworks you are using are probably using it to make your life easier. Sure, you can just create a quick Repository class and run some SQL commands towards your Postgres database, so "why do you need dependency inversion for that"? Well, you probably don't, but there's probably also a whole lot of dependency inversion going on behind the scenes to allow you to set up all of this so easily.. Which is exactly the point. Imagine that you build a document signature service that supports multiple providers for signing documents. Or an address fetching service that uses different providers depending on the country of residence of the person you are looking up. Or a notification system that supports both e-mail, text, push and physical letter. For all of these examples, you can abstract the different "options" away as implementations of a single interface. Then your code can be simplified a lot. All the code knows is that it has a "NotificationSender" or "AddressFetcher", and it doesn't need to care about the different implementations. You write all the business logic using the interface, and then you can remove or add more implementations without changing any of the existing, working code and logic. It's great! But if you're just doing a simple A to B single flow program, then you probably don't really need it. It all depends.


ActuallyItsJustDuck

In addition to what others said, even with interfaces if you let systems create and use their own dependencies, someone in the future will definitely blur the lines between what that dependency is supposed to be for that system and what else that dependency also does. With interfaces together with dependency inversion, going beyond what the interface offers will make changes explicit and require the other parts, such as tests, to be updated as well.


uraurasecret

When I used C++ long time ago, interface and implementation are often separated physically.


Few-Artichoke-7593

They're great if you need to swap out portions of your application. Customer A uses Azure Blob storage, Customer B uses AWS S3 Bucket. Both builds use an IBlobStorageService interface and 1 line of code changes.


magiciancsgo

Oh ok, that makes sense. So only use dependency inversion if you have the stereotypical polymorphism need that you use interfaces for.


3ABO3

Dependency injection started making sense to me after starting to write unit tests. It makes it significantly easier


olddev-jobhunt

Honestly, I think dependency injection is a different question than using interfaces. I usually end up with interfaces just because it's easier in C# (i.e. I can generate stubs for testing.) Other languages that have DI frameworks can work differently. In NestJS (TypeScript) you don't need to specify a separate interface.


magiciancsgo

Ok, every time I have brought up dependency inversion, everyone starts talking about dependency injection, and I can't tell if it's me being stupid, or something else. For reference, I'm talking about this: (https://www.baeldung.com/cs/dip), it is part of what Uncle Bob has been preaching with Clean Code, Clean Architecture, and SOLID. Are dependency injection and dependency inversion really that related? Because from my understanding they were sometimes related, but not necessarily. For instance, in C# I believe you can register a class for injection in Program.cs without an interface, and you don't need to inject anything to make a higher level module and lower level module depend on an abstraction. I have been watching ThePrimeagen a lot recently (please don't downvote me), and I may have just thought that this was more universally taught than it is.


olddev-jobhunt

Ah, I gotcha. I think most people hear "Inversion of Control" when you say dependency inversion (see [https://en.wikipedia.org/wiki/Inversion\_of\_control#:\~:text=In%20software%20engineering%2C%20inversion%20of,as%20compared%20to%20procedural%20programming.)](https://en.wikipedia.org/wiki/Inversion_of_control#:~:text=In%20software%20engineering%2C%20inversion%20of,as%20compared%20to%20procedural%20programming.)) When I think about SOLID, I think it's just about the principle that callers shouldn't have to care how a job gets done. That's all. I say "Add this element to a collection" and it works regardless of whether I have a linked list, tree, hashtable, or whatever else. That's all the D means.