#i need to fiddle with the grids a bit more to get them perfectly lined up
Explore tagged Tumblr posts
Text
setting stuff up for my gubat banwa game
#i need to fiddle with the grids a bit more to get them perfectly lined up#gubat banwa#pearl arts#luningning
59 notes
·
View notes
Text
Spies and Gods - Chapter 10
Summary: You and Loki head out on a night on the town. But you need to make a pit stop along the way.
Word Count: 3,245
A/N: It's finally here! I'm finished with my classes and I have some time to write. With everything going on in the world right now, I'll try my best to upload more chapters, hopefully I can pry one out every week and get a schedule up and going. Thanks for the patience and stay safe!
Chapter 9 | Chapter 11
The next hour you debated if your decision was right. Your mind kept weighing the polar opposite options yet you put on your makeup as if you already made your choice. Every time you thought about going back to Loki’s room and calling the deal off you lingered to how you deserved a night out with your friends, even if Loki was in the background. On the other hand, when you thought about how much you wanted to leave the facility, what would happen if you got caught? New York was big, yes, and you never told anyone which nightclub you were going to specifically as there were hundreds just in the city alone, but if someone saw you leave and grew suspicious who’s to say what would happen? So many scenarios scattered in your brain. That person would rat you out to the team, they’d shun you for the rest of your life, Tony would kick you out immediately, he would second guess why he let you stay in the first place, which was something you never quite fully understood. If worse came to worse, you could always move back in with Lilly and Maya. But what if they thought you abandoned them? You didn’t mean to. In fact, you were forced to leave your current living situation. They wouldn’t lea- Before your headache could grow any larger, you heard a knock on your bathroom door. Your breath hitched when a familiar voice spoke up, “It’s me,” Tony said, “I’m sorry about before, but we really need you to do this. We’ll celebrate with a restaurant, your choice, just us two to get to know each other. Maybe Pepper. No, not Pepper.” You could practically hear his head rushing with what he was trying to spit out as he hesitated, “What I’m trying to say is we’re heading out. Don’t let Loki… Honestly don’t let him do anything but breathe and blink. Steve and his squad should be back tomorrow from their mission. Hang tight until then.” You didn’t say anything, you were processing the fact that Tony actually said the words “I’m sorry” to you. On top of that he wanted to take you out to dinner and have a real conversation. Not just the chats you have in the lab about his works, but about both of your lives, something you have secretly been yearning since day one. “O-Okay.” You stammered, careful not to burn yourself on the curling rod, “See you later.” Great, now you’ll feel some guilt for sneaking out. To be fair, it was Tony’s own fault for not letting you live your life. About an hour later you were dolled up in makeup and a form fitting maroon dress with off shoulder sleeves that Maya helped you pick out a few months back. It was already 8:00 and you promised you’d arrive at that time. You quickly texted Maya and Lilly that you were heading out and you had to “pick up a friend”. Speaking of which, you needed to tell Loki you were ready. Peeking your head out of your door, purse in hand, you checked the hall if anyone was around. Your heels clacked on the linoleum tile as you crossed the few feet to Loki’s door. You knocked sharply, waiting for him to emerge. A part of you wanted him to not answer, for him to end his own deal so you could have a reason to stay home. Or you could leave him alone and go by yourself and deal with the repercussions later. Well, somebody was listening and decided to pull a joke on you as Loki opened the door. You would’ve noticed him looking at you surprised by how you were dressed if it weren’t for the fact that you were too distracted by his attire. He went with his usual Asgardian wear of green, gold, and black leather outfitted with actual gold bands. “What are you wearing?” You asked. “What do you mean?” Loki questioned. “We’re going to a party in a club, not a renaissance fair.” Loki was taken aback from your comment, “I am dressed for a party. In Asgard this was standard attire for events our family held.” You rubbed the bridge of your nose out of frustration, “You’re on Earth now. You got to own something like a suit.” In almost an instant a shimmer of gold surrounded his head as a helmet with long horns manifested on Loki’s head, “How is this?” He mused. You crossed your arms, “If you can do that, you can illusion yourself human clothes.” Loki stared you down, then sighed rolling his eyes, knowing he wouldn’t win this situation. The golden shimmer surrounded him as he changed into the black suit he wore on the first day you saw him. “This should suffice, but know this; ” He leaned in, a little too close for comfort, before hissing his next words, “this night will not grant you permission to treat me like a cornered dog. Just because this is your planet does not give you access to order me whenever you please. I am a god in this realm- and for a moment your divine ruler.” You resisted the urge to step back from his proximity, for doing so would only pin you against the wall. Instead you stood your ground, trying to match the intensity of Loki’s glare. “If you say so. But if you do anything that raises any red flags while we’re out, I won’t hesitate to drag your ass back here early.” You pulled your phone out, it was a few minutes after you were supposed to meet up, plus you needed to pick up a gift. “We gotta go. Does the divine ruler want to stop for some fast food on the way?” You asked sarcastically. Loki’s manner transitioned from his intimidating look to amused as he let out a soft chuckle.
___
Getting to the garage was a lot easier than you expected. With practically everyone gone nobody saw you and Loki made it to the rows of cars that were perfectly lined up. When you were first moving in Tony explained to you that most of the vehicles had keys hung up accordingly on a grid wall. Most of that conversation he mostly bragged that at least three-quarters of the cars belonged to him personally, which at least gave you a wide variety to choose from. “Got a preference?” You asked Loki, perusing the key selections. Loki looked back at the cars with a sour look, “Please tell me we are not driving any of those.” You were bemused at his remark, “What’s wrong with them? I mean, sure they’re a bit pretentious like that Ferrari- and those other two Ferrari's… but there are a few cool ones we could borrow.” You scanned the row, a black car caught your eye. “How about this Tesla? I heard they’re pretty cool.” Part of you knew that taking a car that glamorous would catch a few eyes, but if you were going to break the rules might as well go all the way in style. “Whatever you think is best.” Loki responded, “Personally I would never be caught dead in any of these, but if this is the only mode of transportation, then it will be adequate for the night.” No matter what you said to the man you could never seem to satisfy him, even if it was for a moment. You plucked the key from the slot and the two of you made your way to the sleek Tesla. Simultaneously you both entered the car. When you turned the key in the ignition you expected the screen in the dashboard to show different selections, except you were greeted by the display illuminating a video of a lit fireplace. A wave of warmth flooded the car as if the fire actually gave out heat from the heating system. The speakers blasted a funky tune of smooth jazz music, and without warning both yours and Loki’s seat reclined backwards. “Well well well, I didn’t realize this was your true intention for the night.” said Loki, showing off a wicked grin. “If you wanted to go a different route, we could have stayed upstairs.” “What? No! I didn’t-” Your face went beet red. You shot up away from the reclined seat when you tried to fiddle with the controls. After a few buttons pressed and smacks on the screens the fireplace video and heat turned off as well as the music. You readjusted your seat before selecting the maps to enter in the location of the club. God I hope they cleaned in here before we got here. You thought to yourself. “We’re never going to talk about this again.” You only heard a chuckle from the god next to you, your heart was beating out of your chest. Why was it doing that? Maybe it was because you were still in shock by the unexpected romance mode the car was set to. Yes, that was it.
___
Driving in downtown New York at night always brought a sense of surrealistic peace to you. The way the lights lit the structures in the distance, the ambiance, the shadows bent in contrast, everything melded together perfectly. You have only lived in New York for less than a year, but you would consider it to be one of the only few places you enjoyed residing in. After the incident in 2012, you fled as far as you could until you reached Maine. For a year it was your shelter, then Pennsylvania for six months, then Vermont for two years, and so on. You jumped from state to state in the northeast area for five years. For even longer you knew that Tony could be your biological father. At any time you could have gone to Stark Tower, to follow the only lead you had read once in a file years ago. Yet you didn’t. Instead you hid from the past of who you were and what you were forced to do. If it wasn’t for the voice in the back at your head screaming you would have left the country the second you had the chance. When you finally had enough of the voice there was only one remedy you knew that could soothe the coarse yells that have been echoing in your ears. The moment you stepped foot in front of the tower, the voice ceased. Now you wished there was another voice to tell you what to do now. Originally your plan was to leave the country, perhaps Paris, find a cozy cottage on the outskirts of town away from the population. Maybe get a cat or two, maybe a bird. The point was to finally be free and forget the past, to finally be alone. But there was a tug in a different direction. The direction that kept you with your friends, Maya and Lilly. A chance to be part of a family with the Avengers, who’s trust you have gained from most of the team the near two months you’ve been there. Even Bucky was slowly starting to initiate conversations with you. Even with the new, unexpected life that was thrown your way, making the decision to leave it behind or stick with it was a sea of voice in your mind. For tonight however, you were going to drown out the voices with liquor, loud EDM, and dancing. All of course while keeping an eye on the Asgardian prince. Speaking of which, you thought that he has most likely never been to an earthling party. “So…” you droned out, Loki’s gaze still out the window, “I’m sure you probably haven’t been to a club on Earth before, so I’m giving you a heads up that this is going to be different than whatever parties you’re used to.” Loki cocked an eyebrow, finally turning his head to you, “And what parties would that be?” “I don’t know. I thought it was more like royal stuff with balls and fancy dresses.” Considering he was a prince and the stories Thor told you about Asgard (not to mention Thor and Loki’s choice of fashion and speech), you only assumed Loki had only been to medieval like parties. Loki smirked, almost as if he was reminiscing about the memories, “We did have parties similar to those on Asgard. However I have observed and even participated in Midgardian-like events.” “Oh yeah? When was the last time you partied or to put it in simpler terms, ‘go out’?” Loki thought for a moment, “The most recent I recall was on Sakaar. True the ruler was a clueless sociopath who wanted everything his way, but he did throw marvelous events.” “He sounds like somebody I know.” You teased, not getting a very positive response from Loki. You changed the subject before an awkward silence could interfere, “We need to make a pit stop before we get to the club.” “What for?” “I didn’t have time to get my friend a gift.” It was only five minutes later when you got to the store Lilly loved. It was a small spiritual shop that sold crystals, candles, all sorts of things that Lilly had interest in. She’s a self-proclaimed witch, which didn’t bother you, except for certain incense she burned that filled the entire apartment, nearly setting the smoke alarm off. Hopefully they sold something that Lilly would like and didn’t have. You turned off the car and unbuckled when you noticed Loki wasn’t moving, “Come on, I’m not leaving you alone.” Loki gave an annoyed look, but quietly obeyed and exited the car. The store was small but had a lot of aisles to peruse. You and Loki definitely were out of place, with it’s dark wood floor and even darker concrete walls. Actually, with Loki’s black suit and demeanor he could fit right in. But you were only there for five minutes tops, not wanting to waste any more time. Going through each aisle you took note of what Lilly would enjoy. Most of the items you knew she already had, except for a few mugs that were cheesy like “Witch Please” or “Witches Be Crazy”. The first thing you needed to do was pick out a birthday card, which thankfully the store had a small display on the side. While reading through the cheesy ones, you settled on a card that had a cat on the cover, but had a thoughtful message on the inside. Looking over to Loki, you found him perplexed at not only the greeting cards, but the general atmosphere of the store. “So this friend, she actually is a witch?” “Yeah, but she doesn’t practice a lot of spells. She mostly does tarot cards and sage burnings.” You didn’t fully understand her lifestyle, but you respected it nonetheless. Loki furrowed his brows before continuing down the aisles. After finding Lilly’s card, you skimmed down the aisle until a book caught your eye. The title read: 101 Love Spells to Spice up Your Relationship. You picked up the book, examining the cover and flipped through a few of the pages, taking notice of the more sensual spells. You actually considered buying it as a joke, until a familiar voice rang in your ear. “I didn’t realize Midgard had spell books, especially of the sultry design.” You jumped from the sudden lack of personal space. Loki was leaning towards your ear, observing the book from your hand. “I’m not buying it.” You blurted, taking a step away that ended more like a shuffle, “I mean, this is just a gag book. I wasn’t actually considering it.” If only you had a mirror to prove to yourself your face was red. You tossed the book back onto the shelf with a thud. Next to it was another book, Spells For Self Care. Flipping through the pages this was the perfect book for Lilly. D.I.Y. organic face masks, spells to calm your mind, even some advice on how to deal with stressful energies. You tucked the book under your arm along with the card, “Let’s get out of here,” you said to Loki, determined for you and him to forget about the conversation prior. The two of you checked out the items along with a gift bag and some colorful tissue paper. You were in there a little over five minutes, but you would still make it to the club in time. The drive was short, but the silence made it feel longer. You didn’t know what to talk about to a literal demigod, and small talk wasn’t your forte in the first place. If it weren’t for the traffic you would speed just a bit faster to get to the club even sooner. What else could you talk about with Loki? So what’s your favorite color? Your hopes and dreams? If you had to marry, kill, or f- “Y/N?” Loki asked. “Hm?” You were so lost in thought you didn’t realize you arrived. “Oh, yeah I’m just looking for a spot.” You pulled into a parking garage a few blocks away. The only space you could squeeze into was on the third story, and just your luck the elevator was out of service, forcing the two of you to walk down the concrete stairs in your heels. When you finally made it to the front of the club, the line wasn’t extremely long, but you remembered Maya saying something about telling the bouncer your name and you were in Lilly’s party. So just as Maya said, the bouncer pulled away the velvet rope, but not before asking about Loki. “He’s with me.” You stated. The bouncer gave a questioning glare, but let him through as well. Before you opened the doors to the club itself, you pulled Loki aside in the lounge. “Before we go in, there are a few ground rules.” Loki rolled his eyes, “I thought we already settled those earlier.” “Yes and no. First off, you’re not allowed out of my sight. If I need to go to the bathroom, my friends are in charge of you. Second, don’t try anything funny. Thor told me you like to play tricks, but not tonight. Are we clear?” He grinned ear to ear, placing his hand on his chest, “I give you my word I will not play a trick on your friends.” “Great.” You nodded, averting your gaze, “And one question, do you think anybody will recognize you?” Loki’s grin slowly faded as he tilted his head, “What do you mean?” “Your reputation isn’t exactly… favorable. I don’t know how much you made the news.” “You didn’t know who I was when we first met.” He had a point, you were a bit busy escaping with your life from actual creatures. “Not many people cared to memorize this face. I’ve been here long enough and nobody bats an eye. Now I must ask you the same question.” You tilted your head this time, “I was told of your predicament. Are you sure no one will recognize you?” To be honest, you didn’t know. You’ve been really good about keeping out of trouble, and you haven’t seen any agents in years. “I’m sure we’ll both be fine.” Loki’s grin curved its way back in, “Great.” You sure as hell hoped you sounded convincing. Not just for him, but for yourself.
#spies and gods#spies and gods chapter 10#chapter 10#loki x reader#loki#Loki Laufeyson#mcu#marvel#loki mcu#reader insert#fanfic#my fic#fanfiction#loki fanfiction#loki fanfic
7 notes
·
View notes
Text
Ego Christmas - Day 25 - Merry Christmas!
Merry Christmas, everyone! And a happy fourth day of Hanukkah to any Jewish followers who might be reading this! This post was scheduled ahead of time, so that I couldn’t forget to put this up. I hope that everyone is having a great day!
Merry Christmas
Breakfast ran long, it always did on the holidays, but that was fine, nobody had to go anywhere, anyways. After everything was cleaned up, the Egos all moved into the living area, where gifts were all set under the tree as the lights twinkled.
“Alright, everyone gather ‘round!” Wilford called out. “Everyone in a circle, you guys know how this works, by now.”
Everyone worked to arrange the sofas and armchairs into a circle, moving the coffee table out of the way to make more room. As they all settled down, with Dark, Wilford, and the twins closest to the tree, everything began. They started with the stockings, which hung up on the fireplace and on the wall surrounding it. Each one was simple, a red stocking with a white cuff, with the name of an Ego stitched in shimmering red thread. The stockings were filled with different candies, and a handful of small gifts that would likely keep each of their interest as the gifts under the tree were given to the correct Ego.
Dark, Wilford, and the Jims worked well together to get all the gifts out to the others, in a way they had clearly been perfecting over the years. Dark and Wilford would read the names on the gift tags, and each Jim was silently assigned to work with one of them to get the gift to the correct person. The twins clearly enjoyed the little job, each one wearing a red and green elf hat, while Wilford and Dark wore Santa hats - though Dark initially put on a grumpy facade, it didn’t last, and he was soon smiling with the others.
“Before we get too far into things,” Dark spoke up, calling all the Ego’s attention to himself. “We all need to take a moment to celebrate that this is the first of hopefully many Christmases with the newest members of this chaotic family of ours. Eric, Reynolds, Magnum, Yancy, and Illinois; I hope this ends up one of many holidays we all spend together.”
A chorus of agreement met the five Egos, making Eric blush and hide his face in Illinois’ shoulder, as Reynolds laughed a bit, patting the man’s back.
“Alright, well, go ahead, everyone,” Dark urged, chuckling as Wil kissed his cheek. “The gifts won’t open themselves.”
Bim was one of the first to open a gift, the one he’d gotten from King, tearing away the wrapping and opening up the box to reveal a glittery purple suit with black lapels, and a matching tie. He smiled brightly, hugging King tight and drawing a laugh from the man. King, meanwhile, opened his gift from Bim, ripping away the wrapping paper to reveal a somewhat cylindrical bundle. A check of the tag revealed that it was actually a couple’s sleeping bag, perfect to go on the bed in the tree house King had in the woods that surrounded the manor, for a little extra warmth.
Silver opened up his gift next, surprised to have gotten a gift from Ed of all people. The wrapping paper actually contained two items, one being a set of blackout curtains for Silver’s room, which lead to him looking to Ed for an explanation.
“You get home at weird times,” Ed reasoned. “Sometimes it’s only a couple hours until the sun’s up, and I know the light comes in your window pretty early. With any luck, these’ll help you actually get some sleep.”
“That’s, actually really thoughtful, Ed,” Silver replied with a smile. He then proceeded to open up the box that had been with the gift. The box contained some black and white fabric, and at first, the superhero was once again confused, until he started to pull whatever it was out of the box. “No, you didn’t…” he began, trailing off as he pulled out a mask that looked much like the one he wore on a regular basis, though it was clearly a bit nicer and had a cleaner design.
“You’ve had the same costume since you were created. It was time for an upgrade,” Ed told him. “Jackie helped with that one, y’know, with the design and all that, and Eric helped to actually make it, but the original idea was mine. I guess it’s kinda from all three of us.”
“I love it! And if Jackie was behind part of this, I know it’s gonna be good, and Eric, kid, you’ve fixed my suit so many times since you got here, I’ve lost count. You guys are great,” Silver beamed, hugging Eric and then, surprisingly, pulling Ed in for a quick hug.
Magnum opened his gift next, seeing that it came from Reynolds. The wrapping contained a box that had a kit to build a model ship in a bottle. Reynolds hadn’t been sure what the large man would like, but he felt that a model pirate ship to display in his room would be interesting, and he’d noticed how careful he was with smaller things, so it seemed right. The captain smiled brightly, pulling the construction worker into a big bear hug.
Reynolds opened his gift next, his face lighting up as he shifted the box and heard the telltale sound of Lego bricks shifting inside. He tore open the wrapping to reveal a large set that seemed unfamiliar to him, but familiar at the same time, seeing as the box had an image of the manor on it.
“What’s this? It’s not an official set, is it?” the construction worker questioned.
“It-it’s a custom set!” Eric told him. “Dark, Wil, Bing, and I all pitched in and-and had a set made from the manor’s floor plan! You’ve got a lot of great sets, and I remember you saying that the manor would make a fun one, e-especially if it was all different sections that you could put together. So, Dark and Wil found the plans, and Bing drew up the actual stuff and submitted it to one of Dark’s contacts who actually got it made. I did all the box art.”
“That’s so cool! You guys are amazing!” Reynolds exclaimed, hugging those responsible for the gift.
The Host was next to open up his gift. The package didn’t have any wrapping paper on it, but rather, it was in a simple unmarked box with a ribbon tied around it, and a tag written by hand and in Braille, indicating that it came from Dr. Iplier. He undid the ribbon and opened the box, forcing his Sight for a moment to find that the box contained some high quality parchment and a nice calligraphy set with a quill, a few different writing tips that could be put on it, and a few different colors of ink. Meanwhile, Dr. Iplier opened his gift from the Host, smiling and breaking out into a bit of a blush when he found a couple of travel mugs, one which looked like the TARDIS from Doctor Who, and one covered in the print of the exploding TARDIS piece.
Google and Bing opened each others gifts, next. Google lit up when he pulled out a new set of small tools to use for his glasses and other small projects, along with a white suit jacket that would fit him perfectly. Bing practically threw himself at Google when he unwrapped a set of three dot grid notebooks to use for whatever he might need, along with a pack of pens.
Illinois opened his gift up next, finding a new bag to use during his expeditions. Eric explained that he felt that he could use something other than the cross-body satchel he was using, especially since he’d reported that it sometimes got in the way while he was climbing.
Next up was Eric, who was careful with the small gift in his hands. He undid the wrapping, and opened up the hinged box, finding a silk scarf folded inside. Carefully, he pulled the scarf out, marveling at the soft material and the light blue, green, yellow and purple pattern. There was something else, though, something heavier wrapped up in the scarf. Unfolding the thin fabric, he gasped at what he found. There was a necklace inside, with a black cord that wrapped around the smooth heart-shaped stone. The cord was tied into a pair of sliding knots, which would allow Eric to adjust the length of the necklace easily. Eric was rendered speechless.
“I found the stone a while back on an expedition, and thought you’d like to have it,” Illinois explained, somewhat sheepishly. He chuckled as Eric hugged him tight, and pulled him into a kiss.
“It’s perfect,” Eric told him, a bright smile on his face as he pulled the necklace on over his head, fiddling with the stone.
Ed opened up his gift, smiling to find that Silver had given him a set of hooks he could put up on his wall to display his hats and lasso. It would really help with organization, no doubt; those things took up space in his closet, on his bookshelf, and on his dresser. The twins each opened up their gifts at the same time, finding that they had gotten one another updated equipment.
Wilford opened up his gift next, breaking into a bright smile when he found a picture frame with five different windows. Four had photos of Wil and Dark together, at various points of their relationship, with the fifth and largest photo being one from their wedding. The photo had been taken from the isle, getting Wilford, Dark, Bim, Host, and the pastor who oversaw things in the shot, along with the ornate flower arrangement and large tree under which they had wed. It was one of Wilford’s favorite photos from that day, and he hugged his husband tight, kissing him.
Dark was next, tearing away the wrapping paper and opening the box to find a display of the solar system with a small dial and read out on the base. When he opened it, the planets were all lined up, and Dark simply raised an eyebrow in question as he looked to his husband.
“Google helped me with this,” Wil began. “It’s got a few different dates; the day we met, our engagement, and our wedding day, and a few others, all on the dial, and a setting where it’ll just run in real time. The planets all move when you pick a setting, so they’ll be in their proper place for that time. If you pick our wedding day, the planets all go to where they were the day we said “I do”,” he stated.
The demon looked to Google, who nodded in response. He then turned the dial so that the date of their first meeting was on the display, and pressed the dial down until it clicked. His mouth fell open in awe as the little planets rotated under the glass dome, stopping when they reached their proper positions.
“Wil… I don’t know what to say…” he finally breathed, still in awe over the gift.
“You don’t need to say anything,” Wilford stated, kissing his husband once again. “Your reaction says enough.
Dark smiled, looking around for a moment before snapping his fingers, spotting that one Ego hadn’t opened a larger gift like all the others had, and didn’t even have one by him. “I almost forgot, give me a moment,” he stated, handing the gift he had in his lap over to Wilford before standing. The demon tore open the Void and stepped through, returning a moment later with a box wrapped in silver wrapping paper. “This one is yours, Yancy,” he specified, handing off the gift to the former inmate.
Yancy set the box in his lap, running his fingers over the shiny wrapping paper, before giving Dark a quick look. Upon Dark making a silent motion for him to simply go on and open his gift, the former inmate tore away the wrapping and opened the lid of the box. He pulled a black case out of the box, setting the wrapping aside so the case could sit on his lap. The man ran his fingers over the clasps of the case, before he flicked them open with a soft click. With a deep breath, he opened up the lid of the case, and let out a shocked gasp.
“A violin?” he questioned, wanting to confirm the sight through his surprise. “How did youse know that I…?”
“I made a couple of calls and found out. I have my ways,” Dark stated calmly.
Yancy gave a bit of a nod, pulling the instrument out of the case to get a better look. It was clearly old, but well made, with intricate details on the pegs and scroll. He was in silent awe of the gift, and a similar silence had fallen over the entire room.
“Where did youse get this…? These ones ain’t cheap, and they ain’t easy to find, either.”
“It belonged to an old friend, originally,” Dark stated. “He passed some time ago, and left it to me. I can’t play, but when I learned that you’re musically inclined, I thought it would make a good gift for you. An instrument like that doesn’t deserve to sit and collect dust.” He wasn’t exactly lying, not in full, at least. He physically couldn’t play the violin anymore, thanks to the broken body he inhabited. It hadn’t belonged to a friend, though; the violin had belonged to Damien once upon a time. But, that time was long past.
“It’s amazing,” Yancy stated, carefully setting the violin back into the case. “Thank you, so much.”
“Well, it looks like we’ve gotten through everyone,” Wilford observed, looking over the room. “I think this was a great Christmas.”
“That it has been, Wil,” Dark confirmed, smiling.
Indeed, it had been a very merry Christmas, for everyone in the manor.
#egochristmas2019#Markiplier Egos#ALL the boys are in this one#Darkiplier#Wilford Warfstache#Bim Trimmer#King of the Squirrels#the Jim Twins#Googleplier#Bingiplier#Silver Shepherd#Ed Edgar#Dr. Iplier#The Host#Reynolds Voorhees#Eric Derekson#AHWM Illinois#AHWM Yancy#AHWM Captain Magnum#long post
10 notes
·
View notes
Text
![Tumblr media](https://64.media.tumblr.com/e97158ffe5a1882b751810729a83f1cb/7a4fe7e1e8296be6-3d/s1280x1920/367dcfbc74e1778c3ad516b24b817accc67ffc6b.jpg)
Big Plans Tiny Planner
Ta-da!! :D It took forever, but I think this is quite possibly my favorite book-making project I've done to date! A while back while JoAnn's was having a sale on decorative paper (I think it was 10 sheet for $2 or something like that?) and I stocked up on a few combinations I thought would work well for future book projects, and among my choices, I had picked out a page that consisted of tiny calendar pages for a full year and a piece of heavy-duty paper that I thought worked well with the various colors on that page (not all the calendar pages were as drab as the January page here, I just didn't have the patience to try and photograph all twelve of them for this ). However, it wasn't until I saw this video by SeaLemon, my go-to person for DIY book things, that I knew how to get pages that work well for a tiny planner. I had originally gotten some small lined memo pads from the dollar store, hoping to use a couple of them for pages in this theoretical mini-planner...only to find out that nope! Those pages are just a little bit too big. Trying to get them and the calendar pages lined up to glue the spine would be infuriatingly difficult. Naturally, this left me semi-up-creek without a paddle. But then I saw the aforementioned video and learned something that had never occurred to me: You can make dot-grid paper...by printing a dot grid onto regular paper!! It seems so obvious and so simple now, but it had honestly never even crossed my mind. I guess because I have actually tried using regular grid paper for a book before and it didn't go as smoothly as I had hoped, in addition to me knowing that making your own lined paper in a similar fashion would be much more tedious task. Lining up lines when you're not a machine capable of cutting pages with laser-precision is both time-consuming and next to impossible to get perfectly aligned pages from. The dot-grid, on the other hand, provides guidelines to use for writing and drawing (the biggest disadvantage to unlined paper), and a guide for cutting, but the dots are spaced in such a way that the cut has to be pretty egregiously bad for it to be immediately noticeable if they aren't quite lined up correctly. Additionally, in this case, specifically, the dots are so faint that 1. it makes any misalignment even harder to notice, and 2. they will not show up on camera for anything, and so I didn't bother trying to include a photo to show said dot-grid. That said, I just printed off the dot grid SeaLemon made and shared in the video description onto normal printer paper. Twelve pages; printed the grid onto the front side of each, then flipped them over and printed it onto the backsides. That way I had double-sided pages and I could cut multiple small pages--four 3" x 4" pages per piece of paper--without worrying about if anything was going in the wrong or right direction. Once the grid was printed, I then used a paper cutter to first slice all twelve pages to be the same size, cutting off the excess where the dot grid didn't print because of printer margins. Then I went back through and cut them down to be the size I needed. After which I counted out four pages for each calendar page, and having learned my lesson about end pages (the pages that connect the text block to the splash pages) from the SweetTarts book I made, I cut two more pages out of cardstock to put on the front/top and back/bottom of the stack. And then I carefully lined up one side of the page stack, clasped it in place with a binder clip, and got gluing. While I waited for the coats of glue on the spine to dry, I started on the covers and splash pages. The splash pages I cut and dealt with without much fuss. The covers, on the other hand... Originally, I meant to cut the covers large enough that I could have a little overhang on the edges to make the book a bit nicer. However, I mismeasured/calculated and didn't realize it until I'd already cut the covers in one direction. It wasn't too late to adjust for the height, but it was too late to adjust for the width. However, that wasn't too terrible, as I figured I could just move the covers over slightly and covered the missing area with the tape over the spine. That did complicate things slightly in that, later on, I had to cut and add strips of paper to the spine area to cover the under of the tape to keep the adhesive from folding and/or sticking to everything. But before the anti-sticky-spine steps happened, I was playing with placement for the cover. Earlier in the process, I had recouped the frame sticker on the front cover from my sticker collection to use in conjunction with the "big plans" placard I wanted to make in a similar fashion to how the names of the months are printed on the calendar pages. While I was fiddling with how it was going to look with the covers, I also started thinking about my choices for the tape on the spine. I ended up thinking that I liked the color of the lines on one of the covers better than the other, based on the frame and the tape options I had, combined with the color of the splash pages that were already attached to the text block by that point. I tried not to. I really did. But I couldn't help myself; I cut out another cover identical to the one of the two that I liked better. To be fair, I'm glad I did because it makes my brain feel better knowing they match nicely, but part of me can't help but wonder if it really would've mattered, provided I had put the other cover on the back. So with that "problem" solved, I could then move on to attaching the covers and placing the tape. And I did. And I am still not very good at getting the spine tape straight on the first try. This was a problem this time, not because this tape was any less forgiving than the other options I've used in the past, but rather because of the thinner paper I'd put in place to cover the adhesive. It did not want to let go of the tape once they were stuck together. As a result, instead of repositioning or even removing the tape, I instead placed another piece on top to fix the unstraight edges. That piece I could reposition, and it's a good thing because it still took me a few tries to get it exactly where it needed to be. I almost thought I was done once that was taken care of and the frame and placard were attached to the front cover. Then I realized this is a tiny planner (of sorts) and a planner could really benefit from book pockets...Which I believe I had originally planned on adding to the book, but it had somehow slipped my mind among everything else. So after I spent way too long deciding on what paper to use for the pockets (and ultimately decided to use some that was leftover from when I made splash pages on the Duck Tape mini sketchbook) and to simply clip the corners instead of using my paper punch to round them because it's started not doing its job very well as of late, I applied the pockets by carefully prying the covers away from the splash pages on the appropriate corners, wedging the pockets in, and then squeezing in a bit of tape and glue to the best of my ability to reinforce them. (Normally reinforcement wouldn't've been an issue because I would've securely taped them to the back of the splash pages before trying to attach the covers.) This time I really did think I was done. And, technically, I was. I was quite proud of my little baby planner, too. The next day I videoed a little flip through of the book to show it to a couple of friends because I figured that would be faster than taking my staging photos like I normally do. In that process, I discovered that it was fairly tricky to flip through the pages and find each calendar page quickly, and also the September page decided to pop out. Apparently it wasn't quite far over enough or didn't get quite enough glue or something. Also, I was a little bothered that one edge of the sticker frame on the front didn't want to stay flat down but also didn't pop up far enough to be able to get more glue under it without making a mess. I've never attempted to reinstate a page that fell out of one of these books before, despite having at least two fall out of one of the first ones I ever made. Fortunately, it went more smoothly than I expected. A little very carefully placed tacky glue and few minutes' patience to hold it still, then some time to dry long-term with extra paper on both sides to absorb any extra glue, it appears fairly stable now. The page-turning took a little more thought, but I settled on using these teeny-tiny heart stickers (one on each side to, again, keep the adhesive from sticking to things it shouldn't) as tiny little page tabs. And when I say teeny-tiny, I'm not kidding. I have fairly small, nimble fingers, and I still found it easier to manipulate the stickers with the help of a pair of tweezers. But they are just big enough to work in this form. The only problem is that they don't stick out uniformly solely because the pages themselves don't, and they have to be stuck on about halfway down the sticker so that they stick to the page securely but still stick out enough to be useful at all once the pages start fanning open. While I had the sticker sheets out to get the hearts off, I peaked at the other options and settled on a few to stick to the frame on the front to fix that other problem about one side not sticking down to my liking. Then I added a couple more on the other side just to balance things out. It's a bit much, but it still feels better than leaving the frame to just stick up like it was. After all of that though, now it's finished. And I'm still very happy, if not even more so, with how it turned out. It was a piece of work, but it looks so nice and it's functional, too! I'm not even sure I'll use it--I haven't decided yet since it is so nice, I'm thinking I might want to keep it as an unmarred example for future projects like it--but I just enjoy knowing it exists and how good the end product looks that it was worth it to me anyway. This was also a bit of an extra learning experience to 1. Plan these book projects out a little more thoroughly in advance, and 2. Pay closer attention before and during the process of cutting anything. Which, I mean, I already try to do those things, but evidently not quite enough, lest I wouldn't have some of the problems I do that often crop up in my making process. I'm not quite sure what the next book project will be, but I do have a few more pieces of that paper that I picked out for some, so we'll see what happens next time I sit down and make some. ____ Artwork © me, MysticSparkleWings ____ Where to find me & my artwork: My Website | Commission Info + Prices | Ko-Fi | dA Print Shop | RedBubble | Twitter | Tumblr | Instagram
1 note
·
View note
Text
How to Think Like a Front-End Developer
This is an extended version of my essay “When front-end means full-stack” which was published in the wonderful Increment magazine put out by Stripe. It’s also something of an evolution of a couple other of my essays, “The Great Divide” and “Ooops, I guess we’re full-stack developers now.”
The moment I fell in love with front-end development was when I discovered the style.css file in WordPress themes. That’s where all the magic was (is!) to me. I could (can!) change a handful of lines in there and totally change the look and feel of a website. It’s an incredible game to play.
Back when I was cowboy-coding over FTP. Although I definitely wasn’t using CSS grid!
By fiddling with HTML and CSS, I can change the way you feel about a bit of writing. I can make you feel more comfortable about buying tickets to an event. I can increase the chances you share something with your friends.
That was well before anybody paid me money to be a front-end developer, but even then I felt the intoxicating mix of stimuli that the job offers. Front-end development is this expressive art form, but often constrained by things like the need to directly communicate messaging and accomplish business goals.
Front-end development is at the intersection of art and logic. A cross of business and expression. Both left and right brain. A cocktail of design and nerdery.
I love it.
Looking back at the courses I chose from middle school through college, I bounced back and forth between computer-focused classes and art-focused classes, so I suppose it’s no surprise I found a way to do both as a career.
The term “Front-End Developer” is fairly well-defined and understood. For one, it’s a job title. I’ll bet some of you literally have business cards that say it on there, or some variation like: “Front-End Designer,” “UX Developer,” or “UI Engineer.” The debate around what those mean isn’t particularly interesting to me. I find that the roles are so varied from job-to-job and company-to-company that job titles will never be enough to describe things. Getting this job is more about demonstrating you know what you’re doing more than anything else¹.
Chris Coyier Front-End Developer
The title variations are just nuance. The bigger picture is that as long as the job is building websites, front-enders are focused on the browser. Quite literally:
front-end = browsers
back-end = servers
Even as the job has changed over the decades, that distinction still largely holds.
As “browser people,” there are certain truths that come along for the ride. One is that there is a whole landscape of different browsers and, despite the best efforts of standards bodies, they still behave somewhat differently. Just today, as I write, I dealt with a bug where a date string I had from an API was in a format such that Firefox threw an error when I tried to use the .toISOString() JavaScript API on it, but was fine in Chrome. That’s just life as a front-end developer. That’s the job.
Even across that landscape of browsers, just on desktop computers, there is variance in how users use that browser. How big do they have the window open? Do they have dark mode activated on their operating system? How’s the color gamut on that monitor? What is the pixel density? How’s the bandwidth situation? Do they use a keyboard and mouse? One or the other? Neither? All those same questions apply to mobile devices too, where there is an equally if not more complicated browser landscape. And just wait until you take a hard look at HTML emails.
That’s a lot of unknowns, and the answers to developing for that unknown landscape is firmly in the hands of front-end developers.
![Tumblr media](https://64.media.tumblr.com/99f20ffeb3331f62a0912622a0cbcb55/5f2e847572b8aafd-0f/s540x810/54300c5b92bc2530ce7b9a356b33ed7c01bd4f9e.jpg)
Into the unknoooooowwwn. – Elsa
The most important aspect of the job? The people that use these browsers. That’s why we’re building things at all. These are the people I’m trying to impress with my mad CSS skills. These are the people I’m trying to get to buy my widget. Who all my business charts hinge upon. Who’s reaction can sway my emotions like yarn in the breeze. These users, who we put on a pedestal for good reason, have a much wider landscape than the browsers do. They speak different languages. They want different things. They are trying to solve different problems. They have different physical abilities. They have different levels of urgency. Again, helping them is firmly in the hands of front-end developers. There is very little in between the characters we type into our text editors and the users for whom we wish to serve.
Being a front-end developer puts us on the front lines between the thing we’re building and the people we’re building it for, and that’s a place some of us really enjoy being.
That’s some weighty stuff, isn’t it? I haven’t even mentioned React yet.
The “we care about the users” thing might feel a little precious. I’d think in a high functioning company, everyone would care about the users, from the CEO on down. It’s different, though. When we code a <button>, we’re quite literally putting a button into a browser window that users directly interact with. When we adjust a color, we’re adjusting exactly what our sighted users see when they see our work.
![Tumblr media](https://64.media.tumblr.com/53c757938d8a27a325fada9ae1aae76a/5f2e847572b8aafd-13/s540x810/481e7e037046287cdf69a924033102234a4fe3c9.jpg)
That’s not far off from a ceramic artist pulling a handle out of clay for a coffee cup. It’s applying craftsmanship to a digital experience. While a back-end developer might care deeply about the users of a site, they are, as Monica Dinculescu once told me in a conversation about this, “outsourcing that responsibility.”
We established that front-end developers are browser people. The job is making things work well in browsers. So we need to understand the languages browsers speak, namely: HTML, CSS, and JavaScript². And that’s not just me being some old school fundamentalist; it’s through a few decades of everyday front-end development work that knowing those base languages is vital to us doing a good job. Even when we don’t work directly with them (HTML might come from a template in another language, CSS might be produced from a preprocessor, JavaScript might be mostly written in the parlance of a framework), what goes the browser is ultimately HTML, CSS, and JavaScript, so that’s where debugging largely takes place and the ability of the browser is put to work.
CSS will always be my favorite and HTML feels like it needs the most love — but JavaScript is the one we really need to examine The last decade has seen JavaScript blossom from a language used for a handful of interactive effects to the predominant language used across the entire stack of web design and development. It’s possible to work on websites and writing nothing but JavaScript. A real sea change.
JavaScript is all-powerful in the browser. In a sense, it supersedes HTML and CSS, as there is nothing either of those languages can do that JavaScript cannot. HTML is parsed by the browser and turned into the DOM, which JavaScript can also entirely create and manipulate. CSS has its own model, the CSSOM, that applies styles to elements in the DOM, which JavaScript can also create and manipulate.
This isn’t quite fair though. HTML is the very first file that browsers parse before they do the rest of the work needed to build the site. That firstness is unique to HTML and a vital part of making websites fast.
In fact, if the HTML was the only file to come across the network, that should be enough to deliver the basic information and functionality of a site.
That philosophy is called Progressive Enhancement. I’m a fan, myself, but I don’t always adhere to it perfectly. For example, a <form> can be entirely functional in HTML, when it’s action attribute points to a URL where the form can be processed. Progressive Enhancement would have us build it that way. Then, when JavaScript executes, it takes over the submission and has the form submit via Ajax instead, which might be a nicer experience as the page won’t have to refresh. I like that. Taken further, any <button> outside a form is entirely useless without JavaScript, so in the spirit of Progressive Enhancement, I should wait until JavaScript executes to even put that button on the page at all (or at least reveal it). That’s the kind of thing where even those of us with the best intentions might not always toe the line perfectly. Just put the button in, Sam. Nobody is gonna die.
JavaScript’s all-powerfulness makes it an appealing target for those of us doing work on the web — particularly as JavaScript as a language has evolved to become even more powerful and ergonomic, and the frameworks that are built in JavaScript become even more-so. Back in 2015, it was already so clear that JavaScript was experiencing incredible growth in usage, Matt Mullenweg, co-founder of WordPress, gave the developer world homework: “Learn JavaScript Deeply”³. He couldn’t have been more right. Half a decade later, JavaScript has done a good job of taking over front-end development. Particularly if you look at front-end development jobs.
While the web almanac might show us that only 5% of the top-zillion sites use React compared to 85% including jQuery, those numbers are nearly flipped when looking around at front-end development job requirements.
I’m sure there are fancy economic reasons for all that, but jobs are as important and personal as it gets for people, so it very much matters.
So we’re browser people in a sea of JavaScript building things for people. If we take a look at the job at a practical day-to-day tasks level, it’s a bit like this:
Translate designs into code
Think in terms of responsive design, allowing us to design and build across the landscape of devices
Build systemically. Construct components and patterns, not one-offs.
Apply semantics to content
Consider accessibility
Worry about the performance of the site. Optimize everything. Reduce, reuse, recycle.
Just that first bullet point feels like a college degree to me. Taken together, all of those points certainly do.
This whole list is a bit abstract though, so let’s apply it to something we can look at. What if this website was our current project?
Our brains and fingers go wild!
Let’s build the layout with CSS grid.
What fonts are those? Do we need to load them in their entirety or can we subset them? What happens as they load in? This layout feels like it will really suffer from font-shifting jank.
There are some repeated patterns here. We should probably make a card design pattern. Every website needs a good card pattern.
That’s a gorgeous color scheme. Are the colors mathematically related? Should we make variables to represent them individually or can we just alter a single hue as needed? Are we going to use custom properties in our CSS? Colors are just colors though, we might not need the cascading power of them just for this. Should we just use Sass variables? Are we going to use a CSS preprocessor at all?
The source order is tricky here. We need to order things so that they make sense for a screen reader user. We should have a meeting about what the expected order of content should be, even if we’re visually moving things around a bit with CSS grid.
The photographs here are beautifully shot. But some of them match the background color of the site… can we get away with alpha-transparent PNGs here? Those are always so big. Can any next-gen formats help us? Or should we try to match the background of a JPG with the background of the site seamlessly. Who’s writing the alt text for these?
There are some icons in use here. Inline SVG, right? Certainly SVG of some kind, not icon fonts, right? Should we build a whole icon system? I guess it depends on how we’re gonna be building this thing more broadly. Do we have a build system at all?
What’s the whole front-end plan here? Can I code this thing in vanilla HTML, CSS, and JavaScript? Well, I know I can, but what are the team expectations? Client expectations? Does it need to be a React thing because it’s part of some ecosystem of stuff that is already React? Or Vue or Svelte or whatever? Is there a CMS involved?
I’m glad the designer thought of not just the “desktop” and “mobile” sizes but also tackled an in-between size. Those are always awkward. There is no interactivity information here though. What should we do when that search field is focused? What gets revealed when that hamburger is tapped? Are we doing page-level transitions here?
I could go on and on. That’s how front-end developers think, at least in my experience and in talking with my peers.
A lot of those things have been our jobs forever though. We’ve been asking and answering these questions on every website we’ve built for as long as we’ve been doing it. There are different challenges on each site, which is great and keeps this job fun, but there is a lot of repetition too.
Allow me to get around to the title of this article.
While we’ve been doing a lot of this stuff for ages, there is a whole pile of new stuff we’re starting to be expected to do, particularly if we’re talking about building the site with a modern JavaScript framework. All the modern frameworks, as much as they like to disagree about things, agree about one big thing: everything is a component. You nest and piece together components as needed. Even native JavaScript moves toward its own model of Web Components.
![Tumblr media](https://64.media.tumblr.com/5d9abe97ea03d485d493e5153e2451b7/5f2e847572b8aafd-5e/s540x810/dcb590a8c1e67d3a1502dcc964f5e1ab1d0a4291.jpg)
I like it, this idea of components. It allows you and your team to build the abstractions that make the most sense to you and what you are building.
Your Card component does all the stuff your card needs to do. Your Form component does forms how your website needs to do forms. But it’s a new concept to old developers like me. Components in JavaScript have taken hold in a way that components on the server-side never did. I’ve worked on many a WordPress website where the best I did was break templates into somewhat arbitrary include() statements. I’ve worked on Ruby on Rails sites with partials that take a handful of local variables. Those are useful for building re-usable parts, but they are a far cry from the robust component models that JavaScript frameworks offer us today.
All this custom component creation makes me a site-level architect in a way that I didn’t use to be. Here’s an example. Of course I have a Button component. Of course I have an Icon component. I’ll use them in my Card component. My Card component lives in a Grid component that lays them out and paginates them. The whole page is actually built from components. The Header component has a SearchBar component and a UserMenu component. The Sidebar component has a Navigation component and an Ad component. The whole page is just a special combination of components, which is probably based on the URL, assuming I’m all-in on building our front-end with JavaScript. So now I’m dealing with URLs myself, and I’m essentially the architect of the entire site. [Sweats profusely]
Like I told ya, a whole pile of new responsibility.
Components that are in charge of displaying content are almost certainly not hard-coded with data in them. They are built to be templates. They are built to accept data and construct themselves based on that data. In the olden days, when we were doing this kind of templating, the data has probably already arrived on the page we’re working on. In a JavaScript-powered app, it’s more likely that that data is fetched by JavaScript. Perhaps I’ll fetch it when the component renders. In a stack I’m working with right now, the front end is in React, the API is in GraphQL and we use Apollo Client to work with data. We use a special “hook” in the React components to run the queries to fetch the data we need, and another special hook when we need to change that data. Guess who does that work? Is it some other kind of developer that specializes in this data layer work? No, it’s become the domain of the front-end developer.
Speaking of data, there is all this other data that a website often has to deal with that doesn’t come from a database or API. It’s data that is really only relevant to the website at this moment in time.
Which tab is active right now?
Is this modal dialog open or closed?
Which bar of this accordion is expanded?
Is this message bar in an error state or warning state?
How many pages are you paginated in?
How far is the user scrolled down the page?
Front-end developers have been dealing with that kind of state for a long time, but it’s exactly this kind of state that has gotten us into trouble before. A modal dialog can be open with a simple modifier class like <div class="modal is-open"> and toggling that class is easy enough with .classList.toggle(".is-open"); But that’s a purely visual treatment. How does anything else on the page know if that modal is open or not? Does it ask the DOM? In a lot of jQuery-style apps of yore, yes, it would. In a sense, the DOM became the “source of truth” for our websites. There were all sorts of problems that stemmed from this architecture, ranging from a simple naming change destroying functionality in weirdly insidious ways, to hard-to-reason-about application logic making bug fixing a difficult proposition.
Front-end developers collectively thought: what if we dealt with state in a more considered way? State management, as a concept, became a thing. JavaScript frameworks themselves built the concept right in, and third-party libraries have paved and continue to pave the way. This is another example of expanding responsibility. Who architects state management? Who enforces it and implements it? It’s not some other role, it’s front-end developers.
There is expanding responsibility in the checklist of things to do, but there is also work to be done in piecing it all together. How much of this state can be handled at the individual component level and how much needs to be higher level? How much of this data can be gotten at the individual component level and how much should be percolated from above? Design itself comes into play. How much of the styling of this component should be scoped to itself, and how much should come from more global styles?
It’s no wonder that design systems have taken off in recent years. We’re building components anyway, so thinking of them systemically is a natural fit.
Let’s look at our design again:
A bunch of new thoughts can begin!
Assuming we’re using a JavaScript framework, which one? Why?
Can we statically render this site, even if we’re building with a JavaScript framework? Or server-side render it?
Where are those recipes coming from? Can we get a GraphQL API going so we can ask for whatever we need, whenever we need it?
Maybe we should pick a CMS that has an API that will facilitate the kind of front-end building we want to do. Perhaps a headless CMS?
What are we doing for routing? Is the framework we chose opinionated or unopinionated about stuff like this?
What are the components we need? A Card, Icon, SearchForm, SiteMenu, Img… can we scaffold these out? Should we start with some kind of design framework on top of the base framework?
What’s the client state we might need? Current search term, current tab, hamburger open or not, at least.
Is there a login system for this site or not? Are logged in users shown anything different?
Is there are third-party componentry we can leverage here?
Maybe we can find one of those fancy image components that does blur-up loading and lazy loading and all that.
Those are all things that are in the domain of front-end developers these days, on top of everything that we already need to do. Executing the design, semantics, accessibility, performance… that’s all still there. You still need to be proficient in HTML, CSS, JavaScript, and how the browser works. Being a front-end developer requires a haystack of skills that grows and grows. It’s the natural outcome of the web getting bigger. More people use the web and internet access grows. The economy around the web grows. The capability of browsers grows. The expectations of what is possible on the web grows. There isn’t a lot shrinking going on around here.
We’ve already reached the point where most front-end developers don’t know the whole haystack of responsibilities. There are lots of developers still doing well for themselves being rather design-focused and excelling at creative and well-implemented HTML and CSS, even as job posts looking for that dwindle.
There are systems-focused developers and even entire agencies that specialize in helping other companies build and implement design systems. There are data-focused developers that feel most at home making the data flow throughout a website and getting hot and heavy with business logic. While all of those people might have “front-end developer” on their business card, their responsibilities and even expectations of their work might be quite different. It’s all good, we’ll find ways to talk about all this in time.
In fact, how we talk about building websites has changed a lot in the last decade. Some of my early introduction to web development was through WordPress. WordPress needs a web server to run, is written in PHP, and stores it’s data in a MySQL database. As much as WordPress has evolved, all that is still exactly the same. We talk about that “stack” with an acronym: LAMP, or Linux, Apache, MySQL and PHP. Note that literally everything in the entire stack consists of back-end technologies. As a front-end developer, nothing about LAMP is relevant to me.
But other stacks have come along since then. A popular stack was MEAN (Mongo, Express, Angular and Node). Notice how we’re starting to inch our way toward more front-end technologies? Angular is a JavaScript framework, so as this stack gained popularity, so too did talking about the front-end as an important part of the stack. Node and Express are both JavaScript as well, albeit the server-side variant.
The existence of Node is a huge part of this story. Node isn’t JavaScript-like, it’s quite literally JavaScript. It makes a front-end developer already skilled in JavaScript able to do server-side work without too much of a stretch.
“Serverless” is a much more modern tech buzzword, and what it’s largely talking about is running small bits of code on cloud servers. Most often, those small bits of code are in Node, and written by JavaScript developers. These days, a JavaScript-focused front-end developer might be writing their own serverless functions and essentially being their own back-end developer. They’ll think of themselves as full-stack developers, and they’ll be right.
Shawn Wang coined a term for a new stack this year: STAR or Design System, TypeScript, Apollo, and React. This is incredible to me, not just because I kind of like that stack, but because it’s a way of talking about the stack powering a website that is entirely front-end technologies. Quite a shift.
I apologize if I’ve made you feel a little anxious reading this. If you feel like you’re behind in understanding all this stuff, you aren’t alone.
In fact, I don’t think I’ve talked to a single developer who told me they felt entirely comfortable with the entire world of building websites. Everybody has weak spots or entire areas where they just don’t know the first dang thing. You not only can specialize, but specializing is a pretty good idea, and I think you will end up specializing to some degree whether you plan to or not. If you have the good fortune to plan, pick things that you like. You’ll do just fine.
The only constant in life is change.
– Heraclitus – Motivational Poster – Chris Coyier
¹ I’m a white dude, so that helps a bunch, too. ↩️ ² Browsers speak a bunch more languages. HTTP, SVG, PNG… The more you know the more you can put to work! ↩️ ³ It’s an interesting bit of irony that WordPress websites generally aren’t built with client-side JavaScript components. ↩️
The post How to Think Like a Front-End Developer appeared first on CSS-Tricks.
You can support CSS-Tricks by being an MVP Supporter.
How to Think Like a Front-End Developer published first on https://deskbysnafu.tumblr.com/
0 notes
Text
The Widening Responsibility for Front-End Developers
This is an extended version of my essay “When front-end means full-stack” which was published in the wonderful Increment magazine put out by Stripe. It’s also something of an evolution of a couple other of my essays, “The Great Divide” and “Ooops, I guess we’re full-stack developers now.”
The moment I fell in love with front-end development was when I discovered the style.css file in WordPress themes. That’s where all the magic was (is!) to me. I could (can!) change a handful of lines in there and totally change the look and feel of a website. It’s an incredible game to play.
Back when I was cowboy-coding over FTP. Although I definitely wasn’t using CSS grid!
By fiddling with HTML and CSS, I can change the way you feel about a bit of writing. I can make you feel more comfortable about buying tickets to an event. I can increase the chances you share something with your friends.
That was well before anybody paid me money to be a front-end developer, but even then I felt the intoxicating mix of stimuli that the job offers. Front-end development is this expressive art form, but often constrained by things like the need to directly communicate messaging and accomplish business goals.
Front-end development is at the intersection of art and logic. A cross of business and expression. Both left and right brain. A cocktail of design and nerdery.
I love it.
Looking back at the courses I chose from middle school through college, I bounced back and forth between computer-focused classes and art-focused classes, so I suppose it’s no surprise I found a way to do both as a career.
The term “Front-End Developer” is fairly well-defined and understood. For one, it’s a job title. I’ll bet some of you literally have business cards that say it on there, or some variation like: “Front-End Designer,” “UX Developer,” or “UI Engineer.” The debate around what those mean isn’t particularly interesting to me. I find that the roles are so varied from job-to-job and company-to-company that job titles will never be enough to describe things. Getting this job is more about demonstrating you know what you’re doing more than anything else¹.
Chris Coyier Front-End Developer
The title variations are just nuance. The bigger picture is that as long as the job is building websites, front-enders are focused on the browser. Quite literally:
front-end = browsers
back-end = servers
Even as the job has changed over the decades, that distinction still largely holds.
As “browser people,” there are certain truths that come along for the ride. One is that there is a whole landscape of different browsers and, despite the best efforts of standards bodies, they still behave somewhat differently. Just today, as I write, I dealt with a bug where a date string I had from an API was in a format such that Firefox threw an error when I tried to use the .toISOString() JavaScript API on it, but was fine in Chrome. That’s just life as a front-end developer. That’s the job.
Even across that landscape of browsers, just on desktop computers, there is variance in how users use that browser. How big do they have the window open? Do they have dark mode activated on their operating system? How’s the color gamut on that monitor? What is the pixel density? How’s the bandwidth situation? Do they use a keyboard and mouse? One or the other? Neither? All those same questions apply to mobile devices too, where there is an equally if not more complicated browser landscape. And just wait until you take a hard look at HTML emails.
That’s a lot of unknowns, and the answers to developing for that unknown landscape is firmly in the hands of front-end developers.
![Tumblr media](https://64.media.tumblr.com/99f20ffeb3331f62a0912622a0cbcb55/2005d14d786ccf73-f6/s540x810/01d6d06a8d731417a0af139e80c2a7ea3779b7b0.jpg)
Into the unknoooooowwwn. – Elsa
The most important aspect of the job? The people that use these browsers. That’s why we’re building things at all. These are the people I’m trying to impress with my mad CSS skills. These are the people I’m trying to get to buy my widget. Who all my business charts hinge upon. Who’s reaction can sway my emotions like yarn in the breeze. These users, who we put on a pedestal for good reason, have a much wider landscape than the browsers do. They speak different languages. They want different things. They are trying to solve different problems. They have different physical abilities. They have different levels of urgency. Again, helping them is firmly in the hands of front-end developers. There is very little in between the characters we type into our text editors and the users for whom we wish to serve.
Being a front-end developer puts us on the front lines between the thing we’re building and the people we’re building it for, and that’s a place some of us really enjoy being.
That’s some weighty stuff, isn’t it? I haven’t even mentioned React yet.
The “we care about the users” thing might feel a little precious. I’d think in a high functioning company, everyone would care about the users, from the CEO on down. It’s different, though. When we code a <button>, we’re quite literally putting a button into a browser window that users directly interact with. When we adjust a color, we’re adjusting exactly what our sighted users see when they see our work.
![Tumblr media](https://64.media.tumblr.com/53c757938d8a27a325fada9ae1aae76a/2005d14d786ccf73-ab/s540x810/4deebe66d35a0a111bbf5f1a0f60c5e8ffc1f97e.jpg)
That’s not far off from a ceramic artist pulling a handle out of clay for a coffee cup. It’s applying craftsmanship to a digital experience. While a back-end developer might care deeply about the users of a site, they are, as Monica Dinculescu once told me in a conversation about this, “outsourcing that responsibility.”
We established that front-end developers are browser people. The job is making things work well in browsers. So we need to understand the languages browsers speak, namely: HTML, CSS, and JavaScript². And that’s not just me being some old school fundamentalist; it’s through a few decades of everyday front-end development work that knowing those base languages is vital to us doing a good job. Even when we don’t work directly with them (HTML might come from a template in another language, CSS might be produced from a preprocessor, JavaScript might be mostly written in the parlance of a framework), what goes the browser is ultimately HTML, CSS, and JavaScript, so that’s where debugging largely takes place and the ability of the browser is put to work.
CSS will always be my favorite and HTML feels like it needs the most love — but JavaScript is the one we really need to examine The last decade has seen JavaScript blossom from a language used for a handful of interactive effects to the predominant language used across the entire stack of web design and development. It’s possible to work on websites and writing nothing but JavaScript. A real sea change.
JavaScript is all-powerful in the browser. In a sense, it supersedes HTML and CSS, as there is nothing either of those languages can do that JavaScript cannot. HTML is parsed by the browser and turned into the DOM, which JavaScript can also entirely create and manipulate. CSS has its own model, the CSSOM, that applies styles to elements in the DOM, which JavaScript can also create and manipulate.
This isn’t quite fair though. HTML is the very first file that browsers parse before they do the rest of the work needed to build the site. That firstness is unique to HTML and a vital part of making websites fast.
In fact, if the HTML was the only file to come across the network, that should be enough to deliver the basic information and functionality of a site.
That philosophy is called Progressive Enhancement. I’m a fan, myself, but I don’t always adhere to it perfectly. For example, a <form> can be entirely functional in HTML, when it’s action attribute points to a URL where the form can be processed. Progressive Enhancement would have us build it that way. Then, when JavaScript executes, it takes over the submission and has the form submit via Ajax instead, which might be a nicer experience as the page won’t have to refresh. I like that. Taken further, any <button> outside a form is entirely useless without JavaScript, so in the spirit of Progressive Enhancement, I should wait until JavaScript executes to even put that button on the page at all (or at least reveal it). That’s the kind of thing where even those of us with the best intentions might not always toe the line perfectly. Just put the button in, Sam. Nobody is gonna die.
JavaScript’s all-powerfulness makes it an appealing target for those of us doing work on the web — particularly as JavaScript as a language has evolved to become even more powerful and ergonomic, and the frameworks that are built in JavaScript become even more-so. Back in 2015, it was already so clear that JavaScript was experiencing incredible growth in usage, Matt Mullenweg, the founding developer of WordPress, gave the developer world homework: “Learn JavaScript Deeply”³. He couldn’t have been more right. Half a decade later, JavaScript has done a good job of taking over front-end development. Particularly if you look at front-end development jobs.
While the web almanac might show us that only 5% of the top-zillion sites use React compared to 85% including jQuery, those numbers are nearly flipped when looking around at front-end development job requirements.
I’m sure there are fancy economic reasons for all that, but jobs are as important and personal as it gets for people, so it very much matters.
So we’re browser people in a sea of JavaScript building things for people. If we take a look at the job at a practical day-to-day tasks level, it’s a bit like this:
Translate designs into code
Think in terms of responsive design, allowing us to design and build across the landscape of devices
Build systemically. Construct components and patterns, not one-offs.
Apply semantics to content
Consider accessibility
Worry about the performance of the site. Optimize everything. Reduce, reuse, recycle.
Just that first bullet point feels like a college degree to me. Taken together, all of those points certainly do.
This whole list is a bit abstract though, so let’s apply it to something we can look at. What if this website was our current project?
Our brains and fingers go wild!
Let’s build the layout with CSS grid.
What fonts are those? Do we need to load them in their entirety or can we subset them? What happens as they load in? This layout feels like it will really suffer from font-shifting jank.
There are some repeated patterns here. We should probably make a card design pattern. Every website needs a good card pattern.
That’s a gorgeous color scheme. Are the colors mathematically related? Should we make variables to represent them individually or can we just alter a single hue as needed? Are we going to use custom properties in our CSS? Colors are just colors though, we might not need the cascading power of them just for this. Should we just use Sass variables? Are we going to use a CSS preprocessor at all?
The source order is tricky here. We need to order things so that they make sense for a screen reader user. We should have a meeting about what the expected order of content should be, even if we’re visually moving things around a bit with CSS grid.
The photographs here are beautifully shot. But some of them match the background color of the site… can we get away with alpha-transparent PNGs here? Those are always so big. Can any next-gen formats help us? Or should we try to match the background of a JPG with the background of the site seamlessly. Who’s writing the alt text for these?
There are some icons in use here. Inline SVG, right? Certainly SVG of some kind, not icon fonts, right? Should we build a whole icon system? I guess it depends on how we’re gonna be building this thing more broadly. Do we have a build system at all?
What’s the whole front-end plan here? Can I code this thing in vanilla HTML, CSS, and JavaScript? Well, I know I can, but what are the team expectations? Client expectations? Does it need to be a React thing because it’s part of some ecosystem of stuff that is already React? Or Vue or Svelte or whatever? Is there a CMS involved?
I’m glad the designer thought of not just the “desktop” and “mobile” sizes but also tackled an in-between size. Those are always awkward. There is no interactivity information here though. What should we do when that search field is focused? What gets revealed when that hamburger is tapped? Are we doing page-level transitions here?
I could go on and on. That’s how front-end developers think, at least in my experience and in talking with my peers.
A lot of those things have been our jobs forever though. We’ve been asking and answering these questions on every website we’ve built for as long as we’ve been doing it. There are different challenges on each site, which is great and keeps this job fun, but there is a lot of repetition too.
Allow me to get around to the title of this article.
While we’ve been doing a lot of this stuff for ages, there is a whole pile of new stuff we’re starting to be expected to do, particularly if we’re talking about building the site with a modern JavaScript framework. All the modern frameworks, as much as they like to disagree about things, agree about one big thing: everything is a component. You nest and piece together components as needed. Even native JavaScript moves toward its own model of Web Components.
![Tumblr media](https://64.media.tumblr.com/5d9abe97ea03d485d493e5153e2451b7/2005d14d786ccf73-b9/s540x810/56cde6f421597721ccb8d3ae63e370f2a6f9249a.jpg)
I like it, this idea of components. It allows you and your team to build the abstractions that make the most sense to you and what you are building.
Your Card component does all the stuff your card needs to do. Your Form component does forms how your website needs to do forms. But it’s a new concept to old developers like me. Components in JavaScript have taken hold in a way that components on the server-side never did. I’ve worked on many a WordPress website where the best I did was break templates into somewhat arbitrary include() statements. I’ve worked on Ruby on Rails sites with partials that take a handful of local variables. Those are useful for building re-usable parts, but they are a far cry from the robust component models that JavaScript frameworks offer us today.
All this custom component creation makes me a site-level architect in a way that I didn’t use to be. Here’s an example. Of course I have a Button component. Of course I have an Icon component. I’ll use them in my Card component. My Card component lives in a Grid component that lays them out and paginates them. The whole page is actually built from components. The Header component has a SearchBar component and a UserMenu component. The Sidebar component has a Navigation component and an Ad component. The whole page is just a special combination of components, which is probably based on the URL, assuming I’m all-in on building our front-end with JavaScript. So now I’m dealing with URLs myself, and I’m essentially the architect of the entire site. [Sweats profusely]
Like I told ya, a whole pile of new responsibility.
Components that are in charge of displaying content are almost certainly not hard-coded with data in them. They are built to be templates. They are built to accept data and construct themselves based on that data. In the olden days, when we were doing this kind of templating, the data has probably already arrived on the page we’re working on. In a JavaScript-powered app, it’s more likely that that data is fetched by JavaScript. Perhaps I’ll fetch it when the component renders. In a stack I’m working with right now, the front end is in React, the API is in GraphQL and we use Apollo Client to work with data. We use a special “hook” in the React components to run the queries to fetch the data we need, and another special hook when we need to change that data. Guess who does that work? Is it some other kind of developer that specializes in this data layer work? No, it’s become the domain of the front-end developer.
Speaking of data, there is all this other data that a website often has to deal with that doesn’t come from a database or API. It’s data that is really only relevant to the website at this moment in time.
Which tab is active right now?
Is this modal dialog open or closed?
Which bar of this accordion is expanded?
Is this message bar in an error state or warning state?
How many pages are you paginated in?
How far is the user scrolled down the page?
Front-end developers have been dealing with that kind of state for a long time, but it’s exactly this kind of state that has gotten us into trouble before. A modal dialog can be open with a simple modifier class like <div class="modal is-open"> and toggling that class is easy enough with .classList.toggle(".is-open"); But that’s a purely visual treatment. How does anything else on the page know if that modal is open or not? Does it ask the DOM? In a lot of jQuery-style apps of yore, yes, it would. In a sense, the DOM became the “source of truth” for our websites. There were all sorts of problems that stemmed from this architecture, ranging from a simple naming change destroying functionality in weirdly insidious ways, to hard-to-reason-about application logic making bug fixing a difficult proposition.
Front-end developers collectively thought: what if we dealt with state in a more considered way? State management, as a concept, became a thing. JavaScript frameworks themselves built the concept right in, and third-party libraries have paved and continue to pave the way. This is another example of expanding responsibility. Who architects state management? Who enforces it and implements it? It’s not some other role, it’s front-end developers.
There is expanding responsibility in the checklist of things to do, but there is also work to be done in piecing it all together. How much of this state can be handled at the individual component level and how much needs to be higher level? How much of this data can be gotten at the individual component level and how much should be percolated from above? Design itself comes into play. How much of the styling of this component should be scoped to itself, and how much should come from more global styles?
It’s no wonder that design systems have taken off in recent years. We’re building components anyway, so thinking of them systemically is a natural fit.
Let’s look at our design again:
A bunch of new thoughts can begin!
Assuming we’re using a JavaScript framework, which one? Why?
Can we statically render this site, even if we’re building with a JavaScript framework? Or server-side render it?
Where are those recipes coming from? Can we get a GraphQL API going so we can ask for whatever we need, whenever we need it?
Maybe we should pick a CMS that has an API that will facilitate the kind of front-end building we want to do. Perhaps a headless CMS?
What are we doing for routing? Is the framework we chose opinionated or unopinionated about stuff like this?
What are the components we need? A Card, Icon, SearchForm, SiteMenu, Img… can we scaffold these out? Should we start with some kind of design framework on top of the base framework?
What’s the client state we might need? Current search term, current tab, hamburger open or not, at least.
Is there a login system for this site or not? Are logged in users shown anything different?
Is there are third-party componentry we can leverage here?
Maybe we can find one of those fancy image components that does blur-up loading and lazy loading and all that.
Those are all things that are in the domain of front-end developers these days, on top of everything that we already need to do. Executing the design, semantics, accessibility, performance… that’s all still there. You still need to be proficient in HTML, CSS, JavaScript, and how the browser works. Being a front-end developer requires a haystack of skills that grows and grows. It’s the natural outcome of the web getting bigger. More people use the web and internet access grows. The economy around the web grows. The capability of browsers grows. The expectations of what is possible on the web grows. There isn’t a lot shrinking going on around here.
We’ve already reached the point where most front-end developers don’t know the whole haystack of responsibilities. There are lots of developers still doing well for themselves being rather design-focused and excelling at creative and well-implemented HTML and CSS, even as job posts looking for that dwindle.
There are systems-focused developers and even entire agencies that specialize in helping other companies build and implement design systems. There are data-focused developers that feel most at home making the data flow throughout a website and getting hot and heavy with business logic. While all of those people might have “front-end developer” on their business card, their responsibilities and even expectations of their work might be quite different. It’s all good, we’ll find ways to talk about all this in time.
In fact, how we talk about building websites has changed a lot in the last decade. Some of my early introduction to web development was through WordPress. WordPress needs a web server to run, is written in PHP, and stores it’s data in a MySQL database. As much as WordPress has evolved, all that is still exactly the same. We talk about that “stack” with an acronym: LAMP, or Linux, Apache, MySQL and PHP. Note that literally everything in the entire stack consists of back-end technologies. As a front-end developer, nothing about LAMP is relevant to me.
But other stacks have come along since then. A popular stack was MEAN (Mongo, Express, Angular and Node). Notice how we’re starting to inch our way toward more front-end technologies? Angular is a JavaScript framework, so as this stack gained popularity, so too did talking about the front-end as an important part of the stack. Node and Express are both JavaScript as well, albeit the server-side variant.
The existence of Node is a huge part of this story. Node isn’t JavaScript-like, it’s quite literally JavaScript. It makes a front-end developer already skilled in JavaScript able to do server-side work without too much of a stretch.
“Serverless” is a much more modern tech buzzword, and what it’s largely talking about is running small bits of code on cloud servers. Most often, those small bits of code are in Node, and written by JavaScript developers. These days, a JavaScript-focused front-end developer might be writing their own serverless functions and essentially being their own back-end developer. They’ll think of themselves as full-stack developers, and they’ll be right.
Shawn Wang coined a term for a new stack this year: STAR or Design System, TypeScript, Apollo, and React. This is incredible to me, not just because I kind of like that stack, but because it’s a way of talking about the stack powering a website that is entirely front-end technologies. Quite a shift.
I apologize if I’ve made you feel a little anxious reading this. If you feel like you’re behind in understanding all this stuff, you aren’t alone.
In fact, I don’t think I’ve talked to a single developer who told me they felt entirely comfortable with the entire world of building websites. Everybody has weak spots or entire areas where they just don’t know the first dang thing. You not only can specialize, but specializing is a pretty good idea, and I think you will end up specializing to some degree whether you plan to or not. If you have the good fortune to plan, pick things that you like. You’ll do just fine.
The only constant in life is change.
– Heraclitus – Motivational Poster – Chris Coyier
¹ I’m a white dude, so that helps a bunch, too. ↩️ ² Browsers speak a bunch more languages. HTTP, SVG, PNG… The more you know the more you can put to work! ↩️ ³ It’s an interesting bit of irony that WordPress websites generally aren’t built with client-side JavaScript components. ↩️
The post The Widening Responsibility for Front-End Developers appeared first on CSS-Tricks.
You can support CSS-Tricks by being an MVP Supporter.
��SiliconWebX | 🌐CSS-Tricks
0 notes
Text
![Tumblr media](https://64.media.tumblr.com/b2812c9a787765441460fd308327fb2a/3bfd512d0b311612-c0/s1280x1920/660a236becb4439edd4dfad7bc3f57bff5df5a00.jpg)
Holiday Card Project 2019
Oh would you look at that; I’m participating in the deviantArt Holiday Card Project again this year! Just like last year, my crafty efforts aren’t really done proper justice by scans or photos, so I’ll be uploading a short video...somewhere (probably Instagram but we’ll see) and then link back to it to hopefully show it off a bit more. It’s funny though, I’d almost forgotten about HCP until I got the notification that it had opened for this year. And yet I was so concerned about having it in the mail on time that I got this one done pretty much in one day. I think last year's card took me closer to 2 days and I was pushing my luck that it would get there in time. My process for this year went as follows: I browsed around on Pinterest for a while, as I hadn’t the foggiest idea what to do. During that process, I latched onto a concept I saw a few times; Christmas lights and the phrase “merry and bright,” and so I went with that. Already I had the idea of the lights being across the top of the card, with a real piece of thread (which would later be changed to wire as the idea occurred to me while I was digging for some other supplies) connecting them. After some thought, I decided I wanted to add some cotton to the bottom to add a little more pizzazz. Because if last year’s HCP taught me anything, it’s that I like to go big or go home for the occasion. And I knew where I could get some too; the fields next to the house have already been picked for this year, but there was still a good amount of cotton leftover on the stalks near the edges. Let me tell you, I have a newfound appreciation for whoever invented a mechanical way to take the seeds out of cotton, because gosh darn it if that process is not far more tiresome than you’d think! I think I finally did manage to get them all out, but now I know why it’s probably just easier to buy cotton or polyester fiberfill. XD Anyway. With my mind made up and a handle full of cotton at the ready, I started on the actual card part. In the past, for my card needs I’ve usually used some of the pre-folded & cut cards my mom has on hand, but this time I didn’t feel like bothering her about it. So instead I grabbed a piece of my gold-shimmer cardstock and cut it down so that once I folded it I’d have a 5” x 7” card. (As that’s what Google told me was a fairly common size for greeting cards and would fit comfortably in most standard envelopes.) Then I used my trick from my book-making endeavors of using the edge of scissors to “score” the folding line on one side of the card to make that process easier. In trying to make some stamps I didn’t end up using magically appear from whoever they were hiding, I found some metallic gold stripey paper in my stash and had the idea to cover the outside of the card with it, maybe. At the time I was a little bit skeptical if I wanted to do that, but I pulled it out and set it on the desk anyway so I could have the option if I wanted it. And as you can see, I ended up deciding to go for it, though at this point in the process I simply measured out and cut it as needed; I wouldn’t attach it until later. Then I paused and used the scrap cardstock pieces to test some pens and such, only to find I was only minimally (at best) interested in using any of them. I had some ideas to incorporate certain things but they were things I couldn’t really try out until I had more of the card finished, and some things I couldn’t figure out solutions for until then either. So I swatched out some marker colors and started practicing on some print outs of the Christmas light shape—which is fortunately had the foresight to do the said printing out before I got into the thick of everything else—only to find that I just really was not happy with the blends I was getting. I think the main problem is that I just didn’t have certain colors I needed, but the glowing/fade effect I was trying to get was also totally new territory for me and I seemed to only get worse the more times I tried it. In the end, I picked out a “base” shade for each Christmas light color from the markers and then selected a dark, a “true color” and a highlight from my Prismacolor pencils to do the shading instead. There were still challenges to be had, but this system worked a lot better for me. Benefits of being a mixed media artist: if one medium just isn’t doing it for you, you can bring in others to level the playing field The lights then got bright shine spots courtesy of my white Gelly roll pen and their little silver bits I did with a silver Art Philosophy watercolor. Even though I was already anticipating the silver getting kind of lost against the gold in the background. I had a vision and I was sticking to it. In addition to that vision, once the lights were safe to handle I glued them to a piece of foam and then left them alone to dry, figuring it would be easier and simpler to cut them out if I only had to do it once. As such, the edges aren’t super smooth, but otherwise, I think that was the right call. While they dried, I then attached the gold-stripe paper to the card surface and started thinking about where and how I would implement the text parts of the card. (And at some point I took a break to figure out the full inside and outside please, as originally all I was going on was “merry and bright,” though I don’t remember when exactly in the process that was.) Here, I had the idea that black paper might look cool. The only black paper I have is a pad of Crayola stuff that I think is actually for practicing calligraphy or hand lettering or something? My original plan was to take one of the pages out and use the blank back, but as I filled through I saw some of the cut out frame-y things and took a look to see if any of them would work for what I wanted/needed, and you can see the two I picked out. Though the one on the inside of the card had only the black and gray/silver originally; the colors I added by hand with my gel pens since it felt like it really needed it. The black paper on the inside also needed a little more attention than the one on the outside. I didn’t cut either of them perfectly straight, but there were a lot more distracting elements that were going to be on the outside, so it was far less noticeable there. On the inside, I ended up going around the edge with some gold and white washi tape that when well with the outside of the card to camouflage the uneven edges. By the time I had all the various papers properly attached to each other and the top edge inside of the card decorated with a strip of glitter tape and a repeating stamp of Christmas lights to tie in with the outside, I felt the lights were dry enough to cut out, so I did. And that meant that the /real/ card assembly could begin. I punched little holes in the tops of the lights for the wire I’d add in later and then fiddled with their placement for a bit before gluing them down...which I then I had to wait for about twenty minutes before I could proceed if I wanted things to dry mostly flat. So while that took its sweet time to dry I went back to the Crayola black paper pad to one of the pages with a grid on it to practice writing out the words for both the outside and inside of the card. In doing so, I discovered that the uni-ball Signo white pen, while bolder and brighter than the Gelly roll, made my cursive almost illegible by virtue of having a thicker tip. Which is why I went with the Gelly roll instead. Just printed handwriting didn’t feel right; I really wanted the fancier look of the cursive. However, I also wanted whoever gets the card to actually be able to read it too. Eventually, the lights, while not fully dry, were dry enough that I could comfortably move on with the assembly. And hindsight, perhaps I should’ve tried stringing the lights onto the wire before gluing them down. The main issue I had was that once I got the wire poked through the hole, it’d bump into the card on the other side and then not want to go anywhere at all. I had to play with it each time to get the wire to come all the way through so I could pull it to the next one. Or maybe that would’ve made the gluing process more difficult than it was worth? We’ll never know. And then I got to attach the cotton. That actually ended up being a much smoother process than I anticipated, as the cotton doesn’t really separate from itself unless you pull it apart, so once I had parts of a clump glued down they were pretty stationary. This was also the first time I dared use my crafting heat gun since I purchased it (which was a while ago; after reading the warnings the first time I’ve been too chicken to use it for fear of catching something on fire by accident ) as I originally thought I’d need more glue and I’d need to glue some clumps on, dry them, and then glue some more. Fortunately, I seemingly put my big girl panties on for nothing as, after the initial layer of glue, I really only needed to glue a couple of other clumps down separately, and as I mentioned the cotton stick to the wet glue well enough on its own. But I had psyched myself up and gotten the thing set up, so once all the cotton was glued down I used the heat gun to dry the glue faster anyway. I was amped up the whole time but I, fortunately, did not burn anything in the process! I did end up going back and adding some blue gel pen to the black paper on the inside, as that was the only color not there and it felt sorely lacking, giving the lights elsewhere on the card. But other than that, once the cotton was all squared away, the card was done. And I’ll be honest; I still like the card I made last year, but I think I’ve really outdone myself this time. There’s just something about the style of this card I enjoy so much more.
It’s equally over-the-top (as is my crafting specialty ) but it’s more refined, somehow, I think. Either way, all that’s left to do now is mail it off and hope that the recipient is as pleased with the card as I am. I can’t believe I’ve actually finished with it this early though! That’s so unlike me; I’m usually the one sneaking things in right on top of the deadline. But hey that means now I have one less thing on my to-do list so I can focus on other things...which may or may not include a holiday-themed kitty drawing in the works... ____ Artwork © me, MysticSparkleWings ____ Where to find me & my artwork: My Website | Commission Info + Prices | Ko-Fi | dA Print Shop | RedBubble | Twitter | Tumblr | Instagram
2 notes
·
View notes
Text
The Widening Responsibility for Front-End Developers
This is an extended version of my essay “When front-end means full-stack” which was published in the wonderful Increment magazine put out by Stripe. It’s also something of an evolution of a couple other of my essays, “The Great Divide” and “Ooops, I guess we’re full-stack developers now.”
The moment I fell in love with front-end development was when I discovered the style.css file in WordPress themes. That’s where all the magic was (is!) to me. I could (can!) change a handful of lines in there and totally change the look and feel of a website. It’s an incredible game to play.
Back when I was cowboy-coding over FTP. Although I definitely wasn’t using CSS grid!
By fiddling with HTML and CSS, I can change the way you feel about a bit of writing. I can make you feel more comfortable about buying tickets to an event. I can increase the chances you share something with your friends.
That was well before anybody paid me money to be a front-end developer, but even then I felt the intoxicating mix of stimuli that the job offers. Front-end development is this expressive art form, but often constrained by things like the need to directly communicate messaging and accomplish business goals.
Front-end development is at the intersection of art and logic. A cross of business and expression. Both left and right brain. A cocktail of design and nerdery.
I love it.
Looking back at the courses I chose from middle school through college, I bounced back and forth between computer-focused classes and art-focused classes, so I suppose it’s no surprise I found a way to do both as a career.
The term “Front-End Developer” is fairly well-defined and understood. For one, it’s a job title. I’ll bet some of you literally have business cards that say it on there, or some variation like: “Front-End Designer,” “UX Developer,” or “UI Engineer.” The debate around what those mean isn’t particularly interesting to me. I find that the roles are so varied from job-to-job and company-to-company that job titles will never be enough to describe things. Getting this job is more about demonstrating you know what you’re doing more than anything else¹.
Chris Coyier Front-End Developer
The title variations are just nuance. The bigger picture is that as long as the job is building websites, front-enders are focused on the browser. Quite literally:
front-end = browsers
back-end = servers
Even as the job has changed over the decades, that distinction still largely holds.
As “browser people,” there are certain truths that come along for the ride. One is that there is a whole landscape of different browsers and, despite the best efforts of standards bodies, they still behave somewhat differently. Just today, as I write, I dealt with a bug where a date string I had from an API was in a format such that Firefox threw an error when I tried to use the .toISOString() JavaScript API on it, but was fine in Chrome. That’s just life as a front-end developer. That’s the job.
Even across that landscape of browsers, just on desktop computers, there is variance in how users use that browser. How big do they have the window open? Do they have dark mode activated on their operating system? How’s the color gamut on that monitor? What is the pixel density? How’s the bandwidth situation? Do they use a keyboard and mouse? One or the other? Neither? All those same questions apply to mobile devices too, where there is an equally if not more complicated browser landscape. And just wait until you take a hard look at HTML emails.
That’s a lot of unknowns, and the answers to developing for that unknown landscape is firmly in the hands of front-end developers.
![Tumblr media](https://64.media.tumblr.com/99f20ffeb3331f62a0912622a0cbcb55/ffe4d8d31c913bbc-28/s540x810/b2cd1d36d4cde8ea6314f2c9611ff269e328a305.jpg)
Into the unknoooooowwwn. – Elsa
The most important aspect of the job? The people that use these browsers. That’s why we’re building things at all. These are the people I’m trying to impress with my mad CSS skills. These are the people I’m trying to get to buy my widget. Who all my business charts hinge upon. Who’s reaction can sway my emotions like yarn in the breeze. These users, who we put on a pedestal for good reason, have a much wider landscape than the browsers do. They speak different languages. They want different things. They are trying to solve different problems. They have different physical abilities. They have different levels of urgency. Again, helping them is firmly in the hands of front-end developers. There is very little in between the characters we type into our text editors and the users for whom we wish to serve.
Being a front-end developer puts us on the front lines between the thing we’re building and the people we’re building it for, and that’s a place some of us really enjoy being.
That’s some weighty stuff, isn’t it? I haven’t even mentioned React yet.
The “we care about the users” thing might feel a little precious. I’d think in a high functioning company, everyone would care about the users, from the CEO on down. It’s different, though. When we code a <button>, we’re quite literally putting a button into a browser window that users directly interact with. When we adjust a color, we’re adjusting exactly what our sighted users see when they see our work.
![Tumblr media](https://64.media.tumblr.com/53c757938d8a27a325fada9ae1aae76a/ffe4d8d31c913bbc-bb/s540x810/e7e77e3348c858c2acbaf99779e0bad9c626e1f6.jpg)
That’s not far off from a ceramic artist pulling a handle out of clay for a coffee cup. It’s applying craftsmanship to a digital experience. While a back-end developer might care deeply about the users of a site, they are, as Monica Dinculescu once told me in a conversation about this, “outsourcing that responsibility.”
We established that front-end developers are browser people. The job is making things work well in browsers. So we need to understand the languages browsers speak, namely: HTML, CSS, and JavaScript². And that’s not just me being some old school fundamentalist; it’s through a few decades of everyday front-end development work that knowing those base languages is vital to us doing a good job. Even when we don’t work directly with them (HTML might come from a template in another language, CSS might be produced from a preprocessor, JavaScript might be mostly written in the parlance of a framework), what goes the browser is ultimately HTML, CSS, and JavaScript, so that’s where debugging largely takes place and the ability of the browser is put to work.
CSS will always be my favorite and HTML feels like it needs the most love — but JavaScript is the one we really need to examine The last decade has seen JavaScript blossom from a language used for a handful of interactive effects to the predominant language used across the entire stack of web design and development. It’s possible to work on websites and writing nothing but JavaScript. A real sea change.
JavaScript is all-powerful in the browser. In a sense, it supersedes HTML and CSS, as there is nothing either of those languages can do that JavaScript cannot. HTML is parsed by the browser and turned into the DOM, which JavaScript can also entirely create and manipulate. CSS has its own model, the CSSOM, that applies styles to elements in the DOM, which JavaScript can also create and manipulate.
This isn’t quite fair though. HTML is the very first file that browsers parse before they do the rest of the work needed to build the site. That firstness is unique to HTML and a vital part of making websites fast.
In fact, if the HTML was the only file to come across the network, that should be enough to deliver the basic information and functionality of a site.
That philosophy is called Progressive Enhancement. I’m a fan, myself, but I don’t always adhere to it perfectly. For example, a <form> can be entirely functional in HTML, when it’s action attribute points to a URL where the form can be processed. Progressive Enhancement would have us build it that way. Then, when JavaScript executes, it takes over the submission and has the form submit via Ajax instead, which might be a nicer experience as the page won’t have to refresh. I like that. Taken further, any <button> outside a form is entirely useless without JavaScript, so in the spirit of Progressive Enhancement, I should wait until JavaScript executes to even put that button on the page at all (or at least reveal it). That’s the kind of thing where even those of us with the best intentions might not always toe the line perfectly. Just put the button in, Sam. Nobody is gonna die.
JavaScript’s all-powerfulness makes it an appealing target for those of us doing work on the web — particularly as JavaScript as a language has evolved to become even more powerful and ergonomic, and the frameworks that are built in JavaScript become even more-so. Back in 2015, it was already so clear that JavaScript was experiencing incredible growth in usage, Matt Mullenweg, co-founder of WordPress, gave the developer world homework: “Learn JavaScript Deeply”³. He couldn’t have been more right. Half a decade later, JavaScript has done a good job of taking over front-end development. Particularly if you look at front-end development jobs.
While the web almanac might show us that only 5% of the top-zillion sites use React compared to 85% including jQuery, those numbers are nearly flipped when looking around at front-end development job requirements.
I’m sure there are fancy economic reasons for all that, but jobs are as important and personal as it gets for people, so it very much matters.
So we’re browser people in a sea of JavaScript building things for people. If we take a look at the job at a practical day-to-day tasks level, it’s a bit like this:
Translate designs into code
Think in terms of responsive design, allowing us to design and build across the landscape of devices
Build systemically. Construct components and patterns, not one-offs.
Apply semantics to content
Consider accessibility
Worry about the performance of the site. Optimize everything. Reduce, reuse, recycle.
Just that first bullet point feels like a college degree to me. Taken together, all of those points certainly do.
This whole list is a bit abstract though, so let’s apply it to something we can look at. What if this website was our current project?
Our brains and fingers go wild!
Let’s build the layout with CSS grid.
What fonts are those? Do we need to load them in their entirety or can we subset them? What happens as they load in? This layout feels like it will really suffer from font-shifting jank.
There are some repeated patterns here. We should probably make a card design pattern. Every website needs a good card pattern.
That’s a gorgeous color scheme. Are the colors mathematically related? Should we make variables to represent them individually or can we just alter a single hue as needed? Are we going to use custom properties in our CSS? Colors are just colors though, we might not need the cascading power of them just for this. Should we just use Sass variables? Are we going to use a CSS preprocessor at all?
The source order is tricky here. We need to order things so that they make sense for a screen reader user. We should have a meeting about what the expected order of content should be, even if we’re visually moving things around a bit with CSS grid.
The photographs here are beautifully shot. But some of them match the background color of the site… can we get away with alpha-transparent PNGs here? Those are always so big. Can any next-gen formats help us? Or should we try to match the background of a JPG with the background of the site seamlessly. Who’s writing the alt text for these?
There are some icons in use here. Inline SVG, right? Certainly SVG of some kind, not icon fonts, right? Should we build a whole icon system? I guess it depends on how we’re gonna be building this thing more broadly. Do we have a build system at all?
What’s the whole front-end plan here? Can I code this thing in vanilla HTML, CSS, and JavaScript? Well, I know I can, but what are the team expectations? Client expectations? Does it need to be a React thing because it’s part of some ecosystem of stuff that is already React? Or Vue or Svelte or whatever? Is there a CMS involved?
I’m glad the designer thought of not just the “desktop” and “mobile” sizes but also tackled an in-between size. Those are always awkward. There is no interactivity information here though. What should we do when that search field is focused? What gets revealed when that hamburger is tapped? Are we doing page-level transitions here?
I could go on and on. That’s how front-end developers think, at least in my experience and in talking with my peers.
A lot of those things have been our jobs forever though. We’ve been asking and answering these questions on every website we’ve built for as long as we’ve been doing it. There are different challenges on each site, which is great and keeps this job fun, but there is a lot of repetition too.
Allow me to get around to the title of this article.
While we’ve been doing a lot of this stuff for ages, there is a whole pile of new stuff we’re starting to be expected to do, particularly if we’re talking about building the site with a modern JavaScript framework. All the modern frameworks, as much as they like to disagree about things, agree about one big thing: everything is a component. You nest and piece together components as needed. Even native JavaScript moves toward its own model of Web Components.
![Tumblr media](https://64.media.tumblr.com/5d9abe97ea03d485d493e5153e2451b7/ffe4d8d31c913bbc-3c/s540x810/a1fd196f3e7c9daa6fca28d15e42ef9967b45f2c.jpg)
I like it, this idea of components. It allows you and your team to build the abstractions that make the most sense to you and what you are building.
Your Card component does all the stuff your card needs to do. Your Form component does forms how your website needs to do forms. But it’s a new concept to old developers like me. Components in JavaScript have taken hold in a way that components on the server-side never did. I’ve worked on many a WordPress website where the best I did was break templates into somewhat arbitrary include() statements. I’ve worked on Ruby on Rails sites with partials that take a handful of local variables. Those are useful for building re-usable parts, but they are a far cry from the robust component models that JavaScript frameworks offer us today.
All this custom component creation makes me a site-level architect in a way that I didn’t use to be. Here’s an example. Of course I have a Button component. Of course I have an Icon component. I’ll use them in my Card component. My Card component lives in a Grid component that lays them out and paginates them. The whole page is actually built from components. The Header component has a SearchBar component and a UserMenu component. The Sidebar component has a Navigation component and an Ad component. The whole page is just a special combination of components, which is probably based on the URL, assuming I’m all-in on building our front-end with JavaScript. So now I’m dealing with URLs myself, and I’m essentially the architect of the entire site. [Sweats profusely]
Like I told ya, a whole pile of new responsibility.
Components that are in charge of displaying content are almost certainly not hard-coded with data in them. They are built to be templates. They are built to accept data and construct themselves based on that data. In the olden days, when we were doing this kind of templating, the data has probably already arrived on the page we’re working on. In a JavaScript-powered app, it’s more likely that that data is fetched by JavaScript. Perhaps I’ll fetch it when the component renders. In a stack I’m working with right now, the front end is in React, the API is in GraphQL and we use Apollo Client to work with data. We use a special “hook” in the React components to run the queries to fetch the data we need, and another special hook when we need to change that data. Guess who does that work? Is it some other kind of developer that specializes in this data layer work? No, it’s become the domain of the front-end developer.
Speaking of data, there is all this other data that a website often has to deal with that doesn’t come from a database or API. It’s data that is really only relevant to the website at this moment in time.
Which tab is active right now?
Is this modal dialog open or closed?
Which bar of this accordion is expanded?
Is this message bar in an error state or warning state?
How many pages are you paginated in?
How far is the user scrolled down the page?
Front-end developers have been dealing with that kind of state for a long time, but it’s exactly this kind of state that has gotten us into trouble before. A modal dialog can be open with a simple modifier class like <div class="modal is-open"> and toggling that class is easy enough with .classList.toggle(".is-open"); But that’s a purely visual treatment. How does anything else on the page know if that modal is open or not? Does it ask the DOM? In a lot of jQuery-style apps of yore, yes, it would. In a sense, the DOM became the “source of truth” for our websites. There were all sorts of problems that stemmed from this architecture, ranging from a simple naming change destroying functionality in weirdly insidious ways, to hard-to-reason-about application logic making bug fixing a difficult proposition.
Front-end developers collectively thought: what if we dealt with state in a more considered way? State management, as a concept, became a thing. JavaScript frameworks themselves built the concept right in, and third-party libraries have paved and continue to pave the way. This is another example of expanding responsibility. Who architects state management? Who enforces it and implements it? It’s not some other role, it’s front-end developers.
There is expanding responsibility in the checklist of things to do, but there is also work to be done in piecing it all together. How much of this state can be handled at the individual component level and how much needs to be higher level? How much of this data can be gotten at the individual component level and how much should be percolated from above? Design itself comes into play. How much of the styling of this component should be scoped to itself, and how much should come from more global styles?
It’s no wonder that design systems have taken off in recent years. We’re building components anyway, so thinking of them systemically is a natural fit.
Let’s look at our design again:
A bunch of new thoughts can begin!
Assuming we’re using a JavaScript framework, which one? Why?
Can we statically render this site, even if we’re building with a JavaScript framework? Or server-side render it?
Where are those recipes coming from? Can we get a GraphQL API going so we can ask for whatever we need, whenever we need it?
Maybe we should pick a CMS that has an API that will facilitate the kind of front-end building we want to do. Perhaps a headless CMS?
What are we doing for routing? Is the framework we chose opinionated or unopinionated about stuff like this?
What are the components we need? A Card, Icon, SearchForm, SiteMenu, Img… can we scaffold these out? Should we start with some kind of design framework on top of the base framework?
What’s the client state we might need? Current search term, current tab, hamburger open or not, at least.
Is there a login system for this site or not? Are logged in users shown anything different?
Is there are third-party componentry we can leverage here?
Maybe we can find one of those fancy image components that does blur-up loading and lazy loading and all that.
Those are all things that are in the domain of front-end developers these days, on top of everything that we already need to do. Executing the design, semantics, accessibility, performance… that’s all still there. You still need to be proficient in HTML, CSS, JavaScript, and how the browser works. Being a front-end developer requires a haystack of skills that grows and grows. It’s the natural outcome of the web getting bigger. More people use the web and internet access grows. The economy around the web grows. The capability of browsers grows. The expectations of what is possible on the web grows. There isn’t a lot shrinking going on around here.
We’ve already reached the point where most front-end developers don’t know the whole haystack of responsibilities. There are lots of developers still doing well for themselves being rather design-focused and excelling at creative and well-implemented HTML and CSS, even as job posts looking for that dwindle.
There are systems-focused developers and even entire agencies that specialize in helping other companies build and implement design systems. There are data-focused developers that feel most at home making the data flow throughout a website and getting hot and heavy with business logic. While all of those people might have “front-end developer” on their business card, their responsibilities and even expectations of their work might be quite different. It’s all good, we’ll find ways to talk about all this in time.
In fact, how we talk about building websites has changed a lot in the last decade. Some of my early introduction to web development was through WordPress. WordPress needs a web server to run, is written in PHP, and stores it’s data in a MySQL database. As much as WordPress has evolved, all that is still exactly the same. We talk about that “stack” with an acronym: LAMP, or Linux, Apache, MySQL and PHP. Note that literally everything in the entire stack consists of back-end technologies. As a front-end developer, nothing about LAMP is relevant to me.
But other stacks have come along since then. A popular stack was MEAN (Mongo, Express, Angular and Node). Notice how we’re starting to inch our way toward more front-end technologies? Angular is a JavaScript framework, so as this stack gained popularity, so too did talking about the front-end as an important part of the stack. Node and Express are both JavaScript as well, albeit the server-side variant.
The existence of Node is a huge part of this story. Node isn’t JavaScript-like, it’s quite literally JavaScript. It makes a front-end developer already skilled in JavaScript able to do server-side work without too much of a stretch.
“Serverless” is a much more modern tech buzzword, and what it’s largely talking about is running small bits of code on cloud servers. Most often, those small bits of code are in Node, and written by JavaScript developers. These days, a JavaScript-focused front-end developer might be writing their own serverless functions and essentially being their own back-end developer. They’ll think of themselves as full-stack developers, and they’ll be right.
Shawn Wang coined a term for a new stack this year: STAR or Design System, TypeScript, Apollo, and React. This is incredible to me, not just because I kind of like that stack, but because it’s a way of talking about the stack powering a website that is entirely front-end technologies. Quite a shift.
I apologize if I’ve made you feel a little anxious reading this. If you feel like you’re behind in understanding all this stuff, you aren’t alone.
In fact, I don’t think I’ve talked to a single developer who told me they felt entirely comfortable with the entire world of building websites. Everybody has weak spots or entire areas where they just don’t know the first dang thing. You not only can specialize, but specializing is a pretty good idea, and I think you will end up specializing to some degree whether you plan to or not. If you have the good fortune to plan, pick things that you like. You’ll do just fine.
The only constant in life is change.
– Heraclitus – Motivational Poster – Chris Coyier
¹ I’m a white dude, so that helps a bunch, too. ↩️ ² Browsers speak a bunch more languages. HTTP, SVG, PNG… The more you know the more you can put to work! ↩️ ³ It’s an interesting bit of irony that WordPress websites generally aren’t built with client-side JavaScript components. ↩️
The post The Widening Responsibility for Front-End Developers appeared first on CSS-Tricks.
You can support CSS-Tricks by being an MVP Supporter.
The Widening Responsibility for Front-End Developers published first on https://deskbysnafu.tumblr.com/
0 notes
Text
The Widening Responsibility for Front-End Developers
This is an extended version of my essay “When front-end means full-stack” which was published in the wonderful Increment magazine put out by Stripe. It’s also something of an evolution of a couple other of my essays, “The Great Divide” and “Ooops, I guess we’re full-stack developers now.”
The moment I fell in love with front-end development was when I discovered the style.css file in WordPress themes. That’s where all the magic was (is!) to me. I could (can!) change a handful of lines in there and totally change the look and feel of a website. It’s an incredible game to play.
Back when I was cowboy-coding over FTP. Although I definitely wasn’t using CSS grid!
By fiddling with HTML and CSS, I can change the way you feel about a bit of writing. I can make you feel more comfortable about buying tickets to an event. I can increase the chances you share something with your friends.
That was well before anybody paid me money to be a front-end developer, but even then I felt the intoxicating mix of stimuli that the job offers. Front-end development is this expressive art form, but often constrained by things like the need to directly communicate messaging and accomplish business goals.
Front-end development is at the intersection of art and logic. A cross of business and expression. Both left and right brain. A cocktail of design and nerdery.
I love it.
Looking back at the courses I chose from middle school through college, I bounced back and forth between computer-focused classes and art-focused classes, so I suppose it’s no surprise I found a way to do both as a career.
The term “Front-End Developer” is fairly well-defined and understood. For one, it’s a job title. I’ll bet some of you literally have business cards that say it on there, or some variation like: “Front-End Designer,” “UX Developer,” or “UI Engineer.” The debate around what those mean isn’t particularly interesting to me. I find that the roles are so varied from job-to-job and company-to-company that job titles will never be enough to describe things. Getting this job is more about demonstrating you know what you’re doing more than anything else¹.
Chris Coyier Front-End Developer
The title variations are just nuance. The bigger picture is that as long as the job is building websites, front-enders are focused on the browser. Quite literally:
front-end = browsers
back-end = servers
Even as the job has changed over the decades, that distinction still largely holds.
As “browser people,” there are certain truths that come along for the ride. One is that there is a whole landscape of different browsers and, despite the best efforts of standards bodies, they still behave somewhat differently. Just today, as I write, I dealt with a bug where a date string I had from an API was in a format such that Firefox threw an error when I tried to use the .toISOString() JavaScript API on it, but was fine in Chrome. That’s just life as a front-end developer. That’s the job.
Even across that landscape of browsers, just on desktop computers, there is variance in how users use that browser. How big do they have the window open? Do they have dark mode activated on their operating system? How’s the color gamut on that monitor? What is the pixel density? How’s the bandwidth situation? Do they use a keyboard and mouse? One or the other? Neither? All those same questions apply to mobile devices too, where there is an equally if not more complicated browser landscape. And just wait until you take a hard look at HTML emails.
That’s a lot of unknowns, and the answers to developing for that unknown landscape is firmly in the hands of front-end developers.
![Tumblr media](https://64.media.tumblr.com/99f20ffeb3331f62a0912622a0cbcb55/3be78068a73e559e-b4/s540x810/62ce9f641a650759c38089cb0985aafb54b13494.jpg)
Into the unknoooooowwwn. – Elsa
The most important aspect of the job? The people that use these browsers. That’s why we’re building things at all. These are the people I’m trying to impress with my mad CSS skills. These are the people I’m trying to get to buy my widget. Who all my business charts hinge upon. Who’s reaction can sway my emotions like yarn in the breeze. These users, who we put on a pedestal for good reason, have a much wider landscape than the browsers do. They speak different languages. They want different things. They are trying to solve different problems. They have different physical abilities. They have different levels of urgency. Again, helping them is firmly in the hands of front-end developers. There is very little in between the characters we type into our text editors and the users for whom we wish to serve.
Being a front-end developer puts us on the front lines between the thing we’re building and the people we’re building it for, and that’s a place some of us really enjoy being.
That’s some weighty stuff, isn’t it? I haven’t even mentioned React yet.
The “we care about the users” thing might feel a little precious. I’d think in a high functioning company, everyone would care about the users, from the CEO on down. It’s different, though. When we code a <button>, we’re quite literally putting a button into a browser window that users directly interact with. When we adjust a color, we’re adjusting exactly what our sighted users see when they see our work.
![Tumblr media](https://64.media.tumblr.com/53c757938d8a27a325fada9ae1aae76a/3be78068a73e559e-8d/s540x810/6f8de7decef39e8a6937ddea1d80597b3cb54788.jpg)
That’s not far off from a ceramic artist pulling a handle out of clay for a coffee cup. It’s applying craftsmanship to a digital experience. While a back-end developer might care deeply about the users of a site, they are, as Monica Dinculescu once told me in a conversation about this, “outsourcing that responsibility.”
We established that front-end developers are browser people. The job is making things work well in browsers. So we need to understand the languages browsers speak, namely: HTML, CSS, and JavaScript². And that’s not just me being some old school fundamentalist; it’s through a few decades of everyday front-end development work that knowing those base languages is vital to us doing a good job. Even when we don’t work directly with them (HTML might come from a template in another language, CSS might be produced from a preprocessor, JavaScript might be mostly written in the parlance of a framework), what goes the browser is ultimately HTML, CSS, and JavaScript, so that’s where debugging largely takes place and the ability of the browser is put to work.
CSS will always be my favorite and HTML feels like it needs the most love — but JavaScript is the one we really need to examine The last decade has seen JavaScript blossom from a language used for a handful of interactive effects to the predominant language used across the entire stack of web design and development. It’s possible to work on websites and writing nothing but JavaScript. A real sea change.
JavaScript is all-powerful in the browser. In a sense, it supersedes HTML and CSS, as there is nothing either of those languages can do that JavaScript cannot. HTML is parsed by the browser and turned into the DOM, which JavaScript can also entirely create and manipulate. CSS has its own model, the CSSOM, that applies styles to elements in the DOM, which JavaScript can also create and manipulate.
This isn’t quite fair though. HTML is the very first file that browsers parse before they do the rest of the work needed to build the site. That firstness is unique to HTML and a vital part of making websites fast.
In fact, if the HTML was the only file to come across the network, that should be enough to deliver the basic information and functionality of a site.
That philosophy is called Progressive Enhancement. I’m a fan, myself, but I don’t always adhere to it perfectly. For example, a <form> can be entirely functional in HTML, when it’s action attribute points to a URL where the form can be processed. Progressive Enhancement would have us build it that way. Then, when JavaScript executes, it takes over the submission and has the form submit via Ajax instead, which might be a nicer experience as the page won’t have to refresh. I like that. Taken further, any <button> outside a form is entirely useless without JavaScript, so in the spirit of Progressive Enhancement, I should wait until JavaScript executes to even put that button on the page at all (or at least reveal it). That’s the kind of thing where even those of us with the best intentions might not always toe the line perfectly. Just put the button in, Sam. Nobody is gonna die.
JavaScript’s all-powerfulness makes it an appealing target for those of us doing work on the web — particularly as JavaScript as a language has evolved to become even more powerful and ergonomic, and the frameworks that are built in JavaScript become even more-so. Back in 2015, it was already so clear that JavaScript was experiencing incredible growth in usage, Matt Mullenweg, the founding developer of WordPress, gave the developer world homework: “Learn JavaScript Deeply”³. He couldn’t have been more right. Half a decade later, JavaScript has done a good job of taking over front-end development. Particularly if you look at front-end development jobs.
While the web almanac might show us that only 5% of the top-zillion sites use React compared to 85% including jQuery, those numbers are nearly flipped when looking around at front-end development job requirements.
I’m sure there are fancy economic reasons for all that, but jobs are as important and personal as it gets for people, so it very much matters.
So we’re browser people in a sea of JavaScript building things for people. If we take a look at the job at a practical day-to-day tasks level, it’s a bit like this:
Translate designs into code
Think in terms of responsive design, allowing us to design and build across the landscape of devices
Build systemically. Construct components and patterns, not one-offs.
Apply semantics to content
Consider accessibility
Worry about the performance of the site. Optimize everything. Reduce, reuse, recycle.
Just that first bullet point feels like a college degree to me. Taken together, all of those points certainly do.
This whole list is a bit abstract though, so let’s apply it to something we can look at. What if this website was our current project?
Our brains and fingers go wild!
Let’s build the layout with CSS grid.
What fonts are those? Do we need to load them in their entirety or can we subset them? What happens as they load in? This layout feels like it will really suffer from font-shifting jank.
There are some repeated patterns here. We should probably make a card design pattern. Every website needs a good card pattern.
That’s a gorgeous color scheme. Are the colors mathematically related? Should we make variables to represent them individually or can we just alter a single hue as needed? Are we going to use custom properties in our CSS? Colors are just colors though, we might not need the cascading power of them just for this. Should we just use Sass variables? Are we going to use a CSS preprocessor at all?
The source order is tricky here. We need to order things so that they make sense for a screen reader user. We should have a meeting about what the expected order of content should be, even if we’re visually moving things around a bit with CSS grid.
The photographs here are beautifully shot. But some of them match the background color of the site… can we get away with alpha-transparent PNGs here? Those are always so big. Can any next-gen formats help us? Or should we try to match the background of a JPG with the background of the site seamlessly. Who’s writing the alt text for these?
There are some icons in use here. Inline SVG, right? Certainly SVG of some kind, not icon fonts, right? Should we build a whole icon system? I guess it depends on how we’re gonna be building this thing more broadly. Do we have a build system at all?
What’s the whole front-end plan here? Can I code this thing in vanilla HTML, CSS, and JavaScript? Well, I know I can, but what are the team expectations? Client expectations? Does it need to be a React thing because it’s part of some ecosystem of stuff that is already React? Or Vue or Svelte or whatever? Is there a CMS involved?
I’m glad the designer thought of not just the “desktop” and “mobile” sizes but also tackled an in-between size. Those are always awkward. There is no interactivity information here though. What should we do when that search field is focused? What gets revealed when that hamburger is tapped? Are we doing page-level transitions here?
I could go on and on. That’s how front-end developers think, at least in my experience and in talking with my peers.
A lot of those things have been our jobs forever though. We’ve been asking and answering these questions on every website we’ve built for as long as we’ve been doing it. There are different challenges on each site, which is great and keeps this job fun, but there is a lot of repetition too.
Allow me to get around to the title of this article.
While we’ve been doing a lot of this stuff for ages, there is a whole pile of new stuff we’re starting to be expected to do, particularly if we’re talking about building the site with a modern JavaScript framework. All the modern frameworks, as much as they like to disagree about things, agree about one big thing: everything is a component. You nest and piece together components as needed. Even native JavaScript moves toward its own model of Web Components.
![Tumblr media](https://64.media.tumblr.com/5d9abe97ea03d485d493e5153e2451b7/3be78068a73e559e-6e/s540x810/d05ddc7f779f790f26120a588a390c2a0c142c69.jpg)
I like it, this idea of components. It allows you and your team to build the abstractions that make the most sense to you and what you are building.
Your Card component does all the stuff your card needs to do. Your Form component does forms how your website needs to do forms. But it’s a new concept to old developers like me. Components in JavaScript have taken hold in a way that components on the server-side never did. I’ve worked on many a WordPress website where the best I did was break templates into somewhat arbitrary include() statements. I’ve worked on Ruby on Rails sites with partials that take a handful of local variables. Those are useful for building re-usable parts, but they are a far cry from the robust component models that JavaScript frameworks offer us today.
All this custom component creation makes me a site-level architect in a way that I didn’t use to be. Here’s an example. Of course I have a Button component. Of course I have an Icon component. I’ll use them in my Card component. My Card component lives in a Grid component that lays them out and paginates them. The whole page is actually built from components. The Header component has a SearchBar component and a UserMenu component. The Sidebar component has a Navigation component and an Ad component. The whole page is just a special combination of components, which is probably based on the URL, assuming I’m all-in on building our front-end with JavaScript. So now I’m dealing with URLs myself, and I’m essentially the architect of the entire site. [Sweats profusely]
Like I told ya, a whole pile of new responsibility.
Components that are in charge of displaying content are almost certainly not hard-coded with data in them. They are built to be templates. They are built to accept data and construct themselves based on that data. In the olden days, when we were doing this kind of templating, the data has probably already arrived on the page we’re working on. In a JavaScript-powered app, it’s more likely that that data is fetched by JavaScript. Perhaps I’ll fetch it when the component renders. In a stack I’m working with right now, the front end is in React, the API is in GraphQL and we use Apollo Client to work with data. We use a special “hook” in the React components to run the queries to fetch the data we need, and another special hook when we need to change that data. Guess who does that work? Is it some other kind of developer that specializes in this data layer work? No, it’s become the domain of the front-end developer.
Speaking of data, there is all this other data that a website often has to deal with that doesn’t come from a database or API. It’s data that is really only relevant to the website at this moment in time.
Which tab is active right now?
Is this modal dialog open or closed?
Which bar of this accordion is expanded?
Is this message bar in an error state or warning state?
How many pages are you paginated in?
How far is the user scrolled down the page?
Front-end developers have been dealing with that kind of state for a long time, but it’s exactly this kind of state that has gotten us into trouble before. A modal dialog can be open with a simple modifier class like <div class="modal is-open"> and toggling that class is easy enough with .classList.toggle(".is-open"); But that’s a purely visual treatment. How does anything else on the page know if that modal is open or not? Does it ask the DOM? In a lot of jQuery-style apps of yore, yes, it would. In a sense, the DOM became the “source of truth” for our websites. There were all sorts of problems that stemmed from this architecture, ranging from a simple naming change destroying functionality in weirdly insidious ways, to hard-to-reason-about application logic making bug fixing a difficult proposition.
Front-end developers collectively thought: what if we dealt with state in a more considered way? State management, as a concept, became a thing. JavaScript frameworks themselves built the concept right in, and third-party libraries have paved and continue to pave the way. This is another example of expanding responsibility. Who architects state management? Who enforces it and implements it? It’s not some other role, it’s front-end developers.
There is expanding responsibility in the checklist of things to do, but there is also work to be done in piecing it all together. How much of this state can be handled at the individual component level and how much needs to be higher level? How much of this data can be gotten at the individual component level and how much should be percolated from above? Design itself comes into play. How much of the styling of this component should be scoped to itself, and how much should come from more global styles?
It’s no wonder that design systems have taken off in recent years. We’re building components anyway, so thinking of them systemically is a natural fit.
Let’s look at our design again:
A bunch of new thoughts can begin!
Assuming we’re using a JavaScript framework, which one? Why?
Can we statically render this site, even if we’re building with a JavaScript framework? Or server-side render it?
Where are those recipes coming from? Can we get a GraphQL API going so we can ask for whatever we need, whenever we need it?
Maybe we should pick a CMS that has an API that will facilitate the kind of front-end building we want to do. Perhaps a headless CMS?
What are we doing for routing? Is the framework we chose opinionated or unopinionated about stuff like this?
What are the components we need? A Card, Icon, SearchForm, SiteMenu, Img… can we scaffold these out? Should we start with some kind of design framework on top of the base framework?
What’s the client state we might need? Current search term, current tab, hamburger open or not, at least.
Is there a login system for this site or not? Are logged in users shown anything different?
Is there are third-party componentry we can leverage here?
Maybe we can find one of those fancy image components that does blur-up loading and lazy loading and all that.
Those are all things that are in the domain of front-end developers these days, on top of everything that we already need to do. Executing the design, semantics, accessibility, performance… that’s all still there. You still need to be proficient in HTML, CSS, JavaScript, and how the browser works. Being a front-end developer requires a haystack of skills that grows and grows. It’s the natural outcome of the web getting bigger. More people use the web and internet access grows. The economy around the web grows. The capability of browsers grows. The expectations of what is possible on the web grows. There isn’t a lot shrinking going on around here.
We’ve already reached the point where most front-end developers don’t know the whole haystack of responsibilities. There are lots of developers still doing well for themselves being rather design-focused and excelling at creative and well-implemented HTML and CSS, even as job posts looking for that dwindle.
There are systems-focused developers and even entire agencies that specialize in helping other companies build and implement design systems. There are data-focused developers that feel most at home making the data flow throughout a website and getting hot and heavy with business logic. While all of those people might have “front-end developer” on their business card, their responsibilities and even expectations of their work might be quite different. It’s all good, we’ll find ways to talk about all this in time.
In fact, how we talk about building websites has changed a lot in the last decade. Some of my early introduction to web development was through WordPress. WordPress needs a web server to run, is written in PHP, and stores it’s data in a MySQL database. As much as WordPress has evolved, all that is still exactly the same. We talk about that “stack” with an acronym: LAMP, or Linux, Apache, MySQL and PHP. Note that literally everything in the entire stack consists of back-end technologies. As a front-end developer, nothing about LAMP is relevant to me.
But other stacks have come along since then. A popular stack was MEAN (Mongo, Express, Angular and Node). Notice how we’re starting to inch our way toward more front-end technologies? Angular is a JavaScript framework, so as this stack gained popularity, so too did talking about the front-end as an important part of the stack. Node and Express are both JavaScript as well, albeit the server-side variant.
The existence of Node is a huge part of this story. Node isn’t JavaScript-like, it’s quite literally JavaScript. It makes a front-end developer already skilled in JavaScript able to do server-side work without too much of a stretch.
“Serverless” is a much more modern tech buzzword, and what it’s largely talking about is running small bits of code on cloud servers. Most often, those small bits of code are in Node, and written by JavaScript developers. These days, a JavaScript-focused front-end developer might be writing their own serverless functions and essentially being their own back-end developer. They’ll think of themselves as full-stack developers, and they’ll be right.
Shawn Wang coined a term for a new stack this year: STAR or Design System, TypeScript, Apollo, and React. This is incredible to me, not just because I kind of like that stack, but because it’s a way of talking about the stack powering a website that is entirely front-end technologies. Quite a shift.
I apologize if I’ve made you feel a little anxious reading this. If you feel like you’re behind in understanding all this stuff, you aren’t alone.
In fact, I don’t think I’ve talked to a single developer who told me they felt entirely comfortable with the entire world of building websites. Everybody has weak spots or entire areas where they just don’t know the first dang thing. You not only can specialize, but specializing is a pretty good idea, and I think you will end up specializing to some degree whether you plan to or not. If you have the good fortune to plan, pick things that you like. You’ll do just fine.
The only constant in life is change.
– Heraclitus – Motivational Poster – Chris Coyier
¹ I’m a white dude, so that helps a bunch, too. ↩️ ² Browsers speak a bunch more languages. HTTP, SVG, PNG… The more you know the more you can put to work! ↩️ ³ It’s an interesting bit of irony that WordPress websites generally aren’t built with client-side JavaScript components. ↩️
The post The Widening Responsibility for Front-End Developers appeared first on CSS-Tricks.
You can support CSS-Tricks by being an MVP Supporter.
The Widening Responsibility for Front-End Developers published first on https://deskbysnafu.tumblr.com/
0 notes