583 karma · joined November 5, 2020
Front end architecture seldom is oriented around making efficient queries. My last slot that used it as glorified REST and didn't shrink the number of queries to the backend. It does make more sense if you have a variety of consumers of the data, but meh, after my experience I still wouldn't use GQL.
Higher complexity in the backend. Our GQL backend was schema stitched together microservices. Highly complex, random services would bring the whole thing down, and it was not understood why. The schema stitching happened on every request and seemed very "heavy and slow" to me. Not all of that was the fault of GQL, but, it definitely provided more room to mess things up.
Caching nightmare. Heavier client library. And on and on. Grass is not greener IMHO.
Moved to using low power thin clients on liquidation for similar pricing, and it's all been a breeze. I get real disk IO. I get a real wireless card which runs an AP night and day better. I get a real USB power budget with a much more trustworthy OEM power supply. Power profile and size is about double, but it's a very worthwhile trade. I like the 1L system profiles and lean to the HPs.
I don't mind ARM in the cloud, but at home I just want real hardware.
I've worked on plenty of monoliths with async style code and have found the stack traces to be plenty helpful. It's never been an issue. At least in JavaScript you retain all relevant scoped data and can dump it all if you like. Debugging gets much more interesting when there are no obvious such errors, yet error conditions are present.
I'm still not seeing any equivalent microservice tooling.
How do I do a similar stack trace in microservices to understand the path that led to this state? I've used microservices at a couple of companies and their methods were effectively, look at the request id and trace it through this mass of log files for each microservice we are running. It was terrible and could take hours to compile the same information.
What tooling exists to solve this problem with microservices? Genuinely want to know.
Deadlines are creative fiction. It's nice to hit them, but they are almost always management tools to extract work from engineers. Only sometimes are they intimately connected to actual business needs. Don't get me wrong, they can be a helpful tool, but equally they can be harmful.
Scoping and requirement changes are program management issues. It's useful to push back on obviously bad requirements and scoping. But this requires understanding of the business space and what likely is good and what isn't for the end user. Sometimes you can save program management blunders with the right questions and friction to the desired feature set. But this is more the in the realm of experienced devs correcting management issues (an invaluable skill). Customers certainly can change their minds, and it's often appropriate when figuring what the real needs are. But it does cost additional schedule and money to pivot. Sometimes significant amounts of both when fundamental assumptions are changed. This should be understood by management or they are not doing their jobs.
You experienced some common management issues. Your boss was expressing his frustration to you and that may or may not reflect on you down the line. A lot of people don't own up to or recognize failings.
Engineering issues also can happen, but that typically involves failure to build the thing to spec. Also can involve over engineering or under engineering given the communicated business needs. This happens plenty too.
Unless you're just lazy and not working, that's when delivery time is your fault.
Good management of engineering projects is pretty rare. In twenty years I have only experienced it a couple of times.
As for what you can do, ask your direct manager questions like "I really liked working on this project, how can I be successful here?". This helps align your interests with his and communicate your willingness to pitch in/contribute.
If I'm building a system with an intended life span of >=5 years I would avoid a no code platform.
If I'm doing a one off proof of concept test app, it's on the table.
Don't have a bare metal machine, just some modest sized virtual machines with 2 cores each.
They have been stable.
Sure, big warnings about data loss/services down in the event of zeroing out your credits.
Having such a safety net would really help the thousands of people who sign up for transient reasons. I don't recommend a noob set up an AWS account. I also don't let my kids play on the freeway.
I'm done.
Now, a containerization service like Fargate would fit his use case better since he is using containers.
However, cloud services come with their own complexities and the principle problem they solve (horizontal scaling) doesn't apply to his sites.
Scales wonderfully.
Scaling backend data structures is a difficulty itself and potentially different for every problem.
This is probably the most reasonable risk mitigation you can fairly easily do.
I don't think there exists a vendor that's going to be foolproof. Most users aren't going to any have issues with any of the major providers, including DO, Linode, Vultr, Oracle, AWS, Azure, etc...
Other packages and databases have brought me pain to use on arm. And anywhere I encounter pain I just don't migrate.
Deescalation is a skill that requires understanding human nature, displays of understanding and empathy, and is most frequently done through talking. But also in patience and not forcing issues at times and places likely to result in a violent confrontation.
It is completely reasonable to make them keep in mind all the potential and direct effects of their actions.
I think it would be beneficial for them to find alternative ways of catching a bad guy than busting down doors. It's a completely unnecessary escalation far more often than not.
I looked extensively at various frameworks to see which would make me most productive in starting projects from scratch in my limited development time and this is the one I settled on.
For me, front end is the biggest time sink, so I wanted one that had the best coverage there. Full components suites debugged and working, etc. It really helps that it can target SPA, PWA, mobile (capacitor) as well as SSR.
> What discrepancies did you notice? It depends on the target platform which JS engine is used. Sometimes the debugging platform shares the same engine.
Exactly what I said, there would be some code that would run differently in the two environments. I know more now than I did then, but I believe the example was specifically on iOS the app was using JavaScriptCore and the desktop dev tools was using v8.
> I'm not sure I understand, could you provide an example?
> Strange, you're able to catch and debug both JS and native crashes currently. I'm not aware of a past limitation but I could be wrong.
Best as I recall, there was a semi-frequent bug that happened down in our logging system. When it blew up we got a native stack trace instead of JS. My best guess is some kind of handshaking problem between the two layers. Neither used code we wrote and maintained.
Because the whole thing happened inside our error reporting engine, it wouldn't end up in our logs other than a high level apparent failure. It was a mess, and we had limited native experience on the team when it happened. We hired a dev with more native experience, but we still didn't ever figure it out while I was there.
The tool chain always felt like it was a hacked together early beta. To complicate our experience our internal APIs were a mess and unreliable and our React Native codebase wasn't dramatically better. Between our internal problems and all the idiosyncrasies and unintuitive issues in the tool chain it was really miserable.
It wasn't unusual for everyone on the team to spend more than a day simply trying to get the app running again after an update, that is after a dev had completed a 1 to 2 week migration required after the update.
But every update was a large effort in bringing the app back into compliance with the new changes. The debugging platform used a different interpreter than in app resulting in things that worked in the debugger but not in production. Odd bugs at boundary layers nobody could (easily) decipher. The inability to even catch or do anything with some crashes.
It was the worst experience I ever had with a development tool chain in my entire career.
Seems to me that it's a very bad idea to disrespect in ways that actively make your own life less safe. Especially on something as fragile as a bicycle. Regardless of the disrespect heaped your way.
I don't blame them for trying to salvage/use something from what exists, I've been there. I found the behavior of ignoring established traffic law as if it were optional to be dangerous and selfish.