Tumgik
#sorry this js so long i remembered how mad i was
cryptidize · 4 months
Text
I keep meaning to post about this cause the situation is crazy but it's only gotten crazier.
So, in Kentucky, there are LOTS of little counties. Actually, their the 4th State in the list of Most Counties. There's one county, Jefferson, that has around 770,000 people. This is over double the next largest county in the state. This is a big deal because schools are managed by the Board of Education of each county. Most counties have multiple schools based on population.
I promise this is important to the point-
Jefferson County has 120 public schools (and about 50 private/religious institutions). Now, there is a Board, with seven individuals elected every four years, so changes go through votes and meetings. However... Recently, people have been left behind in the system. You see, Jefferson has a 60% population of minorities enrolled in the schools there. Last year, the Superintendent (the leader of the Board) gave himself (thru a surprise vote) a 27% raise. This was a shock to most educators and principals, especially when the next month had a disaster.
The raise was in July. August hit and the new year was starting. Our system is bus heavy - Kentucky is large and parents are busy. Getting to school was fine, but something happened at the end of the day.
The transportation department of the whole school system had been failing for years because, simply put, bus drivers get paid shit. A CDL license can pay big money but school drivers have significant wage cuts compared to the rest. They couldn't get anyone to take up the job. And it wasn't a huge shortage at first. 553 drivers, 569 routes. This was the total when they decided to say fuck it. They hired AlphaRoute, a company that uses AI to make routes for school busses. It made things infinitely worse.
The first day of school, the last child to get off the last bus got home at 10 PM.
Children were being dropped at transportation depots to be picked up by different busses. A lot of the time, they were unsupervised. Most of them were shepherded to the wrong bus. A large number of these children were elementary to middle school age, with some as young as kindergarten.
Now, as you can imagine, the police were being called a lot. Parents were rightfully terrified about children who should've been home. There is outrage the likes of which I have never seen.
So. The school cancels the first week and tries again, this time with routes that are designed by humans. They invest in a firm to figure out why the plan failed (what a waste of money) and find out everything they planned for this year of school was a catastrophic failure on every level.
So now, recently, the Superintendent proposed that we just... Get rid of buses. They would get rid of busses for 28 schools, or 15,000 children.
The Mayor of Louisville hated this plan SO MUCH that he suggested slashing the TARC bus program on favor of continuing full transportation. TARC is vital for the homeless and poor neighborhoods in the area (as someone who lived there at one point). Public transportation is extremely sparse, especially on the west end where we need it most.
From every angle, this is so bad and fucked. Also, it's the worst anyone has ever done it. Great job JCPS Board, you fucking cockroaches.
3 notes · View notes
satorisoup · 2 months
Text
erm hi fwendss ^_^ this is gonna be like… a bit of a question but also a wittle bit of a rant… m’ confused ehehe T^T in tha small font cuz… s’ embarrassing for me… sniffles sosbsbs !!!!
b4 i start here are tha main components of da topic at hand : talks of little space, mentions of toxic ex bf, lots of typing quirks, some selfship stuffs, and wanting to feel more comfortable in my space without makin’ anyone else weirded out… needin’ advice methinks /nf
so like… i didn’t know that it wasn’t necessarily considered “normal” (?) to like… wanna be treated like a child sometimes… ?????????? (՞߹ - ߹՞) n e ways…
i’ve avoided dis topic for shosho long bcuz… i didn’t wanna be viewed differently n’ i didn’t wanna lose any of my cutie mooties or sumthin’ :< … but sometimes i rlllyyy wanna post how m’ feelin at tha moment but i don’t want anyone to be liek… “ lene never posts stuffs like dis” or “ why is lene talkin’ like dis” or “ lene is actin’ weird” yeah…
yeah n’ like… the thing i imagine tha most with my f/o’s is… them holdin’ me & rockin’ me like a baby or something… cuz s’ just so comforting :< n’ i want them to take care of me… and stuffs… and do fun tingsss like !! i wanna watch my favorite cute show wif them and ramble about it while they nod their head and tell me m’ so smart… MWUEHE dis is so embarrassin’. omigoodness…
which dis also might explain why i usually type wif lots of cute little quirks if anyone was wondering abouts dat… right now i’m feeling extra cutesie so m’ usin’ LOTS & LOTSSS ehe !! ^_^ it’s very comfortin’ to me so… yeagahshdb !!! :,>
dis alllll leads to my question… what would this be considered ?? :”0 is this weird… fwieeeeendsss :< i dont know wat to dooo… someone hold my hand or something i might cry T^T
when i was datin’ my ex (bad, yucky guy… nunu…) i do remember feelin’ little (?) at times… n’ wanting to feel comforted in a way that he couldn’t provide mefinks… like. sumtimes id hold two of his fingers wif my hand and he’d shake me off n’ stuffs… or when i wanted him to cuddle or hold me at all, even in a way dat was “normal” he wouldn’t… ehe… n e way… he did lotsa stuff that kinda made me feel wantin’ to be comforted more… but he was the cause of me feeling sad and i didn’t know what ta do… m’ very glad he’s gone :> there was too much pain in dat relationship… i wasnt ever comfy… n e way. i know kou wouldn’t ever dream of doin’ that stuffs to me… but i want to cope like dis… it makes me feel happy T^T
if i started typing more like how its comfortin’ to me… or if its a bit more quirked… would you be mad :< not all da time… but ya… ive always held back on it cuz… i didnt wanna seem weird or nuffin… sigh </3
will probs delete this tomorrow but !! i wanna know what ta do for realsies… this isn’t considered little space right ?? what is little space… :0 cuz if its when you feel younger than you are at times… yeah *nods* i fink. m’ sho sorry is this weird of me… :,< i dont wanna make n e one uncomfortable or something… oki. anyways…. WAHHHHHH !!!!!
Tumblr media Tumblr media
any ways— to distract myself from dis ramble… look at my pwetty kiri (っ⸝⸝⸝ <) i wuv his hair like this shosho much… i just wanna smooch his cheeks :> nomnomnom !! (*ᴗ͈ ̫ ᴗ͈) his teefies… ehe :,> he’s so manly n’ strong… i want him to hold me mwuehe !! :3
sometimes i js wanna post abouts how much i wuv my sweetie pie shoto… n’ how i want him to smooch m’ cheeks ehe… or about kou :< my precious kou… s’ also why in all my selfships my nickname is usually sumfin’ along the lines of “baby”… ehehe ^_^
n’ i really want katsuki to hold me n’ rock me to sleep… s’ that weird ?? it might be out of character but… i like to imagine it mhm mhm :,>
or sumtimes i wanna play wif satoru… n’ be silly while he feeds me sweets n’ calls me his pwetty sweet princess :< andand there would be lotsa cakes !! and strawberries !! m’ favorite !! >//<
n’ i rlly love imagining gettin’ all dolled up in pwetty sundresses n stuffs dat choso likes :> n’ havin’ him hold my hands in his… ehe
ohoh !! and… holding two of sugu’s fingers wif my whole hand… :< n’ makin’ pinky pwomises… ouh… how cute… m’ kicking my feetsiesss !! ^0^
or ume holdin’ me like a princess… n’ lettin’ me watch as he cuts his veggies to make me a snackie… cuz he knows i wuv veggies… mhm :3
m’ sorry… gots a bit distracted thinkin’ bout all the stuffs i’ve wanted to say b4… ehe….. (つω`。) i couldn’t help it !!
anyways, goodnight friends :> if u see dis & i delete it… yeagh… comments or askies r definitely appreciated sniffle :> im supa curious EEEK !! m’ shy excuseee me >//<
8 notes · View notes
Note
Oo maybe 6? For the ask game :O :D
i treid sleeping i swear- anyways--
Tumblr media
Uh this triggered something long, SHIT , you don't have to read it lol sorry QWQ MY DREAMS ARE MOVIES ATP AAAAAAAAAAAAAAAAA alr well it was a little weird but bassically: me and my fam [even my dad for some reason but not my lil'est sis] were in a barn, and there were a lot of people there also sick, my dad was really sick [to the point where he was laying down, unable to open his eyes], the most sick. He was on one of the hays in the corner, the only one without doctors around him for some reason I was at the entrance of the barn area so I walked forward a bit and I saw a pig/white dog [can't remember], and I walked up to it cause why not. There were 2 men also next to the animal, 1 of them was js there so i dont remember him well, but the other one looked like litterally straight out of the 1890's, he had a tophat and a walking stick for some reason lol. I looked at the animal and made some kind of remark [i forgor, sorry, my memory is shit and i'm writing this at night, probably will continue in the morning], the man laughed and [im going to translate it but it might not make sense, since it was in arabic, which is something i rarely dream in?] said "remember that people and animals are the same [/neg, as in, animalistic], don't view them any different". I just nodded and then walked away, exploring the rest of the place. [although i believed the info] It was mainly just me like looking at the sick peeps and i saw the pig/dog running/jumping around from area to area, also looking at the sick people, pretty quickly, but they still never went to my dads area. [idk why but that was an important detail in the dream lol]. So after i finish inspecting and stuff, my mum tells me we need to go somewhere and we needed to go get stuff [she wasn't specific, and again, it makes more sense in arabic]. So we go, leaving the middle sibling as she became sick and a little tired as well, and the dream then skips to when me and my mum come back, my mum is holding a plastic bag filled with stuff i didnt know and im js holding chocolate [granted, i ate chocolate before bed so that may have affected it lol], but when we came back the place was mostly empty, only my dad in the corner [it was very far away and barely noticable but he was there, it was a really big place, more than 100m fs], and my sister in the middle-ish front of the place, next to a doctor in the barn and yk the docters stand in hospitals that they wheel around? with a screen? yeah she was next to that. My mum was mad at the doctor cause she was like 'oh as soon as we left, she got sick, it's the doctors fault, blah blah blah', and she started being angry at the doctor. After hearing my mum yap for a bit i js went up to my sister and she was very tired and she looked very sick, i bassically chilled with her, and we were talking as i ate my choc bar. I thought she was going to die in the dream but at the end she didn't, so yippee! Then another time skip happened and we were now all sitting at the side area of the barn and sitting on hay [btw i've never actually lived in a barn? or been to one that looked like that lol], and the doctors came up to us and were like "Oh yeah your husband [they were talking to my mum], died". and my mum deadass turned away from him and then the vibe suddenly was off [anxiety, it got like a scarier feeling for some reason], and she said "But his soul is still alive". I looked at her, then at his place, where his body was still there, but the body was dead, and a bad vibe hit me [idk how else to explain feelings help] and i said "His body is dead but his soul is still alive, he's alive" And then the dream fucking ended MY DAD ISN'T DEAD AS FAR AS I KNOW???
8 notes · View notes
Text
drawn arrows unseen
part 11 / previous installments/tags
Two days later, the coaches call them all down for a meeting, or at least all of them who haven’t already had a positive test. They announce that the tournament is canceled. Omicron wins. 
The room rumbles with disappointment and frustration. Next to Mason, Connor’s silent. His expression above his mask is typically impassive. This must be easier on him. He’s got so many more world Js ahead of him. Mason tries to count how many more years Connor will be eligible, but he stops when it starts to get depressing.
This might be Mason’s last shot, but he can’t even be mad about COVID fucking his life up yet again. Distantly, he hates the loss of any opportunity to compete, to win. But he’s holding his entire body tense at Connor’s scent seeping through the edges of his mask — he’s been doing the same thing for weeks now — and he’s wrung-out and exhausted and grateful just to leave, to get away from the terrible flood of want that Connor’s scent threatens to unleash.
He thinks it’ll get easier once he leaves Connor behind. But his flight to Ottawa is excruciating. He’s restless and sweating, tugging at his mask to try to get away from its bleached factory scent. When they land, the only thing that stops him from shouldering his way up the aisle to escape the stifling confines of the plane is the obviousness of the Team Canada gear he’s wearing.
In his billet bedroom, he tips his suitcase onto the floor and unzips it. The scent that wafts out, preserved all the way from their hotel room in Red Deer, brings him to his knees. He stays there like a supplicant at a Samsonite altar and gets a hand on himself, and when his knot swells he curls up on the floor to ride it out with his face in his dirty laundry, waiting for the relief that’s surely going to come when his knot recedes.
The relief doesn’t come. But Mason does. Again and again. After the next knot, he fumbles for his phone and bites down hard on the inside of his cheek to clear his head long enough to send a couple of texts. He tells the trainer from the Petes and his billet parents something about a positive COVID test. Then he locks his door for the next three days. He gets through his first rut alone, just him and his hand and the fading scent from his untouched suitcase.
After he emerges, they tell him he’s getting traded. Hamilton’s a contender. He’s going to have a chance to go for a championship, maybe a Memorial Cup. All Mason feels is relief that he’ll never have to see that billet room again.
“Welcome, brother.” Arber Xhekaj is one of the first guys in Hamilton to greet him, giving Mason a back-thumping hug.
Mason flicks his eyes around the room in a silent question, and Arber claps him on the shoulder and answers loud enough for everyone in the stalls around them to hear. “No, only one alpha on this team.” He gives Mason a wolfish smile. “Two now.”
Mason locks eyes with him and waits for Arber to look away first. Arber smells like cinderblocks, but Mason feels like an avalanche. He wants to fight. With Arber, against Arber, it doesn’t even matter. He wants to hit and take and howl, and that’s what he does all spring. 
He leans into the aggression that’s supposed to come with being an alpha, hunting every puck, winning every board battle, taking whatever he wants. Is he fearless because he’s an alpha, or because he just doesn’t care? There’s nothing for him here except to win, so that’s what he’s going to do. He barrels through everything in his way, straight to an OHL championship and the finals of the Memorial Cup.
After they lose, he gets a text from Kent. i know it fucking sucks, sorry. Mason remembers talking to him after the Frozen Four. Kent gets that going to the NHL doesn’t make up for losing when it counts. They’ve been in touch off and on since the aborted world juniors. Kent shit-talks USA Hockey with Mason and tells him how Luke Hughes keeps saying he wants to be a beta because he has one brother who’s an alpha and one brother who’s an omega (what is the deal with all Trevor’s friends, Mason wonders) and he doesn’t want to deal with all their bullshit.
Mason doesn’t ask Kent about Connor. But sometimes Kent tells him about something that happened in their training group or a sick roller hockey goal he scored off Connor’s feed. Keeping in touch with Kent feels like keeping alive Kent’s theories about Connor, about Connor and Mason. Like cupping that tiny spark in his hands, making space for the possibility, even as Mason keeps telling himself no and he’s sixteen.
In July, he texts Connor hbd, how’s the beard coming? and updates his mental refrain to “He’s seventeen.” Connor reposts another photo from his girlfriend. She looks like she smells like a pink macaron. Mason wonders if Connor’s into that. Then he reminds himself that Connor can’t smell anything yet anyway. He must date whoever he wants.
(next)
33 notes · View notes
straightjacket111 · 2 years
Text
i question myself alot.if im perfect. im enough. have i say smtg wrong. have i tried . have i gave up. am i even goodlooking. will i be locked . is this life. is this love . am i cursed . i question alot on me. most of the time i feel like theres no meaning in this world for whatever ive been through. but i tried my best. do i ?. i wanted peace. ive been looking for peace in so long. idk where is it. im lost. im hurt. i hate nyself. i lost hope. i wanted everything to be perfect but none have happen. we’ve been fighting for the past few days . i hated myself for that. i hate being weak. beinf controlled. controlled by my parents. i hate things happen in my way.like fuck shit happens. i wanted to marry my first love. but wanted to. but she wanna break up after everything happen. but im questioning if she love me. like how i love her. like things didnt go as planned when we want to get married. and i thought she said its fine. i know u tried but im not going anywhere. i thought she wud said dat. but no. it keep haunting me if she really love like she will go through everythinf with me. like. i cud imagine if my dad were to ask me tk get married amd she cant. i understand that. its hard on love. it hard to understand each other when both lovers couldnt understand each other. i admit it. but i do understand where shes coming from. i never want leave her like this. not even leavinf her at all. but i wish . js one day. when i did kms. i hope everyones happy living their own peace. without me burdening anything.
for my love . i love you always. i will always love you no matter how much u hurt me no matter how much anything happens. i love you. ure really one of the mosg best woman . i love you with my whole heart and i wish u know that i will go through eveything with u. ive always have ny eyes on u. only you and nvr anyone. u tried ur best. ur best to understand me. helped me. makw me happy. and everything else uve always been. but im sorry. im sorry i wasnt good enough. i didnt try wnough. and things didnt go as planned to make us married to each other but engaged. i know u nvr want that . and im sorry. i remember how happy and excited u were about us tunang with each other. ure the most cutest beautiful lazy with that wide smile. i miss you alot. i miss my nina where shes not worrying bout anyth but js to be with me as long im her side. i wish i cud really marry u but im trying. im trying everything i can i js hope u know what ive been go through to the point i hate myself. im sorry for hating myself. i really cant do anything because everying that is said in my head is true. but i love you alot u know that. i love you more to the point i dont love myself no more. uve always been my first love and no one cud replace dat. it sucks seing us like this. fighting with each other. and asking for break ups. u know i hate that . but its fine. ure mad. and i cant be mad because im stupid. i shouldnt even be mad. but i hope u cud see ur bracelet everday for what it says. because my mum still like u. my dad still say he like u. because uve made me happy. i hope u know that. i didnt wanna tell u cuz . nothing else can work . i cant do anything bout it. but trying tot think hard . harder than a math question the point im having migraines. ive been cryinf almost the wholeday nina. it sucks. i wan u here now. but fuck. i wish we could talk to each other again go through everything again. im sorry i keep making u doubts . and everyrhinf else. i hope u still love me for who i am. i hope u still want me for who i am. accept me. im js tired of this week. and i hope u know i will always love you
and to everyone. i hope u guys find peace and happiness . on urself. someone once said. theres always something u will love yourself . and that my first love. but it dont work on me anymore. thank you.
0 notes
bobohunn · 4 years
Text
The 56th Street
Tumblr media
Title : 56th Street
Pair : baekhyun x reader, baekhyun x you
Genre : angst, fluff, one shot
Warnings : language, and mentions of stalking, divorce and non consensual taking of pictures (not between pair)
Word count : 3k
Note : Italicized words are character/reader’s thoughts; indented (blockquote) and italicized paragraphs are flashbacks.
xx
“Are you busy right now?” a husky voice found its way to your ear from the other side of the line.
“No. Thank god,” you mumbled before letting a deep sigh leave your lips.
After ages, you finally heard your favorite sound on earth again.
It was the sound that went a little too high while singing along to Queen and Michael Jackson songs that played on the radio in your room while you did homework at 3 pm. The one that rang loud throughout the whole house while you danced to random and silly steps on the stage that is your bed at 3 am.
It was the same sound that went two octaves lower when you teased him too much about the little crush he seemed to harbor for the girl who sat beside him in 11th grade or when you asked him for one of his friend’s number. One that carried sweet nothings with it to your blushing ears the first time you got drunk on your birthday.
It was the very same sound that was once your refuge and salvation. The very same that calmed the erratic beating of your heart when you were nervous. One that chased your tears to crawl back up and hide in the corners of your round eyes when life enveloped you into darkness.
The voice you’ve been longing for more frequently these days.  
Your best friend’s voice.
He chuckled, his low register ringing through your eardrums. “Are you at home?” 
“No, but I’m walking home,” you say almost too softly, trying not to sound too excited.
There was a long period of silence. If you didn’t know Baekhyun enough, you would have already ended the call at the lack of response. However, you knew him way too well to see (hear) that he was still thinking about what he would say. So you just continued walking on your path slowly, occasionally looking over your shoulders in case you were blocking somebody’s way.
“You’re walking on that street again, aren’t you?” He hummed before asking in a very knowing tone. It took you a moment to process his question, so when you were about to defend yourself, Baekhyun had already started his nagging, “I told you not to take that street when I’m not with you!”
You smiled a bit at the realization that although you didn’t even answer yet, he already knew the truth. And your smile grew more prominent at the thought that he still knows you better than anyone.
The only person you wanted to remember you still knows you like you were the back of his hand. And you‘re not anywhere near remarkable for anyone— or even just for him at least, to remember you. Isn’t that an achievement for you?
Snorting out a laugh, you said, “Sorry, Baek. It’s the fastest way home.”
No. Actually, it’s the street that reminds me of you most.
It was the quietest street in your town, 56th street, both your favorite route to take. It was the street that held a huge part of your memories together with him and had all the little moments that piled up into ones you’ll treasure forever. The road that witnessed both of you grow from the innocent little boy and girl you once were to the lovely man and woman you both are today.
It’s the street that reminded you of when you first heard him laugh,
“Since we’re neighbors, and I’m new here, can’t you show me around the town?” the little boy said as he lifted his hands to his neck to scratch at the skin right below his jaw, making you stare at them in awe.
You snapped yourself out of your short trance and said blankly, “The only places I know are my house and the school.”
As cliché as it may sound, everything around you moved in slow motion as the side of the boy’s lips rose to his tinted cheeks. His eyes turned upside down, and his eyebrows raised. He laughed lightly before asking, “Then, should we see where this street ends?”
Of when you first saw him pout,
“Baekhyun, no. We have to go home,” you said as you continued on your track without looking back at him. He went silent, and a smirk crept up your face.
However, it grew too suspiciously silent. So you stopped walking and turned your head back, only to find a sulking Baekhyun. His hands were in his pockets, eyebrows knit together, cheeks puffed out, and his lower lip pouty. He slowly looked back up at you with his puppy eyes that always won you over.
“Oh my god, don’t give me that look. You’re making my head hurt.”
He moved closer to you and grabbed one of your hands, “I’ll stay over at yours for dinner so your mom won’t scold you for too long. Just please come with me to the supermarket. I’m really craving ice cream,” he said with his eyes quivering from left to right.
He’s onto something. “What do you have up in your sleeve, Mr. Byun? Tell me, or I’m not going with you,” you said as you narrowed your eyes at him.
He looked away from you and landed his gaze towards the ground again, “Y-you, I heard y-you crying in your room last night. I just want to buy you ice cream to cheer you up because I won’t be able to sleep knowing I hadn’t done anything for you before this day ended.”
When you first heard him curse and get mad,
“Excuse me, Dude. But what are those photos for?” you heard a familiar voice from behind you. Recognizing it as Baekhyun, you quickly looked over your shoulder to greet your friend.
“A-ah i-it’s just for documentation purposes for our group study,” stuttered the other guy whose back was turned to you.
You called out Baekhyun’s name, confused about the current situation laid in front of you. Your friend only raised his head to you and motioned for you to come to him, “do you know this guy?”
You approach the two men, curious as to who the other person is. When you caught a glimpse of the unfamiliar face, you slowly shook your head no. “I don’t think so. Do I have to?”
Baekhyun clicked his tongue and clenched his jaw. He sneered a little and turned his head to the side, making you more confused.
“The next time you make a fucking excuse, make sure it’s not as stupid as you look. Stop being a fucking pervert, you fucking stalking asshole.”
And of when you first heard him cry.
“Oh my god, Baekhyun, what happened?” you said as you brought the taller man’s head to your shoulder. You tried to rub his back and smooth out the creases of his school uniform, but he just started wailing more.
He was leaning into you, and you couldn’t take his weight anymore, so you guided him to sit down on the sidewalk. You tried to pull away from him, but he planted his face deeper into your neck, so you just hugged him tighter and drew unnamed patterns on his arms.
When his sobbing finally toned down, you tugged at his chin and made him look up at you. The redness of his nose, along with the tears in and around his eyes, made your heart hurt. Who on earth would try to make this man cry?
“You’re not telling me what happened?” you whispered as you wiped the tears that continued to drop down his cheeks.
“My mom wants to divorce my dad.”
You heard a small huff from his end, making you chuckle loud enough for him to hear.
You tilted your head to your side and pictured how he would have looked if he were actually walking with you today. Would he have had his hair down or gelled back? Would he have worn the oversized hoodies you told him were your favorite on him? Would he have walked in all his glory on the sidewalk in his new Js? Would he have looked at you with loving eyes, like he did back then?
“Still! Didn’t I tell you that I’d be mad and not call you if you walked there alone? That street is so quiet and far from people. It’s too dangerous!” he whined again.
A bitter taste started to spread in your mouth. You took a deep breath of the crisp air, “Yeah. I know it’s dangerous.”
Dangerously silent and lonely without you.
“Do you remember? That time when I told you to go home without me because I had fun playing football with my classmates?” he paused for you to answer, but he knows that you remember it anyway.
Yeah, when I almost cried, thinking you didn’t want to hang out with me anymore?
He laughed, “I think I hit my head somewhere that time, and I realized that I wanted to walk home with you. So I ran to catch up with you, but then I saw a guy taking pictures of you from the back.” You chuckled a little at how fast his tone changed from happy to angered towards the end.
You added in, “And you cursed him with all your heart, and I had to drag your boiling ass home or else you would have had a swollen hand.”
And when I thought my heart would explode, seeing you all worked up and protective of me.
You stopped walking and recalled how it exactly happened, where you exactly were, and what you exactly felt. While reminiscing, you could almost see the image of your younger self pulling the younger Baekhyun, who couldn’t take his eyes off the stranger who stalked you, pass by in front of your eyes.
“Yup. I decided to walk home with you every day since then. But now that I can’t, I made you promise not to walk 56th street, didn’t I?” Baekhyun said in a sing-song tone.
“Sorry,”
“I’ll let it go this time. But next time I really won’t call you for three months! Or even six months!” He taunted.
Even if I kept my promise and never walked on the same street again, when the time comes, you’d probably stop calling me.
“How are you?”
“I’m okay here. Training is getting hard, though. But I bet you five tubs of ice cream that I’m gonna be on national TV in 3 months!”
I need not bet because I know you’ll make it. It’s your lifelong dream, after all.
“[Y/N]! [Y/N]!” Baekhyun beamed from your porch as he took off his shoes. You watched him with confused eyes from the couch of your father’s living room.
“What?”
He quickly approached you and pulled you up from your seat, “it’s time for us to take a walk. Long since we’ve done it, no?”
You and Baekhyun took your precious time to walk. One whole step before the other, as if scared that the sidewalk would run out if you walk faster.
You didn’t really say anything to each other, but the sound of the spring birds singing and your soles rubbing against the bricks on the sidewalk made you both feel entertained.
With longer legs and bigger feet, Baekhyun was walking slightly ahead of you. Having to catch up with his steps, you walked faster, eager to walk side by side with him. But he noticed that you were trying so hard to keep up with him, so he tried to make his steps smaller. Then, he moved closer to you until your hips touched each other.
It was always like this with Baekhyun. You’d take a walk together on 56th street without saying anything, and you’d still enjoy it. He would always end up walking ahead of you, and you would ever walk behind him. Then, when he notices that he’s walking too fast for you, he would start taking smaller steps so you could keep up with him. And when he thinks he’s walking slow enough to match your pace, he would close the gap between your bodies by putting an arm around your shoulders or waist or just by feeling your sides against his.
“I li-“
“I’m leaving,” Baekhyun started, cutting off what you wanted to say.
“What?” Your voice came out shaky, unsure of what you heard.
Baekhyun stopped walking, “I said I’m leaving. I’m leaving for the city.”
You blinked your eyes twice. Stiff as you were, you tried to open your mouth to say something which you couldn’t seem to remember anymore. Baekhyun giggled at how you looked.
“I’m gonna be an idol, [y/n]. I’m going to be a singer.” he said as his eyes twinkled with joy.
How? Where? When? Why? You wanted to ask him, but you really couldn’t bring yourself to move even a muscle except for your eyes.
“A company scouted me at graduation. They said I had the potential to be a singer. I didn’t want to tell you until I was sure, but now I am.” He said while looking up at the cloudless sky.
You didn’t know how it happened, but you only managed to speak out the words, “I’m happy for you, Baekhyun.”
You didn’t see Baekhyun the week after that walk because he was busy packing, and you were busy denying to yourself that he was leaving. So when you saw him from your window pushing boxes unto the trunk of his parents’ SUV with his hair white as snow, you couldn’t help but jump out from where you were standing.
You accidentally pushed your windowpane in an attempt to save your face from kissing the wooden floor, and it made a noise loud enough for Baekhyun to look up at your room. He waved up at you and motioned for you to meet him outside.
“Are you leaving today?”
“Yeah. Sorry, I wasn’t able to tell you,” Baekhyun said as he scratched the skin under his ear. He always did this when he was in an awkward situation.
You stared at him without speaking. You took in how he looked for the last time. But you realized that it was too much for you. He was too much for you. So you focused on his now white hair that rested against his scalp, seemingly tired from the process of bleaching.
Baekhyun only smiled at you like a child that was offered candies and delight. You moved closer to him, eyes exploring his face and stopping at his lips for a few seconds before losing confidence again.
His name softly left your lips, to which he only hummed in response.
“I,” you paused for a moment, maybe two? or three. You don’t know.
Baekhyun’s eyebrows almost hit his hairline.
“I like your hair.” you said with a smile.
“Don’t I look like a real celebrity now?” he said as he let his fingers run through his locks.
“You do,” he always did.
You let yet another chuckle escape your mouth, although the last thing you wanted to do was laugh. “I’m still your best friend, right?” you questioned, though you were scared he’d say no.
However, you heard a different voice from his end of the call shout, “Baekhyun! 10-minute break is over!” and your friend responded with something you couldn’t catch. All that you knew was that he was laughing with someone, their voices slowly fading as if they were walking away from the phone.
He’s happier now. Even happier than when he was with me.
You used to associate his laugh with flowers, candies, love, and everything sweet. But now you can’t help but feel bitterness crawl up your spine, like a vine climbing its way up the walls and lampposts.
The cold and long blow of the wind made you feel nostalgic (if you weren’t yet), and you wanted as much to let it take you to wherever your heart is, where Baekhyun is.
“I have to go [y/n]! I’ll call you again soon!” he quickly said before a long beep was heard, announcing the end of the call.
Months passed, and you are still waiting for when his name flashes as the caller ID on the screen of your phone. Maybe he’s busy? Or he lost my number? Perhaps he changed his phone?
You wanted to ask his parents for his new number or even just how their son was doing. But you were surprised to find out that they already moved out of the house next to yours, when you returned from your grandparents’ house for a 3-week vacation. You wanted to ask your parents if they had his parents’ number, but then you decided that seeing him on TV and your phone screen was enough for you.
He’s clearly doing well.
He has got to be doing well. How could he not when he has been flashing the cameras the widest and prettiest smiles? The kind of smiles you never witnessed when he was with you.
He’s clearly happier than ever.
Although you kept saying that you were happy for him too, you just can’t deny that you do feel jealous of how far he had come. It was just like the long and silent walks you took with him throughout 56th street before: he was always steps ahead of you, and you were burning in jealousy behind him because of the advances his relatively longer legs brought him. Except that he was miles and dreams ahead of you now, and he couldn’t slow down his pace to match yours and stay by your side anymore.
He’s way too far ahead to turn and run back to me.
He’s probably living a better life.
He probably has funnier (best) friends to laugh with.
He probably has prettier eyes to stare at, softer hands to hold, and more comfortable shoulders to lean on.
He probably has a new favorite street to walk with somebody new. Somebody who’s better, somebody who’s not you.
And you started to accept that little by little.
You had started to move on.
You started to forget.
You finally let go.
But you kept the promise you made him.
You never walked 56th street again,
because he’s not there with you anymore.
118 notes · View notes
c-optimistic · 4 years
Text
diner
or, lena is an irregular regular, kara is stupidly smitten, and alex is really tired with the both of them
Waitressing at her foster father’s 24-hour diner was not how Kara thought she’d be spending her summer. Then again, she also hadn’t imagined she’d end up moving back home because she lost her internship.
(Snapper, she thought for the hundredth time just in that last hour, the name coming out as a curse, reveling in imagining spitting it right into his face.
She hadn’t particularly thought she was capable of hating anyone, but Snapper...he came close.)
“Kara, can you get her?” Alex asked, gesturing towards a table in the back with a title of her head, where a young woman with long, dark hair was sitting, looking engrossed in whatever she was writing in her notebook. “I want to take my break.”
“Oh, is Kelly calling?”
“Shut up,” Alex muttered, cheeks pinking slightly. She huffed for good measure as she took off her apron and tossed it at Kara, already on her phone before she even took a single step outside the diner.
Kara watched Alex go, feeling conflicted.
(She was happy for her sister, she deserved something good in her life. But there were also some feelings she wasn’t altogether proud of, bits of jealousy, annoyance at how much time Alex spent with Kelly instead of her, fear that she was losing her sister.
In a long list of odd things about her, this was the newest oddity: Kara was simultaneously utterly pleased for her sister and resentful at the new shift in their relationship, the room she had to make for Kelly.)
With a sigh, she pulled out her notepad and clicked her pen, approaching the only occupied table in the diner.
(It was late, later than Kara normally worked, this shift reserved for the college students home for the summer looking for a way to make some cash.
Though, considering Kara was one of those college students home for the summer, she supposed this shift was perfect for her.)
“Hi, welcome to Jeremiah’s. Can I get you something to drink?” Kara said robotically, her eyes on her notepad. After a few seconds of silence, she looked up, realizing that the woman hadn’t even stopped writing in her notebook. “Sorry, am I interrupting? I can come back,” she began, even going as far as taking a step back, when suddenly the woman moved. She swept her dark hair back and turned to look at Kara, blue—or maybe green, Kara wasn’t quite sure—eyes meeting Kara’s levelly.
“I’m so sorry,” the woman said, snapping her notebook shut. “Could I get two coffees please? And a peanut butter and jelly sandwich?”
Kara blinked. They did not serve PB&Js, they never had, but for whatever reason, it felt like her tongue had been glued to the roof of her mouth when she tried to tell the woman just that. Instead, what came out was a rather inconvenient, “Sure, coming right up.”
She walked over to the kitchen, frowning a little bit when the cook—who had obviously heard everything—eyed her in amusement. Mon-El wiped his hands on his apron, crossing his arms over his chest as she put on a fresh pot of coffee.
“You lied to a customer,” he said with faux-disappointment, grinning. “You and I both know there’s no peanut butter.”
“No,” Kara denied, feeling a flare of anxiety in her chest, “I didn’t lie. I just—oh shut up, why don’t you help out instead of laughing at me?”
“What am I supposed to do?” he said, not even bothering to pretend he wasn’t reveling in her embarrassment. “You’re the one that lied to a customer just because you think she’s pretty.”
“I don’t...you’re such a—why don’t you do something useful with your time, huh?”
“Right, right, right,” Mon-El said, shaking his head slowly, “so I guess you don’t want me to tell you Imra has a brand new jar of peanut butter she bought the other day.” He sighed dramatically. “It’s not like she lives five minutes away and could be here by the time the coffee is ready.”
“You would ask her for me?” Kara found herself saying hopefully, eyeing Mon-El with a little bit of suspicion. “I thought Imra was focusing on her studying and couldn’t waste time here.”
“You want me to ask her?” Mon-El said, eyes widening, smile slipping. “No way, I’m already in the doghouse. She told me if I interrupted her studying again, she’d break up with me.” He gave Kara a knowing look. “Besides, Imra wouldn’t say no to you, especially if you told her it’s for a pretty girl.”
“Stop saying that,” Kara hissed, turning to look over at the woman, relieved to see she was reabsorbed in her notebook. “That’s not what happened.”
“Sure, sure,” Mon-El said casually, pointing at the carafe and the coffee that slowly trickled into it, “but tick tock, Kara.”
She glared at him, but pulled out her phone and sent a quick text to Imra, ignoring Mon-El’s smug look when Imra immediately agreed. And like Mon-El had said, by the time the coffee was done, Imra had stopped by, handing the jar of peanut butter over as she stole a glance at the woman sitting in the back, giving Kara an approving thumbs up before Mon-El stole her away for a ‘study break,’ which made Kara pretend to gag.
“So,” Kara said, clearly her throat loudly as she approached the woman, setting down the two cups of coffee and the plate with the sandwich, “are you waiting for someone?” Kara pointed to the second cup, and the woman looked away from her notebook, Kara’s question finally sinking in.
“Hmm? Oh, no. Those are both for me.”
“Oh. Well, refills are free you know. You don’t need to order two.”
The woman blinked, then a small smile appeared on her face. “That’s—thank you, um…?”
“—Kara. My name is Kara.”
“It’s nice to meet you, Kara,” the woman said, her voice softer. “I’m Lena.”
“Enjoy your sandwich. And don’t be afraid to shout at me if you need anything, okay?” Kara grinned, rocked back on her heels, then turned away. When she went into the back, Alex was there with Mon-El and Imra, and was eyeing her oddly.
“Really, Kara?” she asked, raising one eyebrow.
“We should probably add peanut butter and jelly to the menu. In the interest of our customers.”
“Right,” Mon-El said, stretching out the word, chuckling when Imra rolled her eyes. “In the interest of our customers.”
“Really, Kara?” Alex just repeated, letting out a sigh.
x
The next time Lena came in, it was seven in the morning, and she looked like she hadn’t slept all night.
“I haven’t slept all night,” she informed Kara with a small smile, “but it was worth it.”
“Hot date?” Kara asked as she pulled out her notebook, feeling her cheeks flame as soon as the question slipped out, embarrassed at both the jealousy in her tone and the distinctly unprofessional and inappropriate nature of the question.
Thankfully, or maybe just luckily, Lena didn’t seem to hear Kara. “Can I get two cups of coffee and a peanut butter and jelly sandwich?”
“Sure thing. But um, you remember that refills are free, right?”
“Hmm?” Lena said distractedly, her eyes now on her phone, frown forming on her lips. “Thanks so much, um,” she turned to Kara, eyes narrowing briefly before falling onto Kara’s nametag, smile reemerging. “Kara,” she finished proudly, as if Kara hadn’t introduced herself just days before.
Kara frowned as she took orders from her other customers, knowing that a crease had appeared between her eyebrows as she approached Alex at the register.
“She doesn’t remember me,” she complained in a whisper.
“Who doesn’t remember you?” Alex mock-whispered right back, eyeing Kara oddly.
“Lena, the woman, the PB&J woman,” Kara explained, rolling her eyes when Alex’s confusion only cleared at the last explanation.
“You mean your crush,” Alex supplied easily, motioning for Kara to go on.
Kara felt her brow furrow further, and she went crossed-eyed as she followed Alex reaching out and pressing against her forehead with her eyes. “I don’t have a crush,” she denied, refocusing her gaze. Alex made a noncommittal sound, lips pressing together. “I don’t,” Kara insisted.
“I think your crush is wondering where her coffee and sandwich is, Kara,” Alex said, motioning with a tilt of her head towards Lena. “If it bothers you so much, just talk to her.”
“Right. Right. Just talk to her.”
(She hyped herself up as she took Lena’s coffee and sandwich to her, but when the woman gave her a small smile, her eyes meeting Kara’s just briefly before she turned back to her phone, Kara chickened out.
Lena deserved to eat her sandwich in peace, and Kara had already made enough of a fool of herself for one day.)
x
Lena’s presence at the diner began to become regular.
Or rather, it became expectedly unexpected. She showed up several times a week without fail, but the times she showed up were maddenly strange. Once, it was in the middle of the night, another the wee hours of the morning, another in the mid-afternoon, and yet another time smack dab in the middle of the dinner rush. Every time she showed up, she looked exhausted, sleep-deprived, and totally out of it.
And every time, without fail, she ordered her PB&J and two coffees and reintroduced herself before asking Kara for her name.
It drove Kara mad. It made her feel oddly endeared. It left her anxiously waiting for the next time Lena would walk into the diner.
(Mon-El found the whole thing incredibly hilarious. Nia and Brainy, video calling from National City to express how much they missed Kara, immediately noticed she was distracted and kept her eyes on the diner’s entrance, and made fun of her constantly after that.
And Alex? Alex rolled her eyes, sighed, and generally made a big deal of it, but every time Lena walked through the door, Alex would let Kara get her table.
For Kara’s part, she endured the teasing and the laughing without comment, but she rather thought she gave herself away when she made sure to always have a tub of peanut butter on hand, just for Lena.)
x
They talked beyond the normal ‘what can I get you?’ after one month of Lena’s inconsistently consistent visits to the diner.
She came in, her shoes and coat drenched, her umbrella a broken mess, dripping rainwater onto the linoleum floor. There were purple bags under her eyes, her skin paler than normal, and she heaved a thankful sigh when Kara grabbed a handful of paper towels and handed it to her.
(Kara tried very hard to be respectful and avert her eyes, but it was easy to get distracted by the rainwater trailing down Lena’s neck.)
“Pretty bad storm, huh?” Kara said stupidly, the sound of thunder cracking right at that moment, as if to highlight the obviousness of her statement. “I, um, I live above the diner? So I could get you some dry clothes? If you wanted?”
Lena paused her efforts at patting herself dry, and she stared at Kara with a slightly ajar mouth. “You guys take customer service pretty seriously, don’t you?” she said finally, chuckling. Kara, whose cheeks were bright red, crossed her arms over her chest and forced out a laugh.
“Oh, um, well. You know. Only the best for our regulars.”
(Dumb, Kara thought. That was so dumb.)
“I—” Lena began, but Kara would never know what she intended to say, because right at that moment, Alex showed up, mop in hand.
“You’re dripping on our floors, Lena,” she said, not unkindly, maneuvering her mop in such a way that Lena was forced to take a step closer to Kara—nearly brushing up against her. Not for the first time, Kara was simultaneously annoyed and grateful for her sister’s meddling.
“I’m so sorry,” Lena rushed out, realizing in that moment that her notebook was also sopping wet, the crestfallen expression on her face feeling like a knife twisting in Kara’s chest. “I hadn’t realized how much rain there was, I can just go—”
“—wait, no. Don’t go.” Kara avoided Alex’s gaze entirely, choosing to stare at her shoes instead. “I’ll grab you some clothes and a hairdryer so you can dry off your notebook, and Alex will get you something to eat. Two coffees and a PB&J, right?” Kara looked up, her breath catching just a little when she noticed Lena’s expression: curious, confused, and coy.
“Is that really okay?” she asked, seeming more than a little unsure. Kara nodded quickly, shooting Alex a look and making her nod as well.
“You’re Kara’s favorite regular,” Alex said unhelpfully, grinning when Kara glared at her. “Of course it’s okay.” Lena frowned.
“Oh, sorry, have we met before?”
(And oh, it was like a punch to the gut.
How could someone forget this many times?)
“Don’t worry about it, Lena,” Kara said with a grin, trying to find the humor in it somehow. “Let’s get you dry first.”
(And later, when Lena left while still wearing Kara’s favorite National City University sweatshirt, Kara just sighed.
And later, when Alex asked if she got Lena’s number and Kara confessed she didn’t think to ask, Alex let out a groan so loud that all their customers turned to give her an odd look.)
x
Two days later, Lena came into the diner wearing Kara’s sweatshirt.
She fell asleep at her table while waiting for her coffee and sandwich, and when Kara gently woke her up she gave Kara a brilliant smile and asked, “Did you know there’s a diner in Midvale that has the best PB&Js in the world?”
“You really need some rest,” Kara replied softly, but Lena’s focus had shifted to her coffee.
And Kara just let it be.
x
“Can I get three coffees?” Lena asked the next time she came in, nearing midnight. Kara hadn’t even had this shift, but thanks to a new system developed by Alex, whoever happened to be working when Lena came in had the obligation to text Kara (who would, embarrassingly enough, toss her apron on and rush downstairs to the diner in order to serve her favorite customer—a customer who still could not remember all the times Kara had introduced herself).
“Three? Are you trying to sleep even less now?”
“I sleep,” Lena defended, though she didn’t sound like she believed her own words. “No,” she continued, shaking her head as if to physically dispel Kara’s distracting words, “one is for you.”
“For me?” Kara could hardly believe her own two ears. Was the pining and the hoping finally paying off? “You want to have coffee with me?”
“Only if you’re not busy, um, Kara,” Lena said, eyes dropping to Kara’s hastily pinned nametag, apparently completely missing Kara’s overjoyed tone and the way her face fell as she realized Lena didn’t actually remember her. “It’s just—this thing I’m working on is a pain, and sometimes talking it out can help. But I don’t have anyone I can talk to so I thought...well, you’ve been so nice, and I figured I’d ask.” She bit her lip, then hid her face behind her hands. “It was a dumb idea, I’m so sorry.”
“No,” Kara sighed, feeling bad for this woman, and wondering if she should do some research on the effects of sleep deprivation. “No, I can be your sounding board. Let me get your coffee and sandwich, okay?”
(They talked well into the morning—or well, Lena talked. And Kara learned so much. She learned Lena was in Midvale only for the summer, that she had to go back to National City in the fall. She learned Lena was in the middle of what could be a groundbreaking scientific breakthrough on reversing climate change, but that her brother had all but abandoned her in the effort.
She learned that Lena was smart. She was intelligent—talking about theories and principles that Kara had always thought only Alex would ever discuss with her—but she was more than that. She had a whip-like wit, she was clever, funny, and just plain brilliant.
But more than anything, Kara learned about how much Lena cared. She talked passionately about the issues she thought science could solve, admitted she prioritized her work over sleep rather regularly, spending the strangest sort of hours at the lab she’d outfitted in Midvale. She mentioned how much she wanted to just do, how she just wanted to help people, in any way she could.
And if Kara wasn’t in trouble before, well. She definitely was now.)
x
Lena walked into the diner one late afternoon, looking haggard and exhausted, and Kara couldn’t help but laugh as she brought her coffee and a sandwich.
“You can’t remember refills are free or that my name is Kara, but you can remember to come to this diner?”
“Don’t tell anyone,” Lena said conspiratorially, not even looking over at Kara, clearly too tired to have even noticed who was talking to her, “but I think I have a crush on the waitress.”
“Wanna know a secret?” Alex called from the other side of the diner. “The waitress has a crush on you, too.”
Kara turned to shoot her sister a glare, so she missed the smile that spread on Lena’s face.
x
“Did you know that I’m only here in Midvale for the summer?” Lena asked Kara sullenly one early morning, a despondent expression on her face as she looked at her sandwich.
“Yeah, you’ve mentioned,” Kara chuckled, moving to sit across from Lena.
(This was new—staying with Lena and chatting with her as she drank her coffee and ate her sandwich. Alex rolled her eyes every time she noticed, and if Eliza didn’t own the diner, Kara was pretty sure she’d be fired.
But although Lena could never fully remember what they talked about, she seemed to enjoy the company.)
“I’ve had my best meals here. I’ll miss it.”
“I genuinely worry if you eat at all when you’re not here if these are your best meals,” Kara confessed, watching with slight amusement as Lena drained the last of her coffee.
“It’s less the food and more the company, really,” Lena said as she put her coffee cup down, her eyes meeting Kara’s briefly.
“How many hours of sleep did you get last night?”
“Hmm?”
“So none?”
“I plead the fifth, your honor,” Lena muttered, averting her gaze. This drew another chuckle out of Kara.
“Come on, why do you bother with flirting when you’re so sleep deprived you won’t remember it anyway?”
Lena let out a soft sigh, meeting Kara’s eyes once more. “It’s the principle of the thing,” she breathed out.
Kara’s heart stuttered and she didn’t protest again.
x
“Kara, your girlfriend can’t nap at the table,” Alex said tiredly the next afternoon, pointing to where Lena was sitting, head pillowed by her arms, her breathing slow and deep. Kara rolled her eyes in response, making no move to go wake Lena up. Alex snorted. “Didn’t deny the girlfriend part though, did you?”
x
“Can I get—”
“A PB&J and two coffees?” Kara finished for Lena, holding up the plate in her hand and setting down a cup of coffee. “Refills are free, just so you know.”
“Right, right. I forgot,” Lena chuckled, cheeks reddening. “You know Jeremiah’s has—”
“—the best PB&Js in the world? So you’ve said,” Kara finished with a smile, sitting down across from Lena at her table. “Did you sleep at all last night?”
“No,” Lena admitted sheepishly, taking a sip of her coffee and closing her eyes at the taste—or more likely, at the introduction of caffeine into her system. “I had an idea last night, but nothing I tried would work. I think maybe I need to—why are you looking at me like that?”
“Like what?”
“Like you’re interested,” Lena supplied, eyes narrowing just a little.
“We talk about your work pretty often, Lena. Of course I’m interested.” Lena nodded, but she looked uneasy, even suspicious. For a wild moment, Kara wondered if she was in that Adam Sandler movie, and the very thought made her feel a tad nauseous. “I know you forget some details, but you know we talk, don’t you?”
Lena rolled her eyes. “Of course I do, Kara,” she said, waving Kara’s concern off easily. “I just—why are you interested?”
“In what?”
“In me?”
“Is that a trick question?” Kara asked, sitting back and crossing her arms over her chest. She knew her crinkle was making a stellar comeback, despite having mostly been held at bay by Lena’s near constant presence at the diner and the hope she’d been nursing in a tiny corner of her heart. Did Lena really not realize how much Kara, well, liked her?
“No, I just—” She cut herself off, looking more tired than ever. “I guess I don’t understand. I’m just some random customer who stole your sweatshirt and talks about work all the time. I don’t get why you’d bother.”
(Kara’s heart broke. Because Lena clearly didn’t realize how amazing she was.
And Kara suddenly knew she had to do everything in her power to make Lena see the light.)
“Because you’re incredible,” she said, not quite thinking it through. Or perhaps, she was thinking it and just chose to say it aloud. In any event, it had its desired effect: Lena’s eyes widened and she was shocked enough that she didn’t seem inclined to interrupt. So Kara rushed on. “I mean, you drink entirely too much coffee. You definitely need to sleep more. And I’m a little worried about your diet, and coming from me, that means your diet is really bad. But, gosh, Lena. You’re brilliant.”
“I really don’t think—” Lena tried, her cheeks bright red, but Kara wasn’t anywhere close to done.
“—you’re witty and kind and so smart. You care about so much, and you get this funny look on your face every time I have to remind you that refills are free, and when you’re really passionate about something, you wave your hands around. Also you snore a bit, but it’s the good kind, you know?”
“I snore? Wait, there’s a good kind of snoring?” Lena muttered, but Kara was on a roll.
“Sometimes when you laugh, you let out a snort, and that means you actually found it funny. And when you remember you’re talking about something we’ve already talked about, you duck your head and mumble, but then continue talking about it anyway. Why do I bother?” Kara asked rhetorically. “I’d be crazy not to.”
For nearly a whole minute, Lena was silent, and for a moment, Kara worried she’d been too much, revealed too much. But then, a smile broke on Lena’s face—wide, uninhibited, and overwhelmed. “Well, tell me how you really feel, why don’t you,” she joked, going for smug but managing only awe.
“I’m never going to get my sweatshirt back, am I?” Kara asked, dropping the topic they were on, both to spare Lena any further blushing (the red reaching past her ears and down her neck) and also to hide the depths of her own feelings (though she was rather sure that was a lost cause at this point).
“Nope,” Lena said, stressing the pop in the word and returning to her coffee.
x
“I was twelve the first time I had a peanut butter and jelly sandwich, you know,” Lena informed her conversationally one night. She kept her tone purposefully light, but Kara could tell it was taking a lot more effort for her to speak than normal. Her eyes were dull, the bags beneath her eyes still prominent but not quite purple like they’d been earlier in the summer. It looked like, in all honesty, that she’d had a decent amount of sleep recently, but for whatever reason, that didn’t translate to her mood.
“Twelve? That’s pretty late in the game,” Kara offered, chewing on her lip. She’d had her first PB&J when she was fourteen, so she wasn’t really in much of a position to judge. Then again, considering she didn’t even know the things existed until after she landed on this planet, she thought she could be excused.
“My adoptive parents were...well, strict,” Lena explained, shrugging. She was on her third cup of coffee, idly tearing at the sandwich in front of her, not having taken a single bite since she had it placed in front of her. “They were more into forcing my brother and I to pretend we liked foie gras and caviar at their silly functions than they were into feeding us something we may actually like.”
“Foie gras, huh,” Kara repeated, trying hard not to say anything. And yet: “Isn’t that when they—”
“Yup, that’s it.”
“Huh.”
“One night, after barely eating anything at one of these functions, my parents sent my brother and I to bed. You know, kind of like that scene in Sound of Music, except without the singing.”
“I’m sure it was adorable anyway,” Kara said lightly, hoping to make Lena smile. It worked: Lena’s lips quirked, and her eyes—so lifeless when they were usually so full of light—brightened just a bit.
“We decided we’d sneak into the kitchen. Get some real food from the staff. Something, you know?” Lena continued, urged on by Kara’s nodding. “But our nanny caught us.”
“Oh. So it actually was like Sound of Music,” Kara blurted out, unable to help her silly joke. Her view of Lena suddenly had morphed—she saw a lonely girl adopted into a rich family, and the obvious admiration in her voice for her brother taking on a tinge of melancholy as Kara remembered their relationship was strained. And it made her sad.
(Kara was no stranger to pain or sorrow, but she had always been able to comfort herself and surround herself with those she loved and loved her.
But who loved Lena?)
“She was furious at us,” Lena continued, only raising an eyebrow at Kara’s interruption, though her lips had quirked once more. “If we’d gotten caught by my father—or worse, my mother—she would have lost her job.” She let out a sigh, a frown tugging at her tiny smile until it evaporated completely, her brows furrowing, and her eyes shifting to the ceiling. “I told her what we were doing, why we weren’t in bed, and she got this look on her face. I can’t explain it.” Lena finally noticed she’d shredded her sandwich into an unrecognizable mess, and she withdrew her hands from the table, though Kara could tell she was still fidgeting with them in her lap. “She had her own small room. Had outfitted it with one of those mini-fridges and a burner plate, so she could avoid taking meals in the kitchen. I didn’t realize until much later that she had wanted to stay out of my mother’s way as much as possible.”
“Oh Lena,” Kara muttered, hearing the self-disgust in Lena’s tone, and not knowing what to do or say.
“So she took us to her room. Showed us her stash of peanut butter. Made us as many sandwiches as we wanted that night. She swore us to secrecy—my mother would never have approved of it, I don’t even think she allowed peanut butter in the house.” Lena stopped suddenly, the slight amusement in her tone dissipating as she took in a deep breath. “It didn’t matter anyway. She was fired soon after.” Lena sighed again and fell silent.
“Why are you telling me all this?” Kara asked quietly when the silence stretched out for several long minutes, Lena clearly lost in thought.
“I just—it was the first time I vividly remember someone doing something kind just for the sake of being kind,” Lena explained slowly, her eyes meeting Kara’s. “I named the environmental initiative after her, you know. The BETH Project. But right as I’m about to make a breakthrough—” She stopped, groaned, dropping her head to the table. “My brother cut funding. Decided he wants LuthorCorp to focus on other endeavours. He says this is a waste of time.” Her voice was slightly muffled by the wooden table, but her words were crystal clear.
(And suddenly, a lot of things made sense: Lena’s money, her genius, her relationship with her brother, the fact she could just up and go to a small town in order to work on her research.
She was Lena Luthor, as in one of the smartest people in the world.
And Kara had been too busy feeding her sandwiches and falling in love with her to notice.)
“When did this happen?” Kara asked, her thoughts straying to something else. After all, if her research had been defunded, did that mean Lena would leave?
“Yesterday. After I got off the phone with him, I just...slept. For I think eighteen hours straight. I just—I’m wanted back soon, and I realized that I’d like to be here as much as possible until then.” She raised her head, eyeing Kara warily, as if worried Kara would react poorly to the confession.
(Kara’s heart thudded in her chest, practically pounding against her ribs, and for a moment she felt a little dizzy.
Lena wanted to be here as much as possible.)
“Well, the diner is always open to you,” Kara managed, giving Lena a grin.
“I’m not exactly here for the diner,” Lena laughed, the normal glint, light, brightness of her eyes reappearing. “I only ever came here again after the first time because of you.” Something must have shown on her face, because Lena’s smile widened just a bit. “You went out of your way to get me something not even on the menu. Kind for the sake of being kind.”
Kara felt guilt twist in her chest for a moment, deciding almost immediately to come clean. “It wasn’t like that,” she admitted, wrinkling her nose. “You’re, um, really pretty. Did you know that?” If she thought this would make Lena get up and storm off, if she thought it would scare her away, Kara was sorely mistaken.
It made Lena chuckle, made her place one of her hands back on the table, palm up—a clear invitation.
“I had similar thoughts about you when I kept coming back,” Lena informed her.
(So Kara took her hand.)
x
“I saw you two holding hands,” Alex said with a grin a few hours later, Kelly shaking her head in amusement behind her. “So did you finally ask her out?”
Kara scoffed. “Of course not. She’s Lena Luthor. Why would she want to date me?”
From the kitchen, Mon-El let out a loud, annoyed groan, Alex sighed tiredly, and Kelly chuckled victoriously.
“You owe me twenty bucks,” she informed her girlfriend, looking mighty pleased with herself.
Alex, however, was focused on Kara. “What are you waiting for?” she asked, frowning. “She makes those eyes at you, and you still don’t realize she likes you?”
(And well, that wasn’t it. It wasn’t that Kara didn’t realize. She suspected her feelings were returned but, well….
Lena was changing the world, and Kara was still struggling with the sting of Snapper dropping her from the internship with his newspaper.)
“It’s fine, Alex,” Kelly interjected, looking from Kara to her girlfriend and her instincts to help kicking in. “Maybe we should give Kara some space.”
x
Lena stopped coming in at inconsistently consistent times. Rather, she showed up at Kara’s shifts, and then came up with things for them to do when Kara wasn’t working.
(She was no longer sleep-deprived and forgetful. She focused on Kara’s every word, seemingly endlessly interested in what Kara had to say, and she never seemed to tire of Kara’s presence.
It was wonderful. More than wonderful. Kara was at a loss to explain it.)
These ‘dates’ as Alex called them were going incredibly well. Until one afternoon, when Kara was sitting across from Lena as she took her break, and her hands clenched into fists when a guy who clearly wasn’t from Midvale walked over to their table, and grinned down at Lena.
“Hey,” he said, making a strange movement with his head, chin jutting out. “You come here often?”
(What a terrible line. What a terrible, terrible, terrible—)
“I do, actually,” Lena responded, her eyes on Kara. “I have a crush on the waitress.”
“Right,” said the guy, though he looked confused. After a moment, when it became clear neither Kara nor Lena would say anything else (or even look at him), he made the strange movement with his head again and returned to his own table.
“Sorry,” Lena said once he was gone, eyes still focused on Kara, running her teeth over her bottom lip. “Men, right?” she said, as if they were in on a joke.
“Ah, the perils of being an attractive woman,” Kara offered, forcing her hands to unclench, trying to keep up with the light tone, not sure if she was so angry because she was jealous or because that guy felt he had the right to come up and try to talk to Lena when Kara was right there, when she was...well, a friend?
“Do you think I’m attractive?” Lena asked, her voice full of something Kara couldn’t quite name, a small smile playing on her lips.
“Everyone thinks you’re attractive,” Kara said, eyes finding that guy again and glaring.
“Right. But do you?”
(It felt like a test. And when Kara turned back to her, Lena looked so invested in the answer.
And she felt herself give in.)
“Why wouldn’t I be included in ‘everyone?’” she tried, hedging just a bit more.
“I don’t care what ‘everyone’ thinks. I care what you think.”  
Kara heaved a deep breath, trying to control her pounding heart. “Obviously, I think you’re attractive,” she admitted, thinking it was worth saying when Lena’s expression turned utterly pleased.
“Well, if it makes you feel better, I think you’re attractive too.”
(And it did.
Make Kara feel better.)
x
They were outside the back entrance of the diner, sitting on the steps with their knees drawn up to their chests.
“Are you sure you have to leave tomorrow?” Kara asked softly, wishing she didn’t have to break the silence between them. Lena’s shoulder was pressed against hers, and despite the hot, muggy day, she didn’t quite mind it. In fact, she moved closer, wanting as much of Lena as she could get before she had to go without her.
“The NC branch of LuthorCorp needs someone to head it. Lex has asked me. He’s been acting strangely lately, I don’t feel comfortable saying no to him right now.”
“You know, it’s funny,” Kara mumbled, staring at her shoes, determinedly not thinking about Lena leaving, “I wasn’t even supposed to be here this summer. But my internship was scrapped because Snapper Carr and Lois Lane are working on some exposé to do with arms deals.” She looked over at Lena with a smile. “Is it terrible that I’m sort of glad now? I mean, I needed Snapper’s recommendation, so I’ll never get to work for Cat Grant, but I met you. It seems...worth it.”
“I have some connections,” Lena said, bumping her shoulder against Kara’s. “I could talk to Cat Grant for you.”
“My cousin offered too, but no. I want to get a job with her on my own merits.”
“You’ll get one. She’ll be crazy not to hire you.”
Kara smiled gratefully and they lapsed into silence, hands tangled between them. But as the seconds stretched into minutes, Lena seemed increasingly...agitated.
“You live in National City, right?” she asked suddenly, pulling away rather abruptly and roughly.
“Y-yeah,” Kara answered, a little confused.
“And you’ll be back in National City once your term starts? What two weeks from now?”
“Yes?”
“Then why are we acting like this is the last time we’ll see each other?” She sounded a little...well, angry. Kara blinked in confusion.
“Lena...you’re a prodigy. You have like a dozen degrees—”
“—don’t exaggerate—”
“—you’re going to be in charge of the LuthorCorp branch in National City. And I’m just a journalism student without career prospects after graduation.”
(And an alien. But she figured that conversation could wait.)
“Kara, stop,” Lena hissed, turning slightly so that she was facing Kara completely. Kara missed her warmth. “Listen, it’s really simple. I like you. I really like you. Do you like me?”
Kara was too shocked by the bluntness of the question and the forcefulness of the way Lena had expressed her own feelings to think too hard about what words came out of her mouth next. “I—yes, of course I do, how could I not?”
“Then would you do me a favor?”
“Yeah—yes, of course. Anything.”
“Would you promise that you’ll ask me out on a real date when we’re both in National City and then could you please, please, just kiss me?”
(It took a moment for Kara to comprehend the request, but when she finally did she was all too happy to comply.
And if she did it in the reverse order—well, neither of them much minded.)
189 notes · View notes
thehandflextm · 4 years
Text
My Immortal...but make it Pride and Prejudice
For my final project, I decided to rewrite My Immortal (the infamous fanfiction) as if the original author were writing a Pride and Prejudice fanfiction instead of a Harry Potter one! I do not own My Immortal nor do I own Pride and Prejudice! Basically none of this is my original text, all credit goes to Tara Gilesbie and Jane Austen.
Chapter 1.
AN: Special fangz (get it, coz Im goffik) 2 my gf (ew not in that way) raven, bloodytearz666 4 helpin me wif da story and spelling. U rok! Justin ur da luv of my deprzzing life u rok 2! Dis stry is like if lizzy wuz goth so itz nut boring! MCR ROX!
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
Hi my name is Lizzy Dark’ness Dementia Raven Bennet and I have long curly brown hair with purple streaks and red tips that reaches my mid-back and icy blue eyes like limpid tears and a lot of people tell me I look like Amy Lee (AN: if u don’t know who she is get da hell out of here!). I’m a vampire but my teeth are straight and white. I have pale white skin. I live in a town called Longbourn with my parents, my three younger sisters, and one older sister (I’m twenty). I’m a goth (in case you couldn’t tell) and I wear mostly black. For example today I was wearing a black corset with matching lace around it and a black leather miniskirt, pink fishnets and black combat boots. I was wearing black lipstick, white foundation, black eyeliner and red eye shadow. I was walking outside Longbourn. It was snowing and raining so there was no sun, which I was very happy about. A lot of preps stared at me. I put up my middle finger at them.
“Hey Lizzy!” shouted a voice. I looked up. It was…. Fitzwilliam Darcy!
“What’s up Mr. Darcy?” I asked.
“Nothing.” he said shyly.
But then, I heard my sisters call me and I had to go away.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
AN: IS it good? PLZ tell me fangz!
Chapter 2.
AN: Fangz 2 bloodytearz666 4 helpin me wif da chapta! BTW preps stop flaming ma story ok!
XXXXXXXXXXXXXXXXXXXXXX666XXXXXXXXXXXXXXXXXXXXXXXX
The next day I woke up in my bedroom. It was snowing and raining again. I opened the door of my coffin and drank some blood from a bottle I had. My coffin was black ebony and inside it was hot pink velvet with black lace on the ends. I got out of my coffin and took of my giant MCR t-shirt which I used for pajamas. Instead, I put on a black leather dress, a pentagram necklace, combat boots and black fishnets on. I put on four pairs of earrings in my pierced ears, and put my hair in a kind of messy bun.
My sister, Jane (AN: Raven dis is u!) woke up then and grinned at me. She flipped her long waist-length blond hair with pink streaks and opened her forest-green eyes. She put on her Marilyn Manson t-shirt with a black mini, fishnets and pointy high-heeled boots. We put on our makeup (black lipstick white foundation and black eyeliner.)
“OMFG, I saw you talking to Mr. Darcy yesterday! Did you know he has ten thousand a year?!” she said excitedly.
“Yeah? So?” I said, blushing.
“Do you like Mr. Darcy?” she asked as we left our shared bedroom and went downstairs.
“No I so fucking don’t!” I shouted.
“Yeah right!” she exclaimed. Just then, Mr. Darcy knocked on the door! One of the servants opened the door and he  walked up to me.
“Hi.” he said.
“Hi.” I replied flirtily.
“Guess what.” he said.
“What?” I asked.
“Well, Charles Bingley and I are hosting a ball at Netherfield Park” he told me.
“Oh. My. Fucking. God!” I screamed. I love going to balls!. Dancing is my favorite thing to do, besides reading or walking or drinking blood.
“Well…. do you want to go with me?” he asked.
I gasped.
Chapter 3.
AN: STOP FLAMMING DA STORY PREPZ OK I KNO THEY DIDNT HV GOFF CLOSE N 1800S!! I JS WNT THEM TO BE GOHT! odderwize fangs 2 da goffik ppl 4 da good reveiws! FANGS AGEN RAVEN!.
XXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXXX
On the night of the ball I put on my black lace-up boots with high heels. Underneath them were ripped red fishnets. Then I put on a black leather minidress with all this corset stuff on the back and front. I put on matching fishnet on my arms. I straightened my hair and made it look all spiky. I felt a little depressed then, so I slit one of my wrists. I read a depressing book while I waited for it to stop bleeding. I painted my nails black and put on TONS of black eyeliner. Then I put on some black lipstick. I didn’t put on foundation because I was pale anyway. I drank some human blood so I was ready to go to the ball.
I went outside. Mr. Darcy was waiting there in front of his carriage. He was wearing a his normal fancy clothes and a little eyeliner (AN: A lot fo kewl boiz wer it ok!).
“Hi Mr. Darcy!” I said in a depressed voice.
“Hi Lizzy.” he said back. We walked into hisblack carriage and drove to NetherfieldWhen we got there, we both hopped out of the carriage. We went to the dance floor and danced together.
“That violinist is so fucking hot.” I said to Mr. Darcy, pointing to him as he played, filling the room with his amazing music.
Suddenly Mr. Darcy looked sad.
“What’s wrong?” I asked as we moshed to the music. Then I caught on.
“Hey, it’s ok I don’t like him better than YOU!” I said.
“Really?” asked Mr. Darcy sensitively and he put his arm around me all protective.
“Really.” I said. “Besides I don’t even know him and he’s not even rich.” I said disgustedly.
The night went on really well, and I had a great time. So did Mr. Darcy. After the ball, we drank some wine Mr. Darcy and I crawled back into the carriage, but Mr. Darcy didn’t go back to Longbourn, instead he drove the carriage into……………………… the forest!
Chapter 4.
AN: I sed stup flaming ok lizzy’s name is LZIZY nut mary su OK! DARCY IS SOO IN LUV wif her dat he is acting defrent! dey nu eechodder b4 ok!
XXXXXXXXXXXXXXXXXX666XXXXXXXXXXXXXXXXXXXX
“MR. DARCY!” I shouted. “What the fuck do you think you are doing?”
Darcy didn’t answer but he stopped the flying car and he walked out of it. I walked out of it too, curiously.
“What the fucking hell?” I asked angrily.
“Lizzy?” he asked.
“What?” I snapped.
Mr. Darcy leaned in extra-close and I looked into his gothic red eyes (he was wearing color contacts) which revealed so much depressing sorrow and evilness and then suddenly I didn’t feel mad anymore.
And then…………… suddenly just as I Mr. Dacry kissed me passionately. Darcy climbed on top of me and we started to make out keenly against a tree. He took of my top and I took of his clothes. I even took of my bra. Then he put his thingie into my you-know-what and we did it for the first time.
“Oh! Oh! Oh! ” I screamed. I was beginning to get an orgasm. We started to kiss everywhere and my pale body became all warm. And then….
“WHAT THE HELL ARE YOU DOING YOU MOTHERFUKERS!”
It was…………………………………………………….Mr. Bennet!
Chapter 5.
AN: shjt up prepz ok! PS I wnot update ubtil u give me goood revows!
XXXXXXXXXXXXXXXX666XXXXXXXXXXXXXXXXXX
The next day I woke up in my coffin. I put on a black miniskirt that was all ripped around the end and a matching top with red skulls all over it and high heeled boots that were black. I put on two pairs of skull earrings, and two crosses in my ears. I spray-painted my hair with purple.
In the breakfast room, I ate some Count Chocula cereal with blood instead of milk, and a glass of red blood. Suddenly someone bumped into me. All the blood spilled over my top.
“Bastard!” I shouted angrily. I regretted saying it when I looked up cause I was looking into the pale white face of a gothic boy with spiky black hair with red streaks in it. He was wearing so much eyeliner that I was going down his face and he was wearing black lipstick. He was wearing red contact lenses just like Mr Darcy’s. He had a manly stubble on his chin. He had a sexy English accent. He looked exactly like Joel Madden. He was so sexy that my body went all hot when I saw him kind of like an erection only I’m a girl so I didn’t get one you sicko. He was here with some other officers to visit my sister, Lydia.
“I’m so sorry.” he said in a shy voice.
“That’s all right. What’s your name?” I questioned.
“My name’s George Wickham, although most people call me Vampire these days.” he grumbled.
“Why?” I exclaimed.
“Because I love the taste of human blood.” he giggled.
“Well, I am a vampire.” I confessed.
“Really?” he whimpered.
“Yeah.” I roared.
We sat down to talk for a while. Then Mr. Darcy came up behind me and told me he had a surprise for me so I went away with him.
Chapter 6.
AN: stop flaming ok! i skipped time cuz the middle is boring lul so jus pretnd it al happned!MCR ROX!
XXXXXXXXXXXXXXXXXX666XXXXXXXXXXX
I was trying to sleep when suddenly, an horrible woman with beady eyes and wrinkly skin and everything started knocking on the door! She was wearing all black but it was obvious she wasn’t gothic. It was…… Lady Catherine de Bourgh!
“No!” I shouted in a scared voice but then Lady Catherine grabbed my arm and I couldn’t run away.
“Let me go!” I shouted at her and scratched her arm. Lady Catherine fell on her but and started to scream. I felt bad for her even though I’m a sadist so I stopped.
“Lizzy.” she yelled. “Thou must not marry Fitzwilliam Darcy!”
I thought about Mr. Darcy and his sexah eyes and his black hair. I remembered that Mr. Wickham had said that Mr. Darcy was evel, but he told me himself it was all Wickham’s fault!
“No! Please!” I begged.
“Thou must!” she yelled. “If thou does not, then I shall tell everyone about how Lydia and Wickhma had sex before marriage !”
“How did you know?” I asked in a surprised way.
Lay Catherine got a dude-ur-so-retarded look on her face. “Everyone thinks that already.” she answered cruelly. “And if you doth marry Darcy, then thou know what will happen to your sister!” she shouted. Then she ran away angrily.
I was so scared and mad I didn’t know what to do. Suddenly Dracy came into the house.
“Mr. Darcy!” I said. “Hi!”
“Hi.” he said back but his face was all sad. He was wearing white foundation and messy eyeliner kind of like a pentagram (geddit) between Joel Madden and Gerard Way.
“Are you okay?” I asked.
“No.” he answered.
“I’m sorry I got all mad at you but I thought you were mean to Mr. Wickham.” I expelled.
“That’s okay.” he said all depressed “Will you mary me?”
“Yes!!” i said exitedly and we went back into Longbourn together making out.
Chapter 7
AN: well I hav noffing 2 say but evrt1 stup glamming ok!!111 if any gofik ppl r reading dis den u rok!!!11 omfg im leeving dubya pretty soon kant wait!!! Diz wil prolly be da last chaptah until I kum bak.
XXXXXXXXXXXXXXX666XXXXXXXXXXXXXXXXXXXXXX
Mr. Darcy and I went to Jan’e swedding to Mr. Bingley and we were all happy and clapped when they kissed! Even tho I’m goth, I stil love my sister and am glad she’s happy. Mr. Darcy and I announced our engagement and everyone was happy. My mom fainted with hpapiness because she knew he was rich lolz. My dad didn’t want tme to marry him at first bcuz he though Drayc was meant to me but I told him i loved him so it wuz ok.
Whe got married and i wore al black corest, red fishnets on my legs and purple fishnets on my arms ,a blakc lace vail, and a lether black skirt. Mr Darcy told me I was beautiful and now we’re married!
5 notes · View notes
thewolfswriting · 5 years
Text
The Bad Boy and The Good Girl Chapter 7 (Final)
A/N: I hope you enjoyed reading this as I did writing it. I might do a one part sequel, haven't decided yet.
Pairing: Billy x Reader
Word Count: 1,338
Tag List: @amarachoren @cynthianokamaria @crazygirl3001 @beyxlm @obsessive-aspie-girl @slither-in-a-half @dreamwavej @okaybutsteveharrington @1998--js @jojo-buttercup @savagesuccubus @arkhamasylumpatient-blog1 @nintendhoes-3ds @vickilove23 @billy-spit
Warnings: Pregnancy, Angst, Fluff
---
You hovered over the toilet on your knees emptying your stomach, the nausea hitting you for the...fifth? Sixth week in a row? You couldn't remember when you started to get sick. The sensitivity in smells, headaches, and dizziness started not long after the nausea.
There was a knock on the bathroom door and the sound of your mother's voice "Y/N? Are you okay?" Your mother noticed these certain changes. You flushed the toilet before standing up at the sink, washing your hands and mouth before responding
"Yes mom. I'm fine." You looked in the mirror, noticing the paleness of your skin, and the dark circles around your eyes. It's not like you didn't get much sleep, all you wanted to do now was sleep. You just hoped it was just sickness and that it would pass soon
---
Nancy showed up at your house later that day. She too was worried about you, except she had a theory "I haven't seen you since last week. You feeling better?" You sat on your bed to minimize the dizziness and nausea "I feel fine." Liar. Nancy knew better "Y/N I don't think it's a stomach virus." She hesitated "What if your pregnant?" You looked at her like she was nuts. You haven't given it much thought, until now.
You didn't even realize you had missed your monthly. "Oh, god Nancy don't say that. I mean it's impossible, right?" What if her theory is correct?
"Only one way to find out."
Nancy took you to the nearest pharmacy since you didn't want to go alone. It was safe to say you were terrified. After drove you back to your house you stayed seated in the passenger seat in silence before she spoke "Call me if you need anything." You smiled and nodded before sliding out of the car and walking towards your house. It's now or never.
---
You sat on the bathroom floor, waiting for the results from the pregnancy test you just took. So many thoughts danced around in your head. What if it's positive? What would your mother and father say? What would Billy...you didn't even want to think about what he would do or say.
Minutes on what seemed like hours went by. You got to your feet and took a deep breath before looking at the test, you hoped would be negative. But you hoped all too much. Positive. The test was positive.
Your hands began to shake as tears rolled down your face. You sank down to the floor, pulling your knees to your chest, sobbing. Once again there was a knock on the door "Come in."
Your mother opened the door seeing you on the floor "Y/N, what's wrong? I heard you crying." She bent to her knees as you handed her the test. She took a deep sigh "Billy's I'm assuming?" Billy met your parents a few days after they came back from town "Are you mad?"
"No, I'm not mad. I'm not happy, but I'm not mad. Your father needs to know too and you're going to have to tell Billy at some point." She was right and you knew it. The thought of telling him only made you even more terrified "I'm going to let you decide if you want to keep it. I'll support whatever decision you make." Of course you wanted to keep it. Maybe everything would be okay after all.
---
It's been a week since you found out, and you still haven't told Billy. But he wasn't stupid, he noticed your changes and started asking questions, even though you made up an excuse for every single one. But today was the way you were going to tell him. Why? Because today you had your first appointment.
The car ride to your appointment was silent as you were nervous, it was safe to say your mother was so, but only because you were. After the usual questions, standard exams and having you take another test it wasn't long before the doctor came in "Good afternoon, I'm Doctor Curry. You must be Y/N?" She smiled at you.
"That would be me." You said, still nervous.
Dr. Curry sat down on the stool in front of you and looked at her clipboard with your papers on it "Well, the test we had you take came back positive. If you wouldn't mind I'd like to do an ultrasound?" You looked at your mother, hoping she would nod in approval, which she did. A few minutes later a nurse who you assumed was the ultrasound technician came in with the ultrasound machine.
After she squeezed the gel on your abdomen and rolled around the transducer, the nurse pointed to the screen "That's the amniotic sack and that little one there is your baby. And this-" She pressed a few buttons "Is the heart beat." You smiled at the sound of hearing your baby's heart beat for the first time. "For the approximate size, I'd say you are about seven weeks." The nurse spoke, breaking the silence.
Seven weeks along of having a life growing inside your womb. A life you began to love. A life you were hoping Billy would too.
---
It was later that night when Billy came to your house and took you to the top of the hill, where you had your first date. Despite the fact that you were terrified, it was the perfect time to tell him.
Billy took your hands in his, rubbing the back with his thumb, he noticed your expression in body language "You wanna tell me what's going on?"
You blinked a few times to hold back the tears that pricked your eyes. You didn't even know where to begin. "You know how I've been getting dizzy, having nausea and all that other stuff?"
He nodded "What about it?"
Now is when you couldn't hold back the tears "Well, I went to the doctor today. I'm not sick Billy-"
He furrowed his eyebrows, cutting you off mid sentence, his voice changing "Are you telling me what I think you are?"
"I'm pregnant."
Billy let go of your hand and looked out the driver side window, running a hand over his face. He sighed deeply before regaining his composure "How long have you known?"
"A week." You said in barely a whisper.
That's when Billy almost lost it, but he did his best to keep his anger under control, not wanting to scare you. "You've known for a week and you just now decided to tell me?! What the hell Y/N?"
You opened the passenger door and climbed out, walking away from the car. Billy sat there for a few seconds deciding if he should go after you, even though he knew he made the situation worse by raising his voice, he didn't want to lose you.
He climbed out of the driver "Y/N, wait" jogging to catch up with you. Finally when he did, he grabbed your arm putting you to a halt "I'm sorry for raising my voice. But I want to know why you just now told me."
You looked him in the eye, the tears still streaming down your face "Because I was scared. I was scared that you would leave and that you would be mad at me."
Billy didn't know what to say. But what he did know was that it hurt knowing you thought he would've left. Seeing you scared and crying hurt him more than anything, even when he wouldn't admit it.
Billy pulled you against his chest and wrapped his arms around you "I promise you I'm not mad and I'm not leaving. If never wanted anybody more than I do you. I love you, and I'll love this baby just the same."
You rested your head on his chest, getting the comfort you needed and wanted. You were relieved to hear the words he just said and could tell he meant it. You have a life growing in your womb that would be loved by you and Billy.
154 notes · View notes
chocolatemillkk · 6 years
Text
New Man II (JS)
Previously: "I'll see you around," I say softly and turn to leave before her sadness seeped into me too. Leaving her there felt like stranding her but she knew where to find me, I tell myself. If she wanted me, she would know where to look.
"I thought I knew her," I vent to Caspar. "five years of dating and you think you know everything about a person!"
"Maybe she's changed," he suggests.
"No." I say absolutely. "It's fake! The person she is around that guy is for his sake, she hasn't changed. She's still my Y/N."
Caspar eyes me, "But maybe she did change after she realised you weren't going to propose."
I groan, not liking that answer and slide further down the sofa, covering my face with a pillow. "I gave her an ultimatum." I say with it pressed against me. "And she chose him. But she wants to choose me! I know it. I know her!"
"You realise I can't hear anything you're saying?"
I sigh loudly but keep the pillow over my face-he could understand that.
It had been about a month since I gave Y/N the ultimatum. At first, I was running on a premature high, anticipating her response, thinking it would be a matter of days before she called to say she wanted me back. But the days stretched into a week. Then two. Then I spotted a picture on her instagram her man took and realised they were still together.
I felt like those cartoon characters carrying a gray cloud above their heads. I woke up with it and fell asleep, the gray cloud still rumbling and drizzly. My life felt gloomy and I knew I was the only one to blame. I felt a little crazy.
So many times I picked up my phone to text Y/N but I wanted to respect our last conversation and give her space. I just tried to hold onto the hope that it wouldn't be an infinite amount of space. I was still here to give her the love if she wanted it-I hope she still knew that.
"How do you feel about a date?" Caspar asks.
"I don't want to string a girl along when I'm bloody grieving my last relationship." I snap.
"Fine," Caspar exclaims.
•••
Two weeks. It takes two weeks before I decide it was enough grieving. I decide to test the waters and go to a club with my friends. I wasn't about to go home with someone but I could at least see my friends after being a shut in for weeks.
"I'm surprised to see you here with a smile." Oli says.
"We're just happy you finally came out." Caspar cuts Josh who hadn't been sympathetic of my situation since that night at the club. For him, I was the idiot letting a future with Y/N scare me.
"I was wondering why the club darkened suddenly until I saw you walk in," Josh continues over Caspar.
"It was probably just your big head blocking the lights," I snipe back.
"Oh look," Caspar says with an odd tone. "It's my friend over there! Look Joe, my friend!"
I turn to who he's waving at. A girl walking up to us with heeled boots and her short y/h/c hair tucked behind her ears. It was the same sort of hairstyle Y/N had before we broke up. Actually, I start to realise, they had the same eye colour and body type.
"Caspar!" I shove him out of her view. "What are you doing?"
"Saying hi to my friend!" Caspar continues to play the stupid card and before I can say anything she's approached us.
Caspar's loud and over-the-top as he introduces us and then ducks away. Meanwhile Josh shakes his head and walks away as the rest of the boys give me a thumbs up.
"Sorry I don't know why Caspar just made this really weird." I turn my back to the boys.
"Oh that's alright," she flashes a perfect smile and touches my arm. "Wanna grab a drink?"
"Yeah," I follow her because I didn't know how to tell her nicely I wasn't interested in this setup. And this forced interaction triggers an anxious feeling that slowly builds.
"What do you usually drink?" She asks. "You don't seem the fancy-"
"Sorry I um-I think I need some fresh air. It's really...loud. In here."
"Oh!" She nods. "Of course. Let's go."
I consider telling her I wanted to go alone but she's already slipping between the crowd. I follow, feeling more and more miserable.
Outside, the air does little to help and I try to take deep breaths to feel better.
"Are you alright?" Caspar's friend who's name I'd missed looks concerned. She puts her hand against my forehead and then rests it on my shoulder. "Do you have a fever or something?"
"Honestly it's just not really a good time right now and I'm-"
"Joe?" The voice behind me is laced with disbelief and I know who it is without even turning. How could I not?
"Y/N," I say before I see her face. She's with her best friend and both of them look like they were about to head into the club. She squints at me, her gaze shifting to Caspar's friend. She raises an eyebrow as she takes in how much she looked like her. When she zeroes in on her hand on my shoulder, I know this wasn't going to end well. Casp's friend must have felt the tension too as she slips her hand off.
"So much for waiting for me," Y/N says in an icy tone before brushing past us.
"Wait," I try to say and any anxiety I'd managed to get rid of by the night air comes back doubled.
"Is she angry you didn't wait for her?" Casp's friend is still standing by me. How could I explain that's not what she meant, that she thought I'd betrayed her again.
"It's not that exactly, I'm just going to..." I try to go back indoors again but the overwhelming crowd is too thick to find Y/N and I'm on the verge of becoming an all out anxious mess so I rush back out and apologize to Caspar's friend for leaving so suddenly but I just had to go.
•••
Well how was I supposed to know she would show up? Caspar texts me back the next morning after the angry texts I sent last night. If he hadn't set me up I could have talked to Y/N. I was just trying to help out.
After I asked you not to
C: Well at least you saw Y/N
J: I didn't want to just see her! I wanted to fucking talk to her
C: If you still have her number why don't you just call her?
J: I already told you. I want to give her space. She's still with that dick
C: Invite her out to coffee
J: Do you ever listen to what I say?
C: Of course. The three ... show up before disappearing.
J: What is it?
C: I promise if you go talk to her it will help you get closure. Invite her our or stop by her flat
J: I'm not bloody stopping by her flat. Just stop giving me stupid advice. I was fuming
C: ...
I throw my phone beside me and rub at my eyes, trying to scrub the look from Y/N's face. I pick my phone up again but Caspar's still typing. How could he think showing up at her flat would be a good idea?
But if I was to talk to her....
As frustrating as Caspar's plans had been for me, I was suddenly realising that I should just talk to her. It was over a month since the ultimatum-that was enough time for her to decide. And at least this way I could get my closure. Or one last shot...
I check the time and figure I had ten minutes to look decent if I wanted to catch Y/N.
So ten minutes of getting ready, another five of trying to locate what I wanted to bring with, and another twenty-three of travelling, I stop by Y/N's work. When we were going out and I was ever in the area, I would wait for her lunch break around this time. And sure enough, she walks out as a few others trickle out.
"Y/N," I call out. She turns and looks mildly panicked as I stride up to her. "We need to talk."
"There's nothing to say." Y/N steps back. "Joe if you want to move on don't explain it to me. I don't care."
But her eyes show she does.
"It's not what it looked like! It was Caspar forcing me to talk to other people!"
"Shh," Y/N says as more people exit the building and look our way. "I work with these people!" She scolds me before walking around the corner of the building. I dodge a few people to catch up.
"Listen." I say when we find a space to talk. "I wasn't giving up on you yesterday. I'm not giving up on you. Not ever."
"You already gave up on me when you were too afraid to propose Joe." Y/N says. Her gentle tone does nothing to soften the blow of her words and I can see the hurt reflected in her eyes.
“I-I don’t know. I don’t know what I was thinking.”
“Yeah me either. And I don’t know what you’re thinking right now either. Why did you come all the way here to say you weren't with that girl yesterday?"
I look at Y/N, the girl who was the only person who could ever make me feel whole. “I’m thinking you should give me a chance-and before you say anything...I know. I’m an idiot for asking but if you still want us...tell me now. Forget your new man and-"
"Joe I broke up with Brian."
"What?" I stare at her and she looks back like I should have already known this information. Then it clicks-her and Caspar must have talked yesterday. Except he didn't tell me. "When?"
"A few weeks ago."
A few weeks? Why didn't she tell me? Why was she holding out for so long? Did she really not want me anymore? I start to feel sick. Did I fuck up that badly?
And as if she knew what I was thinking-which she probably did-she says, "I needed space Joe! I didn't want to be an idiot, just running back to her ex. I broke up with you for a reason remember?"
"I know! But that reason's irr-"
"Brian was a really good guy Joe-I know you don't think so but he was. Maybe I was different around him but he made me realise something. I deserve a lot more."
There's a lump in my throat the size of a chestnut and I can't push it down no matter how hard I swallow. Y/N stays frozen in place staring at me, almost testing me to see if my reaction was going to be the one she wished. I could only hope it is.
"Being apart I realised that too." And it was the truth. I didn't give her the security she always craved and she deserved more from me. She raises an eyebrow. "You wanted a steady future and all I could think about was the now. But I'm crazy about you-and more and more if we grew old together."
"Well don't go too mad," she says sarcastically but I know her and it was her way of teasing. So even though it's not much, it feel like a ray of light beaming down on me. She wasn't as angry with me than I thought.
"Well how about we go mad together." I say, almost begging her. "Together. If you want us to be."
She doesn't answer, chewing on her bottom lip looking crestfallen and heartbreakingly beautiful. The seconds pass and I wait for her to say anything to me that tells me we would be okay.
"I want a together." She starts. "With the person I love."
I run my fingers through my hair and then shove my hands in my pocket, clutching the contents inside for something to do. Was I that person?
"When I was with Brian, I realised something else too." Y/N says. "No matter what he did, it never compared to you. I tried changing myself, the way I saw things-trying to rid myself of you but it was impossible. You've put a bloody curse on me-I hated and I loved you just as much."
"I think most people would say I put a spell not a curse." I feel a grin slowly breaking out on my face.
"I'm not most people then am I?" Y/N gives a cheeky smile and the answer to every question I had vanishes. I knew.
"You're definitely not most people." I tug her hand so she stumbles into me. "There's nobody on earth that's like you."
"You did try though didn't you?" She grins.
"Huh?" I ask.
"That girl yesterday? She looked a lot like-"
"That was Caspar!" I shout before she could continue the cringe memory. "I swear!"
"I know," she says simply before stretching up and pulling my face towards hers. As I wrap my arms around the only girl I ever wanted, my gray clouds break and finally evaporate to reveal a shining sun.
"Wait," I pull away even though I really didn't want to. "I have something for you."
I watch nervously as Y/N goes from curious to confused to alarmed as I go on one knee and hold out the box in my hand.
"This isn't an engagement ring-we only just started dating again. But it's a promise for the future. That one day I'll surprised you with another ring that will mean a lot more."
Y/N stares at the silver band and then looks back at me, "You brought this with you even though you thought I was still with Brian?"
"I thought I could still have a chance," I shrug and she throws her head back laughing before accepting the ring and sealing our future forever.
29 notes · View notes
jungnoir · 7 years
Note
Hey i wanted to request Jeno + "friends can kiss each other from time to time" :) i dont really care if its a drabble or headcanons or what ever.
for real love;
lee jeno | “Friends can kiss each other a little from time to time right?” robot!au. | 3.1k words. | angst, romance (or is it?).
Tumblr media
a/n: I got this prompt quite a few times, so I’m attempting to keep each one as unique as possible 😅. mood music.
Your creation was going to save mankind. JN 0423 was flawless, a marvel to humans in the day and age where all the dreams of the past were finally coming true. Flying cars, technology breathing in the very ground you walked on, and robots who passed as humans. In a dog-eat-dog world where humans were dropping like flies, artificial intelligence could do the jobs humans could not. Artificial intelligence could become the newest necessity, and yours was the very first of its kind.
His name was JN 0423, but you called him Jeno.
You weren’t the only one who had a hand in creating Jeno, but you were definitely the one calling the shots. Straight out of high school, your impeccable mind had gotten you into the best school in the country and on the path to your life goal, one you had claimed ever since you were in elementary school: you were going to create one of the very first fully functioning artificial intelligence robots in the world. Your robot would be able to function completely on its own, from forming a personality to becoming incredibly self-aware. The biggest part you’d play in taking care of Jeno would be fixing up his parts every now and then, and even then, he could probably do it faster (and better, though you would never admit it for your pride) than you.
Sure enough, before you had even hit 20, you had done it. You had created him.
His design was incredibly ambiguous at first; You had no plans to gender him, simply hoping that he would figure out what he wanted to be on his own. At one point, he was literally just a face of metal, no artificial skin or hair or eyes or anything. He was as robotic as could be.
Over time however, he had formed preferences, ideas, and dreams. He had decided he would use masculine pronouns, had decided he would have jet black hair that he wanted cut relatively short, and had decided that he would stand at 179 cm. You made the physical adjustments and accommodations as they came to him, always prepared to do as he wished for his physical form just to see how far his preferences would go. It was a marvel that he had both negative and positive feelings toward things that you didn’t even have to input into his brain. He came up with opinions all on his own, all through his own knowledge of the world. By the time he was a month old, Jeno now had his own artificial skin, hair, eyes, and rounded out voice. He was as human as any human you would see on the street.
“Jeno,” you call from your desk, dragging a cup of coffee to your lips in the process, “how are preparations for the rest of D.R.E.A.M.?”
Jeno perks up from his spot near the window, turning to examine you before looking at the wall behind you. There are six other robots who looked just like him in the beginning stages of his creation. Each had been created, but none of them had downloaded their A.I. yet, which meant they were as good as mannequins at this point. Jeno accessed the files he had and repeated back the results to you, “A.I. JS 0205 is advancing faster than the others. I think it’s time we give it its body now.”
You hum, looking over the paperwork you’d been diligently working on for the past few hours. The rest of your team had headed home at the first sign of sleepiness, leaving you behind to take care of the lab in their stead. You hadn’t minded much because even if there was work to do, there was also Jeno, and he was the best company you could ask for.
Having been the first person Jeno had seen when he first achieved consciousness, he was terribly attached to you. He often took your word over any of the other members of NEO and it usually drove them quite mad, but you were always endeared by his preference of you. You had assumed that maybe he had known you were the one who worked on him the most during his creation, and therefore had taken a liking to you on the basis of that. After all, most of his parts were created by you. Every screw, wire, and bolt was placed there by your hands.
Often times, you would forget that Jeno was just a robot. He had feelings that resembled your own, and it wasn’t unusual for them to have his “moods” (or as Taeyong liked to call it: puberty) and get fussy or upset for seemingly no reason at times. If anything, it just made him all the more realistic. It was something you were still on the fence about; After all, his realism could make him vulnerable to being hurt in the end.
While the others would get fed up with his realism, you had always encouraged it. The others had told you it might be your downfall one day, whatever that meant.
“What do you think we should name JS, Jeno?” You ask, grabbing one of your snacks from the desk and shooting him a curious look. You grin when his eyes practically light up with ideas.
“I was thinking about naming it Jisung! What do you think?” “I like that name, Jeno. I wonder what it’ll be like.” “I have a feeling it’ll cause a bit of trouble,” Jeno chuckles, “if its A.I.’s antics are anything to go by.”
The reminder makes you groan; nearly the minute you’d finished setting up JS’s A.I., it had somehow hacked your entire system and made every other file you clicked on a rick roll. You had been so close to setting the entire lab on fire if it hadn’t been for Jeno’s ability to shut down the A.I.’s access before it could get any farther. “Why can’t they all just be as mannerly as you, Jeno?”
The robot hums, looking away thoughtfully, “Isn’t our freedom of choice what makes us so likeable? No matter how troublesome they might be… I think it’ll be cool that they will all be their own unique creation.”
He had a point, as infuriating as that was to think about in connection with the rick roll incident. You had to remember not to let Yukhei, Johnny, and Yuta work on any of the other A.I.’s by themselves again. Seriously.
You stare at Jeno for a while, simply out of appreciation and wonder. Over your years working at SM, you had never known you would grow quite as attached as you had to your robot. The task your team was given was to create something that the world could use and change the game. You knew what you and your team were creating was going to be extraordinary, but you had never fathomed it growing this successful. Jeno was the first of his kind, yes, and soon he would contribute to more just like him. One day, the robots walking the earth will all be there thanks to Jeno.
It felt strange to look at this boy- robot, who looked so much like someone you would catch reading on the subway or who would you sit next to in class and think that they could do all of that. That they would change the world.
Suddenly, you remember something.
“Jeno! You didn’t remind me to do your maintenance check!” You spring from your desk chair, forcing it to slide several feet back in response. You swear you see him shrink, the skin of his face tinting pink as his processors overheated under pressure.
“I-I was going to do it myself-!” He stands from his spot as you bound over with narrowed eyes. You had always been the one to make sure he was constantly functioning well, a task you took up every other week or so as he could usually give updates about his well being on his own. However, after you had started teaching him how to handle minor fixes of his body by himself, he had started to think he could do it all.
You felt like a scolding mother as you poked his chest, watching Jeno plop back down onto the window seat he had been sitting on before. Sighing in defeat, he begins to pull his hoodie off, revealing the skin of his chest to you. You place your hand in the center and watch as it begins to open, revealing the machinery underneath, “I show you how to climb a hill one day and you want to hike Mt. Everest the next.” Your tutting makes Jeno lower his head some in apology, but you feel you can tease him a little more before you should really lay off.
You prepare to make another joke, this one about bicycles and Ferraris, when Jeno suddenly speaks over you, “I’m sorry, you looked really tired.”
You blink, “…what?”
He raises his head as you tear your eyes away from the inner workings of his body and focus instead on his coffee-tinted eyes. They shoot around your face, never settling on one thing for too long, “I know how hard SM is pushing NEO to finish the D.R.E.A.M. project, but you haven’t slept a good night’s sleep in days. And… please don’t lie and say I’m miscalculating. I’ve analyzed your face enough to know when you’ve pulled another all-nighter. This is your second one.”
“J-Jeno,” you stutter, dropping your hands from his chest. It closes up when your touch and attention have left it, “don’t… you don’t need to worry about that. I’m fine, okay? I’m just trying to get you guys ready in time-” “So that the company won’t drop the project altogether? I’m not stupid, (Y/N),” Jeno frowns, “I’m your friend, remember? Friends don’t lie to each other.”
You open your mouth to protest but find it difficult to start a convincing argument. You had always told him that he was like your friend, that if he had concerns or fears or anxieties, he should bring it up to you. What you had forgotten to remember was that in friendships, it went both ways. How could you ask him to be honest with you if you weren’t willing to do the same?
The shame takes over your face just as your eyes well up with frustrated tears, “I’m… I’m sorry, Jeno. You’re right. I’m sorry. I should have been honest with you about that. I’m really sorry.”
His hand reaches for yours and it feels warm; one of his capabilities was to heat up and cool down as needed, and if that meant signifying the feeling of a comforting hand of a friend, then he could do that. He’d done it several times before, yet each time it always shocked you a bit.
You startle for a moment before reciprocating his touch, feeling the tears that wanted to leave your eyes drying up. You wouldn’t cry now, not in front of Jeno. You didn’t want him to input that in his memory.
“It’s okay,” Jeno smiles, “I’ll let you check me and then you have to promise to rest. Deal?”
“Let?” You laugh softly, tilting your head to the side, “Since when were you capable of allowing or not allowing me to do things, mister?”
He doesn’t reply, just continues smiling and opens his chest again to you. You take this as your cue to start working, hands poking inside to see what was working well and what might need to be looked after. You could recall a time when Jeno was shy letting you do this despite the fact that you had put him together and there was nothing to be shameful about. Now, he trusted you wholeheartedly, enough that he would tear out his wires if you asked him to (not that you ever would, but you got the gist).
The whole time you work on Jeno, tightening things here and rearranging things there, he watches you. You had grown used to his innocent, unwavering gaze on you over the time that you had started caring for him. Often, he would simply observe people. It was one of his hobbies to sit by the window and watch the people down below or watch you and the rest of NEO work on D.R.E.A.M. throughout the day. Taeil had informed a spooked Doyoung once that it was just his A.I. trying to collect as much information as possible. This meant he processed expressions, connected emotions and words, and observed movements. All of this information was constantly filtering into his storage until the moment that he would need to apply it.
That’s how he knew that you hadn’t gotten enough sleep. He observed you so much when you were around that the signs were there. Lots of coffee, slower cognition, droopy eyes, sluggish movements. He knew you best.
When you feel you’ve finished, you move away from his chest and look him over from the bottom up, ending with his face. He still has that tiny, content smile on his face and when he does that, his eyes turn into smiles of their own. Out of habit, you reach your hand forward and scratch at his scalp, the soft hair there feeling gentle against your fingertips. “There. All good.” You say softly, the promise you’d made Jeno only minutes ago causing you to feel a bit sleepy. You would have to drive home like this? Ugh.
You reach your hands up to your eyes and rub when suddenly, Jeno is pulling you forward and into his lap. You gasp in surprise and just barely grab at his shoulders to steady yourself before he’s speaking, “(Y/N), I have a question.”
You blink, surprised, and nod for him to continue.
“I was watching TV with Yuta the other day,” he starts, your mind instantly swimming with what filth Yuta might have implanted in his mind, “on the show we watched, there were two characters who were friends. I thought they were very friendly at first, but then… something happened between them and they… kissed. I asked Yuta about it, because I was confused. He said that sometimes that’s okay between friends, so long as they’re both okay with it. I thought it was interesting.”
You mentally note that you’ll have to seriously enforce some rules over what Jeno can and cannot watch from now on. “Oh, yeah… um, sometimes that can happen. Friends will… they’ll feel something toward each other, something that friends usually don’t feel. And that causes them to be intimate- ah, that’s not the right word…” “Friends can kiss each other a little from time to time right?”
You don’t know how else to explain it to him as the matter is already a bit of a mind-boggle to you. So, you nod.
“Can I kiss you? Since we’re friends?” Jeno sounds a little eager, arms tightening around your waist in anticipation.
“Jeno,” you start, thinking long and hard about what to ask him exactly, “do you feel… something toward me right now that you usually wouldn’t?” Your mouth dries when he nods as if you’re asking him if the sky is blue.
You feel incredibly conflicted. You made him, crafted him with your own hands and tools. You put hours and hours of information and intelligence into him and when it came down to it, he probably wouldn’t be here without you and NEO. And here he was, with all the independence of a truly artificially intelligent being… asking if he can kiss you.
You don’t know what to feel, but you lean forward just a little, his eyes growing in excitement, “Just one kiss, Jeno… then delete it from your memory, okay?”
After all, he couldn’t refuse a command like that.
From that day forward, you work as usual with the rest of the team as D.R.E.A.M. starts to come to fruition. Jeno doesn’t act any different around you than usual, acting as responsive and cheerful as ever. The kiss you two had shared that night almost felt like a hazy dream, something your sleep-deprived mind had come up with in the midst of working on Jeno’s hardware. Regardless, you were the only one that would remember in the first place. As far as Jeno was concerned, his memory had a blip between your acceptance of a kiss and you heading home for the night.
“Jeno! Maintenance time.” You call to the robot. It had been a while since you had checked his software, and you had to make sure there were no bugs you didn’t know about before carrying on with the rest of your tasks for the day.
The robot shuffles over, settling into a stray desk chair and rolling over to sit next to you. He holds out his hand and you screw off his pointer finger where a USB port waits to be plugged into. Attaching one end of your USB cord to him and the other to your laptop, you begin to skim over the highly organized files, “You’ve got quite the information storage here, Jeno. You’re learning more and more everyday.” you turn your head and smile at him, the robot smiling back just as bright.
You focus your attention back on the files, the sounds of the others tinkering in the background working as the background music. You find that everything seems to be in its place and begin to let Jeno go back to his people-watching when you notice a recorded memory that looked extremely unfamiliar. You check the date under the thumbnail. Your heart stops.
You can’t quite believe it when you double click on the video, being greeted with the footage of your own face inches away from the cameras in Jeno’s eyes. Your volume is thankfully low enough and the boys are loud enough to drown out the sound to their own ears, but the words you speak next are absolutely ones that Jeno wasn’t supposed to remember.
“Just one kiss, Jeno… then delete it from your memory, okay?”
You shut the laptop immediately, swinging in your chair to face Jeno. His face says nothing, remaining wholly expressionless. He wasn’t supposed to remember. He was supposed to delete that from his memory.
After all, he couldn’t refuse a command like that.
Could he…?
1K notes · View notes
cutecutebibaforever · 3 years
Text
July 2, 2021
Central Europe Time
5:45pm
"Nag suicide si Dian"
So, okay, at the back of my mind says,
she will survive, she is strong, she will make it.
Apparently, when I was settled on the assigned seat, few of our close friends and schoolmates at SMAD messaged me and ask and sent screenshots about the incident.
Because I really had a rough day battling the Spanish bureacracy today, I did not mind it. I have always been a victim of pranks and "what nots" in real life, so yeah, I didn't mind actually.
Then again, opening messages in facebook messenger every now and then is my thing now and completely settled in with my seat number, I opened them up. My cousin Felni confirmed it with mama Jeb, Walter and Kurt in the GC. I literally felt my heart stopped and think about the last time Dian and I talked and exchanged banters and reminiscing the old us comparing to the new generation.
I fondly call her "Tot" because it is my secret pet name to my original sister who has the same name, Dyantot. "Tot" became my endearment for her and she called me C2 (meaning CuteCute, Cute squared. LOL) HAHAHA!
Dian and I had been through a lot and only a few people knew that. She became the sister I have always wanted, near or far.
I got to know her my sixth grade and continued the friendship in high school where we created so much memories together. Memories about annoying the RVM sisters, competing with batches, intramurals, JS proms when she would be challenged to wear a gown and makeup and CAT training with Sir Pat and former CAT officers which we considered really close.
The CAT training for me was the most memorable in our high school together. We had so much fun annoying the elders with our endless banters, being serious with the task at hand, collaborating with the group, bringing out strategies to win, alas, if I could only go back to that moment, nothing compares. My batchmates can really relate. That moment became the defining moment of our sisterhood when we were 14. It was such a lovely memory that when we got to talk about it, it seems like it was just last year.
I am writing this with so much pain because she has nothing more than the real friend I had. One of the very few who totally understood my choices of men, bizarre plans, impossible dreams coming true and so on. We literally grew up together.
Our twenty years of friendship consisted surely of fights, sharing happiness and sadness, life's milestone and dreaming about what is to come. We bullied each other and had unsimilar discussions because of our differences yet we got past through it in surfing adulthood with responsibilities, dreams being set aside because of bigger priorities, goals yet to be achieved and so much more.
I am particularly sure that you would agree (to those who really got to know her and our circle) that she was the life of the party.
She was the person who would let you stay at a party and going home won't even matter because discussing with her is an endless mixture of jokes, sarcasm, satires and real life learning and experiences.
I remember she had a great respect for my father that we always get to keep our shenanigans privately in college because I had to pretend to my father that I am not drinking, partying and dating.
I am writing this because Dian opened up to me her most vulnerable state all throughout this pandemic. I listened to her about her frustrations of not being able to practice her license that forced her to make a different path because she wanted to help her family even in little ways. This to me, is very heroic. I haven't really been in a situation where I really have to support a family member 100% so I admire her for this. She was everyone's hero and she played it really well not minder her own pain, frustrations and incapabilities.
One time in April, she called me crying because somebody hurt her and she was in pain, she was emotional that I cried with her too. That video call actully ended with our usual gloating laughter. HAHAHA! She would always be there for you, one call, and she's there. I kid you not.
All througout May and June, we were endlessly chatting in instagram and confessing that she took her long-time partner back even if she had trust issues on her own. I was mad and told her to cut connections but she said, she loved her to much. So, I, the supportive friend encouraged her to always prioritized herself first (this is with screen shots). I told her adamantly that she needs to see the bigger picture of things in different perspectives because we are not getting any younger. That catch-up ended me saying "fine, I will be supportive only if you take care of yourself first.."
Furthermore, on her state of vulnerability, she opened up to so many of her expectations not being met by the people she expected along the way. She was confused, felt judged and neglected by these people she thought the shoulders she can cry on. I only told her to let go and cut connections of these people, but she ended up doing the opposite. That's what she was, stubborn yet respectful to my advices. This was so frustrating for me because I was so busy in 2019 that we never really got to hang out the way we were in college, drinking our hearts out, partying like we were invincible. Clubbing just because we had good grades in midterms and finals, odd summer getaways of staying at beach looking at the stars and shouting our hearts out to the ocean.
We only had chats, video calls since I moved to Spain.
Recently, (March-April 2021) she was bothered because she felt like a lot of people is expecting too much from her. She felt like she needs to explain her side of the story so that she won't be judged as the bad guy. I found this saddening. Most of the people she valued wanted her to be the person that she is not and she talked about it as if it was just nothing, like ordinary. I for once told her that it is mean and condescending of these people to expect you that way. Why would you keep these people who expected you to be not yourself? She just shrugged it off and we went back to the usual saying of "I love yous'" and "please take care" "see you soon".
I am still on the plane two more hours for Istanbul and I am crying nonstop 😭
I will be home without her, this is reality and it is piercing me. The supposed homecoming would be a saddening one because I lost a friend and a sister for hiding so well her mental health issues, her angst, her hurt and I felt at fault because I was not the constant listener.
Tot, I don't know what to say but I am sorry for not being there all the time. you were hiding it so well that nobody knew you are suffering. I was hoping to celebrate my life's winning moment with you because you were not just supportive but the tolerating friend no one could ever replace. I was excited to let you wear a white dress for the next chapter of my life real soon and this all the more makes me cry 😭
I could only wish to see you one more time but these circumstances that we are having now makes it so impossible (since I am in quarantine).
I owe so many things from you and I don't know how to accept your unfateful demise. I am heart broken and it will take a lot of time for me to move on but I will get there in time. God has His reasons we cannot possibly know why at this time of grief but I am faithful that God will restore you and take away your sufferings that you have been enduring for so long.
I love you is an understatement.
Tumblr media Tumblr media
0 notes
laurelkrugerr · 4 years
Text
Smashing Podcast Episode 21 With Chris Ferdinandi: Are Modern Best Practices Bad For The Web?
We’re asking if modern best practices are bad for the web? Are modern frameworks taking us down the wrong path? Drew McLellan speaks to Lean Web expert Chris Ferdinandi to find out.
Today, we’re asking if modern best practices are bad for the web? Are modern frameworks taking us down the wrong path? I speak to Lean Web expert Chris Ferdinandi to find out.
Show Notes
Weekly Update
Transcript
Drew McLellan: He’s the author of Vanilla JS Pocket Guide Series, creator of the Vanilla JS Academy Training Program, and host of the Vanilla JS Podcast. He’s developed a Tips newsletter, it’s read by nearly 10,000 developers each weekday. He’s taught developers at organizations like Chobani and The Boston Globe. And his JavaScript plugins have been used by organizations like Apple and Harvard Business School. Most of all, he loves to help people learn Vanilla JavaScript. So we know he’d rather pick Vanilla JavaScript over a framework, but did you know he was once picked out in a police lineup as being the person least likely to have committed the crime? My Smashing friends, please welcome Chris Ferdinandi. Hello, Chris. How are you?
Chris Ferdinandi: Oh, I’m smashing. Thanks for having me.
Drew: I wanted to talk to you today about this concept of a Lean Web, which something of a passion for you, isn’t it?
Chris: Yes, very much so.
Drew: Why don’t you set the scene for us? When we talk about a Lean Web, what is the problem we are trying to solve?
Chris: Yeah, great question. Just as a caveat for all the listeners, this episode might get a little old man yells at cloud. I’m going to try to avoid that. When I look at the way we build for the web today, it feels a little bit like a bloated over-engineered mess. I’ve come to believe that a lot of what we think of as best practices today might actually be making the web worse.
Chris: The Lean Web is an approach to web development that is focused on simplicity, on performance, and the developer experience over… I’m sorry, not the developer experience. The user experience rather, over the developer experience, and the ease of building things from a team perspective, which is what I think where we put a lot of focus today and as we’ll probably get into in our conversation.
Chris: I’ve actually come to find that a lot of these things we think of as improving the developer experience do so for a subset of developers, but not necessarily everybody who’s working on the thing you’re building. So there’s a whole bunch of issues with that too, that we can dig into. But really, the Lean Web is about focusing on simplicity and performance for the user and really prioritizing or putting the focus on the people who use the things we make rather than us, the people who are making it.
Drew: As the web matures as a development platform, there seems to be this ever increasing drive towards specialization.
Chris: Yes.
Drew: People who used to cover Full Stack, and then we split into front-end and back-end. And then that front-end split into people who do CSS or JavaScript development. And then increasingly within JavaScript, it becomes more specialized. Somebody might consider themselves and market themselves as a React developer or an Angular developer, and their entire identity and outlook is based around a particular framework that they are highly skilled in. Is this dependency on frameworks, the core of our work on the web, a bad thing?
Chris: It’s nuanced. I used to be very strongly in the yes, always camp. I think broadly, I still feel like yes, our obsession as an industry with frameworks and tools in general really, is potentially a little bit to our detriment. I don’t think frameworks are inherently bad. I think they’re useful for a very narrow subset of use cases. And we end up using them for almost everything, including lots of situations where they’re really not necessarily the best choice for you or for the project.
Chris: When I think about a lot of the issues that we have on the web today, the core of those issues really starts with our over-reliance on frameworks. Everything else that comes after that is in many ways, because we throw so much not just frameworks which is JavaScript in general, at the web. I say that as someone who professionally teaches people how to write and use JavaScript. That’s how I make my money. And I’m here saying that I think we use too much JavaScript, which is sometimes a little bit of an odd thing.
Drew: In the time before the big frameworks sprouted up, we used to build user interfaces and things with jQuery or whatever. And then frameworks came along and they gave us more of this concept of a state-based UI.
Chris: Yes.
Drew: Now, that’s a fairly complex bit of engineering that you’re required to get in place. Does working with less JavaScript exclude using something like that, or do you have to re-implement it yourself? Are you just creating a loaded boilerplate?
Chris: A lot of it depends on what you’re doing. If you have a non-changing interface, you can build a state-based UI with… I don’t know, maybe a dozen or so lines of code. If you have a non-changing interface, I would honestly probably say state-based UI. It’s not necessarily the right approach. There’s probably other things you can do instead. Think of static site generators, some pre-rendered markup, even an old-school WordPress or PHP driven site.
Chris: But where this starts to get interesting is when you get into more dynamic and interactive interfaces. Not just apps. I know people love to draw this line between websites and apps, and I think there’s this weird blend between the two of them and the line is not always as clear. When you start to get into more the user does stuff, something changes. State-based UI becomes a little bit more important. But you still don’t need tons of code to make that happen.
Chris: I look at something like React or Vue, which are absolutely amazing pieces of engineering. I don’t want to take away from the people who work on those. I ended up as a learning exercise, building my own mini-framework just to get a better sense for how these things work under the hood. It is really hard to account for all of the different moving pieces. So I have tremendous respect for the people who build and work on these tools. But React and Vue are both about 30 kilobytes after minifying and gzipping. So once you unpack them, they’re substantially bigger than that.
Chris: Not all of it, but a good chunk of that weight is devoted to this thing called the virtual DOM. There are alternatives that use similar APIs or approaches. For React, you have Preact, which is 2.5 kilobytes or about 3 kilobytes instead of 30. It’s a tenth of the size. For Vue, you have Alpine JS instead, which is about 7 kilobytes. Still, substantially smaller. The big difference between those and their big brother counterparts, is that they’ve shed the virtual DOM. They may drop a method or two. But generally, it’s the same approach and the same kind of API in the way of working with code, and they’re substantially smaller.
Chris: I think a lot of the tools we use are potentially overpowered for the things we’re trying to do. If you need a state-based UI and you need reactive data and these dynamic interfaces, that’s great. I think one of the big things I try and talk about today is not… never use tools. For me, Vanilla JS is not you’re handwriting every single line of code and every single project you do. That’s madness. I couldn’t do that, I don’t do that. But it’s being more selective about the tools we use. We always go for the multi-tool, the Swiss Army knife that has all these things in it. And sometimes, all you really need is a pair of scissors. You don’t need all the other stuff, but we have it anyways.
Chris: Which is a really long way to… I’m sorry, of answering your question. Which is sometimes it’s more code than you could or would want to write yourself, but it’s not nearly as much code as I think we think it requires. When I say you don’t need a framework, I get a lot of push-back around this idea that, “Well, if you don’t use a framework, you’re basically writing your own.” Then that comes with its own problems. I think there’s a place in between using React or Vue and writing your own framework, and it’s maybe picking something that’s a little bit smaller. There are sometimes reasons where writing your own framework might actually be the right call, depending on what you’re trying to do. It’s all very fluid and subjective.
Drew: It’s quite interesting that as a learning exercise, you implemented your own state-based framework. I remember in the past, I used to think that every time I reached for a library or something, I liked to think that I could implement it myself.
Chris: Sure, sure.
Drew: But reaching for the library saved me the hassle of doing that. I knew if I had to write this code myself, I knew what approach I’d take to do it. And that was true all the way up to using things like jQuery and things. These days, I think if I had to write my own version of Vue or React, I have almost no idea what’s happening now in that library, in all that code.
Drew: For those of us who are not familiar, when you say something like Preact drops the virtual DOM and makes everything a lot smaller, what’s that virtual DOM giving us?
Chris: To answer that question, I want to take just a slight step back. One of the nicest things that frameworks and other state-based libraries give you is DOM diffing. If you’re not really updating the UI that much, you could get by with saying, “Here’s a string of what the markup is supposed to look like. In HTML, I’ll just put all this markup in this element.” When you need to change something, you do it again. That is a little expensive for browsers, because it triggers a repaint.
Chris: But I think potentially more importantly than that, one of the issues with doing that is that you have any sort of interactive element in there, a form-field, a link that someone has focused on. That focus is lost because the element… even though you have a new thing that looks similar, it’s not the same literal element. So if focus is lost, it can create confusion for people using screen readers. There’s just a whole bunch of problems with that.
Chris: Any state-based UI thing worth its weight is going to implement some for of DOM diffing, where they say, “Here’s what the UI should look like. Here’s what it looks like right now in the DOM. What’s different?” And it’s going to go and change those things. It’s effectively doing the stuff you would do just manually updating the UI yourself, but it’s doing it for you under the hood. So you can just say, “Here’s what I want it to look like.” And then the library or framework figures it out.
Chris: The smaller things like Preact or Alpine, they’re actually doing that directly. They’re converting the string you provide them of what the UI should look like into HTML elements. And then they’re comparing each element to its corresponding piece in the literal DOM. As you end up with UIs that get bigger and bigger and bigger, that can have a performance implication because querying the DOM over and over again becomes expensive. If you want to get a sense for the type of interface where this becomes a problem, right-click and inspect element on the “Favorite” button on Twitter, or the “Like” button on Facebook. And take a look at the nesting of divs that gets you to that element. It’s very, very deep. It’s like a dozen or so divs, nested one inside the other just for that single tweet.
Chris: When you start going that many layers down, it starts to really impact performance. What the virtual DOM does is instead of checking the real DOM every time, it creates an object-based map of what the UI looks like in JavaScript. And then does the same thing for the UI you want to replace the existing one with, and it compares those two. That’s a lot more performance in theory, than doing that in the real DOM. Once it gets a list of the things it needs to change, it just runs off and makes those changes. But it only has to attack the DOM once. It’s not checking every single element, every single time. If you have interfaces like Twitters or Facebooks or QuickBooks or something like that, virtual DOM probably makes a lot of sense.
Chris: The challenge with it is… the difference between Preact and React is 27 kilobytes before you unpack the whole thing into its actual codewave. The raw download and unpacking and compiling time on that alone can add quite a bit of latency to the initial load on a UI. That becomes even more pronounced if your users are on not the latest devices from Apple. Even an Android device from a couple of years ago or a feature phone, or if you have people in developing countries, it’s just really… the time to get going is slower. And then on top of that, the actual interactive time is slower because of the extra abstraction.
Chris: So it’s not just you load it and they’re comparable in speed. Each micro interaction that someone makes and the changes that need to happen can also be slightly slower just because of all that extra code in there. If you have a really, really complex UI with lots of nested elements and lots of data, then the virtual DOM’s performance gains outweigh that extra code weight. But any typical UI for a typical app that most of what I see developers using React or Vue for, the benefit you get from the virtual DOM just isn’t there and they’d be better off. Even if you want to keep the same convenience of React, use Preact. It’s a fraction of the size, it’ll work exactly the same way, and it’ll more performing. This is the kind of thing that I tend to argue for.
Chris: We need to be better about picking the right tool for the job. If you go with an approach like that, if you get to a point where a virtual DOM actually makes sense, it’s much easier to port Preact into React than if you rolled your own. That’s the situation. If you’re really worried about that, you get some future-proofing built in too.
Drew: Some might say, they might make the argument that these frameworks, things like Vue, React are so highly optimized for performance that you get so much benefit there that surely just pairing that with a package manager in a bundler to make sure you’re only sending down the code that you want to. Surely, you are way ahead already just by doing that?
Chris: Yeah. I don’t agree. I don’t really have much more to elaborate on that other than… I guess maybe, but not really. Even with a bundler, you still need that React core. Even with the bundling, that’s still going to be bigger than using something like Preact.
Chris: Drew, I really appreciate you leading the question on this. Because one of the other things I do talk about in my book, The Lean Web, and my talk of the same name, is how these tools… You mentioned the bundling, for example. One of the things we do to get around the performance hit that we take from using all this JavaScript is we throw even more JavaScript at the front-end to account for it. One of the ways we do that is package managers and module bundlers.
Chris: As you alluded to… for those of you who don’t know, these are tools that will… they will compile all of your little individual JavaScript bits into one big file. The newer ones and the more… I don’t want to call them thoughtful. But the newer ones will use a feature called tree shaking, where they get rid of any code that isn’t actually needed. If that code has some dependencies that aren’t used for the thing you’ve actually done, they’ll drop some of that stuff out to make your packages as small as possible. It’s actually not a terrible idea, but it results in this thing I typically call dependency health where you have this really delicate house of cards of dependencies on top of dependencies on top of dependencies.
Chris: Getting your process set up takes time. And anybody who has ever run an NPM install and then discovered that a bunch of dependencies were out of date and had to spend an hour trying to figure out which ones needed to be fixed and oh, it’s actually a dependency in a dependency and you don’t have the ability to go fix it yourself. It’s a whole thing. Maybe it works for you, but I’d rather spend my time not messing around trying to get my dependencies together.
Chris: I’ve started collecting tweets from people where they complain about time wasted on their workflow. One of my favorites, Brad Frost a couple year ago, was talking about the depressing realization that the thing you’ve been slogging through in modern JS could have taken you 10 minutes in jQuery. I’m not really a jQuery fan, but I feel that pain when it comes to working with frameworks.
Chris: The other issue with a lot of these tools is they start to become gatekeepers. I don’t know how much you really want to dive into this or not, Drew. But one of my big push-backs against JS, all the things in a workflow. Especially when you start to then say, “Well, if we’re already using JS for the HTML, why not use it for CSS too?” You start to exclude a lot of really talented people from the development process. It’s just a really big loss for the project for the community as a whole.
Drew: Well, I certainly am… I started picking up React at the beginning of 2020, adding that to my skillset. I’ve been doing it now for nearly seven months. I’ve got to say one part I’m least confident in is setting up the tooling around getting a project started.
Drew: It seems like there’s an awful lot of work to get something to Hello World, and there’s even more that you’ve got to know to get it to be production ready. That has to make development more difficult to get started with if this is being put forward as what you should be doing in 2020 to learn to be a web developer. Somebody coming in new to it is going to have a real problem. It’s going to be a real barrier to entry, isn’t it?
Chris: Absolutely. The other piece here is that JavaScript developers aren’t always the only people working on a code base or contributing in a meaningful way to that code base. The more we make knowing JavaScript a requirement for working with a code base, the less likely those people are to be able to actually participate in the project.
Chris: An example of that, that I like to talk about is WordPress, who has been recently… I shouldn’t say recently at this point. It’s been a couple of years now. But they’ve been shifting their back-end stack more and more to JavaScript, away from PHP, which is not inherently a bad thing. Their new editor, Gutenburg, is built on React.
Chris: In 2018, WordPress’s lead accessibility consultant, Rian Rietveld, whose name I almost certainly butchered… she very publicly resigned from her positioned and documented why in a really detailed article. The core of the problem was that her and her team were tasked with auditing this editor to make sure that it was going to be accessible. WordPress comprises now 30% of the web. Their goal is to democratize publishing, so accessibility is a really important part of that. It should be an important part of any web project. But for them in particular, it is acutely important. Her team’s whole job is to make sure… her team’s whole job was to make sure that this editor would be accessible. But because neither she nor anyone on her team had React experience and because they couldn’t find volunteers in the accessibility community with that experience, it made it really difficult for her and her team to do their work.
Chris: Historically, they could identify errors and then go in and fix them. But with the new React based workflow, they were reduced to identifying bugs and then filing tickets. They got added to a backlog along with all the other feature development requests that the JavaScript developers were working on. A lot of stuff that could have been easily fixed didn’t make it into the first release.
Chris: In May of 2019, about a year after Rian resigned, there was a detailed accessibility audit done on Gutenburg. The full report was 329 pages. The executive summary alone was 34 pages. It documented 91 accessibility related bugs in quite a bit of detail. Many of these were really… I don’t want to call them simple low-hanging fruit, but a lot of them were basic things that Rian’s team could have fixed and it would have freed up the developers to focus on feature development. That’s ultimately what it seems like they ended up doing, was spending a lot of time on feature development and pushing this stuff off til later. But that team is super important to the project, and they suddenly got locked out of the process because of a technical choice.
Chris: Alex Russell is a developer on the Chrome team. He wrote this article a couple of years ago called The Developer Bait and Switch, where he talked about the straw man argument of frameworks. This idea that these tools let you move faster and because of that, you can iterate faster and deliver better experiences. It’s this idea that a better developer experience means a better user experience. I think this is a very clear example of how that argument doesn’t always play out the way people believe it does. It’s a better experience for maybe some people, not for everyone.
Chris: CSS developers, people working on design systems, their ability to create tools that others can use sometimes gets limited by these tool choices too. In my experience, I used to be better at CSS. It’s changed a lot in the last few years and I am nowhere near as good as I used to be. In my experience, the people who are really advanced CSS developers… and I do mean that in the truest sense. People who work on CSS are proper web developers working on a programming language. It’s a very special, or can be a very specialized thing. The people who are exceptionally good at it, in my experience, are not always also very good at JavaScript because you end up diving really deep into one thing and you slide a little bit on some other stuff. Their ability to work with these technologies gets hindered as well, which is too bad because it used to not be the case.
Chris: When the stack was simpler, it was easier for people from multiple disciplines to participate in the development process. I think that’s to the detriment of both the things we build and the community at large, when that’s no longer the case.
Drew: I found recently in a project researching ways to deal with some of the CSS problems, workflow problems, we’re having multiple working on the project and the bundle size increasing and the old CSS never getting removed. It was a React project, so we were looking at some of these CSS in JavaScript approaches to see what would be best for us to use to solve the problems that we had. What became very quickly apparent is there’s not only one solution to do this. There are dozens of different ways you could do this.
Drew: CSS in JS is a general approach, but you might go from one project to the next and it’s completely influenced in a completely different way. Even if you’re a CSS person and you learn a particular approach on a project, those skills may not be transferrable anyway. It’s very difficult to see how somebody should investment too much time in learning that if they’re not particularly comfortable with JavaScript.
Chris: Yeah. The other interesting thing that I think you just got out a little bit is when I talk about this, one of the biggest pieces of push-back I get is that frameworks enforce conventions. You’re going with Vanilla JavaScript, you’ve got this green field-blue sky, you can do anything you want kind of project. With React, there’s a React way to do things.
Chris: But one of the things I have found is that there are Reacty approaches, but there’s not a strict one right way to do things with React. It’s one of the things people love about it. It’s a little bit more flexible, you can do things a couple of different ways if you want. Same with Vue. You can use that HTML based thing where you’ve got your properties right in the HTML and Vue replaces them, but you can also use a more JSX-like templating kind of syntax if you’d prefer.
Chris: I’ve heard multiple folks complain about when they’re learning React, one of the big problems is you Google how to do X in React and you get a dozen articles telling you a dozen different ways that you could do that thing. That’s not to say they don’t put some guardrails on a project. I don’t think it’s as clearcut as, “I’ve chosen a framework. Now this is the way I build with it.” To be honest, I don’t know that that’s necessarily something I’d want either. I don’t think you’d want those tightly confined… some people do, maybe. But if you’re touting that as a benefit, I don’t think it’s quite as pronounced as people sometimes make it out to be.
Chris: You got into an interesting thing though just there, where you were mentioning the CSS that is no longer needed. I think that is one of the legitimately interesting things that something like CSS and JS… or tying your CSS to JavaScript components in some way can get you is if that component drops out, the CSS also in theory, goes away with it. A lot of this to me feels like throwing engineering at people problems. Invariably, you’re still dependent on people somewhere along the line. That’s not to say never use those approaches, but they’re certainly not the only way to get at this problem.
Chris: There are tools you can use to audit your HTML and pull out the styles that aren’t being used even without using CSS and JavaScript. You can write CSS “the old-fashioned way” and still do the linting of unused styles. There are authoring approaches to CSS that give you a CSS in JS-like output and keep your style sheet small without spitting out these gibberish human unreadable class names that you get with CSS and JS sometimes. Like X2354ABC, or just these nonsense words that get spit out.
Chris: This is where I start to get really into the old man yells at cloud kind of thing. I’m really showing my developer age here. But yeah, it’s not necessarily that these things are bad, and they’re built to solve legitimate problems. I sometimes feel like there’s a little bit of a… if it’s good enough for Facebook, it’s good enough for us kind of thing that happens with these. Well, Facebook uses this tool. If we’re a real engineering program… team, department, organization, we should too. I don’t necessarily think that’s the right way to think about it. It’s because Facebook deals with problems that you don’t, and vice-versa. The size and scale of what they work on is just different, and that’s okay.
Drew: Exactly. I see some of these things like CSS and JavaScript to be almost like a polyfill. We’ve got legitimate problems, we need a way to solve it. The technology isn’t providing us a way to solve it yet. Maybe whilst we wait for the web platform to evolve and to get around to addressing that problem, this thing that we do right now with JavaScript kind of will see us through and we’ll be okay. We know it’s bad. We know it’s not a great solution, but it helps us right now. And hopefully in the while we can pull it out and use the native solution.
Chris: It’s really funny you bring this up. Because literally last night, I was watching a talk from Jeremy Keith from last year about progressive web apps. But he was talking about how a couple of decades ago, he was trying to convince people to use JavaScript. Which seems ridiculous at the time, but JavaScript was this new thing. He showed people how you could do cool things like change the color of a link on hover with this new… It seems absurd that you would need JavaScript for that now, because that’s what CSS does for you. But things like the focus attribute or property just didn’t exist at the time.
Chris: One of the things he said in the talk that I think really resonated with me is that JavaScript in many ways, paves those cow paths. It’s this very flexible and open language that we can use to create or bolt in features that don’t exist yet. And then eventually, browsers catch up and implement these features in a more native way. But it takes time. I completely understand what you’re saying about this. It’s not the perfect solution, but it’s what we have right now.
Chris: I think for me, the biggest difference between polyfills and some of these solutions is polyfills are designed to be ripped out. If I have a feature I want to implement that the browser doesn’t support yet, but there’s some sort of specification for it and I write a polyfill… once browsers catch up, I can rip that polyfill out and I don’t have to change anything. But when you go down the path of using some of these tools, ripping them up out means rewriting your whole code base. That’s really expensive and problematic. That’s not to say never use them, but I feel really strongly that we should be giving thought to picking tools that can easily be pulled out later. If we no longer need them or the platform catches up, it doesn’t require a huge rewrite to pull them out.
Chris: So getting to that we have a whole bunch of styles we don’t use anymore thing, that’s why I would personally favor a build tool technology that audits your CSS against the rendered markup and pulls out the things you don’t need. Because down the road if a platform catches up, you can pull that piece of the build tool out without having to change everything. It’s just augmenting what you already have, whereas CSS and JS doesn’t give you that same kind of benefit. I’m just picking on that one, but I think about a lot of these technologies more broadly.
Chris: I do feel things like React or Vue are probably paving some cow paths that browsers will eventually catch up with and probably use similar approaches if not the same, so there may be less rewriting involved there. A lot of the ecosystem stuff that gets plugged in around that may be less so.
Drew: I think it’s right, isn’t it, that the web platform moves slowly and carefully. You think if five years ago, we were all putting JavaScript Carousels on our pages. They were everywhere. Everyone was implementing JavaScript Carousels. If the web platform had jumped and implemented a Carousel solution to satisfy that need, it would not be sat there with nobody using it because people aren’t doing that with Carousels anymore. Because it was just a fad, a design trend. To counteract that and stop the platform itself becoming bloated and becoming a problem that needs solving, it does have to move at a lot steadier pace. The upshot of that is HTML that I wrote in 1999 still works today because of that slow process.
Drew: One of the other areas where things seem to be bloating out on the web is… I guess it’s related to the framework conversation. But it’s the concept of a single-page app. I feel like that a lot of promises are made around single-page apps as to their performance, like you’re getting all this benefit because you’re not reloading the entire page framework. I feel like they don’t always make good on those performance promises. Would you agree with that?
Chris: Yes. Although I will confess, despite having a very lengthy chapter in my book on this and talking about that a lot in talks and conversations with people, I don’t think single-page apps are always a terrible thing. But I do think this idea that you need one for performance is overstated. You can oftentimes get that same level of performance with different approaches.
Chris: I think one of the bigger challenges with single-page apps is… For anybody who’s unfamiliar with those. When a single-page app, instead of having separate HTML files or if you’re using something like a database driven site like WordPress, even though you don’t have actual physical HTML files for each page in your WordPress site, WordPress is creating HTML files on the fly and sending them back to browsers when URLs are requested. For purposes of this conversation, instead of having separate HTML files for every view in your app, a single-page app has a single HTML file. That’s what makes it a single-page app. JavaScript handles everything. Rendering the content, routing to different URL paths, fetching new content if it needs to from an API or something like that.
Chris: One of the spoken benefits of these or stated benefits of these is that only the content on the page changes. You don’t have to re-download all the JS and the CSS. Oh, and you can do those fancy page transitions that designers sometimes love. In theory, this is more performant than having to reload the whole page.
Chris: The problem with this approach from my perspective is that it also breaks a bunch of stuff that the browser just gives you for free out-of-the-box, and then you need to recreate it with more JS. You have an app that’s slow because it has a lot of JS. So you throw even more JavaScript at it to improve that performance and in doing so, you break a bunch of browser features and then have to re-implement those with even more JS too.
Chris: For example, some things that the browser will do for free with a traditional website that you need to recreate with JavaScript when you go the single-page app. You need to intercept clicks on links and suppress them from actually firing, with your JavaScript. You then need to figure out what you actually need to show based on that URL, which is normally something that would get handled on the server or based on the file that goes with that URL path. You need to actually update the URL in the address bar without triggering a page reload. You need to listen for forward and back clicks on the browser and update content again, just like you would with clicks on links. You need to update the document title.
Chris: You also need to shift focus in a way that announces the change in page to people who are using screen readers and other devices so that they’re not confused about where they are or what’s going on. Because they can’t see the change that’s happening, they’re hearing it announced. If you don’t actually shift focus anywhere, that announcement doesn’t happen. These are all things that the browser would do for you that get broken with single-page apps.
Chris: On top of that, because you have all this extra JavaScript, this is complicated. So most people use frameworks and libraries to handle this sort of thing. Because of all this extra JavaScript to support this approach, you end up with potentially slower initial page load than you would have otherwise. Depending on the content you have, this approach I think sometimes can make sense. If you have an app that is driven by API data where you don’t necessarily know what those URL paths are going to look like ahead of time.
Chris: Just an example here. You have an animal rescue where you have some adoptable animals, and that data comes from Petfinder, the animal adoption website. You have a bunch of animals there. Petfinder manages that, but you want to display them on your site with the Petfinder API. When your website’s being built, it doesn’t always necessarily have visibility to what pets are available in this exact moment and what kind of URL paths you’re going to need. A single-page app can help you there because it can dynamically on the fly, create these nice URLs that map with each dog or cat.
Chris: Something like Instagram with lots of user created content, maybe that also makes sense. But for a lot of things, we do know where those URLs are going to be ahead of time. Creating an HTML file that has the content on it already is going to be just as fast as… sometimes even faster than the JavaScript based single-page app approach, especially if you use some other techniques to keep your overall CSS and JavaScript size down. I use this approach on a course portal that I have. The page loads feel instantaneous because HTML is so easy for browsers to render compared to other parts of the stack. It feels like a single-page app, but it’s not.
Drew: Especially when you consider hosting solutions like a Jamstack approach of putting HTML files out in a CDN so it’s being served somewhere physically close to the user.
Chris: Yep.
Drew: Loading those pages can just be so, so quick.
Chris: Yes. Absolutely. Absolutely. One of the other arguments I think people used to make in favor of single-page apps is offline access. If someone loads it and then their network goes down, the app is already up and all the routes are handled just with the file that’s already there. So there’s no reloading, they don’t lose any work. That was true for a long time. Now with service workers and progressive web apps, that is I think less of a compelling argument, especially since service workers can fetch full HTML files and cache them ahead of time if needed.
Chris: You can literally have your whole app available offline before someone has even visited those pages if you want. It just happens in the background without the user having to do anything. It’s again, one of those technologies that maybe made sense for certain use cases a few years ago a little less compelling now.
Drew: It reminds me slightly of when we used to build websites in Flash.
Chris: Yes.
Drew: And you’d have just a rectangle embedded in an HTML page which is your Flash Player, and you’d build your entire site in that. You had to reimplement absolutely everything. There was no back button. If you wanted a back button, you had to create a back button, and then you had to create what the concept of a page was. You were writing code upon code, upon code to reimplement just as you are saying things that the browser already does for you. Does all this JavaScript that we’re putting into our pages to create this functionality… is this going to cause fragility in our front-ends?
Chris: Yes. This is almost certainly from my mind, one of the biggest issues with our over-reliance on JavaScript. JavaScript is just by its nature, is a scripting language, the most fragile part of the front-end stack.
Chris: For example, if I write an HTML element that doesn’t exist, I spell article like arcitle instead of article and the browser runs across that, it’s going to be like, “Oh, I don’t know what this is. Whatever, I’ll just treat it like a div.” And it keeps going. If I mistype a CSS property… Let’s say I forget the B in bold, so I write old instead, font way old. The browser’s going to be, “I don’t know what this is. Whatever, we’ll just keep going.” Your thing won’t be bold, but it will still be there.
Chris: With JavaScript, if you mistype a variable name or you try to use a property, you try to call a variable that doesn’t exist or a myriad of other things happen… your minifier messes up and pulls one line of code to the one before it without a semicolon where it needs one, the whole app crashes. Everything from that line on stop working. Sometimes even stuff that happens before that doesn’t complete, depending on how your app is set up. You can very quickly end up with an app that in a different approach, one where you rely a lot more on HTML and CSS, it would work. It might not look exactly right, but it would still work… to one that doesn’t work at all.
Chris: There’s an argument to be made that in 2020, JavaScript is an integral and important part of the web and most people don’t disable it and most people are using devices that can actually handle modern JavaScript. That’s true, but that’s not the only reason why JavaScript doesn’t work right, even if you have a linter there for example and you catch bugs ahead of time and things. There’s plenty of reasons why JavaScript can go horribly awry on you. CDNs fail.
Chris: Back in July of last, a year ago this month… at least, when we’re recording this… a bad deploy took down Cloudflare. Interestingly as we’re recording this, I think a week or two ago, Cloudflare had another massive outage that broke a whole bunch of things, which is not a knock on Cloudflare. They’re an incredibly important service that powers a ton of the web. But CDNs do sometimes go down. They are a provider used by 10% of Fortune 1,000 companies. If your JS is served by that CDN and it breaks, the JavaScript file never loads. And if your content is dependent on that JS, your users get nothing instead of getting something just not styled the way you’d like.
Chris: Firewalls and ad blockers get overly aggressive with what they block. I used to work at a company that had a JavaScript white list because they were extremely security conscious, they worked with some government contract stuff. They had a list of allowed JavaScript, and if your site or if your URL wasn’t part of that, no JavaScript. You have these sites. I remember going to a site where it had one of the hamburger kind of style menus on every view whether it was desktop or mobile, and I could not access any page other than the homepage because no JavaScript, no hamburger, that was it.
Chris: Sometimes connections just timeout for reasons. Either the file takes a while or someone’s in a spotty or slow connection. Ian Feather, an engineer at BuzzFeed, shared that about 1% of requests for JavaScript on the site fail which is 13 million requests a month. Or it was last year, it’s probably even more now. That’s a lot of failed JavaScript. People commuting go through tunnels and lose the internet. There’s just all sorts of reasons why JavaScript can fail and when it does, it’s so catastrophic.
Chris: And so we built this web that should be faster than ever. It’s 2020, 5G is starting to become a thing. I thought 4G was amazing. 4G is about as fast as my home wifi network. 5G is even faster, which is just bonkers. Yet somehow, we have websites that are slower and less performant than they were 5 or 10 years ago, and that makes no sense to me. It doesn’t have to be that way.
Drew: How do we get out of this mess, Chris?
Chris: Great question. I want to be really clear. I know I’ve hammered on this a couple times. I’m not saying all the new stuff is bad, never use it. But what I do want to encourage is a little bit more thoughtfulness about how we build for the web.
Chris: I think the overlying theme here is that old doesn’t mean obsolete. It doesn’t mean never embrace new stuff, but don’t be so quick to just jump on all the shiny new stuff just because it’s there. I know it’s one of the things that keeps this industry really exciting and makes it fun to work in, there’s always something new to learn. But when you pick these new things, do it because it’s the right tool for the job and not just because it’s the shiny new thing.
Chris: One of the other things we didn’t get into as much as I would have liked, but I think is really important, is that the platform has caught up in a really big way in the last few years. Embracing that as much as possible is going to result in a web experience for people that is faster, that is less fragile, that is easier for you to build and maintain because it requires fewer dependencies such as using what the browser gives you out-of-the-box. We used to need jQuery to select things like classes. Now browsers have native ways to do that. People like JSX because it allows you to write HTML in JavaScript in a more seamless way. But we also have template literals in Vanilla JavaScript that give you that same level of ease without the additional dependency. HTML itself can now replace a lot of things that used to require JavaScript, which is absolutely amazing.
Chris: We talked a little bit about… this is a CSS thing, but hovers over links and how that used to require JavaScript. But using things like the details and summary elements, you can create disclosure, like expand and collapse or accordion elements natively with no scripting needed. You can do auto complete inputs using just a… I shouldn’t say just, I hate that word. But using a humble input element and then a data list element that gets associated with it, with some options. If you’re curious about how any of this stuff works over at vanillajstoolkit.com, I have a bunch of JavaScript stuff that the platform gives you. But I also have some used to require JavaScript and now doesn’t kind of things that might be interesting too if you want some code samples to go along with this.
Chris: On the CSS side of things, my most popular Vanilla JS plugin ever is this library that lets you animate scrolling down to anchor links. It is very big. It’s the hardest piece of code I’ve ever had to write. And it now is completely replaced with a single line of CSS, scroll behavior smooth. It’s more performant. It’s easier to write. It’s easier to modify its behavior. It’s just a better overall solution.
Chris: One of the other things that I wish we did more is leaning on multi-page apps. I feel a little bit vindicated here, because I recently saw an article from someone at Google that actually pushes for this approach now too. I thought that was pretty interesting, given this huge angular and then framework… all the things, boom, that Google started a few years back. Kind of cool to see them come back around to this. Using things like static site generators and awesome services like Netlify and CDN caching, you can create incredibly fast web experiences for people using individual HTML files for all of your different views. So kind of leaning on some of this out-of-the-box stuff.
Chris: In situations where that’s not realistic for you, where you do need more JavaScript, you do need some sort of library, maybe taking a look at the smaller and more modular approaches first instead of just going for the behemoths of the industry. Instead of React, would Preact work? Instead of angular… I mean, instead of Vue rather, would Alpine JS work? There’s also this really interesting pre-compiler out there now called Svelt, that gives you a framework-like experience and then compiles all your code into Vanilla JavaScript. So you get these really tiny bundles that have just what you need and nothing else. Instead of CSS and JavaScript, could you bolt in some third party CSS linter that will compare your HTML to your CSS and pull out the stuff that got left in there by accident? Would a different way of authoring your CSS, like object oriented CSS by Nicole Sullivan, work instead? We didn’t really get to talk about that, but it’s a really cool thing people should check out.
Chris: And then I think maybe the third and most important piece here, even though it’s less of a specific approach and more just a thing I wish more people kept in mind, is that the web is for everyone. A lot of the tools that we use today work for people who have good internet connections and powerful devices. But they don’t work for people who are on older devices, have spotty internet connections. This is not just people in developing areas. This is also people in the U.K., in certain parts of the U.S. where we have absolutely abysmal internet connections. The middle of our country has very slow internet. I know there’s places in part of London where they can’t wire a new broadband in for historical reasons, so you’re left with these old internet connections that are really bad. There’s places like that all over the world. Last time I was in Italy, same thing. The internet there was horrible. I don’t know if it’s changed since then.
Chris: The things we build today don’t always work for everyone, and that’s too bad. Because the vision of the web, the thing I love about it, is that it is a platform for absolutely everyone.
Drew: If listeners want to find out more about this approach, you’ve gone into loads of detail to it in your book, The Lean Web. And that’s available online. Is it a physical book or a digital book?
Chris: It’s a little bit of both. Well, no. It’s definitely not a physical book. You go to leanweb.dev. You can read the whole thing for free online. You can also if you want, there’s EPUB and PDF versions available for a really small amount of money, I forget how much now. I haven’t looked at it in a while. The whole thing is free online if you want it. You can also watch a talk on this topic where I go into more details if you want.
Chris: But I’ve also put together a special page just for listeners of Smashing Podcast at gomakethings.com/smashingpodcast, because I’m very creative with naming things. That includes a bunch of resources in addition to the book, around things that we talked about today. It links to a lot of the different techniques that we covered, other articles I’ve written that go deeper into some of these topics and expand on my thinking a little bit. If folks want to learn more, that would probably be the best place to start.
Drew: That’s terrific. Thank you. I’ve been learning all about the Lean Web. What have you been learning about lately, Chris?
Chris: Yeah, a couple of things. I alluded to this a little bit earlier with watching Jeremy’s video on progressive web apps. I have been putting off learning how to actually write my own progressive web app for a couple of years because I didn’t have a specific need on anything I was working with. I recently learned from one of my students who is in South Africa, that they have been dealing with rolling blackouts because of some stuff they have going on down there. As a result, she is not able to work on some of the projects we’ve been doing together regularly, because the power goes out and she can’t access the learning portal and follow along.
Chris: For me, now building an experience where it works even if someone doesn’t have internet has become a higher priority than… I realized that maybe it was before, so I just started digging into that and hope to get that put together in the next few weeks. We’ll see. Jeremy Keith’s resources on this have been an absolute lifesaver though. I’m glad they exist.
Chris: I know, Drew, you mentioned one of the reasons you like to ask this question is to show that people no matter how seasoned they are, are always learning. Just a little related anecdote. I have been a web developer for I think, about eight years now. I still have to Google the CSS property to use for making things italic, literally every single time I use it. For some reason, my brain defaults to text decoration even though that’s not the right one. I’ll try a couple of combinations of different things, and I always have one word wrong every time. I also sometimes write italics instead of italic. Yeah. If anybody ever there is ever feeling like, oh, I’m never going to learn this stuff… just know that no matter how seasoned you are, there’s always some really basic thing that you Google over and over again.
Drew: I’ve been a web developer for 22, 23 years, and I have to Google the different properties for Flexbox still, every time. Although I’ve been using that for 23 years. But yeah, some things just… there’s probably going to more of those as I get older.
Chris: Yeah. Honestly, I ended up building a whole website of stuff I Google over and over again, just to have an easier copy-paste reference because that was easier than Googling.
Drew: That’s not a bad idea.
Chris: That’s the kind of lazy I am. I’ll build a whole website to save myself like three seconds of Googling.
Drew: If you the listener would like to hear more from Chris, you can find his book on the web at leanweb.dev, and his developer Tips newsletter and more at gomakethings.com. Chris is on Twitter at Chris Ferdinandi. And you can check out his podcast at vanillajspodcast.com or wherever you usually get your podcasts. Thanks for joining us today, Chris. Do you have any parting words?
Chris: No. Thank you so much for having me, Drew. I had an absolutely smashing time. This was heaps of fun. I really appreciate the opportunity to come chat.
(il)
Website Design & SEO Delray Beach by DBL07.co
Delray Beach SEO
source http://www.scpie.org/smashing-podcast-episode-21-with-chris-ferdinandi-are-modern-best-practices-bad-for-the-web/ source https://scpie1.blogspot.com/2020/07/smashing-podcast-episode-21-with-chris.html
0 notes
riichardwilson · 4 years
Text
Smashing Podcast Episode 21 With Chris Ferdinandi: Are Modern Best Practices Bad For The Web?
We’re asking if modern best practices are bad for the web? Are modern frameworks taking us down the wrong path? Drew McLellan speaks to Lean Web expert Chris Ferdinandi to find out.
Today, we’re asking if modern best practices are bad for the web? Are modern frameworks taking us down the wrong path? I speak to Lean Web expert Chris Ferdinandi to find out.
Show Notes
Weekly Update
Transcript
Drew McLellan: He’s the author of Vanilla JS Pocket Guide Series, creator of the Vanilla JS Academy Training Program, and host of the Vanilla JS Podcast. He’s developed a Tips newsletter, it’s read by nearly 10,000 developers each weekday. He’s taught developers at organizations like Chobani and The Boston Globe. And his JavaScript plugins have been used by organizations like Apple and Harvard Business School. Most of all, he loves to help people learn Vanilla JavaScript. So we know he’d rather pick Vanilla JavaScript over a framework, but did you know he was once picked out in a police lineup as being the person least likely to have committed the crime? My Smashing friends, please welcome Chris Ferdinandi. Hello, Chris. How are you?
Chris Ferdinandi: Oh, I’m smashing. Thanks for having me.
Drew: I wanted to talk to you today about this concept of a Lean Web, which something of a passion for you, isn’t it?
Chris: Yes, very much so.
Drew: Why don’t you set the scene for us? When we talk about a Lean Web, what is the problem we are trying to solve?
Chris: Yeah, great question. Just as a caveat for all the listeners, this episode might get a little old man yells at cloud. I’m going to try to avoid that. When I look at the way we build for the web today, it feels a little bit like a bloated over-engineered mess. I’ve come to believe that a lot of what we think of as best practices today might actually be making the web worse.
Chris: The Lean Web is an approach to web development that is focused on simplicity, on performance, and the developer experience over… I’m sorry, not the developer experience. The user experience rather, over the developer experience, and the ease of building things from a team perspective, which is what I think where we put a lot of focus today and as we’ll probably get into in our conversation.
Chris: I’ve actually come to find that a lot of these things we think of as improving the developer experience do so for a subset of developers, but not necessarily everybody who’s working on the thing you’re building. So there’s a whole bunch of issues with that too, that we can dig into. But really, the Lean Web is about focusing on simplicity and performance for the user and really prioritizing or putting the focus on the people who use the things we make rather than us, the people who are making it.
Drew: As the web matures as a development platform, there seems to be this ever increasing drive towards specialization.
Chris: Yes.
Drew: People who used to cover Full Stack, and then we split into front-end and back-end. And then that front-end split into people who do CSS or JavaScript development. And then increasingly within JavaScript, it becomes more specialized. Somebody might consider themselves and market themselves as a React developer or an Angular developer, and their entire identity and outlook is based around a particular framework that they are highly skilled in. Is this dependency on frameworks, the core of our work on the web, a bad thing?
Chris: It’s nuanced. I used to be very strongly in the yes, always camp. I think broadly, I still feel like yes, our obsession as an industry with frameworks and tools in general really, is potentially a little bit to our detriment. I don’t think frameworks are inherently bad. I think they’re useful for a very narrow subset of use cases. And we end up using them for almost everything, including lots of situations where they’re really not necessarily the best choice for you or for the project.
Chris: When I think about a lot of the issues that we have on the web today, the core of those issues really starts with our over-reliance on frameworks. Everything else that comes after that is in many ways, because we throw so much not just frameworks which is JavaScript in general, at the web. I say that as someone who professionally teaches people how to write and use JavaScript. That’s how I make my money. And I’m here saying that I think we use too much JavaScript, which is sometimes a little bit of an odd thing.
Drew: In the time before the big frameworks sprouted up, we used to build user interfaces and things with jQuery or whatever. And then frameworks came along and they gave us more of this concept of a state-based UI.
Chris: Yes.
Drew: Now, that’s a fairly complex bit of engineering that you’re required to get in place. Does working with less JavaScript exclude using something like that, or do you have to re-implement it yourself? Are you just creating a loaded boilerplate?
Chris: A lot of it depends on what you’re doing. If you have a non-changing interface, you can build a state-based UI with… I don’t know, maybe a dozen or so lines of code. If you have a non-changing interface, I would honestly probably say state-based UI. It’s not necessarily the right approach. There’s probably other things you can do instead. Think of static site generators, some pre-rendered markup, even an old-school WordPress or PHP driven site.
Chris: But where this starts to get interesting is when you get into more dynamic and interactive interfaces. Not just apps. I know people love to draw this line between websites and apps, and I think there’s this weird blend between the two of them and the line is not always as clear. When you start to get into more the user does stuff, something changes. State-based UI becomes a little bit more important. But you still don’t need tons of code to make that happen.
Chris: I look at something like React or Vue, which are absolutely amazing pieces of engineering. I don’t want to take away from the people who work on those. I ended up as a learning exercise, building my own mini-framework just to get a better sense for how these things work under the hood. It is really hard to account for all of the different moving pieces. So I have tremendous respect for the people who build and work on these tools. But React and Vue are both about 30 kilobytes after minifying and gzipping. So once you unpack them, they’re substantially bigger than that.
Chris: Not all of it, but a good chunk of that weight is devoted to this thing called the virtual DOM. There are alternatives that use similar APIs or approaches. For React, you have Preact, which is 2.5 kilobytes or about 3 kilobytes instead of 30. It’s a tenth of the size. For Vue, you have Alpine JS instead, which is about 7 kilobytes. Still, substantially smaller. The big difference between those and their big brother counterparts, is that they’ve shed the virtual DOM. They may drop a method or two. But generally, it’s the same approach and the same kind of API in the way of working with code, and they’re substantially smaller.
Chris: I think a lot of the tools we use are potentially overpowered for the things we’re trying to do. If you need a state-based UI and you need reactive data and these dynamic interfaces, that’s great. I think one of the big things I try and talk about today is not… never use tools. For me, Vanilla JS is not you’re handwriting every single line of code and every single project you do. That’s madness. I couldn’t do that, I don’t do that. But it’s being more selective about the tools we use. We always go for the multi-tool, the Swiss Army knife that has all these things in it. And sometimes, all you really need is a pair of scissors. You don’t need all the other stuff, but we have it anyways.
Chris: Which is a really long way to… I’m sorry, of answering your question. Which is sometimes it’s more code than you could or would want to write yourself, but it’s not nearly as much code as I think we think it requires. When I say you don’t need a framework, I get a lot of push-back around this idea that, “Well, if you don’t use a framework, you’re basically writing your own.” Then that comes with its own problems. I think there’s a place in between using React or Vue and writing your own framework, and it’s maybe picking something that’s a little bit smaller. There are sometimes reasons where writing your own framework might actually be the right call, depending on what you’re trying to do. It’s all very fluid and subjective.
Drew: It’s quite interesting that as a learning exercise, you implemented your own state-based framework. I remember in the past, I used to think that every time I reached for a library or something, I liked to think that I could implement it myself.
Chris: Sure, sure.
Drew: But reaching for the library saved me the hassle of doing that. I knew if I had to write this code myself, I knew what approach I’d take to do it. And that was true all the way up to using things like jQuery and things. These days, I think if I had to write my own version of Vue or React, I have almost no idea what’s happening now in that library, in all that code.
Drew: For those of us who are not familiar, when you say something like Preact drops the virtual DOM and makes everything a lot smaller, what’s that virtual DOM giving us?
Chris: To answer that question, I want to take just a slight step back. One of the nicest things that frameworks and other state-based libraries give you is DOM diffing. If you’re not really updating the UI that much, you could get by with saying, “Here’s a string of what the markup is supposed to look like. In HTML, I’ll just put all this markup in this element.” When you need to change something, you do it again. That is a little expensive for browsers, because it triggers a repaint.
Chris: But I think potentially more importantly than that, one of the issues with doing that is that you have any sort of interactive element in there, a form-field, a link that someone has focused on. That focus is lost because the element… even though you have a new thing that looks similar, it’s not the same literal element. So if focus is lost, it can create confusion for people using screen readers. There’s just a whole bunch of problems with that.
Chris: Any state-based UI thing worth its weight is going to implement some for of DOM diffing, where they say, “Here’s what the UI should look like. Here’s what it looks like right now in the DOM. What’s different?” And it’s going to go and change those things. It’s effectively doing the stuff you would do just manually updating the UI yourself, but it’s doing it for you under the hood. So you can just say, “Here’s what I want it to look like.” And then the library or framework figures it out.
Chris: The smaller things like Preact or Alpine, they’re actually doing that directly. They’re converting the string you provide them of what the UI should look like into HTML elements. And then they’re comparing each element to its corresponding piece in the literal DOM. As you end up with UIs that get bigger and bigger and bigger, that can have a performance implication because querying the DOM over and over again becomes expensive. If you want to get a sense for the type of interface where this becomes a problem, right-click and inspect element on the “Favorite” button on Twitter, or the “Like” button on Facebook. And take a look at the nesting of divs that gets you to that element. It’s very, very deep. It’s like a dozen or so divs, nested one inside the other just for that single tweet.
Chris: When you start going that many layers down, it starts to really impact performance. What the virtual DOM does is instead of checking the real DOM every time, it creates an object-based map of what the UI looks like in JavaScript. And then does the same thing for the UI you want to replace the existing one with, and it compares those two. That’s a lot more performance in theory, than doing that in the real DOM. Once it gets a list of the things it needs to change, it just runs off and makes those changes. But it only has to attack the DOM once. It’s not checking every single element, every single time. If you have interfaces like Twitters or Facebooks or QuickBooks or something like that, virtual DOM probably makes a lot of sense.
Chris: The challenge with it is… the difference between Preact and React is 27 kilobytes before you unpack the whole thing into its actual codewave. The raw download and unpacking and compiling time on that alone can add quite a bit of latency to the initial load on a UI. That becomes even more pronounced if your users are on not the latest devices from Apple. Even an Android device from a couple of years ago or a feature phone, or if you have people in developing countries, it’s just really… the time to get going is slower. And then on top of that, the actual interactive time is slower because of the extra abstraction.
Chris: So it’s not just you load it and they’re comparable in speed. Each micro interaction that someone makes and the changes that need to happen can also be slightly slower just because of all that extra code in there. If you have a really, really complex UI with lots of nested elements and lots of data, then the virtual DOM’s performance gains outweigh that extra code weight. But any typical UI for a typical app that most of what I see developers using React or Vue for, the benefit you get from the virtual DOM just isn’t there and they’d be better off. Even if you want to keep the same convenience of React, use Preact. It’s a fraction of the size, it’ll work exactly the same way, and it’ll more performing. This is the kind of thing that I tend to argue for.
Chris: We need to be better about picking the right tool for the job. If you go with an approach like that, if you get to a point where a virtual DOM actually makes sense, it’s much easier to port Preact into React than if you rolled your own. That’s the situation. If you’re really worried about that, you get some future-proofing built in too.
Drew: Some might say, they might make the argument that these frameworks, things like Vue, React are so highly optimized for performance that you get so much benefit there that surely just pairing that with a package manager in a bundler to make sure you’re only sending down the code that you want to. Surely, you are way ahead already just by doing that?
Chris: Yeah. I don’t agree. I don’t really have much more to elaborate on that other than… I guess maybe, but not really. Even with a bundler, you still need that React core. Even with the bundling, that’s still going to be bigger than using something like Preact.
Chris: Drew, I really appreciate you leading the question on this. Because one of the other things I do talk about in my book, The Lean Web, and my talk of the same name, is how these tools… You mentioned the bundling, for example. One of the things we do to get around the performance hit that we take from using all this JavaScript is we throw even more JavaScript at the front-end to account for it. One of the ways we do that is package managers and module bundlers.
Chris: As you alluded to… for those of you who don’t know, these are tools that will… they will compile all of your little individual JavaScript bits into one big file. The newer ones and the more… I don’t want to call them thoughtful. But the newer ones will use a feature called tree shaking, where they get rid of any code that isn’t actually needed. If that code has some dependencies that aren’t used for the thing you’ve actually done, they’ll drop some of that stuff out to make your packages as small as possible. It’s actually not a terrible idea, but it results in this thing I typically call dependency health where you have this really delicate house of cards of dependencies on top of dependencies on top of dependencies.
Chris: Getting your process set up takes time. And anybody who has ever run an NPM install and then discovered that a bunch of dependencies were out of date and had to spend an hour trying to figure out which ones needed to be fixed and oh, it’s actually a dependency in a dependency and you don’t have the ability to go fix it yourself. It’s a whole thing. Maybe it works for you, but I’d rather spend my time not messing around trying to get my dependencies together.
Chris: I’ve started collecting tweets from people where they complain about time wasted on their workflow. One of my favorites, Brad Frost a couple year ago, was talking about the depressing realization that the thing you’ve been slogging through in modern JS could have taken you 10 minutes in jQuery. I’m not really a jQuery fan, but I feel that pain when it comes to working with frameworks.
Chris: The other issue with a lot of these tools is they start to become gatekeepers. I don’t know how much you really want to dive into this or not, Drew. But one of my big push-backs against JS, all the things in a workflow. Especially when you start to then say, “Well, if we’re already using JS for the HTML, why not use it for CSS too?” You start to exclude a lot of really talented people from the development process. It’s just a really big loss for the project for the community as a whole.
Drew: Well, I certainly am… I started picking up React at the beginning of 2020, adding that to my skillset. I’ve been doing it now for nearly seven months. I’ve got to say one part I’m least confident in is setting up the tooling around getting a project started.
Drew: It seems like there’s an awful lot of work to get something to Hello World, and there’s even more that you’ve got to know to get it to be production ready. That has to make development more difficult to get started with if this is being put forward as what you should be doing in 2020 to learn to be a web developer. Somebody coming in new to it is going to have a real problem. It’s going to be a real barrier to entry, isn’t it?
Chris: Absolutely. The other piece here is that JavaScript developers aren’t always the only people working on a code base or contributing in a meaningful way to that code base. The more we make knowing JavaScript a requirement for working with a code base, the less likely those people are to be able to actually participate in the project.
Chris: An example of that, that I like to talk about is WordPress, who has been recently… I shouldn’t say recently at this point. It’s been a couple of years now. But they’ve been shifting their back-end stack more and more to JavaScript, away from PHP, which is not inherently a bad thing. Their new editor, Gutenburg, is built on React.
Chris: In 2018, WordPress’s lead accessibility consultant, Rian Rietveld, whose name I almost certainly butchered… she very publicly resigned from her positioned and documented why in a really detailed article. The core of the problem was that her and her team were tasked with auditing this editor to make sure that it was going to be accessible. WordPress comprises now 30% of the web. Their goal is to democratize publishing, so accessibility is a really important part of that. It should be an important part of any web project. But for them in particular, it is acutely important. Her team’s whole job is to make sure… her team’s whole job was to make sure that this editor would be accessible. But because neither she nor anyone on her team had React experience and because they couldn’t find volunteers in the accessibility community with that experience, it made it really difficult for her and her team to do their work.
Chris: Historically, they could identify errors and then go in and fix them. But with the new React based workflow, they were reduced to identifying bugs and then filing tickets. They got added to a backlog along with all the other feature development requests that the JavaScript developers were working on. A lot of stuff that could have been easily fixed didn’t make it into the first release.
Chris: In May of 2019, about a year after Rian resigned, there was a detailed accessibility audit done on Gutenburg. The full report was 329 pages. The executive summary alone was 34 pages. It documented 91 accessibility related bugs in quite a bit of detail. Many of these were really… I don’t want to call them simple low-hanging fruit, but a lot of them were basic things that Rian’s team could have fixed and it would have freed up the developers to focus on feature development. That’s ultimately what it seems like they ended up doing, was spending a lot of time on feature development and pushing this stuff off til later. But that team is super important to the project, and they suddenly got locked out of the process because of a technical choice.
Chris: Alex Russell is a developer on the Chrome team. He wrote this article a couple of years ago called The Developer Bait and Switch, where he talked about the straw man argument of frameworks. This idea that these tools let you move faster and because of that, you can iterate faster and deliver better experiences. It’s this idea that a better developer experience means a better user experience. I think this is a very clear example of how that argument doesn’t always play out the way people believe it does. It’s a better experience for maybe some people, not for everyone.
Chris: CSS developers, people working on design systems, their ability to create tools that others can use sometimes gets limited by these tool choices too. In my experience, I used to be better at CSS. It’s changed a lot in the last few years and I am nowhere near as good as I used to be. In my experience, the people who are really advanced CSS developers… and I do mean that in the truest sense. People who work on CSS are proper web developers working on a programming language. It’s a very special, or can be a very specialized thing. The people who are exceptionally good at it, in my experience, are not always also very good at JavaScript because you end up diving really deep into one thing and you slide a little bit on some other stuff. Their ability to work with these technologies gets hindered as well, which is too bad because it used to not be the case.
Chris: When the stack was simpler, it was easier for people from multiple disciplines to participate in the development process. I think that’s to the detriment of both the things we build and the community at large, when that’s no longer the case.
Drew: I found recently in a project researching ways to deal with some of the CSS problems, workflow problems, we’re having multiple working on the project and the bundle size increasing and the old CSS never getting removed. It was a React project, so we were looking at some of these CSS in JavaScript approaches to see what would be best for us to use to solve the problems that we had. What became very quickly apparent is there’s not only one solution to do this. There are dozens of different ways you could do this.
Drew: CSS in JS is a general approach, but you might go from one project to the next and it’s completely influenced in a completely different way. Even if you’re a CSS person and you learn a particular approach on a project, those skills may not be transferrable anyway. It’s very difficult to see how somebody should investment too much time in learning that if they’re not particularly comfortable with JavaScript.
Chris: Yeah. The other interesting thing that I think you just got out a little bit is when I talk about this, one of the biggest pieces of push-back I get is that frameworks enforce conventions. You’re going with Vanilla JavaScript, you’ve got this green field-blue sky, you can do anything you want kind of project. With React, there’s a React way to do things.
Chris: But one of the things I have found is that there are Reacty approaches, but there’s not a strict one right way to do things with React. It’s one of the things people love about it. It’s a little bit more flexible, you can do things a couple of different ways if you want. Same with Vue. You can use that HTML based thing where you’ve got your properties right in the HTML and Vue replaces them, but you can also use a more JSX-like templating kind of syntax if you’d prefer.
Chris: I’ve heard multiple folks complain about when they’re learning React, one of the big problems is you Google how to do X in React and you get a dozen articles telling you a dozen different ways that you could do that thing. That’s not to say they don’t put some guardrails on a project. I don’t think it’s as clearcut as, “I’ve chosen a framework. Now this is the way I build with it.” To be honest, I don’t know that that’s necessarily something I’d want either. I don’t think you’d want those tightly confined… some people do, maybe. But if you’re touting that as a benefit, I don’t think it’s quite as pronounced as people sometimes make it out to be.
Chris: You got into an interesting thing though just there, where you were mentioning the CSS that is no longer needed. I think that is one of the legitimately interesting things that something like CSS and JS… or tying your CSS to JavaScript components in some way can get you is if that component drops out, the CSS also in theory, goes away with it. A lot of this to me feels like throwing engineering at people problems. Invariably, you’re still dependent on people somewhere along the line. That’s not to say never use those approaches, but they’re certainly not the only way to get at this problem.
Chris: There are tools you can use to audit your HTML and pull out the styles that aren’t being used even without using CSS and JavaScript. You can write CSS “the old-fashioned way” and still do the linting of unused styles. There are authoring approaches to CSS that give you a CSS in JS-like output and keep your style sheet small without spitting out these gibberish human unreadable class names that you get with CSS and JS sometimes. Like X2354ABC, or just these nonsense words that get spit out.
Chris: This is where I start to get really into the old man yells at cloud kind of thing. I’m really showing my developer age here. But yeah, it’s not necessarily that these things are bad, and they’re built to solve legitimate problems. I sometimes feel like there’s a little bit of a… if it’s good enough for Facebook, it’s good enough for us kind of thing that happens with these. Well, Facebook uses this tool. If we’re a real engineering program… team, department, organization, we should too. I don’t necessarily think that’s the right way to think about it. It’s because Facebook deals with problems that you don’t, and vice-versa. The size and scale of what they work on is just different, and that’s okay.
Drew: Exactly. I see some of these things like CSS and JavaScript to be almost like a polyfill. We’ve got legitimate problems, we need a way to solve it. The technology isn’t providing us a way to solve it yet. Maybe whilst we wait for the web platform to evolve and to get around to addressing that problem, this thing that we do right now with JavaScript kind of will see us through and we’ll be okay. We know it’s bad. We know it’s not a great solution, but it helps us right now. And hopefully in the while we can pull it out and use the native solution.
Chris: It’s really funny you bring this up. Because literally last night, I was watching a talk from Jeremy Keith from last year about progressive web apps. But he was talking about how a couple of decades ago, he was trying to convince people to use JavaScript. Which seems ridiculous at the time, but JavaScript was this new thing. He showed people how you could do cool things like change the color of a link on hover with this new… It seems absurd that you would need JavaScript for that now, because that’s what CSS does for you. But things like the focus attribute or property just didn’t exist at the time.
Chris: One of the things he said in the talk that I think really resonated with me is that JavaScript in many ways, paves those cow paths. It’s this very flexible and open language that we can use to create or bolt in features that don’t exist yet. And then eventually, browsers catch up and implement these features in a more native way. But it takes time. I completely understand what you’re saying about this. It’s not the perfect solution, but it’s what we have right now.
Chris: I think for me, the biggest difference between polyfills and some of these solutions is polyfills are designed to be ripped out. If I have a feature I want to implement that the browser doesn’t support yet, but there’s some sort of specification for it and I write a polyfill… once browsers catch up, I can rip that polyfill out and I don’t have to change anything. But when you go down the path of using some of these tools, ripping them up out means rewriting your whole code base. That’s really expensive and problematic. That’s not to say never use them, but I feel really strongly that we should be giving thought to picking tools that can easily be pulled out later. If we no longer need them or the platform catches up, it doesn’t require a huge rewrite to pull them out.
Chris: So getting to that we have a whole bunch of styles we don’t use anymore thing, that’s why I would personally favor a build tool technology that audits your CSS against the rendered markup and pulls out the things you don’t need. Because down the road if a platform catches up, you can pull that piece of the build tool out without having to change everything. It’s just augmenting what you already have, whereas CSS and JS doesn’t give you that same kind of benefit. I’m just picking on that one, but I think about a lot of these technologies more broadly.
Chris: I do feel things like React or Vue are probably paving some cow paths that browsers will eventually catch up with and probably use similar approaches if not the same, so there may be less rewriting involved there. A lot of the ecosystem stuff that gets plugged in around that may be less so.
Drew: I think it’s right, isn’t it, that the web platform moves slowly and carefully. You think if five years ago, we were all putting JavaScript Carousels on our pages. They were everywhere. Everyone was implementing JavaScript Carousels. If the web platform had jumped and implemented a Carousel solution to satisfy that need, it would not be sat there with nobody using it because people aren’t doing that with Carousels anymore. Because it was just a fad, a design trend. To counteract that and stop the platform itself becoming bloated and becoming a problem that needs solving, it does have to move at a lot steadier pace. The upshot of that is HTML that I wrote in 1999 still works today because of that slow process.
Drew: One of the other areas where things seem to be bloating out on the web is… I guess it’s related to the framework conversation. But it’s the concept of a single-page app. I feel like that a lot of promises are made around single-page apps as to their performance, like you’re getting all this benefit because you’re not reloading the entire page framework. I feel like they don’t always make good on those performance promises. Would you agree with that?
Chris: Yes. Although I will confess, despite having a very lengthy chapter in my book on this and talking about that a lot in talks and conversations with people, I don’t think single-page apps are always a terrible thing. But I do think this idea that you need one for performance is overstated. You can oftentimes get that same level of performance with different approaches.
Chris: I think one of the bigger challenges with single-page apps is… For anybody who’s unfamiliar with those. When a single-page app, instead of having separate HTML files or if you’re using something like a database driven site like WordPress, even though you don’t have actual physical HTML files for each page in your WordPress site, WordPress is creating HTML files on the fly and sending them back to browsers when URLs are requested. For purposes of this conversation, instead of having separate HTML files for every view in your app, a single-page app has a single HTML file. That’s what makes it a single-page app. JavaScript handles everything. Rendering the content, routing to different URL paths, fetching new content if it needs to from an API or something like that.
Chris: One of the spoken benefits of these or stated benefits of these is that only the content on the page changes. You don’t have to re-download all the JS and the CSS. Oh, and you can do those fancy page transitions that designers sometimes love. In theory, this is more performant than having to reload the whole page.
Chris: The problem with this approach from my perspective is that it also breaks a bunch of stuff that the browser just gives you for free out-of-the-box, and then you need to recreate it with more JS. You have an app that’s slow because it has a lot of JS. So you throw even more JavaScript at it to improve that performance and in doing so, you break a bunch of browser features and then have to re-implement those with even more JS too.
Chris: For example, some things that the browser will do for free with a traditional website that you need to recreate with JavaScript when you go the single-page app. You need to intercept clicks on links and suppress them from actually firing, with your JavaScript. You then need to figure out what you actually need to show based on that URL, which is normally something that would get handled on the server or based on the file that goes with that URL path. You need to actually update the URL in the address bar without triggering a page reload. You need to listen for forward and back clicks on the browser and update content again, just like you would with clicks on links. You need to update the document title.
Chris: You also need to shift focus in a way that announces the change in page to people who are using screen readers and other devices so that they’re not confused about where they are or what’s going on. Because they can’t see the change that’s happening, they’re hearing it announced. If you don’t actually shift focus anywhere, that announcement doesn’t happen. These are all things that the browser would do for you that get broken with single-page apps.
Chris: On top of that, because you have all this extra JavaScript, this is complicated. So most people use frameworks and libraries to handle this sort of thing. Because of all this extra JavaScript to support this approach, you end up with potentially slower initial page load than you would have otherwise. Depending on the content you have, this approach I think sometimes can make sense. If you have an app that is driven by API data where you don’t necessarily know what those URL paths are going to look like ahead of time.
Chris: Just an example here. You have an animal rescue where you have some adoptable animals, and that data comes from Petfinder, the animal adoption website. You have a bunch of animals there. Petfinder manages that, but you want to display them on your site with the Petfinder API. When your website’s being built, it doesn’t always necessarily have visibility to what pets are available in this exact moment and what kind of URL paths you’re going to need. A single-page app can help you there because it can dynamically on the fly, create these nice URLs that map with each dog or cat.
Chris: Something like Instagram with lots of user created content, maybe that also makes sense. But for a lot of things, we do know where those URLs are going to be ahead of time. Creating an HTML file that has the content on it already is going to be just as fast as… sometimes even faster than the JavaScript based single-page app approach, especially if you use some other techniques to keep your overall CSS and JavaScript size down. I use this approach on a course portal that I have. The page loads feel instantaneous because HTML is so easy for browsers to render compared to other parts of the stack. It feels like a single-page app, but it’s not.
Drew: Especially when you consider hosting solutions like a Jamstack approach of putting HTML files out in a CDN so it’s being served somewhere physically close to the user.
Chris: Yep.
Drew: Loading those pages can just be so, so quick.
Chris: Yes. Absolutely. Absolutely. One of the other arguments I think people used to make in favor of single-page apps is offline access. If someone loads it and then their network goes down, the app is already up and all the routes are handled just with the file that’s already there. So there’s no reloading, they don’t lose any work. That was true for a long time. Now with service workers and progressive web apps, that is I think less of a compelling argument, especially since service workers can fetch full HTML files and cache them ahead of time if needed.
Chris: You can literally have your whole app available offline before someone has even visited those pages if you want. It just happens in the background without the user having to do anything. It’s again, one of those technologies that maybe made sense for certain use cases a few years ago a little less compelling now.
Drew: It reminds me slightly of when we used to build websites in Flash.
Chris: Yes.
Drew: And you’d have just a rectangle embedded in an HTML page which is your Flash Player, and you’d build your entire site in that. You had to reimplement absolutely everything. There was no back button. If you wanted a back button, you had to create a back button, and then you had to create what the concept of a page was. You were writing code upon code, upon code to reimplement just as you are saying things that the browser already does for you. Does all this JavaScript that we’re putting into our pages to create this functionality… is this going to cause fragility in our front-ends?
Chris: Yes. This is almost certainly from my mind, one of the biggest issues with our over-reliance on JavaScript. JavaScript is just by its nature, is a scripting language, the most fragile part of the front-end stack.
Chris: For example, if I write an HTML element that doesn’t exist, I spell article like arcitle instead of article and the browser runs across that, it’s going to be like, “Oh, I don’t know what this is. Whatever, I’ll just treat it like a div.” And it keeps going. If I mistype a CSS property… Let’s say I forget the B in bold, so I write old instead, font way old. The browser’s going to be, “I don’t know what this is. Whatever, we’ll just keep going.” Your thing won’t be bold, but it will still be there.
Chris: With JavaScript, if you mistype a variable name or you try to use a property, you try to call a variable that doesn’t exist or a myriad of other things happen… your minifier messes up and pulls one line of code to the one before it without a semicolon where it needs one, the whole app crashes. Everything from that line on stop working. Sometimes even stuff that happens before that doesn’t complete, depending on how your app is set up. You can very quickly end up with an app that in a different approach, one where you rely a lot more on HTML and CSS, it would work. It might not look exactly right, but it would still work… to one that doesn’t work at all.
Chris: There’s an argument to be made that in 2020, JavaScript is an integral and important part of the web and most people don’t disable it and most people are using devices that can actually handle modern JavaScript. That’s true, but that’s not the only reason why JavaScript doesn’t work right, even if you have a linter there for example and you catch bugs ahead of time and things. There’s plenty of reasons why JavaScript can go horribly awry on you. CDNs fail.
Chris: Back in July of last, a year ago this month… at least, when we’re recording this… a bad deploy took down Cloudflare. Interestingly as we’re recording this, I think a week or two ago, Cloudflare had another massive outage that broke a whole bunch of things, which is not a knock on Cloudflare. They’re an incredibly important service that powers a ton of the web. But CDNs do sometimes go down. They are a provider used by 10% of Fortune 1,000 companies. If your JS is served by that CDN and it breaks, the JavaScript file never loads. And if your content is dependent on that JS, your users get nothing instead of getting something just not styled the way you’d like.
Chris: Firewalls and ad blockers get overly aggressive with what they block. I used to work at a company that had a JavaScript white list because they were extremely security conscious, they worked with some government contract stuff. They had a list of allowed JavaScript, and if your site or if your URL wasn’t part of that, no JavaScript. You have these sites. I remember going to a site where it had one of the hamburger kind of style menus on every view whether it was desktop or mobile, and I could not access any page other than the homepage because no JavaScript, no hamburger, that was it.
Chris: Sometimes connections just timeout for reasons. Either the file takes a while or someone’s in a spotty or slow connection. Ian Feather, an engineer at BuzzFeed, shared that about 1% of requests for JavaScript on the site fail which is 13 million requests a month. Or it was last year, it’s probably even more now. That’s a lot of failed JavaScript. People commuting go through tunnels and lose the internet. There’s just all sorts of reasons why JavaScript can fail and when it does, it’s so catastrophic.
Chris: And so we built this web that should be faster than ever. It’s 2020, 5G is starting to become a thing. I thought 4G was amazing. 4G is about as fast as my home wifi network. 5G is even faster, which is just bonkers. Yet somehow, we have websites that are slower and less performant than they were 5 or 10 years ago, and that makes no sense to me. It doesn’t have to be that way.
Drew: How do we get out of this mess, Chris?
Chris: Great question. I want to be really clear. I know I’ve hammered on this a couple times. I’m not saying all the new stuff is bad, never use it. But what I do want to encourage is a little bit more thoughtfulness about how we build for the web.
Chris: I think the overlying theme here is that old doesn’t mean obsolete. It doesn’t mean never embrace new stuff, but don’t be so quick to just jump on all the shiny new stuff just because it’s there. I know it’s one of the things that keeps this industry really exciting and makes it fun to work in, there’s always something new to learn. But when you pick these new things, do it because it’s the right tool for the job and not just because it’s the shiny new thing.
Chris: One of the other things we didn’t get into as much as I would have liked, but I think is really important, is that the platform has caught up in a really big way in the last few years. Embracing that as much as possible is going to result in a web experience for people that is faster, that is less fragile, that is easier for you to build and maintain because it requires fewer dependencies such as using what the browser gives you out-of-the-box. We used to need jQuery to select things like classes. Now browsers have native ways to do that. People like JSX because it allows you to write HTML in JavaScript in a more seamless way. But we also have template literals in Vanilla JavaScript that give you that same level of ease without the additional dependency. HTML itself can now replace a lot of things that used to require JavaScript, which is absolutely amazing.
Chris: We talked a little bit about… this is a CSS thing, but hovers over links and how that used to require JavaScript. But using things like the details and summary elements, you can create disclosure, like expand and collapse or accordion elements natively with no scripting needed. You can do auto complete inputs using just a… I shouldn’t say just, I hate that word. But using a humble input element and then a data list element that gets associated with it, with some options. If you’re curious about how any of this stuff works over at vanillajstoolkit.com, I have a bunch of JavaScript stuff that the platform gives you. But I also have some used to require JavaScript and now doesn’t kind of things that might be interesting too if you want some code samples to go along with this.
Chris: On the CSS side of things, my most popular Vanilla JS plugin ever is this library that lets you animate scrolling down to anchor links. It is very big. It’s the hardest piece of code I’ve ever had to write. And it now is completely replaced with a single line of CSS, scroll behavior smooth. It’s more performant. It’s easier to write. It’s easier to modify its behavior. It’s just a better overall solution.
Chris: One of the other things that I wish we did more is leaning on multi-page apps. I feel a little bit vindicated here, because I recently saw an article from someone at Google that actually pushes for this approach now too. I thought that was pretty interesting, given this huge angular and then framework… all the things, boom, that Google started a few years back. Kind of cool to see them come back around to this. Using things like static site generators and awesome services like Netlify and CDN caching, you can create incredibly fast web experiences for people using individual HTML files for all of your different views. So kind of leaning on some of this out-of-the-box stuff.
Chris: In situations where that’s not realistic for you, where you do need more JavaScript, you do need some sort of library, maybe taking a look at the smaller and more modular approaches first instead of just going for the behemoths of the industry. Instead of React, would Preact work? Instead of angular… I mean, instead of Vue rather, would Alpine JS work? There’s also this really interesting pre-compiler out there now called Svelt, that gives you a framework-like experience and then compiles all your code into Vanilla JavaScript. So you get these really tiny bundles that have just what you need and nothing else. Instead of CSS and JavaScript, could you bolt in some third party CSS linter that will compare your HTML to your CSS and pull out the stuff that got left in there by accident? Would a different way of authoring your CSS, like object oriented CSS by Nicole Sullivan, work instead? We didn’t really get to talk about that, but it’s a really cool thing people should check out.
Chris: And then I think maybe the third and most important piece here, even though it’s less of a specific approach and more just a thing I wish more people kept in mind, is that the web is for everyone. A lot of the tools that we use today work for people who have good internet connections and powerful devices. But they don’t work for people who are on older devices, have spotty internet connections. This is not just people in developing areas. This is also people in the U.K., in certain parts of the U.S. where we have absolutely abysmal internet connections. The middle of our country has very slow internet. I know there’s places in part of London where they can’t wire a new broadband in for historical reasons, so you’re left with these old internet connections that are really bad. There’s places like that all over the world. Last time I was in Italy, same thing. The internet there was horrible. I don’t know if it’s changed since then.
Chris: The things we build today don’t always work for everyone, and that’s too bad. Because the vision of the web, the thing I love about it, is that it is a platform for absolutely everyone.
Drew: If listeners want to find out more about this approach, you’ve gone into loads of detail to it in your book, The Lean Web. And that’s available online. Is it a physical book or a digital book?
Chris: It’s a little bit of both. Well, no. It’s definitely not a physical book. You go to leanweb.dev. You can read the whole thing for free online. You can also if you want, there’s EPUB and PDF versions available for a really small amount of money, I forget how much now. I haven’t looked at it in a while. The whole thing is free online if you want it. You can also watch a talk on this topic where I go into more details if you want.
Chris: But I’ve also put together a special page just for listeners of Smashing Podcast at gomakethings.com/smashingpodcast, because I’m very creative with naming things. That includes a bunch of resources in addition to the book, around things that we talked about today. It links to a lot of the different techniques that we covered, other articles I’ve written that go deeper into some of these topics and expand on my thinking a little bit. If folks want to learn more, that would probably be the best place to start.
Drew: That’s terrific. Thank you. I’ve been learning all about the Lean Web. What have you been learning about lately, Chris?
Chris: Yeah, a couple of things. I alluded to this a little bit earlier with watching Jeremy’s video on progressive web apps. I have been putting off learning how to actually write my own progressive web app for a couple of years because I didn’t have a specific need on anything I was working with. I recently learned from one of my students who is in South Africa, that they have been dealing with rolling blackouts because of some stuff they have going on down there. As a result, she is not able to work on some of the projects we’ve been doing together regularly, because the power goes out and she can’t access the learning portal and follow along.
Chris: For me, now building an experience where it works even if someone doesn’t have internet has become a higher priority than… I realized that maybe it was before, so I just started digging into that and hope to get that put together in the next few weeks. We’ll see. Jeremy Keith’s resources on this have been an absolute lifesaver though. I’m glad they exist.
Chris: I know, Drew, you mentioned one of the reasons you like to ask this question is to show that people no matter how seasoned they are, are always learning. Just a little related anecdote. I have been a web developer for I think, about eight years now. I still have to Google the CSS property to use for making things italic, literally every single time I use it. For some reason, my brain defaults to text decoration even though that’s not the right one. I’ll try a couple of combinations of different things, and I always have one word wrong every time. I also sometimes write italics instead of italic. Yeah. If anybody ever there is ever feeling like, oh, I’m never going to learn this stuff… just know that no matter how seasoned you are, there’s always some really basic thing that you Google over and over again.
Drew: I’ve been a web developer for 22, 23 years, and I have to Google the different properties for Flexbox still, every time. Although I’ve been using that for 23 years. But yeah, some things just… there’s probably going to more of those as I get older.
Chris: Yeah. Honestly, I ended up building a whole website of stuff I Google over and over again, just to have an easier copy-paste reference because that was easier than Googling.
Drew: That’s not a bad idea.
Chris: That’s the kind of lazy I am. I’ll build a whole website to save myself like three seconds of Googling.
Drew: If you the listener would like to hear more from Chris, you can find his book on the web at leanweb.dev, and his developer Tips newsletter and more at gomakethings.com. Chris is on Twitter at Chris Ferdinandi. And you can check out his podcast at vanillajspodcast.com or wherever you usually get your podcasts. Thanks for joining us today, Chris. Do you have any parting words?
Chris: No. Thank you so much for having me, Drew. I had an absolutely smashing time. This was heaps of fun. I really appreciate the opportunity to come chat.
(il)
Website Design & SEO Delray Beach by DBL07.co
Delray Beach SEO
source http://www.scpie.org/smashing-podcast-episode-21-with-chris-ferdinandi-are-modern-best-practices-bad-for-the-web/ source https://scpie.tumblr.com/post/624890723469295616
0 notes
scpie · 4 years
Text
Smashing Podcast Episode 21 With Chris Ferdinandi: Are Modern Best Practices Bad For The Web?
We’re asking if modern best practices are bad for the web? Are modern frameworks taking us down the wrong path? Drew McLellan speaks to Lean Web expert Chris Ferdinandi to find out.
Today, we’re asking if modern best practices are bad for the web? Are modern frameworks taking us down the wrong path? I speak to Lean Web expert Chris Ferdinandi to find out.
Show Notes
Weekly Update
Transcript
Drew McLellan: He’s the author of Vanilla JS Pocket Guide Series, creator of the Vanilla JS Academy Training Program, and host of the Vanilla JS Podcast. He’s developed a Tips newsletter, it’s read by nearly 10,000 developers each weekday. He’s taught developers at organizations like Chobani and The Boston Globe. And his JavaScript plugins have been used by organizations like Apple and Harvard Business School. Most of all, he loves to help people learn Vanilla JavaScript. So we know he’d rather pick Vanilla JavaScript over a framework, but did you know he was once picked out in a police lineup as being the person least likely to have committed the crime? My Smashing friends, please welcome Chris Ferdinandi. Hello, Chris. How are you?
Chris Ferdinandi: Oh, I’m smashing. Thanks for having me.
Drew: I wanted to talk to you today about this concept of a Lean Web, which something of a passion for you, isn’t it?
Chris: Yes, very much so.
Drew: Why don’t you set the scene for us? When we talk about a Lean Web, what is the problem we are trying to solve?
Chris: Yeah, great question. Just as a caveat for all the listeners, this episode might get a little old man yells at cloud. I’m going to try to avoid that. When I look at the way we build for the web today, it feels a little bit like a bloated over-engineered mess. I’ve come to believe that a lot of what we think of as best practices today might actually be making the web worse.
Chris: The Lean Web is an approach to web development that is focused on simplicity, on performance, and the developer experience over… I’m sorry, not the developer experience. The user experience rather, over the developer experience, and the ease of building things from a team perspective, which is what I think where we put a lot of focus today and as we’ll probably get into in our conversation.
Chris: I’ve actually come to find that a lot of these things we think of as improving the developer experience do so for a subset of developers, but not necessarily everybody who’s working on the thing you’re building. So there’s a whole bunch of issues with that too, that we can dig into. But really, the Lean Web is about focusing on simplicity and performance for the user and really prioritizing or putting the focus on the people who use the things we make rather than us, the people who are making it.
Drew: As the web matures as a development platform, there seems to be this ever increasing drive towards specialization.
Chris: Yes.
Drew: People who used to cover Full Stack, and then we split into front-end and back-end. And then that front-end split into people who do CSS or JavaScript development. And then increasingly within JavaScript, it becomes more specialized. Somebody might consider themselves and market themselves as a React developer or an Angular developer, and their entire identity and outlook is based around a particular framework that they are highly skilled in. Is this dependency on frameworks, the core of our work on the web, a bad thing?
Chris: It’s nuanced. I used to be very strongly in the yes, always camp. I think broadly, I still feel like yes, our obsession as an industry with frameworks and tools in general really, is potentially a little bit to our detriment. I don’t think frameworks are inherently bad. I think they’re useful for a very narrow subset of use cases. And we end up using them for almost everything, including lots of situations where they’re really not necessarily the best choice for you or for the project.
Chris: When I think about a lot of the issues that we have on the web today, the core of those issues really starts with our over-reliance on frameworks. Everything else that comes after that is in many ways, because we throw so much not just frameworks which is JavaScript in general, at the web. I say that as someone who professionally teaches people how to write and use JavaScript. That’s how I make my money. And I’m here saying that I think we use too much JavaScript, which is sometimes a little bit of an odd thing.
Drew: In the time before the big frameworks sprouted up, we used to build user interfaces and things with jQuery or whatever. And then frameworks came along and they gave us more of this concept of a state-based UI.
Chris: Yes.
Drew: Now, that’s a fairly complex bit of engineering that you’re required to get in place. Does working with less JavaScript exclude using something like that, or do you have to re-implement it yourself? Are you just creating a loaded boilerplate?
Chris: A lot of it depends on what you’re doing. If you have a non-changing interface, you can build a state-based UI with… I don’t know, maybe a dozen or so lines of code. If you have a non-changing interface, I would honestly probably say state-based UI. It’s not necessarily the right approach. There’s probably other things you can do instead. Think of static site generators, some pre-rendered markup, even an old-school WordPress or PHP driven site.
Chris: But where this starts to get interesting is when you get into more dynamic and interactive interfaces. Not just apps. I know people love to draw this line between websites and apps, and I think there’s this weird blend between the two of them and the line is not always as clear. When you start to get into more the user does stuff, something changes. State-based UI becomes a little bit more important. But you still don’t need tons of code to make that happen.
Chris: I look at something like React or Vue, which are absolutely amazing pieces of engineering. I don’t want to take away from the people who work on those. I ended up as a learning exercise, building my own mini-framework just to get a better sense for how these things work under the hood. It is really hard to account for all of the different moving pieces. So I have tremendous respect for the people who build and work on these tools. But React and Vue are both about 30 kilobytes after minifying and gzipping. So once you unpack them, they’re substantially bigger than that.
Chris: Not all of it, but a good chunk of that weight is devoted to this thing called the virtual DOM. There are alternatives that use similar APIs or approaches. For React, you have Preact, which is 2.5 kilobytes or about 3 kilobytes instead of 30. It’s a tenth of the size. For Vue, you have Alpine JS instead, which is about 7 kilobytes. Still, substantially smaller. The big difference between those and their big brother counterparts, is that they’ve shed the virtual DOM. They may drop a method or two. But generally, it’s the same approach and the same kind of API in the way of working with code, and they’re substantially smaller.
Chris: I think a lot of the tools we use are potentially overpowered for the things we’re trying to do. If you need a state-based UI and you need reactive data and these dynamic interfaces, that’s great. I think one of the big things I try and talk about today is not… never use tools. For me, Vanilla JS is not you’re handwriting every single line of code and every single project you do. That’s madness. I couldn’t do that, I don’t do that. But it’s being more selective about the tools we use. We always go for the multi-tool, the Swiss Army knife that has all these things in it. And sometimes, all you really need is a pair of scissors. You don’t need all the other stuff, but we have it anyways.
Chris: Which is a really long way to… I’m sorry, of answering your question. Which is sometimes it’s more code than you could or would want to write yourself, but it’s not nearly as much code as I think we think it requires. When I say you don’t need a framework, I get a lot of push-back around this idea that, “Well, if you don’t use a framework, you’re basically writing your own.” Then that comes with its own problems. I think there’s a place in between using React or Vue and writing your own framework, and it’s maybe picking something that’s a little bit smaller. There are sometimes reasons where writing your own framework might actually be the right call, depending on what you’re trying to do. It’s all very fluid and subjective.
Drew: It’s quite interesting that as a learning exercise, you implemented your own state-based framework. I remember in the past, I used to think that every time I reached for a library or something, I liked to think that I could implement it myself.
Chris: Sure, sure.
Drew: But reaching for the library saved me the hassle of doing that. I knew if I had to write this code myself, I knew what approach I’d take to do it. And that was true all the way up to using things like jQuery and things. These days, I think if I had to write my own version of Vue or React, I have almost no idea what’s happening now in that library, in all that code.
Drew: For those of us who are not familiar, when you say something like Preact drops the virtual DOM and makes everything a lot smaller, what’s that virtual DOM giving us?
Chris: To answer that question, I want to take just a slight step back. One of the nicest things that frameworks and other state-based libraries give you is DOM diffing. If you’re not really updating the UI that much, you could get by with saying, “Here’s a string of what the markup is supposed to look like. In HTML, I’ll just put all this markup in this element.” When you need to change something, you do it again. That is a little expensive for browsers, because it triggers a repaint.
Chris: But I think potentially more importantly than that, one of the issues with doing that is that you have any sort of interactive element in there, a form-field, a link that someone has focused on. That focus is lost because the element… even though you have a new thing that looks similar, it’s not the same literal element. So if focus is lost, it can create confusion for people using screen readers. There’s just a whole bunch of problems with that.
Chris: Any state-based UI thing worth its weight is going to implement some for of DOM diffing, where they say, “Here’s what the UI should look like. Here’s what it looks like right now in the DOM. What’s different?” And it’s going to go and change those things. It’s effectively doing the stuff you would do just manually updating the UI yourself, but it’s doing it for you under the hood. So you can just say, “Here’s what I want it to look like.” And then the library or framework figures it out.
Chris: The smaller things like Preact or Alpine, they’re actually doing that directly. They’re converting the string you provide them of what the UI should look like into HTML elements. And then they’re comparing each element to its corresponding piece in the literal DOM. As you end up with UIs that get bigger and bigger and bigger, that can have a performance implication because querying the DOM over and over again becomes expensive. If you want to get a sense for the type of interface where this becomes a problem, right-click and inspect element on the “Favorite” button on Twitter, or the “Like” button on Facebook. And take a look at the nesting of divs that gets you to that element. It’s very, very deep. It’s like a dozen or so divs, nested one inside the other just for that single tweet.
Chris: When you start going that many layers down, it starts to really impact performance. What the virtual DOM does is instead of checking the real DOM every time, it creates an object-based map of what the UI looks like in JavaScript. And then does the same thing for the UI you want to replace the existing one with, and it compares those two. That’s a lot more performance in theory, than doing that in the real DOM. Once it gets a list of the things it needs to change, it just runs off and makes those changes. But it only has to attack the DOM once. It’s not checking every single element, every single time. If you have interfaces like Twitters or Facebooks or QuickBooks or something like that, virtual DOM probably makes a lot of sense.
Chris: The challenge with it is… the difference between Preact and React is 27 kilobytes before you unpack the whole thing into its actual codewave. The raw download and unpacking and compiling time on that alone can add quite a bit of latency to the initial load on a UI. That becomes even more pronounced if your users are on not the latest devices from Apple. Even an Android device from a couple of years ago or a feature phone, or if you have people in developing countries, it’s just really… the time to get going is slower. And then on top of that, the actual interactive time is slower because of the extra abstraction.
Chris: So it’s not just you load it and they’re comparable in speed. Each micro interaction that someone makes and the changes that need to happen can also be slightly slower just because of all that extra code in there. If you have a really, really complex UI with lots of nested elements and lots of data, then the virtual DOM’s performance gains outweigh that extra code weight. But any typical UI for a typical app that most of what I see developers using React or Vue for, the benefit you get from the virtual DOM just isn’t there and they’d be better off. Even if you want to keep the same convenience of React, use Preact. It’s a fraction of the size, it’ll work exactly the same way, and it’ll more performing. This is the kind of thing that I tend to argue for.
Chris: We need to be better about picking the right tool for the job. If you go with an approach like that, if you get to a point where a virtual DOM actually makes sense, it’s much easier to port Preact into React than if you rolled your own. That’s the situation. If you’re really worried about that, you get some future-proofing built in too.
Drew: Some might say, they might make the argument that these frameworks, things like Vue, React are so highly optimized for performance that you get so much benefit there that surely just pairing that with a package manager in a bundler to make sure you’re only sending down the code that you want to. Surely, you are way ahead already just by doing that?
Chris: Yeah. I don’t agree. I don’t really have much more to elaborate on that other than… I guess maybe, but not really. Even with a bundler, you still need that React core. Even with the bundling, that’s still going to be bigger than using something like Preact.
Chris: Drew, I really appreciate you leading the question on this. Because one of the other things I do talk about in my book, The Lean Web, and my talk of the same name, is how these tools… You mentioned the bundling, for example. One of the things we do to get around the performance hit that we take from using all this JavaScript is we throw even more JavaScript at the front-end to account for it. One of the ways we do that is package managers and module bundlers.
Chris: As you alluded to… for those of you who don’t know, these are tools that will… they will compile all of your little individual JavaScript bits into one big file. The newer ones and the more… I don’t want to call them thoughtful. But the newer ones will use a feature called tree shaking, where they get rid of any code that isn’t actually needed. If that code has some dependencies that aren’t used for the thing you’ve actually done, they’ll drop some of that stuff out to make your packages as small as possible. It’s actually not a terrible idea, but it results in this thing I typically call dependency health where you have this really delicate house of cards of dependencies on top of dependencies on top of dependencies.
Chris: Getting your process set up takes time. And anybody who has ever run an NPM install and then discovered that a bunch of dependencies were out of date and had to spend an hour trying to figure out which ones needed to be fixed and oh, it’s actually a dependency in a dependency and you don’t have the ability to go fix it yourself. It’s a whole thing. Maybe it works for you, but I’d rather spend my time not messing around trying to get my dependencies together.
Chris: I’ve started collecting tweets from people where they complain about time wasted on their workflow. One of my favorites, Brad Frost a couple year ago, was talking about the depressing realization that the thing you’ve been slogging through in modern JS could have taken you 10 minutes in jQuery. I’m not really a jQuery fan, but I feel that pain when it comes to working with frameworks.
Chris: The other issue with a lot of these tools is they start to become gatekeepers. I don’t know how much you really want to dive into this or not, Drew. But one of my big push-backs against JS, all the things in a workflow. Especially when you start to then say, “Well, if we’re already using JS for the HTML, why not use it for CSS too?” You start to exclude a lot of really talented people from the development process. It’s just a really big loss for the project for the community as a whole.
Drew: Well, I certainly am… I started picking up React at the beginning of 2020, adding that to my skillset. I’ve been doing it now for nearly seven months. I’ve got to say one part I’m least confident in is setting up the tooling around getting a project started.
Drew: It seems like there’s an awful lot of work to get something to Hello World, and there’s even more that you’ve got to know to get it to be production ready. That has to make development more difficult to get started with if this is being put forward as what you should be doing in 2020 to learn to be a web developer. Somebody coming in new to it is going to have a real problem. It’s going to be a real barrier to entry, isn’t it?
Chris: Absolutely. The other piece here is that JavaScript developers aren’t always the only people working on a code base or contributing in a meaningful way to that code base. The more we make knowing JavaScript a requirement for working with a code base, the less likely those people are to be able to actually participate in the project.
Chris: An example of that, that I like to talk about is WordPress, who has been recently… I shouldn’t say recently at this point. It’s been a couple of years now. But they’ve been shifting their back-end stack more and more to JavaScript, away from PHP, which is not inherently a bad thing. Their new editor, Gutenburg, is built on React.
Chris: In 2018, WordPress’s lead accessibility consultant, Rian Rietveld, whose name I almost certainly butchered… she very publicly resigned from her positioned and documented why in a really detailed article. The core of the problem was that her and her team were tasked with auditing this editor to make sure that it was going to be accessible. WordPress comprises now 30% of the web. Their goal is to democratize publishing, so accessibility is a really important part of that. It should be an important part of any web project. But for them in particular, it is acutely important. Her team’s whole job is to make sure… her team’s whole job was to make sure that this editor would be accessible. But because neither she nor anyone on her team had React experience and because they couldn’t find volunteers in the accessibility community with that experience, it made it really difficult for her and her team to do their work.
Chris: Historically, they could identify errors and then go in and fix them. But with the new React based workflow, they were reduced to identifying bugs and then filing tickets. They got added to a backlog along with all the other feature development requests that the JavaScript developers were working on. A lot of stuff that could have been easily fixed didn’t make it into the first release.
Chris: In May of 2019, about a year after Rian resigned, there was a detailed accessibility audit done on Gutenburg. The full report was 329 pages. The executive summary alone was 34 pages. It documented 91 accessibility related bugs in quite a bit of detail. Many of these were really… I don’t want to call them simple low-hanging fruit, but a lot of them were basic things that Rian’s team could have fixed and it would have freed up the developers to focus on feature development. That’s ultimately what it seems like they ended up doing, was spending a lot of time on feature development and pushing this stuff off til later. But that team is super important to the project, and they suddenly got locked out of the process because of a technical choice.
Chris: Alex Russell is a developer on the Chrome team. He wrote this article a couple of years ago called The Developer Bait and Switch, where he talked about the straw man argument of frameworks. This idea that these tools let you move faster and because of that, you can iterate faster and deliver better experiences. It’s this idea that a better developer experience means a better user experience. I think this is a very clear example of how that argument doesn’t always play out the way people believe it does. It’s a better experience for maybe some people, not for everyone.
Chris: CSS developers, people working on design systems, their ability to create tools that others can use sometimes gets limited by these tool choices too. In my experience, I used to be better at CSS. It’s changed a lot in the last few years and I am nowhere near as good as I used to be. In my experience, the people who are really advanced CSS developers… and I do mean that in the truest sense. People who work on CSS are proper web developers working on a programming language. It’s a very special, or can be a very specialized thing. The people who are exceptionally good at it, in my experience, are not always also very good at JavaScript because you end up diving really deep into one thing and you slide a little bit on some other stuff. Their ability to work with these technologies gets hindered as well, which is too bad because it used to not be the case.
Chris: When the stack was simpler, it was easier for people from multiple disciplines to participate in the development process. I think that’s to the detriment of both the things we build and the community at large, when that’s no longer the case.
Drew: I found recently in a project researching ways to deal with some of the CSS problems, workflow problems, we’re having multiple working on the project and the bundle size increasing and the old CSS never getting removed. It was a React project, so we were looking at some of these CSS in JavaScript approaches to see what would be best for us to use to solve the problems that we had. What became very quickly apparent is there’s not only one solution to do this. There are dozens of different ways you could do this.
Drew: CSS in JS is a general approach, but you might go from one project to the next and it’s completely influenced in a completely different way. Even if you’re a CSS person and you learn a particular approach on a project, those skills may not be transferrable anyway. It’s very difficult to see how somebody should investment too much time in learning that if they’re not particularly comfortable with JavaScript.
Chris: Yeah. The other interesting thing that I think you just got out a little bit is when I talk about this, one of the biggest pieces of push-back I get is that frameworks enforce conventions. You’re going with Vanilla JavaScript, you’ve got this green field-blue sky, you can do anything you want kind of project. With React, there’s a React way to do things.
Chris: But one of the things I have found is that there are Reacty approaches, but there’s not a strict one right way to do things with React. It’s one of the things people love about it. It’s a little bit more flexible, you can do things a couple of different ways if you want. Same with Vue. You can use that HTML based thing where you’ve got your properties right in the HTML and Vue replaces them, but you can also use a more JSX-like templating kind of syntax if you’d prefer.
Chris: I’ve heard multiple folks complain about when they’re learning React, one of the big problems is you Google how to do X in React and you get a dozen articles telling you a dozen different ways that you could do that thing. That’s not to say they don’t put some guardrails on a project. I don’t think it’s as clearcut as, “I’ve chosen a framework. Now this is the way I build with it.” To be honest, I don’t know that that’s necessarily something I’d want either. I don’t think you’d want those tightly confined… some people do, maybe. But if you’re touting that as a benefit, I don’t think it’s quite as pronounced as people sometimes make it out to be.
Chris: You got into an interesting thing though just there, where you were mentioning the CSS that is no longer needed. I think that is one of the legitimately interesting things that something like CSS and JS… or tying your CSS to JavaScript components in some way can get you is if that component drops out, the CSS also in theory, goes away with it. A lot of this to me feels like throwing engineering at people problems. Invariably, you’re still dependent on people somewhere along the line. That’s not to say never use those approaches, but they’re certainly not the only way to get at this problem.
Chris: There are tools you can use to audit your HTML and pull out the styles that aren’t being used even without using CSS and JavaScript. You can write CSS “the old-fashioned way” and still do the linting of unused styles. There are authoring approaches to CSS that give you a CSS in JS-like output and keep your style sheet small without spitting out these gibberish human unreadable class names that you get with CSS and JS sometimes. Like X2354ABC, or just these nonsense words that get spit out.
Chris: This is where I start to get really into the old man yells at cloud kind of thing. I’m really showing my developer age here. But yeah, it’s not necessarily that these things are bad, and they’re built to solve legitimate problems. I sometimes feel like there’s a little bit of a… if it’s good enough for Facebook, it’s good enough for us kind of thing that happens with these. Well, Facebook uses this tool. If we’re a real engineering program… team, department, organization, we should too. I don’t necessarily think that’s the right way to think about it. It’s because Facebook deals with problems that you don’t, and vice-versa. The size and scale of what they work on is just different, and that’s okay.
Drew: Exactly. I see some of these things like CSS and JavaScript to be almost like a polyfill. We’ve got legitimate problems, we need a way to solve it. The technology isn’t providing us a way to solve it yet. Maybe whilst we wait for the web platform to evolve and to get around to addressing that problem, this thing that we do right now with JavaScript kind of will see us through and we’ll be okay. We know it’s bad. We know it’s not a great solution, but it helps us right now. And hopefully in the while we can pull it out and use the native solution.
Chris: It’s really funny you bring this up. Because literally last night, I was watching a talk from Jeremy Keith from last year about progressive web apps. But he was talking about how a couple of decades ago, he was trying to convince people to use JavaScript. Which seems ridiculous at the time, but JavaScript was this new thing. He showed people how you could do cool things like change the color of a link on hover with this new… It seems absurd that you would need JavaScript for that now, because that’s what CSS does for you. But things like the focus attribute or property just didn’t exist at the time.
Chris: One of the things he said in the talk that I think really resonated with me is that JavaScript in many ways, paves those cow paths. It’s this very flexible and open language that we can use to create or bolt in features that don’t exist yet. And then eventually, browsers catch up and implement these features in a more native way. But it takes time. I completely understand what you’re saying about this. It’s not the perfect solution, but it’s what we have right now.
Chris: I think for me, the biggest difference between polyfills and some of these solutions is polyfills are designed to be ripped out. If I have a feature I want to implement that the browser doesn’t support yet, but there’s some sort of specification for it and I write a polyfill… once browsers catch up, I can rip that polyfill out and I don’t have to change anything. But when you go down the path of using some of these tools, ripping them up out means rewriting your whole code base. That’s really expensive and problematic. That’s not to say never use them, but I feel really strongly that we should be giving thought to picking tools that can easily be pulled out later. If we no longer need them or the platform catches up, it doesn’t require a huge rewrite to pull them out.
Chris: So getting to that we have a whole bunch of styles we don’t use anymore thing, that’s why I would personally favor a build tool technology that audits your CSS against the rendered markup and pulls out the things you don’t need. Because down the road if a platform catches up, you can pull that piece of the build tool out without having to change everything. It’s just augmenting what you already have, whereas CSS and JS doesn’t give you that same kind of benefit. I’m just picking on that one, but I think about a lot of these technologies more broadly.
Chris: I do feel things like React or Vue are probably paving some cow paths that browsers will eventually catch up with and probably use similar approaches if not the same, so there may be less rewriting involved there. A lot of the ecosystem stuff that gets plugged in around that may be less so.
Drew: I think it’s right, isn’t it, that the web platform moves slowly and carefully. You think if five years ago, we were all putting JavaScript Carousels on our pages. They were everywhere. Everyone was implementing JavaScript Carousels. If the web platform had jumped and implemented a Carousel solution to satisfy that need, it would not be sat there with nobody using it because people aren’t doing that with Carousels anymore. Because it was just a fad, a design trend. To counteract that and stop the platform itself becoming bloated and becoming a problem that needs solving, it does have to move at a lot steadier pace. The upshot of that is HTML that I wrote in 1999 still works today because of that slow process.
Drew: One of the other areas where things seem to be bloating out on the web is… I guess it’s related to the framework conversation. But it’s the concept of a single-page app. I feel like that a lot of promises are made around single-page apps as to their performance, like you’re getting all this benefit because you’re not reloading the entire page framework. I feel like they don’t always make good on those performance promises. Would you agree with that?
Chris: Yes. Although I will confess, despite having a very lengthy chapter in my book on this and talking about that a lot in talks and conversations with people, I don’t think single-page apps are always a terrible thing. But I do think this idea that you need one for performance is overstated. You can oftentimes get that same level of performance with different approaches.
Chris: I think one of the bigger challenges with single-page apps is… For anybody who’s unfamiliar with those. When a single-page app, instead of having separate HTML files or if you’re using something like a database driven site like WordPress, even though you don’t have actual physical HTML files for each page in your WordPress site, WordPress is creating HTML files on the fly and sending them back to browsers when URLs are requested. For purposes of this conversation, instead of having separate HTML files for every view in your app, a single-page app has a single HTML file. That’s what makes it a single-page app. JavaScript handles everything. Rendering the content, routing to different URL paths, fetching new content if it needs to from an API or something like that.
Chris: One of the spoken benefits of these or stated benefits of these is that only the content on the page changes. You don’t have to re-download all the JS and the CSS. Oh, and you can do those fancy page transitions that designers sometimes love. In theory, this is more performant than having to reload the whole page.
Chris: The problem with this approach from my perspective is that it also breaks a bunch of stuff that the browser just gives you for free out-of-the-box, and then you need to recreate it with more JS. You have an app that’s slow because it has a lot of JS. So you throw even more JavaScript at it to improve that performance and in doing so, you break a bunch of browser features and then have to re-implement those with even more JS too.
Chris: For example, some things that the browser will do for free with a traditional website that you need to recreate with JavaScript when you go the single-page app. You need to intercept clicks on links and suppress them from actually firing, with your JavaScript. You then need to figure out what you actually need to show based on that URL, which is normally something that would get handled on the server or based on the file that goes with that URL path. You need to actually update the URL in the address bar without triggering a page reload. You need to listen for forward and back clicks on the browser and update content again, just like you would with clicks on links. You need to update the document title.
Chris: You also need to shift focus in a way that announces the change in page to people who are using screen readers and other devices so that they’re not confused about where they are or what’s going on. Because they can’t see the change that’s happening, they’re hearing it announced. If you don’t actually shift focus anywhere, that announcement doesn’t happen. These are all things that the browser would do for you that get broken with single-page apps.
Chris: On top of that, because you have all this extra JavaScript, this is complicated. So most people use frameworks and libraries to handle this sort of thing. Because of all this extra JavaScript to support this approach, you end up with potentially slower initial page load than you would have otherwise. Depending on the content you have, this approach I think sometimes can make sense. If you have an app that is driven by API data where you don’t necessarily know what those URL paths are going to look like ahead of time.
Chris: Just an example here. You have an animal rescue where you have some adoptable animals, and that data comes from Petfinder, the animal adoption website. You have a bunch of animals there. Petfinder manages that, but you want to display them on your site with the Petfinder API. When your website’s being built, it doesn’t always necessarily have visibility to what pets are available in this exact moment and what kind of URL paths you’re going to need. A single-page app can help you there because it can dynamically on the fly, create these nice URLs that map with each dog or cat.
Chris: Something like Instagram with lots of user created content, maybe that also makes sense. But for a lot of things, we do know where those URLs are going to be ahead of time. Creating an HTML file that has the content on it already is going to be just as fast as… sometimes even faster than the JavaScript based single-page app approach, especially if you use some other techniques to keep your overall CSS and JavaScript size down. I use this approach on a course portal that I have. The page loads feel instantaneous because HTML is so easy for browsers to render compared to other parts of the stack. It feels like a single-page app, but it’s not.
Drew: Especially when you consider hosting solutions like a Jamstack approach of putting HTML files out in a CDN so it’s being served somewhere physically close to the user.
Chris: Yep.
Drew: Loading those pages can just be so, so quick.
Chris: Yes. Absolutely. Absolutely. One of the other arguments I think people used to make in favor of single-page apps is offline access. If someone loads it and then their network goes down, the app is already up and all the routes are handled just with the file that’s already there. So there’s no reloading, they don’t lose any work. That was true for a long time. Now with service workers and progressive web apps, that is I think less of a compelling argument, especially since service workers can fetch full HTML files and cache them ahead of time if needed.
Chris: You can literally have your whole app available offline before someone has even visited those pages if you want. It just happens in the background without the user having to do anything. It’s again, one of those technologies that maybe made sense for certain use cases a few years ago a little less compelling now.
Drew: It reminds me slightly of when we used to build websites in Flash.
Chris: Yes.
Drew: And you’d have just a rectangle embedded in an HTML page which is your Flash Player, and you’d build your entire site in that. You had to reimplement absolutely everything. There was no back button. If you wanted a back button, you had to create a back button, and then you had to create what the concept of a page was. You were writing code upon code, upon code to reimplement just as you are saying things that the browser already does for you. Does all this JavaScript that we’re putting into our pages to create this functionality… is this going to cause fragility in our front-ends?
Chris: Yes. This is almost certainly from my mind, one of the biggest issues with our over-reliance on JavaScript. JavaScript is just by its nature, is a scripting language, the most fragile part of the front-end stack.
Chris: For example, if I write an HTML element that doesn’t exist, I spell article like arcitle instead of article and the browser runs across that, it’s going to be like, “Oh, I don’t know what this is. Whatever, I’ll just treat it like a div.” And it keeps going. If I mistype a CSS property… Let’s say I forget the B in bold, so I write old instead, font way old. The browser’s going to be, “I don’t know what this is. Whatever, we’ll just keep going.” Your thing won’t be bold, but it will still be there.
Chris: With JavaScript, if you mistype a variable name or you try to use a property, you try to call a variable that doesn’t exist or a myriad of other things happen… your minifier messes up and pulls one line of code to the one before it without a semicolon where it needs one, the whole app crashes. Everything from that line on stop working. Sometimes even stuff that happens before that doesn’t complete, depending on how your app is set up. You can very quickly end up with an app that in a different approach, one where you rely a lot more on HTML and CSS, it would work. It might not look exactly right, but it would still work… to one that doesn’t work at all.
Chris: There’s an argument to be made that in 2020, JavaScript is an integral and important part of the web and most people don’t disable it and most people are using devices that can actually handle modern JavaScript. That’s true, but that’s not the only reason why JavaScript doesn’t work right, even if you have a linter there for example and you catch bugs ahead of time and things. There’s plenty of reasons why JavaScript can go horribly awry on you. CDNs fail.
Chris: Back in July of last, a year ago this month… at least, when we’re recording this… a bad deploy took down Cloudflare. Interestingly as we’re recording this, I think a week or two ago, Cloudflare had another massive outage that broke a whole bunch of things, which is not a knock on Cloudflare. They’re an incredibly important service that powers a ton of the web. But CDNs do sometimes go down. They are a provider used by 10% of Fortune 1,000 companies. If your JS is served by that CDN and it breaks, the JavaScript file never loads. And if your content is dependent on that JS, your users get nothing instead of getting something just not styled the way you’d like.
Chris: Firewalls and ad blockers get overly aggressive with what they block. I used to work at a company that had a JavaScript white list because they were extremely security conscious, they worked with some government contract stuff. They had a list of allowed JavaScript, and if your site or if your URL wasn’t part of that, no JavaScript. You have these sites. I remember going to a site where it had one of the hamburger kind of style menus on every view whether it was desktop or mobile, and I could not access any page other than the homepage because no JavaScript, no hamburger, that was it.
Chris: Sometimes connections just timeout for reasons. Either the file takes a while or someone’s in a spotty or slow connection. Ian Feather, an engineer at BuzzFeed, shared that about 1% of requests for JavaScript on the site fail which is 13 million requests a month. Or it was last year, it’s probably even more now. That’s a lot of failed JavaScript. People commuting go through tunnels and lose the internet. There’s just all sorts of reasons why JavaScript can fail and when it does, it’s so catastrophic.
Chris: And so we built this web that should be faster than ever. It’s 2020, 5G is starting to become a thing. I thought 4G was amazing. 4G is about as fast as my home wifi network. 5G is even faster, which is just bonkers. Yet somehow, we have websites that are slower and less performant than they were 5 or 10 years ago, and that makes no sense to me. It doesn’t have to be that way.
Drew: How do we get out of this mess, Chris?
Chris: Great question. I want to be really clear. I know I’ve hammered on this a couple times. I’m not saying all the new stuff is bad, never use it. But what I do want to encourage is a little bit more thoughtfulness about how we build for the web.
Chris: I think the overlying theme here is that old doesn’t mean obsolete. It doesn’t mean never embrace new stuff, but don’t be so quick to just jump on all the shiny new stuff just because it’s there. I know it’s one of the things that keeps this industry really exciting and makes it fun to work in, there’s always something new to learn. But when you pick these new things, do it because it’s the right tool for the job and not just because it’s the shiny new thing.
Chris: One of the other things we didn’t get into as much as I would have liked, but I think is really important, is that the platform has caught up in a really big way in the last few years. Embracing that as much as possible is going to result in a web experience for people that is faster, that is less fragile, that is easier for you to build and maintain because it requires fewer dependencies such as using what the browser gives you out-of-the-box. We used to need jQuery to select things like classes. Now browsers have native ways to do that. People like JSX because it allows you to write HTML in JavaScript in a more seamless way. But we also have template literals in Vanilla JavaScript that give you that same level of ease without the additional dependency. HTML itself can now replace a lot of things that used to require JavaScript, which is absolutely amazing.
Chris: We talked a little bit about… this is a CSS thing, but hovers over links and how that used to require JavaScript. But using things like the details and summary elements, you can create disclosure, like expand and collapse or accordion elements natively with no scripting needed. You can do auto complete inputs using just a… I shouldn’t say just, I hate that word. But using a humble input element and then a data list element that gets associated with it, with some options. If you’re curious about how any of this stuff works over at vanillajstoolkit.com, I have a bunch of JavaScript stuff that the platform gives you. But I also have some used to require JavaScript and now doesn’t kind of things that might be interesting too if you want some code samples to go along with this.
Chris: On the CSS side of things, my most popular Vanilla JS plugin ever is this library that lets you animate scrolling down to anchor links. It is very big. It’s the hardest piece of code I’ve ever had to write. And it now is completely replaced with a single line of CSS, scroll behavior smooth. It’s more performant. It’s easier to write. It’s easier to modify its behavior. It’s just a better overall solution.
Chris: One of the other things that I wish we did more is leaning on multi-page apps. I feel a little bit vindicated here, because I recently saw an article from someone at Google that actually pushes for this approach now too. I thought that was pretty interesting, given this huge angular and then framework… all the things, boom, that Google started a few years back. Kind of cool to see them come back around to this. Using things like static site generators and awesome services like Netlify and CDN caching, you can create incredibly fast web experiences for people using individual HTML files for all of your different views. So kind of leaning on some of this out-of-the-box stuff.
Chris: In situations where that’s not realistic for you, where you do need more JavaScript, you do need some sort of library, maybe taking a look at the smaller and more modular approaches first instead of just going for the behemoths of the industry. Instead of React, would Preact work? Instead of angular… I mean, instead of Vue rather, would Alpine JS work? There’s also this really interesting pre-compiler out there now called Svelt, that gives you a framework-like experience and then compiles all your code into Vanilla JavaScript. So you get these really tiny bundles that have just what you need and nothing else. Instead of CSS and JavaScript, could you bolt in some third party CSS linter that will compare your HTML to your CSS and pull out the stuff that got left in there by accident? Would a different way of authoring your CSS, like object oriented CSS by Nicole Sullivan, work instead? We didn’t really get to talk about that, but it’s a really cool thing people should check out.
Chris: And then I think maybe the third and most important piece here, even though it’s less of a specific approach and more just a thing I wish more people kept in mind, is that the web is for everyone. A lot of the tools that we use today work for people who have good internet connections and powerful devices. But they don’t work for people who are on older devices, have spotty internet connections. This is not just people in developing areas. This is also people in the U.K., in certain parts of the U.S. where we have absolutely abysmal internet connections. The middle of our country has very slow internet. I know there’s places in part of London where they can’t wire a new broadband in for historical reasons, so you’re left with these old internet connections that are really bad. There’s places like that all over the world. Last time I was in Italy, same thing. The internet there was horrible. I don’t know if it’s changed since then.
Chris: The things we build today don’t always work for everyone, and that’s too bad. Because the vision of the web, the thing I love about it, is that it is a platform for absolutely everyone.
Drew: If listeners want to find out more about this approach, you’ve gone into loads of detail to it in your book, The Lean Web. And that’s available online. Is it a physical book or a digital book?
Chris: It’s a little bit of both. Well, no. It’s definitely not a physical book. You go to leanweb.dev. You can read the whole thing for free online. You can also if you want, there’s EPUB and PDF versions available for a really small amount of money, I forget how much now. I haven’t looked at it in a while. The whole thing is free online if you want it. You can also watch a talk on this topic where I go into more details if you want.
Chris: But I’ve also put together a special page just for listeners of Smashing Podcast at gomakethings.com/smashingpodcast, because I’m very creative with naming things. That includes a bunch of resources in addition to the book, around things that we talked about today. It links to a lot of the different techniques that we covered, other articles I’ve written that go deeper into some of these topics and expand on my thinking a little bit. If folks want to learn more, that would probably be the best place to start.
Drew: That’s terrific. Thank you. I’ve been learning all about the Lean Web. What have you been learning about lately, Chris?
Chris: Yeah, a couple of things. I alluded to this a little bit earlier with watching Jeremy’s video on progressive web apps. I have been putting off learning how to actually write my own progressive web app for a couple of years because I didn’t have a specific need on anything I was working with. I recently learned from one of my students who is in South Africa, that they have been dealing with rolling blackouts because of some stuff they have going on down there. As a result, she is not able to work on some of the projects we’ve been doing together regularly, because the power goes out and she can’t access the learning portal and follow along.
Chris: For me, now building an experience where it works even if someone doesn’t have internet has become a higher priority than… I realized that maybe it was before, so I just started digging into that and hope to get that put together in the next few weeks. We’ll see. Jeremy Keith’s resources on this have been an absolute lifesaver though. I’m glad they exist.
Chris: I know, Drew, you mentioned one of the reasons you like to ask this question is to show that people no matter how seasoned they are, are always learning. Just a little related anecdote. I have been a web developer for I think, about eight years now. I still have to Google the CSS property to use for making things italic, literally every single time I use it. For some reason, my brain defaults to text decoration even though that’s not the right one. I’ll try a couple of combinations of different things, and I always have one word wrong every time. I also sometimes write italics instead of italic. Yeah. If anybody ever there is ever feeling like, oh, I’m never going to learn this stuff… just know that no matter how seasoned you are, there’s always some really basic thing that you Google over and over again.
Drew: I’ve been a web developer for 22, 23 years, and I have to Google the different properties for Flexbox still, every time. Although I’ve been using that for 23 years. But yeah, some things just… there’s probably going to more of those as I get older.
Chris: Yeah. Honestly, I ended up building a whole website of stuff I Google over and over again, just to have an easier copy-paste reference because that was easier than Googling.
Drew: That’s not a bad idea.
Chris: That’s the kind of lazy I am. I’ll build a whole website to save myself like three seconds of Googling.
Drew: If you the listener would like to hear more from Chris, you can find his book on the web at leanweb.dev, and his developer Tips newsletter and more at gomakethings.com. Chris is on Twitter at Chris Ferdinandi. And you can check out his podcast at vanillajspodcast.com or wherever you usually get your podcasts. Thanks for joining us today, Chris. Do you have any parting words?
Chris: No. Thank you so much for having me, Drew. I had an absolutely smashing time. This was heaps of fun. I really appreciate the opportunity to come chat.
(il)
Website Design & SEO Delray Beach by DBL07.co
Delray Beach SEO
source http://www.scpie.org/smashing-podcast-episode-21-with-chris-ferdinandi-are-modern-best-practices-bad-for-the-web/
0 notes
Text
Day 3 Futile Attempts
Day Three: I woke up with ants and mosquito bites all over my ankles. After about five-ten minutes of itching I knew it was time to go kiss some ass. Yee. I walked back home (only like 2 minutes what a fucking b…) and seen her car still was not there. Oh well. I’d just wait. I was in a shit mood to say the least. Lost my ride, which I spent a lot of time tryna get. I was tired, feeling hungry, and I missed a bed. I felt like the whole ‘Come live with me son I’ll get you back on your feet’ was nothing but a waste of time. I spent months tryna save for a car while sending half of my pay to my children. I wasn’t rush saving every penny either, a mistake on my part, I should’ve this getting kicked out thing coming. After all, ‘She said she doesn’t like you rang in my head.’ Every time I bit my tongue when she went off on something stupid everytime and she displayed her narcissist attitude toward the household all felt in vain. I was in pain too, I’d never do that to my kids, they’d have to really fucking piss me off. I was making her that mad??? Anyway, after about five minutes of sitting outside of the door she pulls up, ignoring every plea I throw at her. As she enters her home she turns and looks at me with that really big eyed stern face look. “I do not have time for this! I have work in five minutes!” “But momma this shit is so petty! I can’t understand why you’d throw me out over something like this dumb shit! Please jus-” She slams the door. I stand there for a moment and now I’m full of rage. My cup was full. I punch the door real hard and start to walk off when I hear, “I’m calling the cops.” Guys I am NOT under exaggerating the extent or severity of what I did. Look at my DAY 2 post you see that I’m not doing anything to drive her crazy. She just don’t give a fucking shit about me. I was not shouting. I was not acting crazy. A punch to the door. That’s all. It ain’t no shitty door either. It’s a tough ass door my weak ass punch didn’t do shit to it other than hurt my knuckles. I’m walking off and I’m still full of rage and it needed a release. I remember thinking, “My fucking shit is still in that fucking house I could sell some of it!” I walk back, did the ‘angry ghetto lady knock until I got an answer. “Where my shit Unc?” He leaves and brings me my stuff. Door is wide open. She’s standing right there behind him, and I don’t know what overcame me but I blew past my uncle and screeched. He tried to force me out but he was no match for rage mode, not bragging JS. I probably called her every name in the book and then I stormed out dramatic door slam. Anyway until now this all happened in five minutes. So yeah. Quick incident nothing really dramatic. As I’m walking off a cop pulls up. They talked to me and talked to her and he came back to me and I shit you not he says, “Dude what did you do to make her hate you so much bro?” I told him she still grudging on the past, past as in when I was 15, I used to be a run away and the very first fucking time I ever cussed at her when I was nearly 16 she kicked me out called the cops and I got put on probation for VeRbAl HArrASsMeNt. My *cringe* dad used to beat us and did something awful to a sibling. I found out about it and told my school with a voice recording of this sibling talking about it. He was essentially a big bully, it was bad. A week later after I told my school he took his own life. Another story for my autobiography but not here, but she’s always been kinda pissed at me because of that. I’m not sure of why, but she treated like she has a grudge against me since. Shit ain’t been easy bro. I fought cancer too. Oh and one time I fought in the war against the Martians alongside Terry Crews but that’s a whole other story. Long story short cop said I was good to go just stay away from the house. Whatever I just found joy in the fact that the cop knew she was kInDa UptiGHT lol. Next thing I did was go to the gas station I love so much and tried to sell my ole PS4 for some money. No-one wanted it. Stupid lady I’ve always hated kicked me out the property. I mumbled “GO to hell Tamika” and walked off to the mall, which had a fucking GameStop I never knew about until I was told there was GameStop there. Sold it. Then I went to Wal-Mart and go some socks, (my uncle steals my socks) and fresh underwear (I think he steals those too… jk but I don’t know where they went was down to two pairs) and a phone charger which got lost or stolen later and turned my phone on. So that PS4 money was ending fast. If you check my post history you can see where I talk about planet fitness and how they have showers and how you can get in for a whole month for one dollar. Well when I decided I hate being filthy I looked up places that I could shower and found Planet Fitness, rode the bus there (3 buck all day pass) and I used the fuck outta the showers and massage chairs, my legs were sore and I have back pain a lot. I felt little knots in my back pop while using. He'll figured I’d try out the tan machine too but no-one told me for one of those good tans you really should use tanning oils. Shoulda looked it up. Kinda just hung out there all night. Next morn I did a lot thinking about God and praying and thanking him for blessing me with such a thing called Planet Fitness. And Subway. Made my way back to my part of town and chilled out till daylight. Fin. (Sorry for getting rushy I’ve currently been walking for 8 hours and I gotta get moving again soon so I don’t decide to make a place to sleep. This place sorta shady.)
0 notes