Join 50.000+ Developers
Learn Web Development
Learn JavaScript
Access Tutorials, eBooks and Courses
Personal Development as a Software Engineer
Subscribe View our Privacy Policy.Join 50.000+ Developers
Learn Web Development
Learn JavaScript
Access Tutorials, eBooks and Courses
Personal Development as a Software Engineer
Subscribe View our Privacy Policy.Pretty interesting trickery here, encoding a secret message in an emoji that you automatically get when you copy/paste it from Paul Butler.
Most unicode characters do not have variations associated with them. Since unicode is an evolving standard and aims to be future-compatible, variation selectors are supposed to be preserved during transformations, even if their meaning is not known by the code handling them. So the codepoint
U+0067
(“g”) followed byU+FE01
(VS-2) renders as a lowercase “g”, exactly the same asU+0067
alone. But if you copy and paste it, the variation selector will tag along with it.
So you slap on a bunch of “variations” to a character that doesn’t support them (the secret message) and then pluck them off if you happen to know they are there. Sneaky sneaky.
Being mindful of timelines. Let’s concentrate on the initial scope.
I’m unable to add value to this meeting but I would be happy to review the minutes.
As per my prediction, this outcome does not come as a surprise.
Are we confident that this is the best solution or are we still exploring alternatives?
As Indicated prior
The information has not changed since the last time it was communicated.
Are you able to provide some clarity around the other questions previously asked?
Reattaching my email to provide further clarity
I’ll provide an update when I have one
You have not heard from me because further information is not available at this time, once I have an update I’ll be sure to loop you in.
I am currently tied up with something but I will connect with you once I am free.
It is my understanding that you are the appropriate person to contact in regards to this. But if there’s is someone better equipped for this let me know.
This falls outside of my responsibilities but I would be happy to connect you with someone who can help.
I’m not the correct person to assist with this but I am happy to connect you with <insert name> who will be able to help
As my workload is quite heavy, can you help me understand what I should reprioritize to accommodate this new task?
If there’s a better way to get in contact with you please let me know as I am hoping to have this resolved as soon as possible.
I recommend directing this issue to <Name> as they have the proper expertise to best assist you
I have included my initial email below which contains all of the details you are looking for.
Can you help me better understand what exactly is it that you require on my end?
I am confident in my ability to complete this project and will be sure to reach out, if or when I require your input.
It is important that we have this completed in order to meet our targeted deadlines which are quickly approaching.
Thank you for your input. I’ll keep that in mind as I move forward with decisions that fall within my responsibilities.
There seems to be a disconnect here as this information has already been provided.
I do not have the capacity to take this on in addition to my own workload but I’m happy to support where it makes sense.
Being respectful of everyone’s time let’s discuss this through email until we have a more defined agenda.
Being respectful of everyone’s time, can we communicate about this via email moving forward?
It is great to see my ideas being exposed to a wider audience and I would have appreciated the opportunity to have been included in the delivery.
The internet is a great resource for these types of questions and I am available to clarify elements that you are not able to find online.
We seem to have a different understanding on this. Can you elaborate further on your thought process here?
This falls out of my job description but if the opportunity for a role expansion becomes available I would be happy to discuss reworking my contract to better align with these new responsibilities.
Thank you for your patience,
Please let me know when further details become available as I require more information to successfully complete this task.
If you need to contact me, please note that my working hours being at 8 am and 6 pm. Communications received prior to this won’t be seen.
I previously sent you an email regarding that but please let me know if something went wrong in transit.
I will defer to your judgment on this as I am not passionate either way and I trust your expertise.
I did previously note that this was a likely outcome. How do you plan to resolve this?
I am not able to offer you additional support in completing your workload.
I encourage you to brainstorm possible solutions prior to looping me in for additional support.
Please let me know when your deliverables have been completed.
If further edits are required, I have attached a version of the document that you can apply your edits directly into.
It is my understanding that this is your responsibility. If that is not the case please let me know.
I do not feel as though I am able to add any value to this conversation. Please remove me from this thread and feel free to loop me back in in the future should my involvement be required.
In order to successfully complete this I will need further details on what is required.
With my role expanding is there a plan to review my title and compensation to better reflect these additional responsibilities?
As my role has organically evolved, can we schedule time to review my overall compensation and discuss whether or not it is still aligned with my current role and responsibilities?
Will these tasks be part of my job long-term? If so, is there an opportunity to reevaluate my job description, title, and overall compensation to more accurately reflect these additional responsibilities?
Can you walk me through your thinking on these timelines? I have some hesitations with the dates shared.
Is training available in order for me to successfully complete this?
My calendar is currently heavily scheduled with meetings. To ensure appropriate time is available to get this done I can sit out of lower priority meetings this week or extend the deadline on this project. Please let me know which is preferred?
Is there a higher priority task that is consuming all of your capacity at the moment?
I am unable to take that on at the moment as my current workload is quite heavy. Is there someone else who can assist with this?
Though I appreciate your attention to this, I feel as though I could be more productive if I had an opportunity to work independently here.
Are additional team members being added to take on these roles or will I be expected to absorb these responsibilities? If the latter, I would be happy to set up some time to discuss appropriate compensation for this role expansion
Have you connected with <manager name> in regards to me taking this on? As it has not been communicated to me that I’ll be working on this.
As you seem to have a very clear vision for the execution of this, I encourage you to take the lead here and I’m happy to support you where necessary.
Would you be open to replacing our frequent communications with a monthly touch base where we can discuss all updates during that time?
I’m unable to attend after working hours.
Are there resources and boundaries in place to support the physical and mental health of employees?
Can you share what the overall compensation looks like for this role?
Is there an opportunity for growth within the company and if so what is the main metric for promotion?
Is it common within the company for employees to exceed 40 working hours per week?
How involved is the reporting manager with this role?
What is the expectation for being available outside of working hours?
I’m not confident that the information you have provided is correct.
Being respectful of time let’s regroup when more details become available.
Given my contributions to the company’s success along with a current market analysis of my role. I am setting up time to discuss a salary review.
I encourage you to reevaluate the way you are speaking to me, as the disrespect you are currently displaying towards me is not welcomed nor will it be tolerated.
I am not in agreement with this idea and have hesitations moving forward.
My productivity is being impacted by the overwhelming workload I am currently assigned. Is there any support you or the team can offer?
There is a notable discrepancy between my current salary and the going market rate for the comparable roles.
As my role has expanded since joining the company, I would like to review my compensation so that it better reflects my evolved responsibilities.
I was hoping to be in the X to Y salary range for this position.
I understand there are budget restrictions that limit your ability to increase my salary. However, I would like to understand if additional vacation days, benefits, bonus, and other overall compensation items can be offered.
In the future it is important to share information like this with the team sooner so we might mitigate these sort of issues.
I failed to find any knowledge keeper for this.
I cannot assist. However, I am confident in your ability to find a solution here.
This task has to be prioritized, and I encourage you to take the lead on it.
If the dimensions of the ::view-transition-group(*)
don’t change between the old and new snapshot, you can optimize its keyframes so that the pseudo-element animates on the compositor.
~
🌟 This post is about View Transitions. If you are not familiar with the basics of it, check out this 30-min talk of mine to get up to speed.
~
With View Transitions, the ::view-transition-group()
pseudos are the ones that move around on the screen and whose dimensions get adjusted as part of the View Transition. You can see this in the following visualization when hovering the browser window:
See the Pen
View Transition Pseudos Visualized (2) by Bramus (@bramus)
on CodePen.
The keyframes to achieve this animation are automatically generated by the browser, as detailed in step 3.9.5 of the setup transition pseudo-elements algorithm.
Set capturedElement’s group keyframes to a new CSSKeyframesRule representing the following CSS, and append it to document’s dynamic view transition style sheet:
@keyframes -ua-view-transition-group-anim-transitionName { from { transform: transform; width: width; height: height; backdrop-filter: backdropFilter; } }
Note: There are no to
keyframes because the relevant ::view-transition-group
has styles applied to it. These will be used as the to values.
~
While this all works there one problem with it: the width
and height
properties are always included in those keyframes, even when the size of the group does not change from its start to end position. Because the width
and height
properties are present in the keyframes, the resulting animation runs on the main thread, which is typically something you want to avoid.
Having UAs omit the width
and height
from those keyframes when they don’t change could allow the animation to run on the compositor, but OTOH that would break the predictability of things. If you were to rely on those keyframes to extract size information and the info was not there, your code would break.
TEASER: Some of the engineers on the Blink team have explored a path in which width
and height
animations would be allowed to run on the compositor under certain strict conditions. One of those conditions being that the values don’t change between start and end. The feature, however, has only been exploratory so far and at the time of writing there is no intention to dig deeper into it because of other priorities.
~
In a previous post I shared how you can get the old and new positions of a transitioned element yourself. This is done by calling a getBoundingClientRect
before and after the snapshotting process.
const rectBefore = document.querySelector('.box').getBoundingClientRect();
const t = document.startViewTransition(updateTheDOMSomehow);
await t.ready;
const rectAfter = document.querySelector('.box').getBoundingClientRect();
With this information available, you can calculate the delta between those positions and create your own FLIP keyframes to use with translate
to move the group around in case when the old and new dimensions (width
and height
) are the same.
const flip = [
&grave${(rectBefore.left - rectAfter.left)}px ${(rectBefore.top - rectAfter.top)}px&grave,
&grave0px 0px&grave,
];
const flipKeyframes = {
translate: flip,
easing: "ease",
};
The generated keyframes can then be set on the group by sniffing out the relevant animation and updating the effect’s keyframes.
const boxGroupAnimation = document.getAnimations().find((anim) => {
return anim.effect.target === document.documentElement &&
anim.effect.pseudoElement == '::view-transition-group(box)';
});
boxGroupAnimation.effect.setKeyframes(flipKeyframes);
Because the new keyframes don’t include the width
and height
properties, these animations can now run on the compositor.
In the following demo (standalone version here) this technique is used.
See the Pen
Better performing View Transition Animations, attempt #2, simplified by Bramus (@bramus)
on CodePen.
(Instructions: click the document to trigger a change on the page)
When the width
and height
are different, you could calculate a scale
transform that needs to be used. I’ll leave that up to you, dear reader, as an exercise.
~
In the following demo the default generated animation and my FLIP-hijack version are shown side-by-side so that you can compare how both perform.
See the Pen Regular and Better performing View Transition Animations side-by-side by Bramus (@bramus)
on CodePen.
Especially on mobile devices the results are remarkable.
~
🔥 Like what you see? Want to stay in the loop? Here's how:
Frugality is a virtue. The art of doing more with less, making sharp trade-offs, and keeping waste at bay so the good stuff – innovation, growth, maybe even a little joy – has room to thrive. Any engineer worth their salt knows the power of an elegant, efficient solution. A few well-placed optimizations can turn a sluggish system into a rocket.
But frugality has a dark twin – a reckless, shortsighted impostor that mistakes cost-cutting for efficiency and penny-pinching for wisdom. Enter frupidity, or stupid frugality – the obsessive drive to save money in ways that ultimately cost far more in lost productivity, morale, and sanity. It’s the engineering equivalent of “optimizing” a car by removing the brakes to improve gas mileage.
Frupidity thrives in large orgs, where budgets are tight, bureaucracies dense, and someone, somewhere, is always trying to impress a spreadsheet. The best part? It usually masquerades as good stewardship.
“Why are we spending $15 a month per seat on this tool?” a manager asks. A fair question – except no one factors in that without it, engineers will burn hundreds of hours manually wrestling with tasks that a good automation could have handled in minutes. Multiply that by a hundred devs, and suddenly that “savings” is bleeding the company dry.
“No reason to buy high-end laptops when these entry-level machines get the job done.” Sure – if your definition of ‘getting the job done’ includes waiting five minutes for each build to compile. Those little delays don’t show up in the budget, but they pile up in engineers’ heads like a slow poison, turning momentum into molasses.
Cutting cloud costs by downgrading instances or consolidating databases into a single underpowered behemoth? Brilliant. Until query performance plummets and every engineer waits an extra five seconds per request, day in, day out. That’s not saving – it’s death by a thousand cuts.
Slashing travel budgets? Great idea – until engineers start taking three-hop flights with overnight layovers instead of direct ones. Productivity nosedives. Morale craters. Someone finally realizes the cost of these savings is burning more money than the travel budget ever did.
Conferences get nuked because someone upstairs sees them as a “nice to have.” The irony? That conference could’ve been where your engineers learned about a new technique that would’ve saved you a million bucks in infrastructure costs. Instead, they’re stuck reinventing the wheel – badly.
The worst thing about frupidity? It doesn’t look like a single, catastrophic failure. It creeps in quietly, like rust on an old bridge. The slow grind of waiting for a test suite to run because someone thought dedicated CI/CD machines were too expensive. The lost momentum of a brilliant engineer who spends half his time wrestling with red tape instead of building something great. The death of a thousand paper cuts.
And because it doesn’t feel like an immediate disaster, leadership rarely notices – until it’s too late.
Take a company I once worked with – let’s call them PennyTech. Picture a bland office park in the outer ring of a mid-sized city, where the air is thick with the dull hum of fluorescent lights and motivational posters. PennyTech had a frupidity problem so bad, it felt like a social experiment in suffering.
They refused to pay for the professional version of a critical SaaS tool because the free tier technically worked. Never mind that it came with rate limits that forced engineers to stagger their work, or that it lacked automation features that would have streamlined half the team’s workflow. Still, the Powers That Be declared: We do not pay for what we can get for free.
Then one day, some unsuspecting soul opened a spreadsheet, probably out of boredom or because they’d read too many corporate best-practice blogs. Turns out, that “free” tier had devoured over 500 hours of productivity in a single year.
It’s not that PennyTech lacked intelligence; it’s that they had somehow misplaced it behind a locked budget door, believing they could outfox mathematics with good intentions and a healthy dose of denial. If there’s a moral here, it’s that sometimes the most expensive thing you can buy is the illusion of getting something for nothing.
Want to maximize frupidity in your company and tank your engineering org? Let’s go:
Go forth and squeeze those pennies! Just don’t be surprised when your best people walk out the door – probably straight into a taxi you wouldn’t reimburse.
The antidote to frupidity isn’t reckless spending. It’s smart spending. It’s understanding that good engineering isn’t about cutting corners – it’s about knowing which investments will pay off in speed, efficiency, and sanity.
Here’s how to fight it:
Bureaucracy and frupidity feed off each other. Bureaucracy clogs the gears, frupidity makes sure no one oils them. Process takes priority over results, and before long, efficiency is just a memory.
At its core, bureaucracy exists to create consistency, reduce risk, and ensure accountability. Sounds reasonable. But large orgs don’t just create a little process to keep things smooth; they create layers upon layers of rules, approvals, and oversight, each one designed to solve a specific problem without ever considering the full picture.
The result? No one is empowered to make simple, logical decisions. Instead, every request gets funneled through multiple approval steps, each gatekeeper incentivized to say “no” because “yes” means taking responsibility. Need a new tool? Fill out a form. Need a monitor? Get approval from finance. Need to travel? Justify the expense to three managers who have no context on why it matters.
And here’s the real kicker: bureaucracies love small, quantifiable savings but hate measuring intangible costs. A finance department can easily see that cutting taxi reimbursements saves $50 per trip. What they can’t see is that forcing employees to take three-hour public transit journeys leads to exhaustion, frustration, and bad decision-making that costs thousands in lost productivity. Since no one is directly accountable for those hidden costs, they don’t count.
Bureaucracy also breeds fear. The safest move in a bureaucratic system is always the one that involves the least immediate risk – so people default to defensive decision-making. It’s safer to deny an expense than approve it. It’s safer to force engineers to “make do” with slow tools than to spend money on something that might not show instant ROI. Every layer of approval adds more hesitation, more process, more distance from common sense.
And because bureaucracies are designed to be self-sustaining, they never get smaller. Instead, they metastasize. Every new problem gets a new rule. Every new rule adds friction. Every added friction creates more inefficiency. Until one day, the company realizes it’s spending more time on approvals than on actual work.
By then, the best employees have left. The ones who remain are either too exhausted to fight or have figured out that the real skill in a bureaucratic org isn’t building great things – it’s navigating the system. And that’s how frupidity wins.
Frupidity isn’t just an engineering problem – it infects every corner of a company when the culture values cheapness over wisdom. The best companies don’t just cut costs – they invest in the right places.
The final test for frupidity? Would you make the same trade-off if it was your own time, your own money, your own problem to solve? If the answer is no, it’s not frugality.
It’s just plain frupid.