Tatiana Mac Work, writing, speaking. 2023-03-08T01:47:33Z https://tatianamac.com/ Tatiana Mac [email protected] Maximizing one-on-ones 2017-03-14T00:00:00Z https://www.tatianamac.com/posts/one-on-ones/ <p>The creative industry, and the creatives who inhabit it, have a wealth of resources at our disposal.</p> <p>Want to learn more about user behaviors? Thousands of blog posts by industry experts break down tested research around the smallest UI nuances. Not sure about the best way to texturize hair in Illustrator? There’s hundreds of YouTube videos on that. Widely available and affordable/Open Source design resources are one of the many great aspects of working and learning in this industry.</p> <p>However, for all of the tools that exist to learn technical skills, we lack the tools to learn and discuss what creative leadership looks like. A handful of written resources do exist: Harvest Business Review and 99u, but on the by and large, creative leaders are left to learn (or not to learn) the skills to develop future design leaders. On occasion, I have enlightening discussions at events or hear a profound speakers on the subject but these experiences and articles are exceptions rather than the norm.</p> <p>As creative leaders, we need to discuss the leadership aspects of our jobs more. Instead of learning from just our individual experiences, how can we cultivate a culture where we have more conversations around the work as it pertains to the people? What methodologies do we as creative leaders find most effective?</p> <p>I am by no means asserting that I am a single-handed expert on creative leadership. Through this series, however, I do hope I can put what I’m doing to start this conversations with my peers.</p> <h2 id="one-on-ones" tabindex="-1">One-on-ones <a class="direct-link" href="https://www.tatianamac.com/posts/one-on-ones/#one-on-ones">📌</a></h2> <p>One-on-ones (or 1:1s) were something new to me when I started agency life. For those not familiar: A one-on-one is a standing meeting (typically weekly) for two people to regularly connect.</p> <p>One-on-ones are intended to be regularly scheduled, closed-door conversations between managers and direct reports (but they can also extend to leadership or project peers). At their best, they provide a safe space to discuss goals, challenges, and feedback. At their worst, they can be viewed as a weekly rote update or worse, a standing calendar invite that does not happen at all.</p> <p>Below are ways I’ve found to maximize my 1:1s as a manager to being an effective use of both parties’ time. I’m always adapting and hoping to find ways to adjust 1:1s to work for the individuals on my team.</p> <h3 id="1.-logistics-are-key%3A-set-a-weekly-caedence-and-time-allotment-in-a-private-place%2C-then-make-sure-it-happens" tabindex="-1">1. Logistics are key: Set a weekly caedence and time allotment in a private place, then make sure it happens <a class="direct-link" href="https://www.tatianamac.com/posts/one-on-ones/#1.-logistics-are-key%3A-set-a-weekly-caedence-and-time-allotment-in-a-private-place%2C-then-make-sure-it-happens">📌</a></h3> <p>Part of the efficacy of a 1:1 is holding it with regularity. Weekly seems to be a good cadence for my past teams (monthly or bimonthly makes sense for peripheral team members). It is consistent enough to make meaningful progress on projects without being overbearing.</p> <p>The private place (whether that be digitally or physically) should be a no-brainer, but sometimes sensitive information about challenges with other team members, or personal details are discussed. It’s important that your team members feel comfortable. Setting the 1:1 in a closed-door setting will help facilitate that.</p> <p>It’s easier for the “busier” person of the two to de-prioritize 1:1s. I try very hard to not cancel/move 1:1s. To me, this commitment is a manifestation of how important this individual is and how important their work is to our collective success.</p> <p>If I do have to move or to cancel it, I try to communicate it early, take the initiative to reschedule/hold our next meeting, and apologize. I expect the same respect in return.</p> <h3 id="2.-ensure-that-it's-a-two-way-conversation" tabindex="-1">2. Ensure that it's a two-way conversation <a class="direct-link" href="https://www.tatianamac.com/posts/one-on-ones/#2.-ensure-that-it's-a-two-way-conversation">📌</a></h3> <p>As an ambivert, this is something I try to be extra mindful about: Give space for more introverted, quieter team members to share. Sometimes it takes time and awkward silence to happen, but it always will. If it doesn’t, you might not be asking the right questions…which leads to:</p> <h3 id="3.-ask-open-ended-questions" tabindex="-1">3. Ask open-ended questions <a class="direct-link" href="https://www.tatianamac.com/posts/one-on-ones/#3.-ask-open-ended-questions">📌</a></h3> <p>Forcing yourself out of the habit of asking yes/no questions will force your team member to prioritize the information they think is most meaningful and avoid rote-update type answers.</p> <h3 id="4.-adjust-based-on-team-members'-communication-styles-and-needs" tabindex="-1">4. Adjust based on team members' communication styles and needs <a class="direct-link" href="https://www.tatianamac.com/posts/one-on-ones/#4.-adjust-based-on-team-members'-communication-styles-and-needs">📌</a></h3> <p>Not every team member can or should be treated exactly the same. Some team members want to get down to business and not waste time with pleasantries. Other team members prefer to ease into business—and appreciate the discussion around weekends and life beyond work.</p> <p>A tool we used at a previous job is the TTI Communication Assessment. Every team member takes a test that helps provide context for how they communicate and prefer others to communicate back. The entire team has access to one another’s profiles. I try to keep these preferences in mind to adjust how I speak to each employee.</p> <h3 id="5.-keep-the-big-picture-in-mind" tabindex="-1">5. Keep the big picture in mind <a class="direct-link" href="https://www.tatianamac.com/posts/one-on-ones/#5.-keep-the-big-picture-in-mind">📌</a></h3> <p>As the manager (especially if you’re a manager of managers) it’s important that you keep the priority and task clear. It is our job to ensure that the team member is making progress on larger quarterly and annual goals. If a team member is spending a lot of time on something that doesn’t align with their ultimate career trajectory goals, then it’s your job to redirect and re-prioritize to get them back on track.</p> <h3 id="6.-set-clear-directions-then-hold-the-person-accountable-with-written-documentation" tabindex="-1">6. Set clear directions then hold the person accountable with written documentation <a class="direct-link" href="https://www.tatianamac.com/posts/one-on-ones/#6.-set-clear-directions-then-hold-the-person-accountable-with-written-documentation">📌</a></h3> <p>I find discontent happens most often with team members when they have unclear directions or are not held consistently accountable (then, unexpectedly held accountable).</p> <p>For each team member, we keep an shared Google Doc where I take ongoing notes during the 1:1. If we agree on an action item for either of us, it’s marked as such and we ensure we check in on those items during the following 1:1. Particularly, since those action items don’t usually pertain to hard deliverables, it holds us both accountable when having a difficult conversation or checking on back-burner tasks.</p> <p>The 1:1 document is supremely helpful at the end of year review when it’s easy to forget what challenges and wins each team member has faced throughout the year. I use the 1:1 document to cite specific examples to support these growth plans.</p> <h3 id="7.-use-1%3A1s-to-provide-critical-and-positive-feedback-in-a-timely-manner" tabindex="-1">7. Use 1:1s to provide critical and positive feedback in a timely manner <a class="direct-link" href="https://www.tatianamac.com/posts/one-on-ones/#7.-use-1%3A1s-to-provide-critical-and-positive-feedback-in-a-timely-manner">📌</a></h3> <p>Lack of consistent feedback is a common challenge for employees (and warrants its own blog post). Studies consistently show that employees crave more feedback (both positive and productive) than they receive, and that employees who receive consistent feedback are more satisfied and engaged.</p> <p>The 1:1 provides all of the groundwork for providing feedback: Private setting for the candid discussion, consistently held. I think the primary reason people avoid giving feedback is that it can feel awkward.</p> <p>As the manager, if you provide feedback consistently (and elicit feedback yourself), it’s going to feel more normal to you and your team member to give and to receive feedback week over week.</p> <p>Doing so in the 1:1 also reveals trends. If someone is consistently receiving feedback in the same areas and isn’t making improvement, you might need a plan in place or more active mediation. Alternatively, if someone received feedback a few times and made progress, that’s also good to call to attention.</p> <p>What have you found successful in your 1:1s? I’d love to hear what methods you have found to be effective for you.</p> TRUST the Process 2019-02-05T00:00:00Z https://www.tatianamac.com/posts/trust-the-process/ <p>Between the forced interactions, uncertainty, and pressure placed upon success (often our health depends upon successfully acquiring a job), job hunting is a veritable hotbed for anxiety and depression.</p> <p>I think it’s safe to say that many of us enter the job hunt during difficult times, where we’re not presenting our best selves. The circumstances for our current employment/unemployment, like recent termination or forced resignation or feeling stuck in a job we hate, might contribute.</p> <p>Unfortunately, the cloud of negativity around this process compounds exponentially, and can further exacerbate what is already a difficult, unclear, and arduous process.</p> <p>The thing we need to “snap out” of the cycle of depression — employment (or what it brings, like independence, money, healthcare, success, etc) — is unattainable because we’re not presenting our best self. We’re unable to present our best self, because we’re depressed. The vicious cycle ensues as resources rapidly deplete.</p> <p>So what do we do? As someone who has continually suffered from severe anxiety, depression, and suicidal tendencies, I’ve learned some ways to cope along the way.</p> <p>At this juncture, I want to acknowledge that this process is. not. easy. It is perfectly normal to have “productive, good days,” and to have “wasted, bad days.” Or weeks. Or months. You are worth more than the sum of your productivity. As with coping and surviving depression, the process is far from linear.</p> <p>The secret is that you have to T.R.U.S.T. the process.</p> <h2 id="%5Bt%5Dry-not-to-compare-yourself-to-anyone%2C-except-your-past-and-future-selves" tabindex="-1">[T]ry not to compare yourself to anyone, except your past and future selves <a class="direct-link" href="https://www.tatianamac.com/posts/trust-the-process/#%5Bt%5Dry-not-to-compare-yourself-to-anyone%2C-except-your-past-and-future-selves">📌</a></h2> <p>It is very easy to fall into a trap where you’re six pages deep into Dribbble for portfolio inspiration, instead wondering why your UIs aren’t as crisp, illustrations not as dynamic, and animations not as clever as everybody else’s.</p> <p>First, you are comparing yourself to the entire world. How is that going to work? Let’s try it out. Talented illustrator could have had access to the best tools, tutelage, and time. Chances are you’re going to fixate on all of their positives, without considering that they also come with negatives.</p> <p>Talented illustrator could also be really trash at brushing their teeth, yields incorrectly at four-way stops, and had a less evolved understanding of information architecture as you.</p> <p>You’ll never know for sure. What have you gained from this exercise? Exactly nothing. What have you lost? Energy and time. When you’re depressed, energy is one of your premium resources. You need to use it wisely.</p> <p>Second, comparing yourself to your past or future self. Most designers I know are constantly improving. So, if you’re comparing yourself to your past, it is likely a point of pride. Look at how far you’ve come! (I frequently look at my awkward middle school pictures side-by-side with my current photos and I’m like–dang, where’d that babe come from?!)</p> <p>Do you feel you’ve digressed? That’s okay and 100 percent normal! Improvement is not always a steady incline. Sometimes when we grow wider and more vast, our niche skills can plateau for a bit.</p> <p>And, if you’re depressed right now, chances are you aren’t operating at full throttle. You might be less motivated to learn, less able to retain new skills, and be in a temporary state of regression. It is okay. It is normal.</p> <p>Now as for comparing yourself to your future self, without turning this into a Christopher Nolan plot, all I can say is that you have time to formulate who you want to become.</p> <p>Start now with your present self. Respect exactly where you are, here, right now. Accept this self in all of its imperfections. Because for every imperfection you’re accepting, you’re also accepting a whole host of accomplishments and battle wounds that are worth celebration.</p> <h2 id="%5Br%5Delinquish-control" tabindex="-1">[R]elinquish control <a class="direct-link" href="https://www.tatianamac.com/posts/trust-the-process/#%5Br%5Delinquish-control">📌</a></h2> <p>For those who love control, this is a difficult one. I find that a part of what causes me to feel depressed is that I feel out of control of everything (financial wellbeing, freedom, etc), so I seek to control everything at once (at which I inevitably fail). The dichotomy causes me to feel in control of absolutely nothing.</p> <p>Getting caught up in cycles is a sure way to perpetuate cycles of depression. A strategy I employ is to disrupt circuitous trains of thought like this.</p> <p>During the job hunt, there are so many factors outside of your control. You can’t control most of the processes, including the speed at which recruiters respond, the selection criteria, and the implicit biases of the hiring team.</p> <p>You can’t control even your own success. You can only do your best at that time. Remember that your best when you’re feeling down might be a lot less than when you’re at your best (hence, why it’s so critical to get caught up on comparisons).</p> <p>Most importantly, you do not have control over the outcome. The outcome is the result of so many other factors and dependencies (that you also don’t have control over).</p> <p>The lack of control can feel unnerving. When I feel unsettled by it, I remind myself that relinquishing control also means relinquishing blame and guilt. It’s not my fault if I don’t get the job. It’s okay that that interview didn’t go perfectly. (I want to note here that I’m not suggesting that we can relieve of ourselves of all responsibility for our actions. When we’re feeling more stable, we can again reframe this in a more proactive way, but when we’re not as well, I find it helpful to focus on gentler approaches like this.)</p> <h2 id="%5Bu%5Dnderstand-that-you-cannot-singularly-change-systemic-problems" tabindex="-1">[U]nderstand that you cannot singularly change systemic problems <a class="direct-link" href="https://www.tatianamac.com/posts/trust-the-process/#%5Bu%5Dnderstand-that-you-cannot-singularly-change-systemic-problems">📌</a></h2> <p>Deep breath. I really struggle with this one. The complexity of job hunting as a woman of colour in tech is worthy of its own post, as it is for disabled, trans, and queer folks.</p> <p>If you represent an underrepresented, marginalised group, it’s possible you feel the burden of breaking barriers and showing up for your group. It’s a good thing.</p> <p>But when you’re feeling the unbearable pressure of finding a job—a hefty feat on its own—adding the burden of centuries of systemic oppression to your shoulders is not a good idea.</p> <p>I say this with the world’s optimism: You cannot protect your group with a single decision you make. You do not need to be a martyr or make a stand for the greater good. Chances are, singularly, your brave act will get lost and ultimately not have the impact you want anyway.</p> <p>Instead heed the direction of airplane oxygen masks: Help yourself first.</p> <p>Trust me when I say that we all understand. Your fight for social justice, while very noble, requires first for you to be alive and well to do so. Do what you need to do to survive.</p> <h2 id="%5Bs%5Dee-yourself-from-your-cheering-section" tabindex="-1">[S]ee yourself from your cheering section <a class="direct-link" href="https://www.tatianamac.com/posts/trust-the-process/#%5Bs%5Dee-yourself-from-your-cheering-section">📌</a></h2> <p>The repeated rejection inherent to job searches can do numbers on even the most stable of egos. Worthlessness, waning confidence, and uncertainty are already part of a packaged deal with depression. The self you see in the mirror, a shell of yourself, is probably not the visage you want to project to prospective employers.</p> <p>When I’m feeling this low, I do what people tell you not to do: I fish for compliments. Find your biggest fans via email, text, Instagram DM, Twitter, FaceTime. Whatever mechanism you need, use it unabashedly.</p> <p>It might feel awkward to ask, but you can always start with first telling that person something nice about them as a prompt. Doing so will encourage you to be in a positive mindset and help to focus on someone else for a moment.</p> <blockquote> <p>&quot;What are some positive qualities that are unique to me?&quot;<br /> &quot;How do I make your life better?&quot;<br /> &quot;What’s your fondest memory of me?&quot;<br /> &quot;Tell me something you like about me.&quot;</p> </blockquote> <p>The answers to these questions may or may not relate directly to characteristics that are pertinent to your employability proper, but at the very least, it will remind you that you are a worthy person who has people who are rooting for you.</p> <p>The cheering section is also the place from which you want to conduct all areas of the job hunting process. Present your work to your cheering section. Ask for the compensation your cheering section thinks you deserve. Carefully weigh options as your cheering section would suggest. Face your audience of fans and turn your back to the imaginary haters. Do your fans think you deserve more than you feel you do in this place? (Most definitely, yes.)</p> <p>I think we can forget what we are capable of and what we deserve when we’re sad. We end up dodging failure instead of reaching for radical success. Our peers and loved ones are there to remind us; to cast our best mirrored selves back.</p> <h2 id="%5Bt%5Dake-one-step-at-a-time" tabindex="-1">[T]ake one step at a time <a class="direct-link" href="https://www.tatianamac.com/posts/trust-the-process/#%5Bt%5Dake-one-step-at-a-time">📌</a></h2> <p>When I consult with job hunters who are feeling depressed, I often remind them of this very simple advice. It’s one of my favourite mantras, as it works on a number of different levels.</p> <p>So many folks stress about whether or not they’ll move for the job when they haven’t even applied yet. Or, they’ll worry about whether or not they’ll take the offer before they’ve even gotten an interview.</p> <p>The macrosteps of the job hunting process are quite broad and drawn out: deciding to apply, seeking places, applying, interviewing, receiving an offer, accepting the offer, and addressing the ways it’ll impact your life. Each of these steps is major.</p> <p>While I can respect the need to plan, we’ve been tricked into believing that job hunting is express train to decision town. The expedited process is a falsehood that hasty employers have created and respect only when to their advantage. (Do you ever wonder why they’re in no hurry to get you to the second or third interview? Or how hundreds of applications sit latently before ever viewed? Does it really seem like they’re in a rush to you?) In most cases, unless your job involves directly saving lives, the difference between a couple of weeks of each step is not life or death of the company. If it is, you may want to assess their planning skills.</p> <p>So, in our analogy, if you get to the point of accepting the offer, you can worry/strategise how to move your entire life to Amsterdam. (And of course noting here by contrast that while it’s not life or death on the company side, that there is tremendous anxiety around a couple of weeks, as that can mean groceries in your belly and roof over your heard; life or death for you.)</p> <p>But until the steps prior have occurred, that kind of what-if thinking will only cause unnecessary anxiety. Worse yet, thinking this way also gets you obsessing in an alternate world where you’ve magically bypassed the necessary steps of successful application, interview, offer, and acceptance. Effectively, you’re statistically setting yourself up for disappointment.</p> <p>When you’re depressed, that can be a very detrimental thing to do for your already tender heart. Don’t make your heart deal with more than it needs to right now.</p> <p>So, let’s say you’ve moved onto the interview process. First, recall what outcome you want for this step, and this step alone (I recommend for this example: Finding out if you even wanna work at this company and might get along with your colleagues!). Then, if you proceed from this step, you are under no obligation to proceed through all the rest. You can evaluate the desired outcome for those steps! Why?</p> <p>Because one step at a time.</p> <p>When crafting your portfolio, the doubt can easily sink in. The work you’ve done is irrelevant. The jobs you’ve picked are wrong. The skills you have aren’t sharp enough. So, how do you craft a portfolio out of nothing?</p> <p>Start and anchor yourself with a singular point of joy.</p> <p>When I was working on my portfolio last year, at the height of my depression, I fixated on the single illustration that floats above. I borrowed it from a previous project that I loved. I modified it until it brought me joy. I started somewhere with relatively low effort.</p> <p>I anchored my colour palette around the illustration. I complemented my typography to it. Step by step, line by line, I found myself with a header. Then with a section. One component of work, then another.</p> <p>Building my portfolio was slow moving. The code I wrote wasn’t perfect. Some of the components were less accessible than I knew how to make. But you know what? It was better than the years of stagnation I’d previously allowed. I relinquished control over the idea of perfection, and removed myself on being the shining example of the accessibility community.</p> <p>I favoured progress over perfection. I valued each small step, because it meant that no matter how slowly, I was moving forward. When you’re bedridden, barely able to motivate yourself to eat, this feat is no easy task. So it’s equally important to acknowledge these incremental steps, no matter how small.</p> <p>If and when you’re rejected at various steps, remember to celebrate all the steps you took to get there. A lack of offer doesn’t mean failure to find a job, it means a successful application and completed interview. The lack of offer here means a better offer is out there.</p> <p>Know, friend, that I know that none of this is easy. It’s all very hard. You will struggle as we all have. You are not alone in this. But as long as you continue to believe in yourself and trust the process, I know you will prevail, one step at a time. We’re rooting for you.</p> <p>I am always willing to answer questions about how to cope with the arduous job seeker’s journey (DM me on Twitter, email me!) And, if you’re thinking about suicide, are worried about a loved one, or would like emotional support, please call 1–800–273–8255 or visit <a href="http://suicidepreventionlifeline.org/">suicidepreventionlifeline.org</a>.</p> Tired 2019-04-16T00:00:00Z https://www.tatianamac.com/posts/tired/ <p>I'm tired.</p> <p>I'm tired of not being seen. Of having to choose to dodge or to push. Of having to subserviate myself to people who don't even acknowledge my existence. Of having to make the conscious decision to hold space— space that I am repeatedly promised, but only in theory, never in practice. I'm tired of the reaction when we collide, bitterness that I didn't yield to begin with and confusion in the internalised expectation.</p> <p>I'm tired of not being viewed. Of having to choose to be seen for my gender or for my race. Of having to accommodate to Westernised standards of beauty and of being defined on binaries that never counted me as a one but as a zero. I'm tired of being seen only in parts, and never in whole. A supporting actor, always.</p> <p>I'm tired of not being heard. Of having to assert my voice to take space at work and at the bar, just to hear my words float in limbo rarely processed, rarely heard. Or in a rare instance when it is heard, it is repackaged in a larger box, with more packaging with someone else's name on it. That palatable, approachable box delivers.</p> <h2 id="i'm-tired-of-not-being-felt" tabindex="-1">I'm tired of not being felt <a class="direct-link" href="https://www.tatianamac.com/posts/tired/#i'm-tired-of-not-being-felt">📌</a></h2> <p>Of having to defend the truth my lived experiences with data and screenshots and typed out summaries of paragraphs from those who came before me who survived similar things. Just to have it all invalidated as hyperbole or as outrage. I'm met with the requirement to listen to the intents and the meanings and the intents and meanings and intents and the meanings without ever being asked just once—what kind of impact that it might have had on me.</p> <h2 id="i'm-tired-of-not-being-valued" tabindex="-1">I'm tired of not being valued <a class="direct-link" href="https://www.tatianamac.com/posts/tired/#i'm-tired-of-not-being-valued">📌</a></h2> <p>Of having to repeatedly prove my worth in an industry that never conceived that I would be allowed to sit at the table. I'm tired of being told that the right person will come along; that the loneliness of being single will pass from people who will return home to the comfort of their significant others. I'm tired of being told that the right company will finally see my worth and will hire me, if I just hold out, from people who can expect their paycheck on Friday from their steady jobs.</p> <h2 id="i'm-tired-of-not-being-believed" tabindex="-1">I'm tired of not being believed <a class="direct-link" href="https://www.tatianamac.com/posts/tired/#i'm-tired-of-not-being-believed">📌</a></h2> <p>Of having to reexplain how racism requires prejudice and power, how the microaggressions hurt differently but no less, and how yes, you, my beloved friend, were and are and continue to be capable of the most racist words and actions. And how your complicit silence hurts more than explicit slurs.</p> <h2 id="i'm-tired-of-not-being-trusted" tabindex="-1">I'm tired of not being trusted <a class="direct-link" href="https://www.tatianamac.com/posts/tired/#i'm-tired-of-not-being-trusted">📌</a></h2> <p>Of having to hear how I should or should not be feeling from people who are supposed to love me unconditionally. Of having to hear how my brown thoughts are overreactions or misconceptions in their white world. Of having to hold space for feelings as so many of us face an imminent fear of death.</p> <p>Most of all.</p> <h2 id="i'm-tired-of-living-in-a-world-of-buts-and-ors" tabindex="-1">I'm tired of living in a world of buts and ors <a class="direct-link" href="https://www.tatianamac.com/posts/tired/#i'm-tired-of-living-in-a-world-of-buts-and-ors">📌</a></h2> <p>In a world where you win, or I win. In a world where I have to crawl on the backs of people who look like me; people who are struggling in the same and in different ways. Because my existence doesn't work that way. I exist in a world of ands and withs, being multitudes and holding opinions that seem like contradictions where more than one truth can exist—it is a world of abundance, of not only resources, but of perspectives and of truths.</p> <h2 id="i'm-tired-of-the-balance" tabindex="-1">I'm tired of the balance <a class="direct-link" href="https://www.tatianamac.com/posts/tired/#i'm-tired-of-the-balance">📌</a></h2> <p>Of not giving up on everyone while repeatedly being beat down by disappointment. Of being cautiously optimistic as I am seared into pessimism. Of seeking love and happiness in a world that returns me so much hate and sadness.</p> <h2 id="i'm-tired-of-asking" tabindex="-1">I'm tired of asking <a class="direct-link" href="https://www.tatianamac.com/posts/tired/#i'm-tired-of-asking">📌</a></h2> <p>How do I survive in this world of mutual exclusion when what nourishes me—what might provide me a momentary meditative rest— is mutual inclusion?</p> Cracked 2019-04-17T00:00:00Z https://www.tatianamac.com/posts/cracked/ <p>Driving with a cracked windshield feels dangerous at first, especially the moments after it happens. Your instinct says to pull over, stop driving until you get a new windshield. But you get distracted and end up driving with it for longer than you want. Then after awhile, you forget how you felt when it first happened and how close you are to a potentially scary fate. At some point, the last bits of tension fail and inevitably shatter when you least expect it.</p> <p>Every day, I drive around with cracked windshields of varying depth. I never know when they will shatter. I never know how much strength they each have left. But I know they will all eventually shatter.</p> <p>It obstructs the view, but I learned to navigate around it. I started to find the way it refracts stop lights in the rain a bit charming, if not inconvenient at times.</p> <p>On most days, I forget about the crack. And it's fine, those days.</p> <p>But then it happens. The crack goes from its familiar shape to something far scarier, changing states from idle to aggressive. In that fractional moment, I remember why it's dangerous to drive with cracked windshields. It's dangerous because the crack never goes away. You might look past it, forget it, but it was always there to remind you that it was always going to crack. It never hid its betrayal, you just stopped looking.</p> <p>As many times as they fail me, I still can't just stop driving these cars with shattered windshields. Because it's hard to get rid of your car. There's memories in the miles, it takes time and money and energy to find and to reacquaint yourself with a new car, and you want to believe it won't get worse. Perhaps there's an ignorant part of me that believes that the crack can heal itself.</p> <p>So I drive in trepidation, conscious and careful not to place any pressure on this fragile line, but in the end I know that no matter how hard I try, that I have no bearing on its shattering point. It's just a matter of time.</p> Why beginners should teach 2019-04-17T03:03:05Z https://www.tatianamac.com/posts/why-beginners-should-teach/ <p>Beginners! I'd love to see more of you <em>teach.</em> You have tremendous value to offer. In our industry, we uphold and revere experts. I get it. Experts do sexy slick things in time lapses, have nice camera equipment, and great hair days.</p> <p>Here are 10 reasons why I'd like to see more beginners teach; for yourself, for your future students, for your peers, and for our industry as a whole.</p> <ol> <li> <p>While you may be intimidated by how many tutorials already exist, you have to remember your uniqueness. People like different teaching styles, voices, EDM BG music selection. And, I'm gonna guess a lot of those tutorials are taught by experts, which leads to:</p> </li> <li> <p>Beginners acutely feel the struggles of other beginners: confused with the onslaught of tools, terminology, and where to begin. The initial hurdle is the hardest. It's the place where quitting seems most appealing because there's an endless supply of things to learn.</p> </li> <li> <p>Beginners want to see other beginners. Representation is a very important aspect of what we do: People get intimidated when they only see experts teaching high-level things. Seeing another beginner make mistakes on &quot;basic things&quot; then recover is very encouraging!</p> </li> <li> <p>More beginners teaching will also show more beginner work! It's unrealistic to expect that your first will be on par with a practised expert whose done hundreds. That's okay! Share your &quot;uglies,&quot; as they're probably not as bad as you think and are an impt part of the process!</p> </li> <li> <p>More beginners will mean more forgiveness for <em>mistakes.</em> Our society is so fearful of mistakes and the gaslighting. Totally get it. Mistakes are icky. Peeps are dix. But mistakes are a <em>necessary</em> part of growth. So make 'em! Share what you <em>learned</em> from them! Fuck haters!</p> </li> <li> <p>Internalising how to teach helps you organise how to learn: Where to start, where to focus, basic terms, anticipating your students' questions. For my Skillshare class, I knew I had to narrow the scope of all #a11y down to something compact enough to digest.</p> </li> <li> <p>More beginner teachers means more people doing things they love, even if they're kinda bad at it at first. For me, it's drawing. My talented friends have been drawing since the womb. I'm old AF now. I have no time! So many of the hands I draw are uggo. WHO CARES. I HAD FUN!!!</p> </li> <li> <p>Diversifying the levels will keep experts grounded and aware of newbie hurdles. Experts become super users of languages and tools; hearing beginner teachers will help to remind them of the initial struggles and help to cater their future, more advanced tutorials accordingly.</p> </li> <li> <p>More beginners means more humility! We hide a lot of the &quot;sausage making&quot; from our peers, clients, the non-design world. But what if we were more okay accepting imperfect, in-progress, new things? Perhaps imposter syndrome would be less pervasive and there'd be less shame.</p> </li> <li> <p>Most importantly, more beginners will inherently diversify and amplify a broader group of voices who haven't been &quot;at the table&quot; and advanced to experts - WoC, trans, disabled folks. Ignored and repressed voices.</p> </li> </ol> <p>I see you. You have value. Share with me your beginners teaching beginners channels and links! I'll save 'em and share. DM me on Twitter if you have questions on how to structure scripts, platforms to host, etc or just need to get out of your own head! You got this!!!</p> Sunday 2019-04-21T00:00:00Z https://www.tatianamac.com/posts/sunday/ <p>On the surface, today was a good day. I usually tend to all my plants on Sunday; it’s a ritual I look forward to. It’s finally spring so I can fertilise and up-pot. A good friend and I usually get our nails done every couple of months on Sunday.</p> <p>My favourite plant has spider mites. I had to buy her some special oil and insecticide and quarantine her. At the nail salon, the Vietnamese women made fun of my L’origine du monde pin. As many Viets, they don’t know that I’m Vietnamese and am fluent.</p> <p>So they said a bunch of nasty shit about me in Vietnamese (for you non-Vietnamese speakers, I’ll assure you this is rare; most salons are very kind and busy talking about other shit, not talking shit about you). I tried to focus on my friend but couldn’t. My stomach, tight.</p> <p>Shit like this happens all the time. We all deal with people being rude. Most days, I brush off dozens of microaggressions and passive aggressive shit. I’m a Portland native. I was cultivated for temperate rain and passive aggressive shit. Move on, right? Well, I tried.</p> <p>Depression is an oceanic undercurrent. I can be fine one moment, floating through my day and something will pull me under. Sometimes the force is strong and fast, other times it’s slow and nagging. Something about the combination of having to isolate my calathea hit me.</p> <p>I am like my calathea. Isolated from where she was supposed to grow, a tropical sunny place, infested with this mildly harmful mite that isn’t an immediate threat, but it’s eating away at her very slowly. I am isolated from where I’m supposed to be too.</p> <p>I am a brown girl in a white world who isn’t American despite what my passport says. When I go to Vietnam, I’ll be an American girl in a Vietnamese world despite what my lineage says. So I don’t belong here nor there. I wouldn’t thrive there, just like I don’t here.</p> <p>I have so much to be happy about, as friends and family remind me. And I am. I’m grateful for all my privileges. And I hurt. I have a lot to be sad about, too. I’m unfortunately capable of holding a lot—in my mind, in my heart, and in my soul.</p> <p>It’s what I evolved to handle. My dual existence, or non-existence, is what gave me immense resilience. But it also made me acutely aware of everything around me. My heightened observational skills are survival mechanisms.</p> <p>So when former colleagues criticised my sensitivity as a negative and undesirable work trait, it hurt. I have to be sensitive to survive. I can’t always turn it on or off, though I’ve gained the skills of hiding and showing it, for the most part. When I observe what I do, and others don’t believe me, it makes sense. Not everyone is forced to evolve in this way.</p> <p>But we’re all different plants, really.</p> <p>What gave me my light pink stripes, as if delicately painted by an Impressionist hand, and my dark green leaves, is also what made me susceptible to mites. What gives me my appearance gives me my pain. I isolated myself to not share my infestation, but then it leaves me alone.</p> Monday Comms Tips 2019-04-29T00:00:00Z https://www.tatianamac.com/posts/monday-comms-tips/ <p>I spent a lot of time in my inbox—I imagine many of you can relate. Over the years, I've gathered some helpful communication tips that I found improved my efficiency and happiness. Balancing my email time for me is an exercise in automating the right things, while maintaining the humanness of communications.</p> <h2 id="general" tabindex="-1">General <a class="direct-link" href="https://www.tatianamac.com/posts/monday-comms-tips/#general">📌</a></h2> <ul> <li> <p>Designate work time/admin time based on your energy/brain power. Now, I have a bit of a privilege here as I work independently. I answer emails on Monday, when I struggle to focus on deep-thinking work. I do deep work mid-week. I take intro/mentorship calls later on the week when I'm wrapping deadlines.</p> </li> <li> <p>I only respond to most bulky emails on Monday. I have to set this boundary, or else I find myself distracted all week long. I get stuck in the email cog.</p> </li> <li> <p>You're not obligated to tell someone all your free times. Protect your you time.</p> </li> <li> <p>Include pronouns in your email signature. If you're not sure of someone's pronouns, ask. Until you can ask, use gender neutral pronoun they/their/theirs and/or their name. Also be cognisant of accidentally outing people; always follow someone's lead and err on the side of uncertainty and asking 1:1 if you're unsure. If you mess up, apologise and fix.</p> </li> <li> <p>Stop apologising for 'the delay.' We're perpetuating this idea that people must respond within 24 hours. What a strain on our mental health, and what an unfair expectation to set upon everyone. If you must acknowledge the perceived delay, reframe as gratitude or regret: &quot;Thank you for bearing with me as I worked on my response.&quot; Or, &quot;I regret it's taken me over a week to respond.&quot;</p> </li> <li> <p>For bulkier emails, employ some information design. Create bulleted lists, bold action items. End emails with what you need to proceed.</p> </li> <li> <p>Review your response to makes sure you answered all questions asked o f you. So many extra emails are caused by not reviewing the original email fully.</p> </li> </ul> <h2 id="introductions" tabindex="-1">Introductions <a class="direct-link" href="https://www.tatianamac.com/posts/monday-comms-tips/#introductions">📌</a></h2> <ul> <li> <p>For intros, always ask permission of both parties before reaching out. Consent, always.</p> </li> <li> <p>Provide context (websites/LinkedIn) and personal connection to encourage they do a bit of research and a clear reason you intro'd them.</p> </li> <li> <p>Move the introducer to bcc: (with a note). Saves their inbox and lets them know you responded. As the introducer, remind folks &quot;You can move me to bcc: when you respond.<br /> Include your pronouns when introducing yourself. &quot;Nice to meet you all. I'm Tatiana (I use she/they pronouns).&quot; Set a precedence.</p> </li> </ul> <h2 id="scheduling" tabindex="-1">Scheduling <a class="direct-link" href="https://www.tatianamac.com/posts/monday-comms-tips/#scheduling">📌</a></h2> <ul> <li> <p>Offer times early in an email thread that will end there. I find that preemptively offering times avoids the empty back and forth of &quot;when are you available?&quot;</p> </li> <li> <p><em>Include timezones.</em> Use a tool like Spacetime to help you find amenable times without tying your brain into a knot.</p> </li> <li> <p>To confirm a time, send a calendar invite. (I also frame language in earlier comms, so it's not an unexpected invite, which is jarring. Include time zones and make sure your calendar time zone is set.</p> </li> <li> <p>Offer non-call alternatives when appropriate. When someone suggests a call as a default, and it doesn't feel necessary, I usually suggest another non-call way to solve it. For example, sometimes starting a document with initial ideas, or reading through something, etc, is what is warranted. I'll include a line like, &quot;If we both still feel a call would be necessary after this, happy to schedule a call with an agenda to make the most of both our time.&quot; Despite being an ambivert, I find that calls drain me quite a bit. I also try to remind the other person that it's their time, too.</p> </li> </ul> <h2 id="scoping%2Fspeaking" tabindex="-1">Scoping/Speaking <a class="direct-link" href="https://www.tatianamac.com/posts/monday-comms-tips/#scoping%2Fspeaking">📌</a></h2> <ul> <li> <p>Save a list of questions and answers in your notes document. I find that I write the same questions and answers over and over, especially with scoping. Having a resource to copy and paste from is helpful.</p> </li> <li> <p>When writing those answers, make sure you clearly highlight things you need to customise. It can be offputting to receive form responses.</p> </li> <li> <p>Before asking a question, see if you can find it somewhere else, then confirm. For example, if you're about to ask someone their Twitter handle, try to do a preliminary search first.</p> </li> <li> <p><em>Protect your expertise.</em> Many people will reach out to ask for free advice and not immediately offer budget, even when they have it. I am always here to support mentorship and provide free advice to community members, especially newer and underrepresented folks. However, where I draw the line if if someone is making money off of my expertise. Phrasing I've found success with is, &quot;I'm so flattered by this request! While I am happy to offer help to not-for-profit, community-focused events, I do ask for a fee when working with for-profit organisations like yours. The fee is...&quot;</p> </li> <li> <p>Maintain a spreadsheet with all your speaking events, with dates, honoraria, speaker bios, talk abstracts, and slide links. I promise it'll come in handy.</p> </li> <li> <p>If you get asked the same questions over and over for speaking/scoping, consider making a speaker bio and/or Frequently Asked Questions page.</p> </li> </ul> Leave Me To My Hard-Earned Joy 2019-07-10T00:00:00Z https://www.tatianamac.com/posts/joy/ <p>It's so incredibly hard for me to cultivate joy.</p> <p>I successfully do it all the time. I find joy at the blistered 25,000th step in crooked Portuguese street, in the the song of languages I've never heard before, in the shadow and stillness of the early morning light. I smile whenever someone chases after the bus and catches it, whenever a dog pees on its own leg, and when someone I love really, truly, hugs me in a way that makes it seem like our souls melted into one another. I fill at the textural :36 mark of <em>Perfect,</em> at the sound of Gerhard Richter's palette knife, and of the tingling numbness when my glove makes contact with the bag.</p> <p>I feel self love when I set my mind to figuring out an entire developmental concept that was fuzzy at best, in a weekend, and dedicated myself to build something to prove it.</p> <p>And it's not just the highfalutin shit, it's also the fucking brilliance of Veronica Mars (a show that tackled teenaged sexual assault head on), when my best friend and I get into laughing fits even though we're thousands of miles apart, and when I absolutely kill it with self-timer in a real Instagram influencer-style photo of my outfits in the middle of the goddamn street. My life is <em>blessed</em> with so much joy, inspired by the art and the people whom I love with my entire being.</p> <p>And even while I'm able to experience joy in forms I've always known and am just discovering, it does not mean that it is without tremendous effort. Depression has left me crying in the back corner of an Estonian palace and holding back tears in the middle of a pitch with Nike executives (Look past his head, I told myself, it'll dry out your eyes from the strain).</p> <p>And then, there is systemic, institutionalised oppression. It is the weight I was born carrying, strengthened by the repetition, but never able to release myself from it. I carry it well. I try to accessorise around it. But the one catharsis I have is to acknowledge it. To say yes, this is here and something I have and always live with. They—they who experience it not—tell me that it doesn't exist, to ignore it (you know, to ignore the thing that does not exist), and that everyone carries a weight. And as I inhale to say the same four words, the leash snatches me back and I never exhale to speak those four words to explain.</p> <p>Together, depression and oppression create a dangerous intersection that I cross thousands of times a day. For the most part I just work on not letting the cars hit me from both sides. But sometimes when I'm looking up at that gorgeous chiaroscuro effect on that ugly ass highway overpass and I go to snap a photo, someone yells out of their car something assaulty or racist, a powerful, retractable leash that I have no control over can snaps me back to them instantly, mid-smile.</p> <p>The 40 continuous minutes of Mike Posner, 33 mental images of the Fauves, the 12 kind and loving text messages you sent—they can't protect me anymore. Like feathers to the wind, the earth reinherits them. I can pick them up when the leash loosens, when the neck heals, but I am more tired.</p> <p>So, dear friends, know this. When it seems like what I'm saying is heavy, that I'm being negative, that I never seem to stop fighting, or that I won't stay in situations that you didn't see anything wrong with, it's because of this.</p> <p>I have worked so incredibly hard for so much, but <em>especially</em> in a quest to have and to hold my feathers of joy—walking against the wind—whitened knuckles. When you tell me to be more positive, it demonstrates that you cannot perceive the metric tonnes of positivity it took me to get exactly where I am.</p> <p>So if you can't find room in your heart or in your mind to be curious about that, that's fine. But all I ask from you:</p> <p>Let me revel in the revelry, let me laugh at the quiet parts, let me find whatever narrow outlets that I can to plug in and to recharge.</p> <p>And it's not just me. We might not understand each other. But that doesn't mean we can't let each other have room to understand ourselves.</p> <p>We should let people love each other, whomever that is, however that is. We should let people like things, so long as those things are not foundationally rooted in hate and harm. We should let people indulge in dessert before lunch and breakfast for dinner, making out under mountains and monuments, and dusk-til-dawn video game sessions—we should let people enjoy things—*especially, please—*for those of us for whom seeking and retaining joy is so fleeting.</p> <blockquote> <p>I wrote this post to the stunning album <a href="https://open.spotify.com/album/4Ud6qdjOiGsrryFeZOVmkT"><em>A Real Good Kid</em></a> by Mike Posner. Worth a listen <em>only</em> if you have 40 minutes to listen straight through.</p> </blockquote> Twin Flame 2019-07-25T06:41:23Z https://www.tatianamac.com/posts/twin-flames/ <p>You flew onto the train with your bright blonde hair and even brighter blue eyes. The only free seat, it seemed, was the one next to me and I couldn’t thank fate more. You held me—engaged me—without the proposal—in a way I’d not ever know again until maybe now?</p> <p>And under other circumstances I should have and would have hated the way you arrived, disheveled, somewhat charmed that the entire class waited for you (as if we had a choice). It only took a few hours for my hate of your charm to be charmed by your love. When everyone else asked questions to posture, you asked questions to postulate. You breathed a life into my own city. It’s as though the brightness of your hair and eyes were a helpless explosion of the brightness within. Your mind and heart could not help but glow through the illumination of your head and the radiance of your gaze.</p> <p>And while we managed to transcend the entire breadth of all human time to be friends, our romantic timing seemed like it could not be matched across multiple universes. And clever, resilient, and persuasive as I could be, it was not a dimension even my strongest will could force.</p> <p>It was as though we were placed into the universe with the same gift to hold a light: We had been granted these gloves that made us capable of holding a scorching flame. And so we could revel in the pass; sharing war stories, but never granted the space and time needed to fall in love properly; at least not with each other.</p> <p>And so it left us, each, to carry the flame when the other did not. It gifted us the ability to fall so madly deeply in love with someone who could intrinsically understand, but never at the same time. We were relaying the race to love.</p> <p>When you last held it was outside my house. From the silence of your car you sent me two words, “I’m outside.” I was inside, but the wrong house in the wrong city, but in the right place in so many other ways—mad that I left just a few hours too early.</p> <p>It was in that empty box—green glow, cursor pulsing to reveal an unwritten 8-bit font, that we fleetingly held the baton together for a moment. And cruel, it was, Fate timing it so that we could exist in the same lifetime, make thousands of decisions to arrive in one place for the same four years, but yet, the Devil won in the details as he is wont to do. Accurate enough to know what could be, but vague enough so that we were never to have or to hold it. Our hearts became one just so they could break in full synchronisation.</p> <p>Fast forward: you were thousands of miles away from me, and I you, years of Facebook updates defunct, millions of minutes (I think; I hadn’t done the math but know you would) away from our last phone call, where I slipped that I lived with someone else. It didn’t matter to you much who it was, only that it wasn’t you. And it wasn’t in anything you said, really, but in the way your breath changed. When you inhaled, I handed you the baton.</p> <p>And now, over a decade later, I feel like we’ve found each other again. This round, your enthusiasm for politics and the environment manifests itself in other ways. But your inquisitive and gentle questions, your deeply addictive intensity, your enormously entropic heart, and your unspoken adoration carries itself anew. And the brightness; I wish I could turn down the brightness, so my eyes could adjust; so I could read you for longer.</p> <p>But I'm sure of little but I do know it’s not a relay, this time. In fact, I’m not sure we are running at all.</p> <p>And maybe because we aren’t running, it feels this time you are freer to express with words; I don’t find myself counting things unsaid and edited out in breaths.</p> <p>I wonder, watching, if this is that all over again. I wonder, waiting, if this is that the same lesson taught by this teacher. I wonder, wounded, how I handle that this time around.</p> Check, m8. Tech, h8. 2019-08-11T01:16:32Z https://www.tatianamac.com/posts/checkmate/ <p>I have been unemployed since September 2017. I don't call it that, you see, because it would worry my mom and I weirdly feel guilty about filing for unemployment, even though I fit the criteria.</p> <p>And while I am technically unemployed, I have managed to work a lot. I've contributed to open source projects, launched two of my own, and become a sponsored developer. I have helped massive Fortune 100 companies make more money, by improving and building upon their design systems and by concepting coherent campaigns from abstract technical concepts. Basically I can show you the stuff I don't get paid for, and can't show you the stuff I did. Neither can my bank account.</p> <p>I've applied for hundreds of jobs, interviewed at dozens of companies, and shortlisted for onsites at all your favourite darlings in the Bay. I've been rejected for all your &quot;Formerly @company&quot; before you launched your own, which you won't interview me for because you haven't hit your quota of first-five white dudes with four-letter names. I want to be sorry about that sarcastic and sardonic soliloquy. But is it still sarcasm when you follow through?</p> <p>I told you your interview process was abusive, and yet, you responded with requests for me to interview. While I love a well-crafted irony, I'm afraid that I must break the fourth wall to tell you that I'm officially no longer starting new interviews anymore. Not for roles, at least. I love being on podcasts, though, so I can work on perfecting my nuanced pronunciations, rasps.</p> <p>I wondered if maybe it was me or something I said or did?</p> <p>I contain multitudes, but so many of them don't fit into that little LinkedIn quip that's either your Role at Company or your abstracted identities reduced to 2-3 words. Designer. Writer. Speaker. And if you're proud of where you work and/or if you're drinking the KoolAid you're the former, and if you're not or you're unemployed like me, you're the latter. And then once you've climbed the ladder at the former, you can then safely return to the latter.</p> <p>I've made you LOL and RT with shitposts about JS, CSS, HTML, YAML, and HAML in the thousand. I've made you unfollow me in the dozens with two words, 11 letters that isn't a slur, but because you hate being identified that way, you'll tell me it is. But now you're kinda mad I won't say what it is, right? Even though you don't want me to say it.</p> <p>I write quite a bit of code and make things with grids and so much of it is display: hid. Cuz. You tell me what I make isn't real because it's experimental and not in real production so can you blame me as I leave it caged in staging? As my real good mate (who legit is never late to check, your hate, mate) would say, the C in CSS stands for Corporate Cogs. And when I leave the thought-I-was-safe-here-but-wasn't box-shadows, I get told by the Third-wave coffee-sipping Ranks of you that I write isn't real because it's not functional or even object-oriented (but it's not like you don't objectify object-oriented languages, too, bro). It's just markup, you tell me, but I'd really like to invite you to sit on that element of yours. It's not my fault that <code>&lt;divs&gt;</code> taped with aria-roles and computer-generated classes are sharper than soft sweet semantic <code>&lt;buttons&gt;</code>, bud. Just kidding, I know your name is Chad and the reason you don't have time to write semantic markup is because you're busy anonymously wheeling and dealing in hate on 8chan with your Klan.</p> <p>I'm not really worried about Chad because he's the lad we've always had. Meet Becky and her '90s-monikered Friends of poorly-seasoned yet still salty serf and TERFs that fret more about me saying the &quot;N-word&quot; than Chad rapping the n-word along to Chris Brown, but like, I wanna know, you girls read that new Brené Brown? Purportedly I'm being <code>&lt;div&gt;</code>-isive.</p> <p>And you'll stay out of my unecessary politics by seeing both row and reverse-row and yet dive deep into right field to the rescue when some of you make—what is it?—diving gestures?—on conference stages and in documentation pages and in mocked pronouns and it's fine until they're in town marching with their boys, proud.</p> <p>But this canary had been racking up a storm with her fellow birds, but probably she's gonna spend less time crafting in coughing fits and instead more time smashing commits. Her wings are sore from carrying this ethical load (down the mine and assuring you she's fine, and floating the column-raft for dafts) so instead she's gonna be JAMStacking code or trying out Node. Maybe occassionally leaving some treasures for funny bunnies?</p> <p>See you in ten or twenty or twenty or thirty or so out there on The DaVinci CodePen, then!</p> Friendship, though. 2019-09-02T02:04:23Z https://www.tatianamac.com/posts/friends/ <p>This week changed my life. I left this week without more than 1-2 hours of sleep a night, a voided career future, and far fewer friends. I feel tired in an existential way. It's like someone forgot to plug in my soul for three weeks, but I'm still forced to exist. I don't know how I'm going to deliver two more conference talks this week, but I know I will. Because if I got one thing out of this week, it's a strong sense of trust in self—that what doesn't kill me (makes me stronger).</p> <p>Being me this week felt approximately like walking through hundreds of people who each had different coloured forks and the only thing they could agree on is that they would stab me if I did something they didn't like. Except forks are words and people don't believe the scars. When you're walking through rows and rows of being forked (poor repos) you just want to get through it. And that's all I wanted. I wanted to get through this week with a modicum of my sense of self.</p> <p>When I thought my friends would help, they did not show up. Instead of shielding the forks, they ducked and asked everyone to stop. Guess what? People didn't stop. Twitter is not known for its ability to pull on the breaks.</p> <p>So here I am, being accosted to death by tiny messages of hate that scoop out a small part of my soul. Being me, I am fairly used to getting a few messages of hate every day. But not hundreds an hour. I had to go on blocking/muting/reporting rampages and it still didn't feel like enough.</p> <p>And here, everyone seems to have a strategy for how I could have done this better. &quot;Block everyone!&quot; &quot;Leave Twitter!&quot; &quot;Name names!&quot; &quot;DM feedback!&quot; And I just would like to, in my best Jonah Hill in Forgetting Sarah Marshall tell everyone to go fuck themselves. Unless any of you have been the centre of the same sort of targeted hate that I've experienced, I don't want to hear it. And even so, we're completely different people. It sometimes feels like the more followers you gain, the less human you become to them. You become a commodity to utilise, a caricature to judge, and an effigy against for them to burn their insecurities.</p> <p>I'm pretty resilient, and I have to say, this week almost won. All of this not only unfolded after my lowest low (getting rejected for the last job I'll ever apply for, ever, right before I went on stage), then giving one of the best talks that I feel I've given, followed by one guy who didn't like my talk spiralling into well, Reactgate.</p> <p>I did my fucking best this week. Maybe that wasn't enough for some people, but it's all I could do. I know I didn't do things perfectly. I know I've been a shit on the internet before. If I go a redo, I'd probably <em>kindly</em> decline doing it over again. But if I had to, I would probably do at least a few things differently. That's learning. And boy, have I learned a lot this week.</p> <p>And at my absolute lowest low, sitting on the ground of this forkfest, were a small group of people I did not expect to be as kind as they were. In fact, they were kinder than anyone's been to me in fucking years. They both cared for me in tangible ways (making sure I was housed and fed—and loved, really) and in intangible ways, ensuring that my work would not fall into the ether, making it all for not. Instead of running or evading, they figured out how to magnetise some of the forks and hate away from me.</p> <p>I don't expect any kindness at this level like this from people anymore. Of course my best friends are excluded from this, but for the most part, I don't have a lot of friends. I recognise: It's hard to when you call out ableism, anti-trans, anti-queer, racist things. Turns out, people don't like being called out. Compound my ethos with the challenge of finding new people who haven't completely nucleated by now, and it leaves me without many people in my life.</p> <p>And I think that I'm most upset at myself for not seeing warning signs that friendships were no longer working for me. And as much as I want to stand firm by my ethos, that part of my existence resistance is <em>tired</em> after a week like this. I'm weak and grieving the loss of people who I cared for immensely. It's hard to say goodbye to all the good. But I have to. I cannot stand by people who don't believe my lived experiences, who actively gaslight my feelings, and who choose nice people who will maintain civil status quo. And the most fucked up part is that I feel some remorse for not having taught them better. Even though that's not my fucking job. You're not my friends, not my social justice students. And besides, you don't even want to learn. Teach you once, fool on you. Teach you twice, fool on me.</p> <p>And during this grieving, I'm learning to (very carefully, cautiously) celebrate the birth of new ones. I'm so, so, so grateful for people who have—through actions—proven to me that they will Show Up and that in doing so, I can still be my authentic self in <strong>all spaces</strong> and be completely serious and silly and allow this fiercely independent girl to let someone help her, even if it's just getting water, picking food, carrying her bags, or just making her feel safe to cry for a minute.</p> <p>I wasn't sure I was going to be able to finish this week. I mean that in the way I mean it. And that African proverb really is true: If you want to go fast, go alone. If you want to go far, go together. I didn't have a choice, it seemed before this week, to go together. At least now I do.</p> The Shitpost Slowdown 2019-11-22T17:32:11Z https://www.tatianamac.com/posts/shitposts/ <p>I was showing someone my old math notes to someone and they said to me, &quot;how did you write so small?&quot; I responded, &quot;a small pen.&quot;</p> <p>I guess you could say this is a fair sense of my sense of humour. In essence, this joke is exactly my shitpost style.</p> <p>I came across some old tweets that I wrote earlier this year. As my good friend says, they were big yikes. I was learning my shitpost style and hating on things just to hate on them. Looking back, many of those shitposts were just shitty. It might have gotten a laugh from a few internet buds, but at what cost?</p> <p>Many fans of comedy will say that &quot;politically correct&quot; culture is killing humour. I think that it's a way to learn to be more clever. If your fun is rooted in mocking someone else, directly or indirectly, someone otherwise less powerful than you, you're just a bully. You've not evolved past a third grade schoolyard.</p> <p>When I go to write something now intended for laughs, I consider more thoughtfully and carefully what I want out of it. I ask myself:</p> <ul> <li>What or who is the target of this joke?</li> <li>Will there be inadvertant victims of this joke?</li> <li>Is the target of the joke systemically oppressed? <ul> <li>If human, do I possess systemic or relative power or privilege over this individual or group?</li> <li>Am I mocking them, or their oppression?</li> <li>If a tool or product, how might I hurt the people who worked hard to create it and use it?</li> <li>Am I passive aggressively masking feedback in a less meaningful, less direct, and harmful way? Do I know or could I get a hold of someone to whom I could give this feedback directly to?</li> <li>Does my joke deincentivise progress that would otherwise nullify my joke?</li> </ul> </li> <li>If this goes viral, will I be willing and able to defend it?</li> </ul> <p>For example, I used to make fun of React and React developers. When making fun of how React is all white dudes, who I intended to target was the bigoted and racist white dudes who think that women don't know how to code. In the crossfires, I managed to erase anyone who was <em>not</em> that—maybe the only Black woman React developer on her all-white/all-male team; maybe the gender-non-conforming first-generation child of immigrants React developer whose the first to earn a six-figure salary.</p> <p>I was literally hurting the very people that I'm fighting to protect in centring a bunch of dull-de-sacs who don't really care about my joke because they don't follow brown queer women anyway.</p> <p>Making fun of the framework itself is another thing, sure, but will that incite meaningful change? Like, if the joke is that React ships a forktonne of unnecessary JS or that it's inaccessible by default, will some snarky comment get the React Core team to fix it? What do I really want out of this? And how could I accomplish it using less energy for myself in a more direct way?</p> <p>Furthermore, will my snarky comment about React's inextricability to Facebook somehow extricate them? No.</p> <p>And in anticipatory response, to be perfectly clear, I am not defending React, Facebook, dull-de-sac racists, or taking back any of the things I did earlier this year. Everything I did was defencible and I regret none of it. And at the same time, what I <em>am</em> doing is welcoming some introspection about the ancillary ways I once tried to get my message across.</p> <p>Part of this introspection is growing up, I guess. It's also because in looking back at all that happened to me, other people's shitty shitposts—people on &quot;all sides&quot;—caused me immense and irreversible harm to me and others earlier this year. I see that the people who wrote many of those shitposts carry on writing more harmful shitposts. I can't change them, nor do I desire to, but I sure as hell don't want to do that.</p> <p>As I continue to gain terrifying visibility, and because of the identity I possess in this world, I choose to be intentional about what I broadcast. I will always live as authentically to myself as possible. I will never sacrifice who I am for others. However, I can maintain individuality while recognising that as I gain more followers, influence, and power, what I do might cross many people's paths. Within that group could be people who admire my work or my message, or people whom I might already or will care about tremendously. That's what I learned from #Reactgate.</p> <p>It might sound like a heavy burden to examine my actions so carefully but honestly? Society already forces me to do that by design anyway. Now, I'm just learning to make sure that I monitor my actions to protect myself rather than systems of oppression.</p> <p>What it looks like now: I save a lot more drafts in my Twitter. I post less. I share some of the things I wanna say to close friends. I slow myself down. I take more time to consider the impact of my actions. I think about how wildly the fire can rage before I light the match.</p> <p>As I get older and more tired and as my meatsack deteriorates, I work to conserve energy. I think about the energy it takes for me to light the match at all. If I truly hate something, whether it be a tool or a person who is a tool, I ask if it's worth my energy to call attention to this. I ask myself it is worth sinking myself into a pit of hate for a moment—as someone who experiences depression, this is not something I am wont to do. I ask myself: Instead of using this match to burn someone undeserving down, could I instead use it to light the way for someone who deserves it?</p> Beginner's Guide to Eleventy [Part I] 2020-04-02T16:09:03Z https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/ <h2 id="intro-to-the-series" tabindex="-1">Intro to the Series <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#intro-to-the-series">📌</a></h2> <p>I won't lie. When I first installed a static site generator (SSG), I was pleased with how quickly it installed. However, my immediate success was short lived. Something something, beginner's luck.</p> <p>Even though I was comfortable working in design and templating systems (having built many WordPress sites before) and competent in front-front-end development, I still wasn't clear on a lot. I couldn't understand how pages were rendered, where assets and data were stored, and really, how this was saving me any time at all?</p> <p>My learning curve was steep.</p> <p>Like any good developer, though, I hate myself, so I stuck with it. Bit by bit, I learned the power behind the simplicity, flexibility, and reproducibility.</p> <p>My hope with this guide is to remove barriers, particularly for designers/developers who:</p> <ul> <li>are limited by What-You-See-Is-What-You-Get (WYSIWYG) tools like Squarespace;</li> <li>want the efficiencies of a content management system (CMS);</li> <li>possess <em>some</em> competency in front-end languages (HTML, CSS, JS); and/or</li> <li>don't understand the basic setup and infrastructure of SSGs.</li> </ul> <p>To remove barriers to entry, we must provide adequate context. I will break this guide into a multi-part series:</p> <ul> <li><strong>Part I:</strong> What is a static site generator? 👈🏽 You are here</li> <li><strong>Part II:</strong> <a href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-partii">Installation</a></li> <li><strong>Part III:</strong> Structure/Basic Customisation (coming soon)</li> <li><strong>Part IV</strong>: Advanced Customisation (coming soon)</li> </ul> <p>In general, I think our industry fears overexplaining concepts. We tend to presume people have skills that they don't always have and leave a lot of helpful context or explanation unsaid. After &quot;hello world&quot; examples, we tend to optimise our content for superusers. Beginners are sent into the world with a very limited foundation and asked to make a fairly large leap to intermediate on their own. By writing more beginner-through-intermediate tutorials like this, I hope to provide a solid foundation by answering unanswered questions and escalating examples as we go.</p> <p>Throughout this tutorial, I will simplify some things a little bit (like in diagrams), which means you could &quot;well actually technically&quot; me and be right. In other areas I will be intentionally verbose, which means I might explain concepts you already know. Congratulations. Here is a trophy. 🏆</p> <h2 id="part-i" tabindex="-1">Part I <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#part-i">📌</a></h2> <p>Before we dive into the tactical how-to (which you will find in Part II, once I write it), I want to provide context for static site generators (SSG) and how they fit into the web landscape. I'll break down what the fork an SSG even is (not a Star Trek series as I once thought), how SSGs compare to other tools and frameworks, costs/benefits to this choice, and lastly, why I choose <a href="https://www.11ty.dev/">Eleventy</a> for my own site.</p> <h2 id="the-landscape" tabindex="-1">The Landscape <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#the-landscape">📌</a></h2> <p>Generally speaking, there are two types of sites:</p> <ul> <li>static sites and</li> <li>dynamic sites.</li> </ul> <p>SSG-generated sites are technically a subcategory of static sites, but they're a <em>special</em> type. More on that later. Dynamic sites include sites built atop a framework, like WordPress, Drupal, Joomla.</p> <h3 id="static-sites" tabindex="-1">Static Sites <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#static-sites">📌</a></h3> <p>Static sites have static content. Static sites store the information (or assets) needed to serve the site (HTML, images, scripts) on a server (usually whomever is paid to &quot;host&quot; the site).</p> <ol> <li>When users access a site in their browser, the browser requests files from the web server.</li> <li>The web server gathers the files you need for the specific page you requested from a finite list of files that it has stored.</li> <li>The web server sends the files to your browser.</li> <li>Your browser renders the files and presents you with the website.</li> </ol> <p>Theoretically, everyone should receive the same information (even if it ends up looking slightly different).</p> <p><img src="https://www.tatianamac.com/assets/img/eleventy-i-static.jpg" alt="Diagram of static sites where all elements are from Super Mario to illustrate how static sites are generated. Computer and browser (browser logo is Bowser's eye and eyebrow done in Firefox/Edge style) sends a request (Bullet Bill) to the web server (Thomp), which then sends back static files (Koopas dresed as HTML, CSS, and JS files)." /></p> <p>The <a href="http://info.cern.ch/hypertext/WWW/TheProject.html">first website launched in 1990</a> by Sir Tim Berners-Lee was a static site with just unstyled HTML.</p> <h4 id="static-site-examples" tabindex="-1">Static Site Examples <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#static-site-examples">📌</a></h4> <p>Static sites are most any site when we think of &quot;basic&quot; or &quot;hard-coded sites&quot; (though those are not the only ways to generate static sites; more on that later).</p> <p>I wanted to add a list here of static sites built by hand (without the assistance a static site generator, framework, or platform). If you come across any good examples, please <a href="https://www.twitter.com/TatianaTMac">reach out on Twitter</a> so I may add them!</p> <h4 id="static-site-pros" tabindex="-1">Static Site Pros <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#static-site-pros">📌</a></h4> <ul> <li><strong>Fast</strong>: Static sites are predictable. Because there is a finite list of requests you can make (get me this page or that page), there isn't any processing that happens on the server side. The more requests you can make as a user that require the website do something, or client-side server requests, slow down a website, particularly when they become complex. Client-side server requests things like when you search or filter a website, or log in.</li> <li><strong>Lean</strong>: Static sites aren't as resource-intensive (their file sizes tend to be relatively small). If you have an unexpected spike in traffic to your site, they are usually able to handle the influx just fine (as long as their web hosts are able to keep up).</li> <li><strong>Secure:</strong> As there are no entry points (you can't input or send information to a static site like you can in dynamic sites), static sites are much more secure when used for a comparable dynamic site.</li> <li><strong>Economic Hosting:</strong> You're usually just paying for the hosting of your static assets, which is inexpensive compared to dynamic sites that require maintaining a service (like Squarespace) and a database (which involves things like mySQL).</li> <li><strong>Controllable:</strong> With a static site, whoever creates it has a lot more relative control over the source files. Since the source files and the rendered files are the same, you know how the site will be generated.</li> </ul> <h4 id="static-site-cons" tabindex="-1">Static Site Cons <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#static-site-cons">📌</a></h4> <blockquote> <p>Note that there are workarounds for many of these cons. For scope of article and brevity, <strong>I've left out the tools that address/serve some of these cons.</strong> I know they exist. Some of them will be addressed in the SSG section, so hold your commenting horses (ya neigh-sayers), and note that I can't talk about everything in this one article.</p> </blockquote> <ul> <li><strong>Limited</strong>: Static sites can't do more complex things that we take for granted, like buying things online, getting weather for our location, etc.</li> <li><strong>Gatekept:</strong> Static sites require knowledge of HTML/CSS/JS to create and to update, turning developers into either content overlords or servants (depending on your org structure 😂). If you don't have these skills in house, you'll have to source them. Hand-coding websites is time-consuming, and thus, can be costly.</li> <li><strong>Non-dynamic:</strong> Everyone receives the same content, regardless of things like geolocation, time of day, etc. (Here is one of those areas where workarounds can apply. Did you stop yourself from explaining to me? Here, have another trophy. 🏆 Don't forget to unwind your undies.)</li> <li><strong>Difficult to scale:</strong> Depending on how you built the site, updating one global element (like a navigation) could mean updating hundreds/thousands of pages, which is impractical, resource-intensive, error-prone, and... boring AF.</li> <li><strong>Inconsistent:</strong> Consistency is reliant on the people building and maintaining the site. If they are not meticulous and/or lack adequate resources and quality assurance infrastructure, the site will likely lack polish.</li> <li><strong>Inputless</strong>: No log-ins (accounts), inputs (forms), or user-generated content.</li> <li><strong>Not Version-Controlled:</strong> While third-party services can help, if you do not set up such services, overwriting your files directly on the server means that they're overwritten forever. Reverting will require that you maintain some version control on the creator side.</li> </ul> <h3 id="dynamic-sites" tabindex="-1">Dynamic Sites <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#dynamic-sites">📌</a></h3> <p>While making a bunch of static sites accessible to thousands of users was a huge invention and progress for the information age, it wasn't enough. As the amount of available content increased, the user experience became quite monotonous, impractical, and undiscoverable.</p> <p>Dynamic sites were introduced in 1993 with the advent of the Common Gateway Interface (CGI). The CGI is a set of standards to define how information is exchanged between servers.</p> <p>(CGI also, not to be confused with the other, more well-known Computer Generated Imagery, which is what makes Michael Bay movies <em>pop</em>. Fun fact: CGI's logo resembles the album cover for Pink Floyd's <em>Dark Side of the Moon</em>. But I disambiguate.)</p> <p>In the barest terms, CGI allowed for servers to do more than just receive requests and respond to requests as input/output. CGIs allowed the server <strong>to process</strong> the request, which adds a layer of complexity to how websites are served to you via browser.</p> <p>In a dynamic site:</p> <ol> <li>When users access a site in their browser, the browser requests files from the server. The request could include a search query, a form submission, or even implicit data (like your geolocation).</li> <li>Using the criteria set out by the CGI, the web server talks to another server (the application server) that processes all the inputs and makes a list of what it needs.</li> <li>The application server will talk to another server, the database, to gather the information it needs, say, like, your order history or all the possible products. The application server translates this all into a language that the web server understands, and then sends it to the web server.</li> <li>The web server sends the generated files to your browser.</li> <li>Your browser renders the files and presents you with the website.</li> </ol> <p><img src="https://www.tatianamac.com/assets/img/eleventy-i-dynamic.jpg" alt="Diagram of static sites where all elements are from Super Mario to illustrate how static sites are generated. Computer and browser (browser logo is Bowser's eye and eyebrow done in Firefox/Edge style) sends a request (Bullet Bill) to the web server (Thomp), which communicates with app server (question mark block), which then communicates with database (pipe) then sends back static files (Koopas dresed as HTML, CSS, and JS files)." /></p> <p>Dynamic sites opened up a whole world of the internet that was not possible before, customising the experience, introducing inextricable complexity in the process.</p> <blockquote> <p>One could argue that applications and programs like Dreamweaver and FrontPage were the first static site generators that used a WYSIWYG editor. For brevity, I'm leaving that part of the history out.</p> </blockquote> <h4 id="dynamic-site-examples" tabindex="-1">Dynamic Site Examples <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#dynamic-site-examples">📌</a></h4> <p>Dynamic sites are <em>everything else</em>. Any site that serves you a website from a database, an Application Programming Interface (API), or an experience based on input is a dynamic site. Common features on dynamic sites include shopping carts, search or content queries, location data, user data, and so on. Most &quot;complex&quot; sites tend to be dynamic; think Amazon, Facebook, Pinterest. (Most websites that are also a product also tend to be dynamic.)</p> <p>Sites that are generated by CMSes like WordPress, Squarespace, and Shopify are also dynamic.</p> <h4 id="dynamic-site-pros" tabindex="-1">Dynamic Site Pros <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#dynamic-site-pros">📌</a></h4> <ul> <li><strong>Dynamic:</strong> As the name suggests, the power comes in generating content based on specific requests or data gathered (some of that data is gathered duplicitously and/or without consent, but a topic for another day).</li> <li><strong>Powerful:</strong> Dynamic sites allow for integration of CMSes, eCommerce platforms, and more complexity in general. Dynamic sites take the web from just a content storage platform, to a living, breathing information hub that can serve us content based on variables. That's pretty cool.</li> <li><strong>No-/Low-Code:</strong> The addition of CMSes and eCommerce platforms with dashboards means that code no longer becomes a requirement to create a site, lowering the barrier to entry. The cost of maintenance no longer requires code, but only familiarity with the editor interface (dashboard), which is quite a bit more economically viable to learn.</li> <li><strong>Out-of-Box Set-up:</strong> With platform integration, installing and launching a site becomes a lot faster. Products like Squarespace and Shopify boast the time to launch as a feature and earn their revenue through hosting the interface and your site.</li> <li><strong>Scalable</strong>: Adding more data or content already has a workflow and a place to store it (for example, you can import a thousand posts from another blogging platform or user data in a comma-separated values (CSV) file instead of manually entering it).</li> <li><strong>Consistent:</strong> As things like blog posts require an infrastructure, you can count each post appearing consistently based on the rules you set out.</li> <li><strong>Search Engine Optimisation (SEO)-Focused</strong>: Most CMSes are tailored to &quot;business needs&quot;, which means that out of box, they tend to reveal ways to improve your SEO.</li> <li><strong>Version-Controlled</strong>: Most platforms integrate some sort of version controlling, so content can be reversed if an error is made.</li> </ul> <h4 id="dynamic-site-cons" tabindex="-1">Dynamic Site Cons <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#dynamic-site-cons">📌</a></h4> <blockquote> <p>Workarounds exist for all of these cons (and where appropriate, I've noted them) and some of them will be addressed in the SSG section, so hold your commenting horses.</p> </blockquote> <ul> <li><strong>Costly</strong>: Convenience comes at a price. While WordPress itself is free, themes and other add-ons can start to add up. Monthly paid services like Squarespace and Shopify can be cost-prohibitive to many people, and become exponentially costly as you want to add features for growth. Developers who specialise in these frameworks can also charge a premium as their skills tend to be niche.</li> <li><strong>Resource-Intensive:</strong> Every time a WordPress site is loaded, it has to call the server and ask for any scripts, plug-in libraries, etc. The time it takes to load these scripts can be long and require a lot of bandwidth.</li> <li><strong>Server Requirements</strong>: To run WordPress, special servers like Apache or NGINX are required. As with all things, there is a cost associated with this, which typically gets passed down the chain. To locally run a WordPress site (so that you're not making the edits live on the web), you need to do some manipulation to your machine, which can be confusing.</li> <li><strong>Slow</strong>: All of the inputs and dynamic calls result in having to wait for the server to do its job. We all know what that's like; when you're waiting for a colleague to finish their task before you can finish yours. Any delays in speed result in disengaged/unhappy users and thus, negatively impacted SEO measurements.</li> <li><strong>Cache-Difficult:</strong> Caching provides major benefits to sites. Caching basically stores a copy of the site somewhere else (whether that be on your computer in a temporary file) or on another server (like a content delivery network (CDN)). Doing so takes one load off of the main server you're accessing. However, caching becomes very complex when the server isn't <strong>quite</strong> sure even which HTML or images it should serve you because the variables are too vast (Are you logged in? Did you change a setting? Is there something in your cart? Did someone comment since you last logged in? Are you cute? <em>How</em> cute?)</li> <li><strong>Inaccessible:</strong> <ul> <li>Heavy sites mean that users who rely on phone data (and pay per megabyte) are being economically taxed for accessing your site. In regions and contexts with systematically slower internet speeds, your users will likely bounce if your site is too slow. Remember, this is your fault for building a site maximised for 5G internet, not your user's inability to purchase an iPhone 14S.</li> <li>While a static site does not guarantee accessibility and you <em>can</em> make dynamic sites accessible, dynamic sites make out-of-box accessibility far more complex. A few static HTML pages will likely be fairly accessible as there's not much to them and HTML is fairly generous. However, the accessibility of a dynamic site becomes reliant on the accessibility of a platform on which it's built. The tools used to build the site (like the dash) need to be accessible as does the site itself. Any layer of complication increases the dimension of accessibility exponentially.</li> </ul> </li> <li><strong>Insecure:</strong> Dynamic sites have to allow for input, which means that they open the doors for bugs and viruses. <a href="https://www.wpwhitesecurity.com/statistics-70-percent-wordpress-installations-vulnerable/">Something like 70-90% of WordPress sites</a> are vulnerable to attacks. So, while they boast the statistic of being 2/3 of the web (why not just call it 69% tho), that means that over half of the web is insecure—like a middle school.</li> <li><strong>Instable</strong>: Unexpected spikes in traffic can overload the server with requests and break the site. We've seen this with news sites, high-heat commerce drops (think sneakerhead or video games), intensive retail periods like Black Friday/Cyber Monday, and other windows of extreme traffic.</li> <li><strong>Monotonous</strong>: Many sites can start to look the same (for example in Portland, there are at least a dozen coffee roasters who use the same Squarespace theme—those nuanced beans deserve better, dammit) as the out-of-box options tend to be limited.</li> </ul> <h3 id="casting-extremes" tabindex="-1">Casting Extremes <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#casting-extremes">📌</a></h3> <p>As you can see, the landscape casts two extremes. On one end, you have something lean and agile, but fairly rigid. On the other end, you can have something brilliantly dynamic, but resource-intensive.</p> <p>This is not a decision you should make based on what you, the developer, like the most. It needs to be driven by myriad other factors, like who will ultimately be responsible for maintaining the site, what equitably provides as many users as possible with the bare need, and what will scale and maintain best over time. In short, we should be looking for resiliency over efficiency. Sometimes your hand will be forced; the decision for how to build a news or airline site, which has a lot of dynamic requirements, is a bit more obvious because you lack choice. You have to make it dynamic.</p> <p>But what about a portfolio site for developer who wants a blog, but doesn't want to have to manually write all the HTML and copy and paste templates each time, nor do they want to feel limited by WordPress (or denying their abject fear of writing PHP and being denied entry into Developer Heaven)?</p> <p>Or, what about a brochure site for a restaurant who wants to update their menu through a WYSIWYG but doesn't want to pay for the overhead of Squarespace?</p> <p>Enter:</p> <h3 id="static-site-generator-generated-sites*" tabindex="-1">Static Site Generator-generated Sites* <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#static-site-generator-generated-sites*">📌</a></h3> <blockquote> <p>*It’s a little confusing because to be accurate means we have to be pedantic, hence the redundancy of Generator-generated. For purposes of clarity, this is how I differentiated the two; please note the difference:<br /> <strong>SSGs:</strong> Static Site Generators. The thing that generates the site.<br /> <strong>SSG sites:</strong> Static Site Generator-generated Sites. The sites that are generated.<br /> Please know I thought very long and hard about this very trivial/non-trivial issue.</p> </blockquote> <p>Static site generator-generated sites (SSG sites) provide a happy medium between the static sites and dynamic sites. Technically speaking, a site built from an SSG is a still static site.</p> <p>SSG sites follow the same build process as static sites from above.</p> <ol> <li>When users access a site in their browser, the browser requests files from the web server.</li> <li>The web server gathers the files you need for the specific page you requested from a finite list of files that it has stored.</li> <li>The web server sends the files to your browser.<br /> Your browser renders the files and presents you with the website.</li> </ol> <p>Here there’s an added step that happens somewhat separately:</p> <p>A. The person creating the site generates dynamic inputs, like markup language files, template files, data files, and assets.</p> <p>B. The SSGs essentially take the actions that would happen on the server-side (like building a post into an HTML file) and perform them before the site is deployed. The SSG takes the dynamic inputs and compiles it into HTML, CSS, and JavaScript—these are the static files that get uploaded to the file server. Hence, the site becomes static.</p> <p><img src="https://www.tatianamac.com/assets/img/eleventy-i-ssg.jpg" alt="Diagram of SSG sites where all elements are from Super Mario to illustrate how static sites are generated. Computer and browser (browser logo is Bowser's eye and eyebrow done in Firefox/Edge style) sends a request (Bullet Bill) to the web server (Thomp). Simultaneously, data/template files (Koopas as Markdown, JSON, and Nunjucks files) are sent to the static site generator (Magic Koopa) who sends generated static files (Koopas dressed as HTML, CSS, and JS files) back to the web server. The web server sends those files to the computer." /></p> <p>The benefit of this added step is that it adds some of the developer/creator benefits of dynamic sites (like, writing content in Markdown and reusing templates) without as many of the dynamic cons (like, usually having to load an entire framework) while maintaining the pros of static sites. A Best of Both Worlds™ (BOBW) if you ask me.</p> <p><strong>To be explicit:</strong> Neither the user nor the server perceives, typically, the difference between a hard-coded static site and a SSG-generated site. To them, they're both static sites. SSGs improve the <em>developer</em> experience. I would even argue it's <em>optimised</em> to a certain niche of developer experience.</p> <p>We have to admit that part of the rise of SSGs is that as developers, we are community-focused and want to be in-line with our peers. It would be dishonest, I think, to say that all of our motivation for anything (especially this) is ever purely user-motivated.</p> <h4 id="ssg-site-examples" tabindex="-1">SSG Site Examples <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#ssg-site-examples">📌</a></h4> <p>New SSGs are popping up every day as this modern approach to tooling becomes more widely adopted. Popular static site generators (and their frameworks/languages) include: <a href="https://gohugo.io/">Hugo</a> (Go), <a href="https://www.gatsbyjs.org/">Gatsby</a>, <a href="https://nextjs.org/">Next.js</a>, <a href="https://github.com/react-static/react-static/tree/master/">React Static</a> (React); <a href="https://nuxtjs.org/">NuxtJS</a> (Vue.js); <a href="https://middlemanapp.com/">Middleman</a>, <a href="https://jekyllrb.com/">Jekyll</a> (Ruby); <a href="https://sapper.svelte.dev/">Sapper</a> (Svelte); and my personal favourite, <a href="https://11ty.io/">Eleventy</a> (Node.js).</p> <p>Examples of <em>sites</em> made on these <em>SSGs</em> can be found on each of those links. (See how the naming convention is confusing?!)</p> <h4 id="aside%3A-on-jamstack-and-humans" tabindex="-1">Aside: On JAMstack and Humans <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#aside%3A-on-jamstack-and-humans">📌</a></h4> <p>In the context of SSGs, you may have heard of JAMstack. JAMstack, which stands for JavaScript, APIs, and Markup, is not a three-tiered peanut butter and jelly sandwich. It is a movement, approach, workflow that was born out of developers wanting to maintain speed and security of static sites while adding some of the richness and tooling of dynamic sites. JAMstack also carries an ethic of performance-driven, low-cost, improved developer experience, and scalability. The hope, I think, is to bring many of the traditionally &quot;back-end&quot; capabilities like database manipulation into the realm of possibility for &quot;front-end&quot; developers.</p> <p>How I like to think of the JAMstack approach is that everything in the world exists on a spectrum. While the line between static and dynamic was once more hard-drawn, the distinction between what constitutes static and dynamic is now more of a continuum. JAMstack further blurs that line or builds that bridge (depending on whether you think this is a good or bad thing).</p> <p>Simultaneously, for us humans of the web, that means that the line between front-end and back-end development becomes less clear. Certain aspects of back-end development that were once inaccessible to front-end developers are becoming surfaced with movements like JAMstack and the tools they inspire.</p> <blockquote> <p>Not all SSGs are part of the JAMstack. The JAMstack is not just about SSGs. (Read more on <a href="https://jamstack.wtf/">JAMstackWTF</a>.)</p> </blockquote> <h4 id="ssg-site-pros" tabindex="-1">SSG Site Pros <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#ssg-site-pros">📌</a></h4> <ul> <li><strong>Developer-Focused:</strong> Hand-coding websites is a pain in the Lance Bass. It's fun to be artisanal for a second, but once you get into dozens (hundreds, thousands) of pages, it becomes frustrating and confusing. On the dynamic side, manipulating WordPress and Squarespace to do all you know is possible can be frustrating (I know that the folks who work on these teams work very hard to improve dev experience as it's a weak spot in most dynamic site generators).</li> <li><strong>Separation of Concerns</strong>: SSG sites maintain the separation of visual presentation and content. You can continue to write new content as Markdown files without manually applying styling to it as you would with a hand-coded static site.</li> <li><strong>Reusable</strong>: Global changes to templates (e.g., blog post template) and components (e.g., navigation) are made by editing one file instead of many.</li> <li><strong>Metadata</strong>: One of the most powerful aspects of SSGs is that it surfaces the metadata: the title of the page, published date, site taxonomy, hero image, etc, can be defined and changed without touching the templates themselves, reinforcing the separation of concerns. Metadata is surfaced in something called front matter, which allows the content maintainer to add and customised data to the literal <strong>front</strong> of their file. (I'll talk more about this and show examples when we dive into Eleventy's structure in part II.)</li> <li><strong>Lean</strong>: As with a static site, the delivered files are what they are. It takes up less room on the internet, which is minimalist and aligns with our designer ways (rerolls turtleneck collar).</li> <li><strong>Fast:</strong> Lessening the number of server requests means your site will be faster, which improves your SEO and user experience, providing better access to more users.</li> <li><strong>Economic</strong>: Most SSGs are free to set up.</li> <li><strong>Asset Management:</strong> On static sites, asset management is largely manual; you might run individual photos and CSS files through some processes. On dynamic sites, image handling is automated and quite dialed in by way of plug-ins and platform-wide support. Most SSGs include some sort of process for assets, including compiling, transpiling, minifying, and bundling assets. SSGs provide build processes for anything from photo management (serving appropriately sized images) to CSS minification (rewriting your CSS into what the browser needs to read rather than what's optimal for developers to read).</li> <li><strong>Build Customisation:</strong> Most SSGs allow you to manipulate how the build process happens. So, if you want to see the site refresh live as you make edits, that's usually possible. If you want to check for specific linting processes, that's possible too.</li> </ul> <h4 id="ssg-site-cons" tabindex="-1">SSG Site Cons <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#ssg-site-cons">📌</a></h4> <p>In addition to the cons from static sites, here are a few more SSG-specific limitations.</p> <ul> <li><strong>Complicated Setup</strong>: Atop needing to know the foundational HTML and CSS and some JS, you now need to also have an understanding of command-line interfaces (CLI) and package management to set up your environment. <strong>This is no small feat and creates a massive barrier to entry.</strong> Every SSG I've ever tried to set up has been confusing. I've learned that even the most competent developers can struggle with this initial step of the process.</li> <li><strong>Choice Overload</strong>: Modern development's embrace of SSGs means there are many SSG choices across many languages and language libraries. While this is generally a good thing, it can make it VERY confusing and intimidating if you don't already have a language loyalty. How do you pick which SSG when you don't know if you want to learn JS or Ruby or what?</li> <li><strong>Niche Skillset</strong>: <ul> <li>While WordPress and Drupal developers tend to be more abundant, developers who are versed in using SSGs tend to be fewer (partly because the application of the technology is relatively new, comparatively). You could find yourself using an SSG without someone to update it, which is a risk.</li> <li>Some developers become developers of a specific SSG, like &quot;Gatsby developers&quot;, which tethers their economic success to a specific framework. I <strong>personally</strong> think this can be risky. As each framework is nuanced, learning can pigeon-hole you if you're not careful (same problem as becoming a WordPress developer, for example).</li> </ul> </li> <li><strong>Limited</strong>: While some possibilities are possible (and increasingly so by way of movements like JAMstack), adding user-generated content or real-time-influenced data is still not really possible. The more complex your desires, the more you're going to have to hack the SSG to do what you want. This increases barriers to entry and instability.</li> <li><strong>Slow Build Times:</strong> As you're building everything pre-deploy, you have to rebuild the entire website. As you may well know, waiting for a SSG to load all of its npm packages is time-consuming. On top of that, if you have a large blog or asset-intensive website, you will have to wait for it to build when you're developing. It's a buzz kill (but better our dev team than millions of users...right? RIGHT.).</li> <li><strong>Gatekept</strong>: Without a CMS, you have to know how to write code to publish content. Most SSGs require you to know some sort of templating language, at minimum, like Markdown.</li> </ul> <h3 id="why-eleventy" tabindex="-1">Why Eleventy <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#why-eleventy">📌</a></h3> <p><s>As a developer advocate for Eleventy**,</s> I favour Eleventy for most smaller projects because the way it was built aligns with my personal developer ethos. I do not like serving the user a bunch of unnecessary JavaScript to serve what will inevitably be static content.</p> <p>Eleventy's mission seems to possess some similar biases to me. In the end, this is a huge factor in what we look for as developers, whether we admit it or not.</p> <p>(**Also so the creator, Zach, doesn't get mad at me, Eleventy doesn't actually have developer advocates and is a community-contributed and -funded project. If you find Eleventy helpful and can, <a href="https://opencollective.com/11ty">throw a few bucks at them</a>!</p> <h4 id="pros" tabindex="-1">Pros <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#pros">📌</a></h4> <ul> <li><strong>Performance-First:</strong> Eleventy is very lean. It doesn't take 30 minutes to build my Eleventy site.</li> <li><strong>Community-Driven:</strong> As much as possible, I try to use tools that have a supportive community around them.</li> <li><strong>Independent:</strong> I try to support projects that don't fund and/or evangelise multi-billionaire companies (though I possess no judgment around this because I think we all gotta make a living).</li> <li><strong>Language Agnostic:</strong> While Eleventy's functionality is written in Node.js, the templating is very flexible, accepting Markdown, HTML, JS, Nunjucks, or any hot mess combination of all of them if you thrive in chaos (which you can see that I do if you look at my own website source code, thank you very much.)</li> <li><strong>Fast Build Times</strong>: I hate waiting for my site to build as a developer. If I wanted to wait for the internet, I'd get dial-up again. Jokes aside, build time and delay can be a major downside of sites on massive dynamic frameworks. Luckily, Eleventy is so lean and most of the sites I choose to build on Eleventy are too. (It's important to note that any SSG built atop a framework, like NuxtJS (Vue.js) or Gatsby (React) means that you'll have to wait for those frameworks to build, which can take time.)</li> <li><strong>Friendship</strong>: I consider Zach a friend. I like to support my friends and what they build.</li> </ul> <h4 id="cons" tabindex="-1">Cons <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#cons">📌</a></h4> <ul> <li><strong>Limited Tooling</strong>: As Eleventy is small and community-driven (without massive corporate backing), it doesn't have as much tooling support as, say Gatsby. Whereas Gatsby has some pretty cool/sophisticated image handler, handling images in Eleventy is somewhat bare-bones.</li> <li><strong>Sparse Documentation:</strong> Again, because it's small and community-funded and -maintained, the documentation is sparse. I get the sense that because Eleventy was initially marketed as an alternative to Jekyll, much of the documentation presumes Jekyll (reminder, it's another SSG) familiarity and competency. I found the barrier to entry quite high for me post-install, even though I have a fairly solid grasp on development and templating.</li> <li><strong>Limited Tutorials and Examples</strong>: Some community-generated tutorials exist for Eleventy, but not to the extent of some of the larger SSG communities.</li> </ul> <p>To me, the pros outweigh the cons. Developers who work in and support Eleventy can help to improve the two cons. This is why I'm writing this series.</p> <blockquote> <p>Next (Part II): Learn how to install Eleventy (and, all the things you need to install in order to install Eleventy). <a href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-partii">Read Part II</a></p> </blockquote> <h4 id="thank-you" tabindex="-1">Thank You <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#thank-you">📌</a></h4> <p>Thank you to <a href="https://www.twitter.com/bitandbang">Tierney Cyren</a> and <a href="https://www.twitter.com/SwissWebMiss">Heidi Olsen</a> for their invaluable contributions as editors.</p> <h4 id="references" tabindex="-1">References <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#references">📌</a></h4> <p><a href="https://serverless.css-tricks.com/">CSS Tricks: The Power of Serverless</a><br /> <a href="https://www.11ty.dev/docs/">Eleventy Docs</a><br /> <a href="https://jamstack.org/">JAMstack.org</a><br /> <a href="https://www.keycdn.com/support/difference-between-static-and-dynamic">KeyCDN: Difference between Static and Dynamic Sites</a><br /> <a href="https://www.netlify.com/blog/2017/05/25/top-ten-static-site-generators-of-2017/">Netlify: Top Ten Static Site Generators of 2017</a><br /> <a href="https://www.sitepoint.com/7-reasons-use-static-site-generator/">Sitepoint: 7 Reasons to use a Static Site Generator</a><br /> <a href="https://bejamas.io/blog/wordpress-alternative/">Bejamas: Wordpress Alternative: The Pros and Cons of Static Site Generators</a></p> <h4 id="questions-and-corrections" tabindex="-1">Questions and Corrections <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti/#questions-and-corrections">📌</a></h4> <p>For questions, please <a href="https://www.twitter.com/TatianaTMac">reach out on Twitter</a>! I can't promise to answer all your questions, but I'll try my best!</p> <p>For corrections (typos, factual inaccuracies), please file a <a href="https://github.com/tatianamac/tm11ty/issues">GitHub issue</a>.</p> Our Ugly Middles 2020-04-02T16:09:03Z https://www.tatianamac.com/posts/dd-our-ugly-middles/ <p>Dear Developer,</p> <p>I want you to hug your ugly middle.</p> <p>No, I wasn't insulting your body. I want you to embrace <em>the concept</em> of the Ugly Middle. You might know it. The Ugly Middle is that part after the high of the Shiny New Thing has worn off and before the excitement of The End hits.</p> <p>In Corporate Work: The Ugly Middle is when the project is most likely to fail; where the aspirational criteria hit the reality of API limitations, when engineers have been pulled into too many directions, and when lofty and unclear leadership plans mean one too many pivots.</p> <p>In Personal Work: The Ugly Middle is when the project is also most likely to stall out; where the excitement of starting our own portfolio in a new framework has worn off when our big aspirations for customisation have hit the rubber of the Documentationless Road, where our enthusiasm has been met with our old friend, Imposter Syndrome, and we realise &quot;wow, copywriting is really hard.&quot;</p> <p>While The Ugly Middle is decidedly Not Fun, it can provide us with valuable lessons in resilience and acceptance and teach us how to stop the quest for perfection, particularly for the work we do for ourselves.</p> <h2 id="completion-is-arbitrary" tabindex="-1">Completion is Arbitrary <a class="direct-link" href="https://www.tatianamac.com/posts/dd-our-ugly-middles/#completion-is-arbitrary">📌</a></h2> <p>I think that chasing the high of completion is a fallable hunt. When is something really done? It shouldn't be, as it's likely that we've forgotten something. Usually, and unfortunately, that thing is probably accessibility- or performance-related (as evidenced by WebAim's <a href="https://webaim.org/projects/million/">The Majestic Millions 2020</a> update, where things got <em>worse.</em> I mean, we knew 2020 sucked more than 2019—here's how we made websites suck too! 🙃).</p> <h2 id="perfection-kills-progress" tabindex="-1">Perfection Kills Progress <a class="direct-link" href="https://www.tatianamac.com/posts/dd-our-ugly-middles/#perfection-kills-progress">📌</a></h2> <p>The longer we spend in the Ugly Middle, the more time we can iterate and improve. Searching for perfection does one of two things:</p> <ol> <li>We stop ourselves in our tracks from imposter syndrome, and never finish; or,</li> <li>We put out what we think is perfect and think we're done.</li> </ol> <p>Both are problematic, because both involve stopping (unintentional in one, intentional in the other). One incapacitates us from moving out of abject fear that we'll fail, the other arrogantly, perhaps, thinks that failure isn't a possibility.</p> <p>What if, we instead, recognised that failure is inevitability and one we can embrace. If we build the concept that we don't ever plan to stop, it gives us room to <strong>Err</strong>, to <strong>Forgive</strong> ourselves, and then to <strong>Fix</strong> it. The EFF This Cycle, we'll call it.</p> <p>Embracing this cycle allows us to constantly improve and move forward. The increments they may be small, until we realise that incremental progress is better than none. Slow and steady wins the race, the tortoise reminds us.</p> <p>Stop letting your fear of the ugly middle, driven by your impossible search for perfection, stop you from starting or continuing. To allow ourselves this, we must allow ourselves to ship things that we recognise will not be perfect. I recognise that some people will find this unacceptable.</p> <p>I dare those people to show me something that's perfect.</p> <p>Perfection, I humbly think, is nothing more than a standard set by whomever is in power. The entity in power might just be social structurally set (like, Western standards for beauty or cleanliness, as one example), but it's always there. Perfection for me is not the same as perfection for you. We're chasing the impossible.</p> <p>If we accept things at their Ugly Middle, and build in a mechanism for feedback and ways to improve, we're shifting our focus from the ethereal in the distance to the step immediately before us. I'd like to think the more we do that, the less imposter syndrome that we would have.</p> <h2 id="my-ugly-middle" tabindex="-1">My Ugly Middle <a class="direct-link" href="https://www.tatianamac.com/posts/dd-our-ugly-middles/#my-ugly-middle">📌</a></h2> <p>To eat my own dogfood or whatever (aside: I find that to be the most disgusting analogy—why are startups eating dogfood?), I want you to know that as much as I love this here personal website of mine, I know that there's a dumpster fire about to burn a house of cards down. The things I'd like to fix (which I should remember to migrate to GitHub issues, I digress):</p> <ul> <li>The accessibility isn't perfect. I know that accessibility wonks will run the same audits I run for clients on my site and be like &quot;gotcha!&quot; And yes, you gotme! I know of plenty of fixes that I want to make, and there are plenty more that I'll eventually learn.</li> <li>The code is messy, both figuratively and literally. I see this somewhat as a sandbox, and as much as I believe in validated code and ensuring things are to standard, I miss things sometimes.</li> <li>The design system broke down when <a href="https://twitter.com/TatianaTMac/status/1245486932684992512?s=20">Performance Tatiana</a> went ham on the code and Designer Tatiana tried to add some new fonts without really considering all the design impacts. It pains her that the padding is inconsistent across pages and modules.</li> <li>There is a LOT of unused code, which I'm reminded of everytime I run Lighthouse and look at all the unused CSS.</li> <li>I have approximately 943,349 ideas that I want to write about and never enough time to do it. You'll find abandoned branches by the side of my Repo Road, all desperate for me to pick them up in my Code Camaro—what wait are we talking about?</li> </ul> <p>The point is: I love things to be good and right but my shit isn't perfect. And some of you still seem to think it's worthwhile. So I let it be. Something here to represent me is better than nothing here to represent me.</p> <h2 id="permission-granted" tabindex="-1">Permission Granted <a class="direct-link" href="https://www.tatianamac.com/posts/dd-our-ugly-middles/#permission-granted">📌</a></h2> <p>I'm giving you permission, Developer, to launch your site when you know that there are accessibility improvements to be made or if the content causes horizontal scroll, so long as you promise to prioritise investigating ways to fix it. I'm giving you permission to ship a little too much JS (as a treat), so long as you promise you'll find ways to shave of a few KB each time you touch the code. I'm giving you permission to have spelling errors, so long as you promise you'll spell check as much as you can.</p> <p>Most importantly, I'm giving you permission to be and to make enough, so long as you build in a mechanism for people to give you the feedback and for you to take the feedback seriously sans fragility.</p> <p>I ask, in return, that you give some grace to other people and their work. When you find something wrong or incomplete, provide space for context you don't have. Find ways to be <em>helpful</em> instead of <em>hurtful.</em> If you must get angry at something, get angry at infrastructures that make it harder for us all rather than at each other and find ways to dismantle those infrastructures. If you don't have energy to help, then simply step away. If you have the energy to call it out, then you have energy to do so helpfully. We are not burdened to fix everything, nor can we, nor should we try.</p> <p>Whether we admit it or not, we're all at our Ugly Middles—some day uglier than others—just trying to make it to the next commit, the next day, and the next challenge ahead.</p> Save the Tears: White Woman's Guide 2020-04-02T16:09:03Z https://www.tatianamac.com/posts/save-the-tears/ <p>If you're a white woman who is watching the world burn because of police murder against Black people, and you don't know what to do, I wrote you a guide.</p> <h2 id="1%EF%B8%8F%E2%83%A3-buy-and-read-some-anti-racist-texts.-and-sit-with-the-discomfort.-maybe-invite-a-few-other-white-women-to-be-in-a-book-club-with-you" tabindex="-1">1️⃣ Buy and read some anti-racist texts. And sit with the discomfort. Maybe invite a few other white women to be in a book club with you <a class="direct-link" href="https://www.tatianamac.com/posts/save-the-tears/#1%EF%B8%8F%E2%83%A3-buy-and-read-some-anti-racist-texts.-and-sit-with-the-discomfort.-maybe-invite-a-few-other-white-women-to-be-in-a-book-club-with-you">📌</a></h2> <p>I curated this collection just for you. 😘</p> <ul> <li>An Indigenous People's History of the United States, Roxanne Dunbar-Ortiz</li> <li>How To Be Antiracist, Ibram X Kendi</li> <li>How To Be Less Stupid About Race, Crystal M Fleming</li> <li>Killing Rage, bell hooks</li> <li>So You Want To Talk About Race, Ijeoma Oluo</li> <li>The New Jim Crow, Michelle Alexander</li> <li>They Were Her Property, Stephanie E. Jones-Rogers</li> <li>White Tears, Brown Scars, Ruby Hamad</li> <li>Why I'm No Longer Talking About Race, Reni Eddo-Lodge (UK-centric)</li> </ul> <p>If you want to understand how tech is complicit in perpetuating systems of oppression:</p> <ul> <li>Algorithms of Oppression, Safiya Noble</li> <li>Rage Inside The Machine, Rob Smith</li> <li>Technically Wrong, Sara Wachter-Boettcher</li> </ul> <p>You'll notice I didn't link them. I encourage you to do some work to support someone other than the world's first trillionaire. Find a local bookstore that might still be able to deliver/do curbside pickup. Look on <a href="https://www.indiebound.org/">IndieBound</a> or <a href="https://www.bookshop.org/">Bookshop</a> if you truly don't have local options or are stuck. Part of doing this work is not always taking the first, most convenient option.</p> <blockquote> <p>I previously had included texts White Fragility (Robin DiAngelo) and Invisible Women (Caroline Criado-Pérez). Both of those texts have been shown to do harm to the communities they purport to support. If you'd like to read more why, here are a couple of perspectives:<br /> <a href="https://slate.com/human-interest/2019/09/white-fragility-robin-diangelo-workshop.html">What’s Missing From “White Fragility”</a> &gt; <a href="https://medium.com/@Siltha1.0/caroline-criado-perez-is-a-terf-35c489e59ad9">Caroline Criado-Perez is a TERF</a><br /> I regret that I included them to begin with but I don't want to erase the mistake and perpetuate harm. I apologise for any harm that I caused Black folks and trans (and especially Black trans folks) by including them in these lists. I ask that if you choose to read these texts anyway, to examine them critically through an anti-racist, pro-Black, pro-trans perspective.</p> </blockquote> <h2 id="2%EF%B8%8F%E2%83%A3-reflect-upon-all-of-the-women-in-your-life" tabindex="-1">2️⃣ Reflect upon all of the women in your life <a class="direct-link" href="https://www.tatianamac.com/posts/save-the-tears/#2%EF%B8%8F%E2%83%A3-reflect-upon-all-of-the-women-in-your-life">📌</a></h2> <ul> <li>Examine your friend group. Who attends your brunches? Who was in your wedding party?</li> <li>What traits set you each apart from each other?</li> <li>Who are the women of colour in your life? Who are the queer women in your life? Who are the disabled women in your life? Who are the trans women in your life?</li> <li>If they are your friends, how do those aspects of their identities come up?</li> <li>Do they talk to you about the oppression they face?</li> <li>Why or why not?</li> <li>If they do, what has been your reaction?</li> </ul> <h2 id="3%EF%B8%8F%E2%83%A3-consider-your-weapons" tabindex="-1">3️⃣ Consider your weapons <a class="direct-link" href="https://www.tatianamac.com/posts/save-the-tears/#3%EF%B8%8F%E2%83%A3-consider-your-weapons">📌</a></h2> <p>White women's weapons are microaggressions and a direct line to the police murder hotline.</p> <ul> <li>Compliments: When you complimented another woman, what is your expectation? How have your compliments been racialised? Have you complimented a Black woman's hair and asked to touch it? Have you complimented an Asian woman's youthful skin? Have you referred to a Black/brown woman friend as exotic? Have you started or ended your compliments with &quot;OMG I hate you.&quot; Have your compliments toward disabled women been infantilising? Have you perpetuated Westernised white beauty standards?</li> <li>Tears: Have you ever cried to get your way? Who paid for it?</li> <li>The Police: You have a nation state that will murder for your tears and your fear, real or not. Do you consider the weight of this power?</li> <li>Aggressive/Bitchy/Not-A-Team-Player: Have you ever used these words to describe another woman colleague? Reflect on their identity and how those terms carry weight.</li> </ul> <h2 id="4%EF%B8%8F%E2%83%A3-examine-how-you-leave-black-and-brown-women-behind%2C-particularly-those-who-are-disabled%2C-trans%2C-immigrants%2C-and-queer" tabindex="-1">4️⃣ Examine how you leave Black and brown women behind, particularly those who are disabled, trans, immigrants, and queer <a class="direct-link" href="https://www.tatianamac.com/posts/save-the-tears/#4%EF%B8%8F%E2%83%A3-examine-how-you-leave-black-and-brown-women-behind%2C-particularly-those-who-are-disabled%2C-trans%2C-immigrants%2C-and-queer">📌</a></h2> <p>White women experience oppression from the patriarchical aspects of the kyriarchy. But you simultaneously benefit from the white supremacist aspects of it. If you're abled, cis, and straight, you experience those benefits as well. Throughout history, every white feminist movement has explicitly excluded Black and brown women. Your idols like Susan B Anthony and Elizabeth Cady Stanton were racists.</p> <p>Resist the urge to:</p> <ul> <li>Question/deny our lived experiences. Listen.</li> <li>Ask us if it's our race or our gender. It's both, we can't necessarily parse out which parts are affected by what.</li> <li>Centre yourself. Society already forces us to centre everything around your feelings.</li> <li>Erase us from the narrative; if you're speaking about reproductive health and you don't mention how Black women are at much higher risk or issues, or when you speak about the gender pay wage gap, don't ignore the fact that Latinx and Black women make far less than white and Asian women; if you're speaking about assault, don't forget to mention that Indigenous women and girls are at the highest risk.</li> <li>Step over us on the way to the top. Employing traditionally masculine behaviours will intrinsically mean employing white supremacist behaviours; using your power over us is aligning with the privilege of your whiteness, not the solidarity of our womanness.</li> <li>Participate in all white women panels/events/publications/etc. If you do, then at least insist on getting it called White Women in Tech or STEM because it is a falsehood to call it a Women's Event. Not All Women, Karen.</li> <li>Be a nasty TERF and deny the womanhood of trans women. Trans women are real women.</li> </ul> <p>On your own time, reflect upon your privileges within the white supremacist capitalist patriarchy. Embrace your privileges with regards to race, gender expression, physical ability, neurological ability, orientation, socioeconomic status, generational wealth, nationality. How are you using those privileges?</p> <h2 id="5%EF%B8%8F%E2%83%A3-collect-your-white-women-friends" tabindex="-1">5️⃣ Collect your white women friends <a class="direct-link" href="https://www.tatianamac.com/posts/save-the-tears/#5%EF%B8%8F%E2%83%A3-collect-your-white-women-friends">📌</a></h2> <p>White men can be called out by everyone because they possess the most power with regards to race and gender. White women, however, cannot be called out by everyone because you have less power than white men. So, the best person to call you out is other white women.</p> <p>If you see a white woman friend or colleague engaging in weaponised behaviour (see above), do something about it. You are in the highest position of privilege to speak up without ramifications, particularly as far as the police state is concerned. (Consider how white women are taught to cry their way out of police engagements.)</p> <p>Never allow yourself to stay comfortable. Comfort is complicity. Discomfort means change. Sit with it.</p> <p>For the white dudes in your life: Don't worry, <a href="https://www.tatianamac.com/posts/white-guyde">wrote a white guyde too</a>!<br /> Also, if you're feeling burnout, I have strategies for <a href="https://www.tatianamac.com/posts/beware-of-burnout">systemic change</a>.</p> White Guyde To The Galaxy 2020-04-02T16:09:03Z https://www.tatianamac.com/posts/white-guyde/ <p>If you are a white guy and you don't know what to do beyond donate and being quiet, I made you a list.</p> <h2 id="1%EF%B8%8F%E2%83%A3-buy-and-read-some-anti-racist-texts.-and-sit-with-the-discomfort.-maybe-invite-a-few-other-dudes-to-be-in-a-book-club-with-you" tabindex="-1">1️⃣ Buy and read some anti-racist texts. And sit with the discomfort. Maybe invite a few other dudes to be in a book club with you <a class="direct-link" href="https://www.tatianamac.com/posts/white-guyde/#1%EF%B8%8F%E2%83%A3-buy-and-read-some-anti-racist-texts.-and-sit-with-the-discomfort.-maybe-invite-a-few-other-dudes-to-be-in-a-book-club-with-you">📌</a></h2> <p>I curated this collection just for you. 😘</p> <ul> <li>An Indigenous People's History of the United States, Roxanne Dunbar-Ortiz</li> <li>How To Be Antiracist, Ibram X Kendi</li> <li>How To Be Less Stupid About Race, Crystal M Fleming</li> <li>Killing Rage, bell hooks</li> <li>So You Want To Talk About Race, Ijeoma Oluo</li> <li>The New Jim Crow, Michelle Alexander</li> <li>They Were Her Property, Stephanie E. Jones-Rogers</li> <li>White Tears, Brown Scars, Ruby Hamad</li> <li>Why I'm No Longer Talking About Race, Reni Eddo-Lodge (UK-centric)</li> </ul> <p>If you want to understand how tech is complicit in perpetuating systems of oppression:</p> <ul> <li>Algorithms of Oppression, Safiya Noble</li> <li>Rage Inside The Machine, Rob Smith</li> <li>Technically Wrong, Sara Wachter-Boettcher</li> </ul> <p>You'll notice I didn't link them. I encourage you to do some work to support someone other than the world's first trillionaire. Find a local bookstore that might still be able to deliver/do curbside pickup. Look on <a href="https://www.indiebound.org/">IndieBound</a> or <a href="https://www.bookshop.org/">Bookshop</a> if you truly don't have local options or are stuck. Part of doing this work is not always taking the first, most convenient option.</p> <blockquote> <p>I previously had included texts White Fragility (Robin DiAngelo) and Invisible Women (Caroline Criado-Pérez). Both of those texts have been shown to do harm to the communities they purport to support. If you'd like to read more why, here are a couple of perspectives:<br /> <a href="https://slate.com/human-interest/2019/09/white-fragility-robin-diangelo-workshop.html">What’s Missing From “White Fragility”</a> &gt; <a href="https://medium.com/@Siltha1.0/caroline-criado-perez-is-a-terf-35c489e59ad9">Caroline Criado-Perez is a TERF</a><br /> I regret that I included them to begin with but I don't want to erase the mistake and perpetuate harm. I apologise for any harm that I caused Black folks and trans (and especially Black trans folks) by including them in these lists. I ask that if you choose to read these texts anyway, to examine them critically through an anti-racist, pro-Black, pro-trans perspective.</p> </blockquote> <h2 id="2%EF%B8%8F%E2%83%A3-unfollow-everyone-on-social-media-and-start-over.-try-to-follow-no-people-who-look-like-you*" tabindex="-1">2️⃣ Unfollow everyone on social media and start over. Try to follow NO people who look like you* <a class="direct-link" href="https://www.tatianamac.com/posts/white-guyde/#2%EF%B8%8F%E2%83%A3-unfollow-everyone-on-social-media-and-start-over.-try-to-follow-no-people-who-look-like-you*">📌</a></h2> <p>Follow a spread of race, gender (expression, identity), orientation, physical ability, neurodiversity, nationality, socioeconomic status. Use <a href="https://tokimeki-unfollow.glitch.me/">Tokimeki Unfollow</a> to mindfully assess who you follow.</p> <p>Note about who you follow: Follows are endorsements, even if you don't see it that way. To protect our safety, many marginalised folks will often look to see who you're following. You can continue of course to follow whomever you want. And we can continue to protect ourselves by using this as a barometer.</p> <p>*I know you still will. I said try.</p> <h2 id="3%EF%B8%8F%E2%83%A3-spend-a-year-only-recommending-and%2For-consuming-media-by-people-who-don't-look-like-you" tabindex="-1">3️⃣ Spend a year only recommending and/or consuming media by people who don't look like you <a class="direct-link" href="https://www.tatianamac.com/posts/white-guyde/#3%EF%B8%8F%E2%83%A3-spend-a-year-only-recommending-and%2For-consuming-media-by-people-who-don't-look-like-you">📌</a></h2> <p>(And if you just recommend/consume media by abled white women, I will not give you pistachio thin Oreo cookies).</p> <p>This applies in all aspects of your life: On Twitter, for jobs, for reading, for books.</p> <p>Sound hard? Well, 1 and 2 outta help you. But yeah, it's hard. Consider <em>why</em> this is so hard, when most of the world isn't white or male.</p> <h2 id="4%EF%B8%8F%E2%83%A3-for-every-time-you-get-the-impulse-to-talk-(live-or-asynchronously)%2C-try-to-only-do-it-every-third-time" tabindex="-1">4️⃣ For every time you get the impulse to talk (live or asynchronously), try to only do it every third time <a class="direct-link" href="https://www.tatianamac.com/posts/white-guyde/#4%EF%B8%8F%E2%83%A3-for-every-time-you-get-the-impulse-to-talk-(live-or-asynchronously)%2C-try-to-only-do-it-every-third-time">📌</a></h2> <p>For the times you do talk, ask yourself:<br /> 🔹 Did I listen to understand?<br /> 🔹 Did someone already say this?<br /> 🔹 Am I adding something of value?<br /> 🔹 Are these my words to say?</p> <h2 id="5%EF%B8%8F%E2%83%A3-spend-time-connecting-with-your-thoughts%2C-then-emotions" tabindex="-1">5️⃣ Spend time connecting with your thoughts, then emotions <a class="direct-link" href="https://www.tatianamac.com/posts/white-guyde/#5%EF%B8%8F%E2%83%A3-spend-time-connecting-with-your-thoughts%2C-then-emotions">📌</a></h2> <p>Write down your observations in this new version of you. What do you notice?</p> <p>Seek therapy/counseling if you have the means. If you don't think you need therapy, it likely means you're seeking it from people for free unknowingly.<br /> <a href="https://english.emmaclit.com/2017/05/20/you-shouldve-asked/comment-page-9/">Read this comic on how you shift that load</a> (not THAT kind of load).</p> <p>Never allow yourself to stay comfortable. Comfort is complicity. Discomfort means change. Sit with it.</p> <p>For the white women in your life: Don't worry, I <a href="https://www.tatianamac.com/posts/save-the-tears">wrote a white women's guide too</a>!<br /> Also, if you're feeling burnout, I have strategies for <a href="https://www.tatianamac.com/posts/beware-of-burnout">systemic change</a>.</p> Hubris isn't helpful 2020-04-19T10:28:03Z https://www.tatianamac.com/posts/dd-hubris-isnt-helpful/ <p>(Adapted from <a href="https://twitter.com/TatianaTMac/status/1251741880775139329?s=20">a Twitter thread I wrote</a> )</p> <p>Dear Developer Foo,</p> <p>Your &quot;hot take&quot; about performance or accessibility isn't helping, it's hurting the very people that you purportedly are helping and defending. I'm not convinced your goal is to help as you say. Based on the inflammatory hyperbole, it often seems like your goal is to just dunk on someone who is equally as privileged as you in another glass house atop Silicon Valley to gain a few internet points while the harm on the actual people affected by this perpetuates.</p> <p>You're making your peers hate those people and the very ideas you're trying to evangalise. Does that seem unfair? Well, yes, but welcome to the unfair world of standing up for systemically engrained issues.</p> <p>And Dear Developer Bar,</p> <p>Your clapback also isn't helping. You dunking on the core concepts of performance or accessibility just make me think you hate poor people on low-end devices and disabled people. Dismissing the entire take and throwing your own rocks from your own glass houses just adds fuel to a proverbial fire that burns everyone outside of the glass houses.</p> <p>I get it. The thing you build is being attacked, as is the community you stand for, and it's hard to just stand around and take a verbal beating.</p> <p>But consider that by responding with things that make fun of old Android devices or what not doesn't actually hurt Developer Foo, who you know has a <s>iPhone 11</s> Google Pixel 4. You're hurting the people who admire you who live in places and in contexts where that low-end Android is their only option.</p> <p>Dear Hashtag All Developers,</p> <p>The problem lies in when we prioritise our own egos over actual causes, centring our relatively privileged selves and how we feel over the people who are most harmed by our action; often people who lose lives because our malpractice. Sometimes we might be Foo or Bar, but many of us have played both victim and villain in cases where we should be stewards for the real victims and villains.</p> <p>As somebody who has to manage very delicate and difficult conversations on the reg, I think there are some things that these angry white techbros need to learn from people on the frontlines of much more fraught conversations, like those around race, disability, gender identity, orientation, &amp;c.</p> <h2 id="centre-the-real-victims" tabindex="-1">Centre the real victims <a class="direct-link" href="https://www.tatianamac.com/posts/dd-hubris-isnt-helpful/#centre-the-real-victims">📌</a></h2> <p>What's gotten lost in these discussions is the stories from people who are negatively impacted by products that are not performant and overbloated.</p> <p>I will tell you a well-kept secret: Every single major tech company has severe shortcomings when it comes to principles of accessibility, performance, and inclusion (The Real API though). As someone who has worked on many projects for many of these companies, I've had to fight (and sadly often lose) fights to make things more performance or accessible. So, while many of these places tout these things loudly, behind &quot;closed doors,&quot; they're not as perfect as they'd like you to believe.</p> <p>So, when some dude who works at one company is throwing rocks about something he cares about (his argument might even be valid!), the first thing the people and community who he attacks is going to do is go digging through his code and find where it fails too.</p> <p>I'd like to remind everyone here is that we have an accessibility and performance problem at large. The problem with this method is that we've centred the egos of Developers Foo and Bar (one peacocking and one on the defence), when we should be talking about how this impacts the real lives of people who are actual victims of poorly-conceived and -maintained technology.</p> <p>People oppressed by the failures of accessibility and performance—disabled people, systemically poor people, those not centred in Western civ—<strong>have a right to be mad for how we have failed them.</strong> They don’t need to sugar coat what they say to make us feel better. Yet! When these minoritised and underserved people speak truth to power, they get extreme vitriol, hate, and death threats for sharing their lived experiences.</p> <p>They are told to be nicer about their pain, to find gentler ways to not rattle majoritised fragility. To educate.</p> <p>That is where we, with our tech privileges, must come in.</p> <p>As stewards of accessibility and performance, we must be aware of our own privileges and possess the patience to educate each other. We are often <em>also</em> on high-end devices and high-speed internet and let's be honest, not really affected by poor performance. So, to lash out in outrage when we aren't even the ones this affects most, is a little disingenuous.</p> <p>Don't get me wrong. It is absolutely annoying AF to continue to have to tell people the same five basic principles of accessibility over and over—that really, the majority of accessibility problems could be fixed by changing a few colours and writing alt text. On the performance side, learning the differences between preload and prefetch and being more mindful of when we use what packages when, and doing a bit of code splitting, we can make our sites far more accessible to far more people and deplete fewer environmental resources.</p> <p>But my dudes, if this annoys you, imagine how <em>annoying</em> it is to constantly be misgendered or to not be able to access your healthcare information when you're dying or that you're child has been stripped away from you using tracking technology.</p> <p>I'm not saying you don't get to be mad, but in this case, it's not your mad to carry. When you make it about your mad, you're centring your own ego over the valid stories of people who are actually hurt by the technology we <em>all</em> make.</p> <h2 id="attacks-are-less-effective-than-invitations" tabindex="-1">Attacks are less effective than invitations <a class="direct-link" href="https://www.tatianamac.com/posts/dd-hubris-isnt-helpful/#attacks-are-less-effective-than-invitations">📌</a></h2> <p>We <em>all</em> have a responsibility to do more where we have the most systemic privilege. For those of us at these Big Tech companies, that means fighting for these principles within our own products. As I mentioned before, every tech company that all these techbros work for creates some majorly problematic tech. So getting into a Twitter war about who is worse is pretty futile.</p> <p>We must be the ones who have patience to invite each other to do better. It's not fair to ask for patience from people who are systemically at the bottom of every list, who don't have their basic needs met. But from each other? From our glass houses in Silicon Valley? Absolutely.</p> <p>In particular, when we (royal we inducted here) are both white cis tech bros who are systemically in the best positions to get people to listen to us. Telling a bunch of people off does not work to fix the problem. It gives us a few internet points, makes a few of our insecure fellow tech bros follow us (who arbitrarily hate or like the same frameworks or languages we do), but it doesn't actually make people improve their performance and accessibility.</p> <p>Instead, it makes them hate performance and accessibility, and thus, the people who are most negatively impacted by it, are caught in the cross-hairs. Why? Because that's how capitalism works. It forces us to hate systemically poor people, disabled people, basically anyone who the system exploits is blamed for their own exploitation. Watch Parasite for a primer on how it all works.</p> <p>What we need to do is to invite people to do better. Praise people when they do things right. When they don't get things right, invite a conversation and ask questions. Come curious. Come aware of your own messes in your own glass houses. De-escalate flame wars.</p> <h2 id="corporations-are-not-people%2C-but-the-people-who-work-for-them-are" tabindex="-1">Corporations are not people, but the people who work for them are <a class="direct-link" href="https://www.tatianamac.com/posts/dd-hubris-isnt-helpful/#corporations-are-not-people%2C-but-the-people-who-work-for-them-are">📌</a></h2> <p>Often when I see the people who take dunks, they are often the most fragile when others have taken dunks on them. Weird how that works, right? It's almost though <em>none of us</em> likes our work to get attacked by somebody, particularly somebody who works somewhere where Problematic Shit Goes Down.</p> <p>If you are out here in tech and somehow are standing up for the integrity of your corporation, I want to remind you that your corporation is not your family. Corporations are empty shells used to exploit people. In capitalism, companies are generally going to be maleficent. Why? Because success in capitalism means more money (for an elite few at the top, generally people that hate anything justice-orientated as that means the degradation of their limitless wealth and power). So, if someone attacks a company for its policies, maybe don't get butt-hurt over that. Because that company doesn't have feelings. And it only helps to perpetuate this idea that companies &quot;make decisions.&quot; They don't. A few select powerful men named Jeff, Mark, Jack and other Four Letter White Guys do.</p> <p>Your company also is probably doing some shady shit. We, as white techbros (royal we), are in the best position to stand up for this at our companies and to do something about it. I don't know, unionise, figure it out.</p> <p>Simultaneously, there is a difference between criticising a product and its shortcomings, and just taking a dig at the people who built it. Again, no one likes when this happens to them. Criticise the facts (but make sure you took time to get the facts straight).</p> <p>Remove the emotion (which I remind you is not yours) from it. Y'all are so emotional! Try reasoning. Ask more questions. Questions are an equally valid way to hold each other to task.</p> <p>And consider how much you hated it when someone attacked you last time before you go write a shitty teardown.</p> <h2 id="de-escalate-not-inflame" tabindex="-1">De-escalate not inflame <a class="direct-link" href="https://www.tatianamac.com/posts/dd-hubris-isnt-helpful/#de-escalate-not-inflame">📌</a></h2> <p>When you do find yourself at the receiving end of accountability, even if it is inflammatory or rude, find a way to de-escalate the situation. Take a step back and see how there might be a valid argument, even if poorly made or ego-driven. If you can't do that, then it means you should just leave the conversation alone and step away.</p> <p>Besides how social media works is that if you quote-tweet something shitty, you're just giving it more amplification and validating it through engagement, even if you hate to see it.</p> <h2 id="be-mindful-of-timing" tabindex="-1">Be mindful of timing <a class="direct-link" href="https://www.tatianamac.com/posts/dd-hubris-isnt-helpful/#be-mindful-of-timing">📌</a></h2> <p>We are in a state of constant worry and for many people, this is the first time they're dealing with depression, anxiety, and loneliness. Creating more anxiety and stress by being inflammatory is making it worse for everyone. Illuminating more problems without inviting non-facetious solutions is not particularly helpful for anyone's mental state right now.</p> <p>It's just going to overwhelm us given how many unsolvable problems appear before us every single day.</p> <h2 id="stop-worshipping-industry-and-subject-heroes" tabindex="-1">Stop worshipping industry and subject heroes <a class="direct-link" href="https://www.tatianamac.com/posts/dd-hubris-isnt-helpful/#stop-worshipping-industry-and-subject-heroes">📌</a></h2> <p>I thought long about why this sort of discussion keeps happening over and over in the same sorts of ways, and it's because we keep centring the same people in these niche subject areas. We know what we're getting into; some peoples' brands is to be &quot;That Guy&quot; on the internet, and they're quite successful at it because we all (myself not excluded) feed into their bullshit.</p> <p>The hero worship in this industry means that we have four dudes (one for each topic focus) who fight about the same 12 things every fortnight. The lockdown schedule got a little confusing, so it was quite for a minute but I see we're back.</p> <p>Our industry has an infatuation with heroes. People who maybe have done a lot of cool stuff and devoted a lot of their time to providing resources and what not.</p> <p>But as these heroes continue to fall from grace, I wonder if it's a problem that they become heroes to begin with, particularly when I look at who the heroes are.</p> <p>Perhaps it is time to find new people to listen to, like our users, and stop giving so much attention to these heroes who aren't even saving the victims that they say they are.</p> In digital suspension 2020-04-21T22:39:51Z https://www.tatianamac.com/posts/in-digital-suspension/ <p>⚠️ <strong>CW:</strong> depression, COVID-19</p> <p>As a kid, I remember admiring the Holodeck in Star Trek. I loved that Captain Janeway could escape to her Victorian fantasy during stressful times and for a moment escape from the isolation and pressures of being a captain on a starship. (Voyager haters can kindly get a hobby.)</p> <p>The characters she interacted were complete. They had real backstories and made her feel things. So, while they themselves were complex algorithms of binary code, she herself was affected by them; by their actions, by the emotions they elicited, and by their stories.</p> <p>While as far as we know we have nothing close to the Holodeck, the global lockdown has got me thinking about what we validate as being <em>real.</em></p> <p>The digital world, my friends, is all that many of us are lucky enough to have right now. Sure. I miss hugs, which I don't even particularly like from most people. I miss resting my head on someone's shoulder. I miss holding hands. I miss physical intimacy. All those physical things are irreplaceable. There's dozens of studies about how humans isolated become very sad (which is why solitary confinement is a particularly heinous corporal punishment). The effect of lack of physical connection is very real, let alone the emotional distance we're feeling as a result.</p> <p>&quot;In the meantime&quot; many of us are seeking to fill the voids left by not being able to go to the movies, birthday parties, and the gym by doing other equivalent things online. For those of us lucky enough, we're filling time by adapting and adjusting as we can.</p> <p>I think a lot of people think of what we're all going through as a temporary lockdown; an extended snow day; a pause from reality. As a coping mechanism, we might remind ourselves of the light at the end of the tunnel—&quot;when things go back to normal&quot; or &quot;when reality returns&quot; we say.</p> <p>What is, then, what we're experiencing now, connected by the tenuous threads of ones and zeros? Is it real?</p> <p>Are the calls you're using to connect with loved ones considered real demonstrations of affection? Are the birthday and wedding celebrations held on video calls true milestones? Are the text messages and nudes your lover sent you still stimulating even if they weren't processed chemically in a dark room? Or will we redo everything we've experienced during this time when we're able to share the meatspace?</p> <p>Is what we're experiencing just a dress rehearsal of our lives? Are we just living in a digital suspension of reality?</p> <p>And on the dark side, is online bullying somehow less hurtful when it's read over a screen than on paper? Are the death threats I've received to be taken seriously because they were typed from a computer and not cut out of a magazine?</p> <p>In the past, when something bad has happened to me on Twitter and I've shared it with a friend, they would say something like, &quot;Don't worry about that. It's just Twitter. It's not real life.&quot;</p> <p>The intent of that statement could be to lessen my worry, to remind me that Twitter does not not the entirety of existence, to remind me that it's not where my focus should be, and perhaps, less kindly, a way to brush off my story they don't care about.</p> <p>The impact of the statement is that it invalidated my sense of what is considered real. It reminds me that we've historically not thought of our experiences on the digital and online world to be real. It could explain a lot of why trolls feel comfortable creating throwaway accounts, but fear standing up for such vitriol face to face.</p> <p>All of these thoughts about whether what happens digitally is real especially strikes a chord with recently past me. I am an extremely online person who lives alone and primarily connects with friends digitally who (up until recently) worked primarily remotely from other timezones and continents on digital products. It strikes a chord with distant past me, who found solace and friendships through LiveJournal and MySpace that I did not find in the hallways and cafeterias of school, where classmates bullied me and didn't want to be my friend. With that single criterion of what constitutes as real, you could invalidate my entire existence.</p> <p>It leaves me curious: What <em>is</em> it about the proximity of our physical beings that quantifies it at a higher value? For certain there is an instinctual, critical lizard-brain need to touch and to be touched. But Descartes would tell us that beyond this physical meatspace, we are special mammals who have reason and experience life at a higher abstraction. Do we consider what we experience through and in the digital world to be <strong>real</strong>? Does what we've experienced have an impact on the reality we once knew, and the new, unknown reality we will inevitably have to learn?</p> <p>I'm not sure.</p> <p>I, for one, am not going to act as though this is a pause upon my life. At best if I did, I would hold my breath for months to come, waiting to inhale the same air of months, possibly years ago. At worst, I would face a new world and not be brave enough for it, having spent the past few months denying that new world could ever come.</p> <p>I refuse to believe that the life I'm leading right now is some facsimile of the real one that I could be leading in a parallel universe. If anything, because depression and other things don't always allow me to live that parallel life even when not in the centre of a crisis. Outside of this crisis, often, the digital world is the only one I have. I lastly refuse to believe that what I am living right now is some sort of digital suspension of reality—because the digital world is too real.</p> <p>The things we say and fail to say to each other, the ways we hurt or the ways we love, the bridges we build and the walls we erect, the time that we do or don't set aside during this time is real—at least, to me.</p> Beginner's Guide to Eleventy [Part II] 2020-05-19T12:49:13Z https://www.tatianamac.com/posts/beginner-eleventy-tutorial-partii/ <h2 id="welcome-to-part-ii" tabindex="-1">Welcome to Part II <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-partii/#welcome-to-part-ii">📌</a></h2> <blockquote> <p>You are reading Part II of a IV part series.<br /> <strong>Part I:</strong> <a href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti">What is a static site generator?</a> &gt; <strong>Part II: Installation</strong> 👈🏽 You are here<br /> <strong>Part III:</strong> Structure/Basic Customisation (coming soon)<br /> <strong>Part IV:</strong> Advanced Customisation (coming soon)<br /> If you are confused or in need of context, please go <a href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-parti">read Part I</a>—it is where I establish all the context of what static site generators are.</p> </blockquote> <p>As much as possible, I'm going to treat this part of the tutorial like a cookbook, except I won't make you read seven paragraphs about that one summer I spent in Emilia Romagna rolling the perfect tortellini as I had a torrid tryst with Paolo (sorry, reading too many romance novels).</p> <p>I will, however, tell you all of the &quot;ingredients&quot; you need, dirty my hands with the scary parts, take it step by step, and ensure that I provide ample resources to prevent you from hitting dead ends.</p> <p>Let's collectively admit something: We are not great at giving robust and clear installation instructions. More often than not, our package installation instructions look something like this:</p> <p><em>Installation:</em><br /> <code>npm i luigis-castle</code><br /> <em>You're set!</em></p> <p><em>I'm sorry, what? Where do I... put that? Then, what?</em> Even if I know where to put that, I now have this cyborg telling me that I'm missing <strong>several trillion dependencies</strong>? I'm sorry, are you telling me to go to therapy? I already do, and therapy is awesome, sucker.</p> <p>I want to prevent <em>that</em>.</p> <p>So, you might find that this guide is <code>--verbose</code>. It is intentionally so because most of the time we're overly concise and people give up at the very beginning. I've partitioned explanations into notes where I can, so you can choose to skip over them if you already know everything. Cool? Oh, you want a cookie. Here. 🍪</p> <p>Let's get started.</p> <h2 id="tools-required-for-eleventy" tabindex="-1">Tools Required for Eleventy <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-partii/#tools-required-for-eleventy">📌</a></h2> <p>A developer's tools can be personal. To some degree, if you choose well <em>for you</em>, a tool can really help speed up rote tasks, give you fewer headaches (by providing more colour customisation and modes), and create a more pleasant developer experience (DX).</p> <p>Some developers have strange infatuations with tools and will insist some are better than others—10x developers might even make fun of you if you use the wrong tools. I think it's more personal than that. Picking out dev tools is like picking out a sports bra. Try out a bunch. See what sucks the least for you that you can get in and out of without breaking your arms. Learn how to customise them so you're less likely to have a uniboob. Abandon them in the back of a drawer if they don't work.</p> <h3 id="1a.-terminal-emulator" tabindex="-1">1a. <strong>Terminal Emulator</strong> <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-partii/#1a.-terminal-emulator">📌</a></h3> <p>Terminal emulators (or Terminal or Term, if you're friends) are the bare bones text tools that make you look most like a hacker. If you've ever opened up Windows Terminal on Windows or Terminal.app on MacOS, you were in the terminal emulator. Terminal emulators are essentially stripped-down programs without much of a visual interface that can give you access to your own computer and connect you to other computers.</p> <p>Inside of the terminal emulator, you are using the <strong>Command Line Interface (CLI)</strong>. When people talk about running something in command line, this is what they’re usually referring to. By comparison, most programs that we use day to day, like Microsoft PowerPoint, Adobe Illustrator, Sketch, Microsoft Paint, are all considered <strong>Graphical User Interfaces (GUIs)</strong>. In GUIs, you can see a visualisation of what you're doing. When working in a CLI, you are using text commands and relying on text output, which can be harder for many to visualise. We’ll talk more about this later, but as with all things, your preference for CLI versus GUI (when both exist) is up to you.</p> <p>Terminal emulators can do a lot, but for the purposes of this tutorial, you'll mostly be using it to download and to run Eleventy, to manage your packages (heh), and to version control your code.</p> <p><strong>Examples:</strong> <a href="https://hyper.is/">Hyper</a>, <a href="https://iterm2.com/">iTerm2</a>, Terminal (default for MacOS and Windows).</p> <p><strong>Cues</strong>: Many tutorials are not always explicit about when you're using the Terminal. Usually if you're cued to <code>run</code>, <code>build</code>, <code>npm</code>, <code>npx</code>, <code>homebrew</code>, <code>yarn</code> etc, and you see a short block of text like this, often preceded by a <code>$</code> (which you should not copy):</p> <p><code>$ npm i make-me-a-sandwich-mario</code></p> <p>You're going to paste that in your Terminal and hit return/enter to <em>run</em> it.</p> <h3 id="1b.-shell-language" tabindex="-1">1b. <strong>Shell Language</strong> <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-partii/#1b.-shell-language">📌</a></h3> <p>When you run scripts and commands in your terminal emulator, you do in a shell or command language. The default language for Linux and older MacOS (pre-Mojave) is Bash and newer MacOS is zsh. The differences in the language usually result in the commands differing slightly.</p> <p>I mention this here because this is a future potential &quot;gotcha&quot; where you can get slipped up because an installation guide for a package manager can presume you are using one or the other. While they are very similar, there are slight differences that can cause headaches. It's important to know which you're using and <a href="https://linuxhint.com/differences_between_bash_zsh/">general differences</a>.</p> <p>If you have never interacted with your terminal's shell language, I recommend figuring out which is your default. To do so, open your terminal emulator, and <em>run</em> (paste in this code and hit enter/return) this command:<br /> <code>ps -p $$</code>.</p> <p>It should <em>return</em> (send you back) something like this below:</p> <p><img src="https://www.tatianamac.com/assets/img/eleventy-ii-shell.png" alt="Terminal window that reads ps -p $$ Then, returns PID of 10934 TTY of 0:00.10, TIME of 10934, and CMD of /usr/local/bin/zsh --login&quot;." /></p> <p>The command <code>ps</code> is telling the command line to show all the processes that are running. The <code>-p</code> flag tells it inform more about the process, and the <code>$$</code> tells it to narrow this down to the current process.</p> <p>If you see <code>zsh</code>, <code>bash</code>, <code>tcsh</code>, <code>ksh</code> (anything ending in sh), that's your shell language. (If that didn't work for you, <a href="https://linuxhandbook.com/shell-using/">try some of the other commands</a>.)</p> <h3 id="1c.-installing-node.js-and-npm" tabindex="-1">1c. <strong>Installing Node.js and npm</strong> <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-partii/#1c.-installing-node.js-and-npm">📌</a></h3> <p>Node is a <strong>environment</strong> you need to install onto your computer in order to run Node Package Manager (npm). (You need npm to install Eleventy—the whole point of this post. Did you forget? I sorta did!).</p> <p>To check if you already have node on your machine, run the following command in your terminal emulator:<br /> <code>node -v</code> or <code>node --version</code>. (If one doesn't work, try the other).</p> <blockquote> <p>You may have noticed that sometimes flags have one hyphen and other times they have two. One hyphen flags (<code>-v</code>) are the short-name version of the command, and two-hyphen flags (<code>--version</code>) are the long-name version of the command. I find that when I'm starting out, I like to write out the long-name/two-hyphen version so I can talk myself through what I'm doing.</p> </blockquote> <p>If it returns <code>v</code> followed by numbers, something like <code>v12.13.1</code>, that means you have Node installed. Eleventy requires any version of Node newer than 10 (at time of writing, please check <a href="https://www.11ty.dev/docs/getting-started/">Eleventy Docs</a> to confirm), so if you've got that, you're set! Woohoo!</p> <p>If you get anything other than that, that means that you either don't have it on your computer and will need to install it or need to update it.</p> <p>Follow the instructions below for your operating system, and come back here once you do.</p> <p>For <a href="https://nodesource.com/blog/installing-nodejs-tutorial-mac-os-x/">MacOS</a>.<br /> For <a href="https://nodesource.com/blog/installing-nodejs-tutorial-windows/">Windows</a>.</p> <p>Once you have Node.js installed, you can now install npm.</p> <h3 id="1d.-installing-npm" tabindex="-1">1d. <strong>Installing npm</strong> <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-partii/#1d.-installing-npm">📌</a></h3> <p>npm is the main package manager for Node.js; they have a registry of all the packages and modules which is accessed by a command line interface. Think of it as the central library of code snippets that everyone can &quot;borrow&quot; at once. npm makes it so that you can search for specific features you need to add, like a React image carousel or a static site generator, like Eleventy!</p> <blockquote> <p>Packages can rely on other packages, which is called a dependency. You will come across that word <em>a lot</em>. A dependency means that a package (let's call it House Package) uses another package (let's call it Room Package). Sometimes, when Room Package makes an update, it can break House Package. Sometimes the maker of Room Package decides to remove it from the registry or make a change that isn't compatible with House Package. That means House Package can break. Now imagine this incepted from House, into Street, Neighbourhood, into City, into State, into Country, into Continent! One small change can impact many pieces of software, and frankly, take an entire sector of software down. So, it's important to be mindful when you're engineering of all the dependencies you invite in, and to monitor them.</p> </blockquote> <p>If you installed Node.js, then you should have npm installed. To check which version, in your terminal emulator, run:<br /> <code>npm -v</code> or <code>npm --version</code>. (If one doesn't work, try the other).</p> <blockquote> <p>At time of writing, the current version of npm was 6.14.5. If you have something older, update your npm by running the following command:<br /> <code>npm install npm@latest -g</code></p> </blockquote> <h3 id="2.-source-code-editor" tabindex="-1">2. <strong>Source-Code Editor</strong> <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-partii/#2.-source-code-editor">📌</a></h3> <p>A source-code editor (or just code editor if you're friends) is where you edit code or <em>make the magic happen</em> as I like to say. The code editor is also where you can look like a hacker.</p> <p>Choosing a code editor can be really daunting, as everyone who has a four-letter name has a strong opinion about which is the best and is willing to go to great lengths to convince you.</p> <p>If you're starting out with code, my recommendation would be to pick the one that stresses you out the least. Look at the screenshots and read reviews. Consider what customisations are for your needs, say, like if <a href="https://www.reddit.com/r/Blind/comments/fjn9d9/code_editor/">you rely on a screen reader</a>. See what seems appealing to spend hours crying in front of. For many years, I wrote in Coda (RIP), Sublime Text, Atom, then now I'm in Microsoft Visual Studio Code (VSCode). However, I think if I started in VSCode, I would have been overwhelmed with all the bells and whistles.</p> <p><strong>Examples</strong>: GitHub's <a href="https://www.sublimetext.com/">Atom</a>, Adobe's <a href="http://brackets.io/">Brackets</a>, <a href="https://notepad-plus-plus.org/">Notepad++</a>, <a href="https://www.sublimetext.com/">Sublime</a>, <a href="https://vim.org/">Vim</a> if you hate yourself and wear purist badges proud (jk! No tool shaming), Microsoft's <a href="https://code.visualstudio.com/">Visual Studio Code (VSCode)</a></p> <p><strong>Cues</strong>: If you see longer blocks of code, you're going to likely edit that in your code editor.</p> <blockquote> <p>You might hear someone refer to their <strong>Integrated Development Environment (IDE)</strong>. People sometimes use IDE interchangeably with code editor, when they are not, in fact, interchangeable. By definition, IDEs comprise a code editor, build automation tool, and debugger. Sometimes they have GUIs integrated into them as well.<br /> Most tools you hear about are code editors, including Microsoft's Visual Studio Code (VSCode or just Code if you're good friends), which, while robust and very full-featured with the help of extensions, is not an IDE. Microsoft's Visual Studio is their IDE, as it is a fully-integrated environment. Naming, am I right?<br /> Also, because people tend to get their panties wound up in sailors' knots about this, you're not any &quot;less&quot; of a developer for using either a code editor or an IDE—use what you like and change it up if you change your mind. Neither is intrinsically better than the other; they're both valid for different developers in different contexts. Some IDEs and code editors have better support for certain languages, for instance. That's the sort of thing you should note for how you decide, not what some Chadwick tells you to decide. I've articulated the difference here for the pure purpose of education. And, as someone who writes and runs a dictionary, I think nuance is important. 🙂</p> </blockquote> <p>For the purposes of what we're doing, I'd recommend that you get a <strong>code editor</strong> as it will suffice for this project.</p> <h3 id="3.-browser" tabindex="-1">3. <strong>Browser</strong> <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-partii/#3.-browser">📌</a></h3> <p>You probably already use a browser regularly. In fact, I would be willing to bet you're accessing this post from a browser. However, the browser that you use day to day to surf might be different than the one you choose to use when developing.</p> <p>While we should all test our sites across multiple browsers, I think most of us will conduct the majority of our build within the browser we feel most comfortable with initially. To me, the choice of what main browser to use to do the majority of my development comes down to what the audience is most likely to use (this is one of many areas where user research is critical!). If no compelling user-driven decision exists here, like if it's for my personal site, where I don't collect user data, it typically comes down to the Developer Tools and Extensions I care most about.</p> <p>Personally, I use Firefox equipped with DuckDuckGo as my search engine for most of my browsing (because security and privacy are very important to me for personal browsing), but I recognise that's a small user share. I sometimes use Firefox Nightly so I can take advantage of cutting-edge features. (Firefox Nightly is not stable, though, so it's only used for this purpose). I develop primarily in Firefox and Chrome. (I prefer Firefox's DevTools and Chrome performance tooling [Lighthouse]). Play around with the Developer Tools of multiple browsers. See which one's interface makes the most sense to you.</p> <p><strong>Examples</strong>: <strong>Desktop</strong>: Brave, Google Chrome, Microsoft Edge, Mozilla Firefox, Apple Safari, UCBrowser, etc. <strong>Mobile</strong> Google Chrome, Opera, Opera Mini, Apple Safari, Samsung Internet.</p> <h3 id="4.-git" tabindex="-1">4. <strong>Git</strong> <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-partii/#4.-git">📌</a></h3> <p>Git is an open-source, free distributed version control system. Git enables you to take snapshots of your code, so that if you break it, you can revert to when your code was functioning. It's like the Delorean for code. It also allows you to share your code for collaboration, for multiple people to work on the same code without saving over each other’s work. It also allows for you to share your work, for someone else to download a copy, and to play around with it.</p> <p>When you think of Git, you might think of BitBucket, GitHub, or GitLab. Technically, all those products offer <strong>Git hosting as a service;</strong> providing storage to the code somewhere where many people can access—this is the underpinnings of what it means for the version controlling to be distributed. Git hosts also often provide a whole <em>slew</em> of other benefits, like helper tools (a desktop GUI or web interface that visualises what’s happening in the command line, for instance), allow you to create profiles, and find new projects and collaborators.</p> <p>Git can be accessed from an emulator, a desktop GUI, a web app, and is integrated into some code editors/IDEs (and a combination of all four). Most developers primarily rely on accessing it through their terminal emulator, as GUIs can be limiting (and not all Git hosts offer them), but I highly recommend you try them all and see what works best for you.</p> <p>Git is without a doubt one of the most intimidating parts of being a developer. For visual folks, it can be hard to understand what is going on under the hood. Git commands are sometimes obtuse. Working on massive code bases with large teams can exacerbate these fears.</p> <p>Git is something that generally becomes more intuitive as you practice. Practice, practice, practice. I recommend using it on your own small projects. Allow yourself to make mistakes and learn how to get yourself out of them. <a href="https://www.ohshitgit.com/">OhShitGit</a> is one of my favourite resources for when I get stuck and feel that git-sweat come on.</p> <p>And, though practice helps, know that even the most seasoned developers <em>royally fork</em> (SORRY) up their repos sometimes. It's okay. It's this weird thing we all do so we can commiserate over it, like burpees or taking out the trash. Most things you do are reversible. If you're worried at first, there is no shame in copying your entire folder somewhere else <em>just in case.</em> There's a saying about something not being backed up unless it's backed up thrice anyway.</p> <p>For the purposes of this project, you need to have git installed onto your machine and an account with a git host.</p> <blockquote> <p>Installing git can become complicated and frustrating very quickly. If you encounter roadblocks, know that you're not alone. While I'd love to explain exactly how to install git, several key factors will change the exact instructions, including the operating system you use (MacOS, Windows, Ubuntu, etc), what command line interface you use, etc. <a href="https://www.atlassian.com/git/tutorials/install-git">Atlassian’s guide is a good place to start</a>.</p> </blockquote> <p><strong>Examples of Git Hosts</strong>: <a href="https://www.atlassian.com/git">Atlassian BitBucket</a>, <a href="https://github.com/">GitHub</a>, <a href="https://about.gitlab.com/">GitLab</a>, <a href="https://sourceforge.net/">SourceForge</a>.</p> <p>Note that for most personal purposes, these services offer free accounts. Be mindful of what constitutes as a paid account and for what needs.</p> <h2 id="installing-the-things" tabindex="-1">Installing The Things <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-partii/#installing-the-things">📌</a></h2> <p>Once you have your terminal emulator, code editor, git installed, and an account with a git host, you're ready to install Eleventy! You've made it past a huge hurdle! Seriously, not being sarcastic. Environment set-up is one of the biggest hurdles, and you just did most of it!</p> <p>The last step is installing Eleventy.</p> <ol> <li>In your terminal emulator, run <code>pwd</code> (present working directory) (if that doesn’t work for you, try <code>cd</code>) to figure out where you are. Once you are where you think you need to be, run <code>ls</code> (shortened form of “list”) to <em>list</em> out all the items in the folder you are in (or <code>dir</code> for Windows).</li> <li>Navigate to the folder you want (use <code>cd</code> to go into a folder; use <code>cd ..</code> to back out of a folder). (Note that depending on your operating system, the back slashes (\) could be forward slashes instead (/).</li> <li>Once you are in the folder you want to house your project, run <code>mkdir eleventy-project-name</code>. (You can call your <code>eleventy-project-name</code> whatever you want. It’s not permanent, and we can change it later.) <code>mkdir</code> creates a new directory with that name.</li> <li>Navigate into that folder using <code>cd eleventy-project-name</code></li> <li>Run <code>npm init -y</code>. This command creates what's called a <code>package.json</code> file; they are like a recipe of all the ingredients (or packages) used from npm. <code>package.json</code> files can also keep track of other on-going tasks that your project needs. When someone clones your project, the <code>package.json</code> file tells npm all of the packages that are necessary to make that project run. The <code>init</code> initialises npm. The <code>-y</code> here is saying &quot;yes&quot; to all the questions that <code>npm</code> asks, and sets them to defaults.</li> </ol> <p>The command line should return a confirmation that starts with &quot;Wrote to [directory]/package.json: ...more code&quot;.</p> <ol> <li>Run <code>npm install --save-dev @11ty/eleventy</code>.</li> </ol> <p><code>install</code> goes to the npm registry and asks it to look for <code>@11ty/eleventy</code>. <code>--save-dev</code> tells <code>npm</code> to save this package (<code>@11ty/eleventy</code>) into what's called your <code>devDependencies</code>. All of this is happening locally, which means that this Eleventy install will only work for things inside of this directory.</p> <p>Unpacking that further:<br /> <code>devDependencies</code> are what are required to <em>develop</em> your package and are installed automatically when someone downloads your package. <code>Dependencies</code> are what is required to <em>run</em> the project, so for example, a user of a package needs its <code>dependencies</code>, but not necessarily its <code>devDependencies</code>. Your <code>package.json</code> is what keeps track of all these packages you use.</p> <p>The <code>--save-dev</code> command is what tells the command line to store this into your devDependencies in your package.json file. The two dashes that precede the words <code>save-dev</code> make the command a flag. So, when someone says “add a <code>save-dev</code> flag,” this is likely what they mean. Flags are essentially arguments that add extra conditions to the initial command.</p> <p>While you read all that, you may notice that npm is still running. You should see a sort of progress bar to let you know how much more it has to go. You may see a series of warnings about things that have been deprecated. For now, you can ignore all that. (Most developers continue to ignore all that.)</p> <blockquote> <p>Whenever you see a <code>-g</code> flag appended to an npm command, that means that it’s going to be installed globally. The upside is you’re only going to install it once, but you might run into issues down the line. Most folks work locally, as it prevents what are called “interoperability” issues. For example, you might encounter a project that is running on an older version of Eleventy than the global one you have installed, which will cause infuriating errors. Therefore, it’s best to treat each project independently. You might notice that most devs prefer to install things locally for this reason.</p> </blockquote> <ol start="2"> <li>To check that Eleventy installed properly, run <code>npx @11ty/eleventy</code>.</li> </ol> <p><code>npx</code> is a helper tool for <code>npm</code>. If you were to run <code>npm @11ty/eleventy</code>, it would not work. The reason for this is a bit complex (Kat Marchán, who authored <code>npx</code>, <a href="https://medium.com/@maybekatz/introducing-npx-an-npm-package-runner-55f7d4bd282b">explains npx in this Medium article</a>.), The general reason is that <code>npx</code> will check your global folder to see if the package you want to install already exists. If it doesn’t, it will go ahead and download that package locally and run it for you, which saves a few steps and prevents you from future headaches. (Read more about why local installations are preferred above.)</p> <p>The command line should confirm that Eleventy is installed by returning something like:</p> <p>Wrote <code>0 files in 0.03 seconds (v.0.11.0)</code>.</p> <p>Because you haven’t written any files yet, it makes sense that there are 0 files to write. The <code>v…</code> indicates what version of Eleventy you are running. At time of writing, it is <code>v.0.11.0</code></p> <ol start="3"> <li>Now, we are going to create an index.html page so you can see Eleventy in action</li> </ol> <p>Run <code>echo 'You are officially a developer!' &gt; index.html</code></p> <p>Breaking this command down, <code>echo</code> says to the command line “read me back all this stuff.” Everything within the single quotes (‘) is what you’re asking the command line to read back.</p> <p>The second part of the initial command, <code>&gt; index.html</code>, includes what is called an append symbol (&gt;). While you might know this as the greater than symbol, in this context, it tells the command line to instead place the stuff inside the single quotes into a file called <code>index.html</code>, instead of returning it (with <code>echo</code>), like the statement it did above.</p> <p>The command line won’t confirm that it successfully created the file. It will just start a new line and await the next command.</p> <ol> <li> <p>To view your work, you will now run Eleventy again by typing <code>npx @11ty/eleventy</code>. OR, you can push the up arrow on your keyboard until you see that line again and hit enter.</p> </li> <li> <p>Now we want Eleventy to show us the work we did in the browser by running <code>npx @11ty/eleventy --serve</code>. You’ll see it run a few commands and end with “Access URLs.” Copy and paste the <a href="http://localhost:8080/">http://localhost:8080</a> into your browser. You should see your site that says “You are officially a developer!” because you are!</p> </li> </ol> <p>The <code>--serve</code> flag takes your files and opens them in your browser.</p> <p>As we learned about in the last post, this step is where Eleventy takes all of the static files in all their different languages, and <em>generates</em> the site into languages that the browser can render. We'll talk more in the next instalment of the structure of Eleventy and how this all comes together. For now, know that this is the part where the Generator part of Static Site Generator comes from.</p> <p>Feel boss! You have gotten your environment up, and have a fresh new website to play with! You are totally a developer who served up your first static site (Or maybe 30th! It’s still exciting!).</p> <h2 id="thank-you" tabindex="-1">Thank You <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-partii/#thank-you">📌</a></h2> <p>Thank you to <a href="https://twitter.com/dia_trahman">Dia Trahman</a>, <a href="https://www.twitter.com/eddiepearson">Eddie Pearson</a>, <a href="https://www.twitter.com/sigje">Jennifer Davis</a>, <a href="https://www.twitter.com/meowwwls">Melissa Em</a>, <a href="https://www.twitter.com/threepointone">Sunil Pai</a> for their attention to detail, in particular, for the beginner readers who bravely went through my imperfect instructions!</p> <h2 id="references" tabindex="-1">References <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-partii/#references">📌</a></h2> <p><a href="https://en.wikipedia.org/wiki/Usage_share_of_web_browsers">Wikipedia: Usage share of web browsers</a></p> <h2 id="questions-and-corrections" tabindex="-1">Questions and Corrections <a class="direct-link" href="https://www.tatianamac.com/posts/beginner-eleventy-tutorial-partii/#questions-and-corrections">📌</a></h2> <p>For questions, please <a href="https://www.twitter.com/TatianaTMac">reach out on Twitter</a>! I can't promise to answer all your questions, but I'll try my best!</p> <p>For corrections (typos, factual inaccuracies), please file a <a href="https://github.com/tatianamac/tm11ty/issues">GitHub issue</a>.</p> Beware of Burnout: Sustainable strategies for activism 2020-06-08T18:27:11Z https://www.tatianamac.com/posts/beware-of-burnout/ <p>White people (and non-Black brown folks):<br /> We gotta talk about burn out. You aren’t conditioned to be thinking about race this much because of your privilege. We need you to do all you’re doing today, tomorrow, and until the end of time.</p> <p>Let’s talk about ways to focus on current &amp; systemic change.</p> <h2 id="0%EF%B8%8F%E2%83%A3-you%E2%80%99re-asking-a-lot-of-questions-and-receiving-a-lot-of-answers-and-being-overloaded" tabindex="-1">0️⃣ You’re asking a lot of questions and receiving a lot of answers and being overloaded <a class="direct-link" href="https://www.tatianamac.com/posts/beware-of-burnout/#0%EF%B8%8F%E2%83%A3-you%E2%80%99re-asking-a-lot-of-questions-and-receiving-a-lot-of-answers-and-being-overloaded">📌</a></h2> <p>Systemic: You can’t learn everything rn. Make a list. Learn to find the answers yourself before asking. Take the time to actually look it up. Read multiple sources. Sit with it.</p> <h2 id="1%EF%B8%8F%E2%83%A3-big-donations-now-is-great-to-fuel-the-movement.-budget-and-set-up-recurring-donations." tabindex="-1">1️⃣ Big donations now is great to fuel the movement. Budget and set up <em>recurring donations.</em> <a class="direct-link" href="https://www.tatianamac.com/posts/beware-of-burnout/#1%EF%B8%8F%E2%83%A3-big-donations-now-is-great-to-fuel-the-movement.-budget-and-set-up-recurring-donations.">📌</a></h2> <p>Consider how much you can give. Can you give more? If you gave 5K in one swoop, can you give 400/month?</p> <p>Systemic: Ask your bosses about recurring matches for donations long-term. Do you have a secondary source of income (like royalties or a side-business) whose profits could go direct to donations?</p> <h2 id="2%EF%B8%8F%E2%83%A3-you%E2%80%99re-in-3-book-clubs-with-loved-ones-cramming-for-the-anti-racist-test-now.-set-monthly-recurring-reminders-to-write-short-reflections%3B-mistakes-made%2C-lessons-learned.-see-your-own-progress" tabindex="-1">2️⃣ You’re in 3 book clubs with loved ones cramming for the anti-racist test now. Set monthly recurring reminders to write short reflections; mistakes made, lessons learned. See your own progress <a class="direct-link" href="https://www.tatianamac.com/posts/beware-of-burnout/#2%EF%B8%8F%E2%83%A3-you%E2%80%99re-in-3-book-clubs-with-loved-ones-cramming-for-the-anti-racist-test-now.-set-monthly-recurring-reminders-to-write-short-reflections%3B-mistakes-made%2C-lessons-learned.-see-your-own-progress">📌</a></h2> <p>Systemic: Build Black authors into your life, fiction, non-race-based non-fiction. Extend that to film, news, art, cooking (<em>stares in Alison Roman caucasity</em>).</p> <h2 id="3%EF%B8%8F%E2%83%A3-examine-where-you%E2%80%99re-money-goes-long-term" tabindex="-1">3️⃣ Examine where you’re money goes long-term <a class="direct-link" href="https://www.tatianamac.com/posts/beware-of-burnout/#3%EF%B8%8F%E2%83%A3-examine-where-you%E2%80%99re-money-goes-long-term">📌</a></h2> <p>Are you still buying from Amazon?</p> <p>It’s going to take time and patience but research Black-owned businesses to support instead.</p> <p>Systemic: Boycott massively complicit companies. Commit to researching companies before purchasing, particularly when you're setting up subscription or automated-pay services. Establish a strategy for when you learn new information about a company you were supporting. Remember that it's not about perfection (we all must live under capitalism), but doing the most and best you can long-term.</p> <h2 id="4%EF%B8%8F%E2%83%A3-you%E2%80%99re-confronting-people-now.-you%E2%80%99re-fired-up" tabindex="-1">4️⃣ You’re confronting people now. You’re fired up <a class="direct-link" href="https://www.tatianamac.com/posts/beware-of-burnout/#4%EF%B8%8F%E2%83%A3-you%E2%80%99re-confronting-people-now.-you%E2%80%99re-fired-up">📌</a></h2> <p>Will you still do it in a few months when fewer peers still are?</p> <p>Systemic: Evaluate what your long-term commitments to this work are. Build vocab to address racism. Figure out your “if they do this, I will do this.”</p> <h2 id="5%EF%B8%8F%E2%83%A3-you%E2%80%99re-making-a-lot-of-mistakes-right-now.-you%E2%80%99re-learning-a-lot-of-lessons%2C-sit-with-it" tabindex="-1">5️⃣ You’re making a lot of mistakes right now. You’re learning a lot of lessons, sit with it <a class="direct-link" href="https://www.tatianamac.com/posts/beware-of-burnout/#5%EF%B8%8F%E2%83%A3-you%E2%80%99re-making-a-lot-of-mistakes-right-now.-you%E2%80%99re-learning-a-lot-of-lessons%2C-sit-with-it">📌</a></h2> <p>Systemic: Teach it to all the people around you, especially the ones who look like you.</p> <h2 id="6%EF%B8%8F%E2%83%A3-you%E2%80%99re-talking-to-everyone-from-twitter-trolls-to-parents%2C-expending-energy-everywhere%2C-much-of-it%2C-wasted" tabindex="-1">6️⃣ You’re talking to everyone from Twitter trolls to parents, expending energy everywhere, much of it, wasted <a class="direct-link" href="https://www.tatianamac.com/posts/beware-of-burnout/#6%EF%B8%8F%E2%83%A3-you%E2%80%99re-talking-to-everyone-from-twitter-trolls-to-parents%2C-expending-energy-everywhere%2C-much-of-it%2C-wasted">📌</a></h2> <p>Systemic: Write scripts about how to confront racism with colleagues, friends, family. Figure out your boundaries, like when you’ll walk away. Prepare to lose people.</p> <h2 id="7%EF%B8%8F%E2%83%A3-national-politics-tend-to-be-the-focus" tabindex="-1">7️⃣ National politics tend to be the focus <a class="direct-link" href="https://www.tatianamac.com/posts/beware-of-burnout/#7%EF%B8%8F%E2%83%A3-national-politics-tend-to-be-the-focus">📌</a></h2> <p>Do you know much about your mayor? City commissioner? Local zoning laws?</p> <p>Systemic: Figure out what role you want to play in local politics. Read local news. You have a lot more sway with <a href="https://www.brookings.edu/blog/up-front/2020/06/02/mayor-and-governors-this-is-how-you-tackle-racism/">politics at this level</a>.</p> <h2 id="8%EF%B8%8F%E2%83%A3-you're-amplifying-black-voices-and-stepping-aside-for-events-now%2C-when-it's-top-of-mind" tabindex="-1">8️⃣ You're amplifying Black voices and stepping aside for events now, when it's top of mind <a class="direct-link" href="https://www.tatianamac.com/posts/beware-of-burnout/#8%EF%B8%8F%E2%83%A3-you're-amplifying-black-voices-and-stepping-aside-for-events-now%2C-when-it's-top-of-mind">📌</a></h2> <p>When the intensity of the movement changes, will you still do this?</p> <p>Systemic: Determine your criteria for participation. In particular, if you have systemic power and/or celebrity/popularity privilege, use that to create more opportunities for marginalised peers.<br /> When it comes to employment, conferences and speaking events, contributing as a writer/podcast guest/panelist, clubs, sports teams, schools, basically every avenue of your life, your participation is a passive stamp of your approval. Before saying yes, ask clarifying information.</p> <p>As someone with immense speaking privileges, I crafted a <a href="https://gist.github.com/tatianamac/493ca668ee7f7c07a5b282f6d9132552">speaker rider</a> to ensure I could use share that privilege with marginalised peers in my industry. My friend Timothy Goodman writes excellent <a href="https://twitter.com/timothyogoodman/status/990980251667791872?s=20">letters deferring his participation</a> to ensure equity and representation.</p> <p>Build a broader network for recommendations. In creative and tech fields, we have ample resources for this:</p> <ul> <li><a href="https://writersofcolor.org/">writersofcolor.org</a></li> <li><a href="https://www.peopleofcraft.com/">peopleofcraft.com</a></li> <li><a href="https://www.blackwomendirectors.co/">blackwomendirectors.co</a></li> </ul> <p>Find those lists for your own industry. Trust me, they exist. If they truly don't, perhaps you can lend the support to build one. But also, do the work of meeting and getting to know peers beyond your network who don't look like you.</p> <blockquote> <p>Originally posted on Twitter, I have since extended this list and will likely keep adding to it as I see opportunities.</p> </blockquote> Compassionate action over empathy 2020-06-09T12:57:02Z https://www.tatianamac.com/posts/mistakes/ <p>To be effective accomplices, we need to move beyond the state of feeling into the state of doing.</p> <p>I see a lot of chatter about “empathy.” In design and tech we frame nearly every human problem with it. The word has become a watery, vague catch-all.</p> <p>I think it’s a problem.</p> <p>Empathy is feeling what someone else is feeling. It is attempting to crawl into their minds and hearts and experience what they’re experiencing.</p> <p>This is impossible. We cannot feel what it is to be anyone but ourselves. A non-Black person cannot feel what it means to be Black.</p> <p>Empathy validates another’s emotion by our understanding and feeling. It’s why you see people self-flagellating at protests and hurting themselves to “feel” the pain. It’s performative and self-centring. And awkward AF. You’ve made a protest about Black lives about white guilt.</p> <p>Empathy takes someone else’s lived experiences and limits their emotional depth and range to our own.We crawl into the perceived intensity of their sadness, but really, through this process, we adapt or appropriate it as our own, centring our own feelings in the process.</p> <p>Instead of trying to feel something we can’t truly know to validate it, we should <em>trust</em> others’ experiences.</p> <p>We can offer <em>compassion</em>, which doesn’t require our own understanding in order to validate it as being real and worthy of attention. Meditation often focuses on this.</p> <p>Compassion, unlike empathy, allows us to remain rational. It’s what allows us to act when someone gets injured in front of us. Compassion allows us to take action in the face of their pain; we trust their anger and pain without taking it on.</p> <p>It’s not ours to take.</p> <p>I worry that when we fixate on empathy, we stay focused and stuck on whiteness and the guilt that millions are feeling for the first time. It’s one reason I’ll no longer recommend White Fragility. The whole book stays on white feelings without switching to privileged action.</p> <p>If we stay in this state of empathy, we stay in a state of self-loathing and inaction. We allow our privilege subscriptions to expire month by month.</p> <p>It’s not helpful for us or anyone else.</p> <p>When we superimpose that layer atop it all, no Black feelings or experiences are validated until felt by whiteness. The focus has always been on whiteness. It’s why white tears are so effective.</p> <p>The focus needs to shift; the centres majority needs to learn to decentre itself.</p> <p>It’s one reason why it’s far easier to get people to protest than it is to sign a petition or call a representative. We want to feel part of something; we want our actions to be noticed. We want the credit for our work.</p> <p>I’m not shaming that idea, it’s natural, I feel it too.</p> <p>I think though we need to recognise when we are centring ourselves and radically decentre ourselves, pass the mic, push the spotlight, step aside, go backstage, feel the weight of what we are feeling, yes.</p> <p>If we need to, take time to share our feelings <strong>outward</strong> to less-affected loved ones.</p> <p>And when we do so, we should make sure the feelings we feel are ours and ours alone, reflect and rest, and get to work.</p> #a11y: Accessible or ironic? 2020-11-12T21:04:03Z https://www.tatianamac.com/posts/a11y-abbr/ <p>Is #a11y an accessible hashtag?</p> <p>I get asked this at least once a month, so I'm going to answer it as a quoted tweet thread in case it is helpful to others who are wondering themselves or who also get asked this.</p> <h1 id="a11y-is-a-hashtagged-numeronym.-numeronyms-include-any-abbreviation-that-uses-numbers-to-shorten%2Fto-abbreviate-words." tabindex="-1">a11y is a hashtagged numeronym. Numeronyms include any abbreviation that uses numbers to shorten/to abbreviate words. <a class="direct-link" href="https://www.tatianamac.com/posts/a11y-abbr/#a11y-is-a-hashtagged-numeronym.-numeronyms-include-any-abbreviation-that-uses-numbers-to-shorten%2Fto-abbreviate-words.">📌</a></h1> <p>K9 == canine<br /> 101 == beginner subject<br /> i18n == internationalisation<br /> l10n == localisation</p> <p>Screenreaders will tend to (settings/variations considered) read it in English as &quot;hashtag a-eleven-y.&quot; You might notice that people in the accessibility space will mimic reading it like this IRL.</p> <p>Now that you have the context, to address the question &quot;is the hashtag #a11y&quot; accessible?</p> <p>In short, I would say yes, if used carefully. (More on that later.) And, I would say that this invites a really excellent lesson in accessibility of tech terms broadly speaking.<br /> I'm not ignorant to the fact that a lot of techies rag on the #a11y hashtag for <em>not</em> being accessible because they haven't encountered it before.</p> <p>And many of these techies ask the question facetiously to prove a point and mock the &quot;irony.&quot;</p> <p>To address them, I ask my own facetious questions:</p> <ul> <li>Do you ask with the same snark about blockchain? Cryptocurrency? WYSIWYG? Hooks?</li> <li>Or, do you think you're clever and the first to point out that it's &quot;ironic&quot;?</li> <li>Could you define irony?</li> </ul> <p>Do I think that the #a11y hashtag is immediately clear if you don't know what it is? No, I don't. However, I think it's helpful to differentiate this sphere of accessibility with a searchable, shortened term. (If you search &quot;accessibility,&quot; it's quite broad.)</p> <p>I also think that there's a common pattern we follow when we see something we don't understand: We look it up. Searching &quot;#a11y&quot; yielded me 301,000 search results. The entire first search engine results page (SERP) is full of relevant answers. To make it as accessible as possible, we can borrow a common practice from journalistic &amp;&amp; scientific writing:</p> <p>We should reference its first instance in long form, then follow with its abbreviation. Here are some examples:</p> <p>&quot;Accessibility (#a11y)&quot;<br /> &quot;Accessibility ... #a11y&quot;</p> <p>tl;dr: #a11y is very accessible when we include a reference to its full form when possible; its power is in its searchability and conciseness. When not clear, it is immediately defined with a search. Lastly, I hope that we remain as critical and thoughtful of all words.</p> <blockquote> <p>I think that using a11y is still helpful when included <em>with</em> accessibility. I also think that the voices who tend to be the loudest about this complaint tend to be able-bodied people like myself. While we can continue to educate people on what a11y means, I think we could be spending a lot more energy centring disabled people in our conversations, rather than (and I am guilty of this) taking up the stage with two abled voices recursively debating something that can be solved with a bit of intention.</p> </blockquote> On morality, hero worship, and why judgment isn't helpful 2021-01-02T18:55:02Z https://www.tatianamac.com/posts/why-judgment-isnt-helpful/ <p>This week, I saw a lot of judgment over people joining Facebook's team. In case you missed it, Facebook <a href="https://www.theatlantic.com/technology/archive/2017/10/what-facebook-did/542502/">subverts democracy</a>, <a href="https://www.theverge.com/2019/2/25/18229714/cognizant-facebook-content-moderator-interviews-trauma-working-conditions-arizona">mistreats its human moderators</a>, and if those aren't enough, there is an entire <a href="https://en.wikipedia.org/wiki/Criticism_of_Facebook">Wikipedia page dedicated to the harm it conducts</a>.</p> <p>A lot of the judgment I saw was for Black women, specifically Kristy Tillman, whom I admire very much. A lot of the judgment I saw was by white men and women. I don't know Kristy personally, and I imagine many of these people don't either. So why do they feel the authority to judge a stranger's major life decision?</p> <h2 id="hero-worship-kills-communities" tabindex="-1">Hero worship kills communities <a class="direct-link" href="https://www.tatianamac.com/posts/why-judgment-isnt-helpful/#hero-worship-kills-communities">📌</a></h2> <p>I imagine many people felt disappointed by seeing an idol or hero do something they didn't morally agree with. I imagine some pedestals fell. I think this is a danger of hero worship. We expect our heroes to be better than us in all ways and in a sense, we dehumanise them in the process. We don't allow them to be complete humans. We expect a monolith not a person.</p> <p>Power also comes into play here: We're far more forgiving of majoritised heroes than we are minoritised ones. I see this even within our own communities. We expect better from each other and don't allow each other the richness of being 100 percent flawed. The power becomes further something to examine as to who is criticising whom: A white man criticising a Black woman needs to be understood as a power differential.</p> <p>I imagine that a large career decision like this isn't one that she took lightly. I imagine she considered Facebook's past and present. I imagine I lack all the context that only Kristy has to have made this decision, one that is her right to make. Only she has enough context to judge this decision.</p> <h2 id="on-judgment" tabindex="-1">On judgment <a class="direct-link" href="https://www.tatianamac.com/posts/why-judgment-isnt-helpful/#on-judgment">📌</a></h2> <p>Seeing this judgment of Kristy and others made me think about the nature of judgment and morality. <strong>Who are these people to judge her? What authority do they have on her life? Are they themselves living morally perfect lives (spoiler: a cursory look at their histories would show that they are not morally perfectly beings according to my moral system!)? Are their moral standards hers? Where do they draw the line for partaking in capitalism? Is it just Facebook? Would they work at Palantir? Would they work at PayPal? GitHub? Stripe? Shopify? Which kind of harm are we okay with? What do they think being loud about her decision on the internet accomplishes?</strong></p> <p>It wouldn't be right if I didn't assess the way that I fall into this trap too. I'm definitely guilty of judging people I don't know for their decisions. Every time I see someone unmasked or at a large gathering on IG or getting on a plane I usually mutter something unkind. I feel a moderate amount of judgment for all the Amazon packages in my mailroom. I am not proud of the judgment I have for others.</p> <p>If I'm honest with myself, whenever I judge someone for something, it's more often than not a judgment of myself. We often judge others the harshest when they do something that we ourselves feel insecure about. Sometimes it's jealousy because we'd like to do that &quot;problematic&quot; thing (but don't out of shame) and other times it's us feeling shame for doing that thing too.</p> <p>The thing is: None of us are entirely moral beings. The premise, moral absolution, or the idea that all actions are morally good or bad, is a bit ridiculous to maintain. Whose moral system are we using to judge people? If we're just as flawed, what authority do we have to judge others? Do we have enough context to be effective judges? What is considered good and bad and for whom? (If you're curious about my feelings about the good-bad binary, may I suggest my talk, <a href="https://www.youtube.com/watch?v=s3C88R-WIro">Our Banal Binary</a>?)?</p> <p>I don't know about you, but I do a lot of shit that I'm sure someone judges me for:</p> <ul> <li>I live in a &quot;gentrified&quot; neighbourhood in Portland that pushed out Black Portlanders for white-placed Black Lives Matter signs.</li> <li>I use GitHub, Twitter, Instagram, etc, knowing how they impact ICE, democracy, harm mental health and social movements.</li> <li>I love Karen Walker understanding how her character often said racist, anti-queer, anti-fat, and disableist things.</li> <li>I use Caviar/DoorDash/Lyft knowing how they exploit gig labourers and public transportation infrastructure.</li> <li>I regularly go get coffee in the morning because I'm too depressed to make it, which is an unnecessary exposure during a global pandemic.</li> <li>I've done work for Google, Shopify, and numerous other big tech companies with some pretty bad track records.</li> </ul> <p>I feel some guilt over all these things, which might be banal to some and offensive to others. I'm sure I do a bunch of things I don't even realise are &quot;problematic&quot; yet. The saying, &quot;there is no ethical consumption under capitalism&quot; exists for a reason. I see many people quoting it, but I still see people trying to parse out what is ethical consumption for each other. I know I've done it.</p> <p>Judgment isn't particularly helpful because we're all forced to partake in a bunch of really <a href="https://www.youtube.com/watch?v=TzGfBV67Tac">shitty systems that then inform other systems</a>. How do we extract ourselves from society for long enough to justify ...living? What mental gymnastics do we have to do to justify some decisions over others, when the reality is that most of tech is contributing to majorly problematic systems?</p> <p>The reality is that while we build something better, we still have to live and hopefully derive some joy in the process. How would I like to proceed, then, is what I have to ask myself?</p> <h2 id="a-path-forward-for-myself" tabindex="-1">A path forward for myself <a class="direct-link" href="https://www.tatianamac.com/posts/why-judgment-isnt-helpful/#a-path-forward-for-myself">📌</a></h2> <p>Moving forward, when I catch myself judging others, I'm going to do the following:</p> <h3 id="share-resources-to-extract-ourselves-from-capitalist-and-colonist-systems-as-much-as-possible" tabindex="-1">Share resources to extract ourselves from capitalist and colonist systems as much as possible <a class="direct-link" href="https://www.tatianamac.com/posts/why-judgment-isnt-helpful/#share-resources-to-extract-ourselves-from-capitalist-and-colonist-systems-as-much-as-possible">📌</a></h3> <p>Amplify groups that are building something outside of this disableist, anti-trans, anti-queer, anti-Black system. Shift my resources from soul-sucking, pro-capitalist, pro-colonist global resources to smaller, community-focused ones. Recognise the limitation within this given the power that some organisations have, but still continue to push myself and my communities to do better.</p> <h3 id="be-honest-with-myself-when-and-why-i-am-being-judgmental" tabindex="-1">Be honest with myself when and why I am being judgmental <a class="direct-link" href="https://www.tatianamac.com/posts/why-judgment-isnt-helpful/#be-honest-with-myself-when-and-why-i-am-being-judgmental">📌</a></h3> <p><strong>What value do I feel this has compromised? How would <em>I</em> like to behave to honour my own value? Would <em>I</em> join Facebook's team? How would <em>I</em> like to operate?</strong></p> <p>If I feel the need to interrogate someone else's decisions: <strong>Do I have enough mutual trust with this person to ask them more about their decision? Am I willing to offend them in the process? What is the impact I want to have in having this conversation?</strong></p> <h3 id="invite-curiosity-and-leave-room-for-missing-information" tabindex="-1">Invite curiosity and leave room for missing information <a class="direct-link" href="https://www.tatianamac.com/posts/why-judgment-isnt-helpful/#invite-curiosity-and-leave-room-for-missing-information">📌</a></h3> <p>Judgment implies that I have enough information to form a decision about a situation. But we are often missing so much critical context about other people's lives and are working off of incomplete information. Instead, I can use this opportunity to learn more:</p> <p><strong>What information could I be missing? What biases are at play? Why do I feel so strongly about this? Where might I be able to direct this energy more productively instead?</strong></p> <h3 id="remember-that-the-universe-is-grey-and-to-live-in-'and'-not-'or'" tabindex="-1">Remember that the universe is grey and to live in 'and' not 'or' <a class="direct-link" href="https://www.tatianamac.com/posts/why-judgment-isnt-helpful/#remember-that-the-universe-is-grey-and-to-live-in-'and'-not-'or'">📌</a></h3> <p>The oppressive systems we live under mean that sometimes we have to make really difficult decisions that sometimes seem in direct conflict with our own identities and our own liberation. Some of us might be more impacted by the disableism, others of us by the racism, and others by the anti-transness—some of us by all three.</p> <p>The systems force us to fight against each other for finite resources. Meanwhile, the ruling elite are hoarding most of the world's wealth. By nature of our identities, we will protect and care more about our own causes and fight for them. The moral conflict we often enter and grapple with is by design. The system's most harmful perpetrators are able to do this without losing any sleep guilt-free since the system was made for their success at our collective exploitation. The longer we fight with each other about who will win the Oppression Olympics, the less time we all spend collectively fighting them.</p> <h3 id="avoid-nihilism-and-continue-to-do-better-even-if-it's-hard" tabindex="-1">Avoid nihilism and continue to do better even if it's hard <a class="direct-link" href="https://www.tatianamac.com/posts/why-judgment-isnt-helpful/#avoid-nihilism-and-continue-to-do-better-even-if-it's-hard">📌</a></h3> <p>I think with lines like &quot;there is no ethical consumption under capitalism,&quot; it can be easy to become nihilistic and give up altogether. I think that we have to both accept that we can only do so much and that we can also always do more.</p> <p>Only I have all the context of my own life to recognise where these blurry lines lie and assess them as they shift. Morality is a currency we love to spend for others. The key, I think, is in focusing what <em>I</em> can do better, not what <em>they</em> can do better.</p> <h3 id="live-by-my-own-moral-compass%2C-nobody-else's" tabindex="-1">Live by my own moral compass, nobody else's <a class="direct-link" href="https://www.tatianamac.com/posts/why-judgment-isnt-helpful/#live-by-my-own-moral-compass%2C-nobody-else's">📌</a></h3> <p>I have 30 plus years of trauma, memories, education that all inform where my own morality lies. With each passing year, I learn something that shifts my north star a little bit. I hope that I will continue to make adjustments as I learn to do better and to be better. My moral compass won't be rigid, and instead will be fluid and evolve as I continue to learn how to dismantle oppressive systems and extract internalised disableism, racism, and genderism from my own mind.</p> <h3 id="recognise-my-finite-time-and-energy-and-offer-forgiveness-for-myself-and-for-others" tabindex="-1">Recognise my finite time and energy and offer forgiveness for myself and for others <a class="direct-link" href="https://www.tatianamac.com/posts/why-judgment-isnt-helpful/#recognise-my-finite-time-and-energy-and-offer-forgiveness-for-myself-and-for-others">📌</a></h3> <p>Colonisation and capitalism (and before that, mercantilism) have hundreds of years on us. Activists who are far more effective, knowledgable, and practised than myself have come and gone and not been able to dismantle these oppressive systems. I won't use that as an excuse to quit, but I will use it as a humbling reminder that living a pristinely moral life is nearly impossible so long as these systems dominate.</p> <p>I will continue to work to reduce the harm of the most vulnerable people and of the planet and its sentient inhabitants. I forgive myself and you for doing what we need to do to survive in these difficult systems—I forgive us for the jobs we take, the products we buy, the media we consume—and hope you will forgive us too.</p> prefers-reduced-motion: Taking a no-motion-first approach to animations 2021-03-18T12:56:13Z https://www.tatianamac.com/posts/prefers-reduced-motion/ <blockquote> <p>I recognise that my <code>pre</code> code needs a lot of work, so the code samples are difficult to read and ugly right now. I plan to update that code. Apologies in the meantime; hopefully the message is still understandable!</p> </blockquote> <p>Animations help to breathe life into interactive experiences. Animations, especially when overused and abused, can make people very ill. Through this article, I hope to provide you an approach and guidance to discussing how you/your company use animation thoughtfully and responsibly.</p> <h2 id="animations-can-make-people-sick" tabindex="-1">Animations can make people sick <a class="direct-link" href="https://www.tatianamac.com/posts/prefers-reduced-motion/#animations-can-make-people-sick">📌</a></h2> <p>I experience benign paroxysmal positional vertigo (BPPV), which is a fancy way of saying, the room can start spinning if I turn my head the wrong way. Another side effect is if a website <a href="https://www.sitepoint.com/scrolljacking-accessibility/">scrolljacks</a> or has too much animation, I can become dizzy and have to lay down often for the rest of the day. BPPV is one of many <a href="https://vestibular.org/article/what-is-vestibular/about-vestibular-disorders/">vestibular disorders</a> that impact millions of people.</p> <p>As you can imagine, this can be a problem when you're a frontend engineer and are animating lots of things.</p> <h2 id="user-settings-rule-all" tabindex="-1">User settings rule all <a class="direct-link" href="https://www.tatianamac.com/posts/prefers-reduced-motion/#user-settings-rule-all">📌</a></h2> <p>A core accessibility approach of mine is to let the user determine what's best for them and to enable as many user settings as I can. Most operating systems allow us to reduce the motion and have for a very long time.</p> <p><img src="https://www.tatianamac.com/assets/img/os-accessibility-reduce.png" alt="Mac OS Accessibility Settings with Reduce motion set" /></p> <!-- (../../assets/img/os-accessibility-reduce.png) --> <p>The setting has been exposed now to most modern browsers using a media feature called <code>prefers-reduced-motion</code>. <code>prefers-reduced-motion</code> media query acts as any other media query with two possible options:</p> <ol> <li><code>no-preference</code> (the default): the user has not indicated to &quot;Reduce motion&quot; in their OS and will be served all animations and animations designated explicitly as <code>prefers-reduced-motion: no-preference</code>. [I want to make a critical note here that this is operating on a no-consent model. Ew. The user hasn't necessarily <em>opted into</em> animations. They just haven't checked &quot;Reduce motion.&quot; That could be because they like and can tolerate animations, or, it's equally possible the user <em>doesn't know about this setting.</em> So, I want us to make sure we're not assuming that these users necessarily <em>want</em> animations.]</li> <li><code>reduce</code>: the user has &quot;Reduce motion&quot; checked in their operating system's Accessibility settings and will be served whatever is in the media query for <code>prefers-reduced-motion: reduce</code>.</li> </ol> <p>What this means is that if we can use <code>prefers-reduced-motion</code> to customise our animations based on user settings.</p> <p>We will have two parts to our code:</p> <ol> <li>animation, and</li> <li><code>prefers-reduced-motion</code> media query.</li> </ol> <p>In CSS, it could look something like this:</p> <pre class="language-css"><code class="language-css"><span class="token comment">/*<br />Part 1: Animation<br />Here is where we would put our full animation.<br />*/</span><br /><br /><span class="token selector">.wordArtRotation</span> <span class="token punctuation">{</span><br /> <span class="token property">animation</span><span class="token punctuation">:</span> rotation 2s infinite linear<span class="token punctuation">;</span><br /><span class="token punctuation">}</span><br /><br /><span class="token comment">/*<br />Part 2: Media query<br />Here is where we would put our partial or no animation.<br />*/</span><br /><span class="token atrule"><span class="token rule">@media</span> <span class="token punctuation">(</span><span class="token property">prefers-reduced-motion</span><span class="token punctuation">:</span> reduce<span class="token punctuation">)</span></span> <span class="token punctuation">{</span><br /> <span class="token selector">.wordArtRotation</span> <span class="token punctuation">{</span><br /> <span class="token property">animation</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span><br /> <span class="token punctuation">}</span><br /><span class="token punctuation">}</span></code></pre> <h2 id="start-with-no-motion" tabindex="-1">Start with No Motion <a class="direct-link" href="https://www.tatianamac.com/posts/prefers-reduced-motion/#start-with-no-motion">📌</a></h2> <p>When I collaborate with a designer/animator on an animation, I first ask, &quot;Is this animation <strong>critical</strong> to understanding the content?&quot;</p> <h3 id="when-the-answer-is-%22no%22" tabindex="-1">When the answer is &quot;No&quot; <a class="direct-link" href="https://www.tatianamac.com/posts/prefers-reduced-motion/#when-the-answer-is-%22no%22">📌</a></h3> <p>More often than not, the answer is &quot;no.&quot; (It might take some finessing of the conversation, so remember to emphasise that being <strong>critical</strong> isn't the same thing as being <strong>important</strong> or <strong>nice</strong> or <strong>aesthetic</strong>.) When conceived well, animations should be an <em>enhancement</em> to an explanation.</p> <p>If the animation isn't critical, then my default code is to include <code>animation: none</code> for all of my animations. In CSS, it could look something like this:</p> <pre class="language-css"><code class="language-css"><span class="token atrule"><span class="token rule">@media</span> <span class="token punctuation">(</span><span class="token property">prefers-reduced-motion</span><span class="token punctuation">:</span> reduce<span class="token punctuation">)</span></span> <span class="token punctuation">{</span><br /> <span class="token selector">.wordArtRotation,<br /> .rainbowWave,<br /> .textFadeIn</span> <span class="token punctuation">{</span><br /> <span class="token property">animation</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span><br /> <span class="token punctuation">}</span><br /><span class="token punctuation">}</span></code></pre> <p>Another way it could look is to reverse our thought process. Instead of defaulting to <em>adding</em> animations universally, we can instead <em>only add</em> them for people who have designated <code>no-preference</code>.</p> <p>The code could look something like this:</p> <pre class="language-css"><code class="language-css"><span class="token comment">/*<br />Part 1: Animation<br />Here is where we would put our full animation.<br />*/</span><br /><br /><span class="token selector">.wordArtRotation</span> <span class="token punctuation">{</span><br /> <span class="token property">animation</span><span class="token punctuation">:</span> none<span class="token punctuation">;</span><br /><span class="token punctuation">}</span><br /><br /><span class="token comment">/*<br />Part 2: Media query<br />Here is where we would put our partial or no animation.<br />*/</span><br /><span class="token atrule"><span class="token rule">@media</span> <span class="token punctuation">(</span><span class="token property">prefers-reduced-motion</span><span class="token punctuation">:</span> no-preference<span class="token punctuation">)</span></span> <span class="token punctuation">{</span><br /> <span class="token selector">.wordArtRotation</span> <span class="token punctuation">{</span><br /> <span class="token property">animation</span><span class="token punctuation">:</span> rotation 2s infinite linear<span class="token punctuation">;</span><br /> <span class="token punctuation">}</span><br /><span class="token punctuation">}</span></code></pre> <p>The difference between the first code block and the second one comes down to browser support. The support for <code>prefers-reduced-motion</code> is fairly strong, but still has some gaps (see <a href="https://caniuse.com/?search=prefers-reduced-motion">Can I Use: Prefers reduced motion</a>). Defaulting to this latter approach will mean that all users will default to no animation, including users whose browsers won't recognise the media query.</p> <p>The difference is not just in code, but in mindset shift. I won't tell you which one is right for you/your org, but I think this type of differentiation is important for your design system, for example. I find that sharing the technical approach with the designer gets them thinking about how they intend for their animations to exist in different environments (and getting them to cater their animations to user preferences).</p> <p>To turn these individual conversations into a systemic one, you could include animation principles with guidance around how your design system would like animations to be not only coded, but conceived. Providing this context in your documentation will help to guide better animator/designer-developer collaboration.</p> <p>Framer Motion sets a good tone for accessibilty in documentation with their <a href="https://www.framer.com/api/motion/guide-accessibility/">Guide to Accessibility</a>.</p> <h3 id="animation-specific-stylesheet" tabindex="-1">Animation-specific stylesheet <a class="direct-link" href="https://www.tatianamac.com/posts/prefers-reduced-motion/#animation-specific-stylesheet">📌</a></h3> <p>Since we've all agreed that our animations aren't critical to perceiving our page (winky face), we can take that one step further and <em>only</em> serve our users CSS if they are cool with <code>prefers-reduced-motion: no-preference</code>.</p> <p>Here's what you might include in your HTML file in the <code>&lt;head&gt;</code> tag:</p> <pre class="language-html"><code class="language-html"><span class="token tag"><span class="token tag"><span class="token punctuation">&lt;</span>link</span><br /> <span class="token attr-name">rel</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>stylesheet<span class="token punctuation">"</span></span><br /> <span class="token attr-name">href</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>animations.css<span class="token punctuation">"</span></span><br /> <span class="token attr-name">media</span><span class="token attr-value"><span class="token punctuation attr-equals">=</span><span class="token punctuation">"</span>(prefers-reduced-motion: no-preference)<span class="token punctuation">"</span></span><br /><span class="token punctuation">/></span></span></code></pre> <p><a href="https://web.dev/prefers-reduced-motion/">Code snippet from Web.dev: prefers-reduced-motion</a></p> <p>What this requires is we've placed all our animations into one CSS file. If our user has indicated &quot;Reduce motion&quot; (and thus, the media query <code>prefers-reduced-motion: reduce</code> is true), then the user isn't even served our stylesheet at all. Separating our CSS animations into its own stylesheet can be a very daunting task on a large codebase, so this could require some heavy refactoring. But if CSS animations is a large part of your codebase, it might also mean huge performance savings!</p> <p>I love this option because it is putting accessibility and performance on the same team—as they should be!</p> <h2 id="when-the-answer-is-%22yes%22" tabindex="-1">When the answer is &quot;Yes&quot; <a class="direct-link" href="https://www.tatianamac.com/posts/prefers-reduced-motion/#when-the-answer-is-%22yes%22">📌</a></h2> <p>If the animation is critical to understanding, then I ask what other ways we intend to serve up that information, because without alternates, we're excluding anyone who won't be able to see the animation (whether due to physical disability, data/technical restrictions, situational, etc).</p> <h3 id="questions-i-typically-ask-in-response" tabindex="-1">Questions I typically ask in response <a class="direct-link" href="https://www.tatianamac.com/posts/prefers-reduced-motion/#questions-i-typically-ask-in-response">📌</a></h3> <p>Sometimes this conversation between the person who conceived the animation and the person implementing it doesn't happen. That is a damn shame, because I find that's where we needlessly animate things that add exactly zero value to the conversation.</p> <p>I also ranked these questions in level of spiciness for <s>no other reason than my entertainment</s> to cater your communication to the context of your conversation.</p> <ul> <li>Why is this animation critical? 🌶</li> <li>What other ways can we serve up the critical animation? (e.g., through written text, through a static diagram, etc) 🌶🌶</li> <li>If the animation can't load for someone or they can't see it, what was your plan? 🌶🌶🌶</li> </ul> <p>Most of the time, I'm negotiating a way to get information to be served in <em>more</em> ways. Changing the answer from &quot;yes, this animation is critical to understanding&quot; to &quot;no, this animation is not critical but an enhancement.&quot; Remember, accessibility means giving the users as many, diversified options as possible, not determining which option works best for them.</p> <h2 id="beyond-css-animations" tabindex="-1">Beyond CSS animations <a class="direct-link" href="https://www.tatianamac.com/posts/prefers-reduced-motion/#beyond-css-animations">📌</a></h2> <h3 id="auto-playing-video" tabindex="-1">Auto-playing video <a class="direct-link" href="https://www.tatianamac.com/posts/prefers-reduced-motion/#auto-playing-video">📌</a></h3> <p>Auto-playing anything is cruel to both users who experience vestibular disorders <em>and</em> neurodivergent users for whom autoplay can cause major focus issues.</p> <p>CSS-tricks covers this well with <a href="https://css-tricks.com/reduced-motion-picture-technique-take-two/">Reduced motion picture technique: take two</a>.</p> <h3 id="javascript-animations" tabindex="-1">JavaScript animations <a class="direct-link" href="https://www.tatianamac.com/posts/prefers-reduced-motion/#javascript-animations">📌</a></h3> <p>Now while I am very pro-CSS animations (and think they can handle most standard animations), I recognise that CSS can't handle <strong>all</strong> types of animations, for example, <code>react-spring</code> animations. I'm not yet an expert in these areas. Instead of taking weeks to learn this all to regurgigate it back to you right now, I wanted to share some existing articles that already do a great job of distilling down this information.</p> <p><strong>Vanilla JS:</strong> <a href="https://web.dev/prefers-reduced-motion/#demo"><code>window.matchMedia</code> demo from web.dev</a></p> <p>React: <a href="https://github.com/infiniteluke/react-reduce-motion">useReduceMotion Hook by infiniteluke</a></p> <h2 id="further-reading" tabindex="-1">Further Reading <a class="direct-link" href="https://www.tatianamac.com/posts/prefers-reduced-motion/#further-reading">📌</a></h2> <p>Commentary on <code>prefers-reduced-motion</code> with authors covered that I did not. (Note there will be some introductory overlap)</p> <p><a href="https://alistapart.com/article/accessibility-for-vestibular/">A List Apart: Accessibility for vestibular disorders</a><br /> Provides guidance to designing for vestibular disorders with tactical tips</p> <p><a href="https://www.a11ywithlindsey.com/blog/reducing-motion-improve-accessibility">A11y with Lindsey: Reducing motion to improve accessibility</a><br /> Code snippets with brief rundown on adding a toggle to your page and using <code>localStorage</code> to preserve user setting</p> <p><a href="https://www.joshwcomeau.com/react/prefers-reduced-motion/">Josh Comeau: Accessible Animations in React</a><br /> React Code snippets</p> <h2 id="questions-and-corrections" tabindex="-1">Questions and Corrections <a class="direct-link" href="https://www.tatianamac.com/posts/prefers-reduced-motion/#questions-and-corrections">📌</a></h2> <p>For questions, please <a href="https://www.twitter.com/TatianaTMac">reach out on Twitter</a>! I can't promise to answer all your questions, but I'll try my best!</p> <p>For corrections (typos, factual inaccuracies), please file a <a href="https://github.com/tatianamac/tm11ty/issues">GitHub issue</a>.</p> Let me learn: Provide tutorials in more formats 2021-03-24T00:34:35Z https://www.tatianamac.com/posts/let-me-learn/ <p>Hyperaware of how annoying it is when you want a recipe and have to read a 20-paragraph story about someone's great gran (and feeling bad you don't care), I have provided a <a href="https://www.tatianamac.com/posts/let-me-learn/#the-one-format-problem">skip link</a> if you don't care about my back story to this post.</p> <h2 id="context-for-this-post" tabindex="-1">Context for this post <a class="direct-link" href="https://www.tatianamac.com/posts/let-me-learn/#context-for-this-post">📌</a></h2> <p>My partner and I were watching TV and he said, &quot;Oh, the closed captions are off. Do you want me to turn them on?&quot; It was the moment that I realised:</p> <ol> <li>The dude who wrote the Love Languages book had a limited imagination (also if you ever read the book it is hugely misogynistic! I actually threw the book after I read it). My love language is being asked if you want closed captions on.</li> <li>I could not tell you a single thing that happened for the last 30 minutes prior.</li> <li>People often only think of closed captioning as a service for Deaf and Hard of Hearing folks. While we should centre them in our applications, I benefit from it as a sighted and hearing person.</li> </ol> <p>Whenever I encounter a new course and it's video only without a transript OR closed captioning, I am overwhelmed with sadness. No matter how engaging, funny, well-produced the video is, I will not be able to retain it unless I cannot read along.</p> <p>If I want to sing along to a song, I have to pull up the lyrics.<br /> If I want to listen to an audio book, I have to coordinate make sure I have the book too, so I can visually read along.<br /> If I want to listen to a podcast, I have to follow along the transcript.</p> <p>If this sounds cumbersome, it is. I usually choose to go straight to reading at least 95% of the time and skip the other half.</p> <p>I read fast and I retain what I read. This is my comfort zone and my learning style. But many other people are the opposite. It should be okay that we each learn differently and need different things to succeed.</p> <h2 id="the-one-format-problem" tabindex="-1">The one-format problem <a class="direct-link" href="https://www.tatianamac.com/posts/let-me-learn/#the-one-format-problem">📌</a></h2> <p>Unfortunately, so many of our tutorials (and media in general) only comes in one form. When our teachings are only provided in one media, in one language, in one <em>form</em>, it is inherently inaccessible to some subset of our students.</p> <p>I imagine most of us teach to provide opportunities and access. Creating access requires us to provide more than one way to take in our content. I've broken down each base medium with some of its benefits, tips, and opportunities to make your content more accessible.</p> <h2 id="long-form-written-content" tabindex="-1">Long-form written content <a class="direct-link" href="https://www.tatianamac.com/posts/let-me-learn/#long-form-written-content">📌</a></h2> <h3 id="benefits" tabindex="-1"><strong>Benefits</strong> <a class="direct-link" href="https://www.tatianamac.com/posts/let-me-learn/#benefits">📌</a></h3> <ul> <li>Supported by screen readers, Braille displays, and many other assistive technologies</li> <li>Can be translated into other languages somewhat fluidly and for free (though results might vary!)</li> <li>Starting with a solid HTML structure and using semantics will get you very far</li> <li>Very lightweight, creating better access for spotty/low internet connectivity/data</li> </ul> <h3 id="tips" tabindex="-1">Tips <a class="direct-link" href="https://www.tatianamac.com/posts/let-me-learn/#tips">📌</a></h3> <ul> <li><strong>Use anchor tags and linking</strong>: One of the most annoying things to do is to have to scroll through a long tutorial to find a specific section. Creating anchor tags allows people to deep link into sections (which is also a great check for accessibility to make sure your header tags are logical and provide the hierarchy you want).</li> <li><strong>Add diagrams and visuals where possible:</strong> Make sure that the diagrams tell a story that the words don't, or tell it in a different way that might help someone to learn. Visuals can guide and break up a story, especially for people who struggle to focus on written content. Make sure you write clear <code>alt</code> text or <code>longdesc</code> (for longer explanations).</li> </ul> <h3 id="opportunities" tabindex="-1">Opportunities <a class="direct-link" href="https://www.tatianamac.com/posts/let-me-learn/#opportunities">📌</a></h3> <ul> <li> <p><strong>Record an audio file of you reading the written content.</strong><br /> I first saw this idea on Lindsey Kopacz' blog, <a href="https://www.a11ywithlindsey.com/blog/">a11y with Lindsey</a>. People can hear pronunciation and personality, learn the language auditorily, and perhaps enjoy it while doing something else (people who don't rely on screen readers don't often think to use them to have things read for them). Come up with a strategy for whether or not you'll read through code snippets and if so, how.</p> </li> <li> <p><strong>Visualise written content into a more dynamic way.</strong><br /> Many people, some neurodivergent folks especially, benefit from information being distilled into diagrams, comics, or less word-dense formats. Visuals can also benefit people who might not read/understand the language you wrote it in. They can also be an effective lead-in to your long-form from visually-driven avenues like Pinterest or Instagram.</p> </li> <li> <p><strong>Build in a way for people to translate your posts.</strong><br /> Many people have generously offered to translate my writing into languages cooler than English and I always want to take them up on it. I don't currently have a great mechanism on my site to share them. Don't be like me. Build in a language feature!</p> <p>(While people can rely on automated translations services, there is something much better about having a human interpret your post into another language. I also love the community building feels. Google Translate is mostly just rude to me.)</p> </li> </ul> <h2 id="video-content" tabindex="-1">Video content <a class="direct-link" href="https://www.tatianamac.com/posts/let-me-learn/#video-content">📌</a></h2> <h3 id="benefits-1" tabindex="-1"><strong>Benefits</strong> <a class="direct-link" href="https://www.tatianamac.com/posts/let-me-learn/#benefits-1">📌</a></h3> <ul> <li>Gives both audio and visual context</li> <li>Emotion and tone can be better conveyed</li> <li>Fluidly switch between person talking and supporting visuals</li> </ul> <h3 id="tips-1" tabindex="-1"><strong>Tips</strong> <a class="direct-link" href="https://www.tatianamac.com/posts/let-me-learn/#tips-1">📌</a></h3> <ul> <li><strong>Consider clipping long tutorials down to shorter chapters</strong> so that people can download/listen to what they need, break up their viewing sessions (particularly helpful for attention challenges).</li> <li><strong>Ensure you are serving videos in multiple formats and sizes,</strong> prioritising next gen formats like webm for the browsers that can handle them, and mp4 for all else. Use device detection and queries to serve users with the most appropriate video format for them.</li> <li><strong>Turn autoplay off</strong>: Autoplay causes unnecessary bandwidth/data/battery usage especially for data-only mobile users, can make people with vestibular disorders sick, <strong>and</strong> can interfere with people using screen readers. Videos with audio can be jarring if someone is in a quiet place.</li> <li><strong>Remove audio from muted video files</strong>: If you are serving a video file that you don't intend to provide audio for, make sure you remove the audio from the file itself. Also, if you're serving a video file, consider providing a gif alternative as a fall back.</li> </ul> <h3 id="opportunities-1" tabindex="-1"><strong>Opportunities</strong> <a class="direct-link" href="https://www.tatianamac.com/posts/let-me-learn/#opportunities-1">📌</a></h3> <ul> <li> <p><strong>Closed captioning</strong> allows people to follow along and read your video (if they're not able to listen due to a disability or situational context).<br /> Ideally, closed captioning should be a togglable feature of your video player. However, in platforms where this is not yet possible (i.e., TikTok, Instagram, etc), please use a captioning app to add open captions. (I like <a href="https://apps.apple.com/us/app/mixcaptions-video-captions/id952426779">MixCaptions</a> for iOS.)</p> <p>Open captions are burned onto the media and cannot be turned off. While they are not ideal, they are better than no captions.</p> </li> <li> <p><strong>Transcripts</strong> allows people who prefer reading/not able to watch a video to read/skim all the content. Transcripts are also more translatable and searchable and lightweight. If someone can't load your massive video due to a slow connection, they can still benefit.</p> </li> <li> <p><strong>Videos, tutorials and talks, can be converted into engaging long-form written content</strong> beyond just a transcript. Something Ethan Marcotte does that I really admire (well, perhaps second to his impressive meme database) is that he translates his talks into webpages (see <a href="https://ethanmarcotte.com/wrote/the-world-wide-work/">The World-Wide Work</a>).</p> </li> </ul> <p>Note that I didn't break out audio into its own separate category. Much of the principles above apply for audio (such as transcripts, preventing audio play, etc).</p> <h2 id="repos%2Fpens%2Fsnippets" tabindex="-1">Repos/Pens/Snippets <a class="direct-link" href="https://www.tatianamac.com/posts/let-me-learn/#repos%2Fpens%2Fsnippets">📌</a></h2> <p>While repos, pens, and snippets can supplant both written and video content, they sometimes go out into the wild in their own. I provided some ways to help guide people within the snippets.</p> <h3 id="tips-2" tabindex="-1">Tips <a class="direct-link" href="https://www.tatianamac.com/posts/let-me-learn/#tips-2">📌</a></h3> <ul> <li><strong>Test embed accessibility.</strong><br /> If you're relying on a third-party embed (from a code sandbox type environment like JSFiddle, CodeSandbox, or CodePen), make sure you test the keyboard and screen reader accessibility of the embed once it gets into your site.</li> <li><strong>Ensure you're using a sufficiently colour-contrasted code theme</strong> or allow people to change it.<br /> Many of the themes are very low contrast. Test your theme to make sure it passes <a href="https://www.w3.org/WAI/WCAG2AA-Conformance">WCAG AA</a>.</li> <li><strong>Provide code comments and name things as though this might be the only thing your student sees!</strong><br /> Even if your repo/pen might be part of a demo or longer-written content, it may get lost in the wild on its own. Provide as much guidance as you can line by line. Why did you make the decisions that you did? What are some &quot;gotchas&quot; you can help prevent people from getting caught up on?</li> <li><strong>Link back to your main thread in comments too</strong><br /> While you should prepare for the worst, make sure that you link back to any longer form content that exists so that if someone finds this first, they can loop back to your video or written content.</li> </ul> <p>Through these tips, I hope I've expanded the way you think about your content. You might be thinking, &quot;gosh, this is a lot of work.&quot; It is!</p> <p>How I think about it is: We don't have to do it all at once. Release your tutorial in the first format you feel most comfortable in. Then, build in time to extend it into a second, or third format. Perhaps you can pair/trade with a friend who enjoys a format you hate! The goal should not be to stop, but instead to keep imagining new and inventive ways to make our content as acccessible to as many people as possible, especially those who are usually given the biggest barriers to entry.</p> Why'd you park like such an a-hole?: Inviting curiosity, context into engineering, our lives 2021-09-03T17:50:33Z https://www.tatianamac.com/posts/context-in-engineering/ <p>If you drive and have had to parallel park, you might have encountered a situation where you <em>could have</em> parked somewhere if that Prius just had <em>pulled up a bit</em> or split the difference <em>better</em>.</p> <p>If you're even-tempered, you drove around the block and found another spot. If you're easy to temper, you might have cursed under your breath—or maybe, just maybe—you were having a real one and even left a <em>note</em>.</p> <p>Cursed as a deeply analytical person, whenever I encounter a bad park job, my first question is, &quot;why <em>would</em> they have parked that way?&quot; I try to ask it without as much snark as possible (I have my days, still).</p> <p>It's very easy for us to assume that that person actively chose to park like an a-hole and decided to ruin a few other people's day for shits and giggles.</p> <p>Most of the time we'll never know. Equally likely to assume stranger sociopathy, we can write a more likely story, too: They didn't <em>choose</em> to park that way. Relatably: Intent does not erase impact, even in parking. So yeah, they probably didn't actively seek to ruin your life in this minor way, but instead, did it unaware, thinking about the global pandemic, in a rush, or even equally likely, they <em>inherited</em> that spot.</p> <p>Parallel parking is one of the most brilliant examples of feedback loops. We have some general guidelines (at least here in the U.S., let me tell you about my time in Cairo and how parking works there), but for the most part, you park <em>around</em> other people and other things (fire hydrants, trash cans, driveways, unofficial cones that busybodies leave that mean nothing but I still weirdly abide by). So, in a perfect universe where all our cars are the same lengths and driveways are spaced out equidistantly, we could make more assumptions.</p> <p>But given the chaos that is humankind, parallel parking is a complete mess. It's highly likely that the conditions you see before you are not the ones the a-hole parker had.</p> <p>Yet when we're rushing to get our own spot, we're so quick to project pristine conditions for others—hypocritically while we're experiencing the very chaotic impact of parallel parking ourselves!</p> <p>Inheriting a chaotic system and expecting pristine conditions prior sounds deeply familiar to how many of us navigate inheriting code bases. It is easy to come into a codebase with all of our own context and assumptions as to how it should be in a pristine environment.</p> <p>Just the other day, I caught myself asking, &quot;why the fork balls would you have done it that convoluted way?&quot; Several hours later, I had refactored an entire flow. And then a day later, when a few things broke, I understood why the previous engineer had done it the convoluted way they did.</p> <p>Said another way, they parked their car behind a big truck and when I got there, all I saw was a big gap.</p> <p>I wrongly made an assumption about the <em>conditions</em> and <em>context</em> under which the previous engineer made that decision. It wasn't until I went to park in the same spot that I realised the reasoning.</p> <p>I stopped to reflect on how I can train myself out of this habit:</p> <ol> <li> <p><strong>Assume no intent and observe all impact.</strong> We're often told to assume positive intent because we want to believe in the &quot;good in all people.&quot; I have a lot of thoughts on this binary thinking (saved for another day, though you can watch my talk if you're curious). But here, I think we'd be better off to not assume anything. Speculation is fine, as long as we recognise the only way to know for sure is to ask the previous engineer (and that's not always possible).</p> </li> <li> <p><strong>Leave things better than you found them—when possible.</strong> In the parking situation, you can do your best to not worsen the situation for people downstream. Try to neutralise the ill-effects of the unideal park job. The code equivalent is to document. I made sure to document against why I made the decision I did above (redoing, in part, the previous engineer's work. Leaving notes for the future engineer lets them know why I parked like an a-hole, so to speak.</p> <p>Even more proactively, if you find yourself writing code that is unexpected (which yes, requires a great deal of self-awareness and experience), document it. I am of the school of thought it's better to overdocument than underdocument.</p> <p>The worst thing that happens with overdocumentation is the (usually arrogant) engineer reads the comments and thinks it's unnecessary (insert cries of &quot;self-documenting code&quot;). The worst thing with underdocumentation is you take down an entire system—I know what I'm picking, but you do you, foo.</p> </li> <li> <p><strong>Approach with curiosity over critique.</strong> It was a really humbling moment for me to realise that I had assumed the previous engineer <em>chose to code like an a-hole</em>, because I generally try to approach with <em>curiousity over critique.</em> But we all have better and worse days. I catch myself regularly telling myself, <em>curiosity, not critique.</em></p> <p>When I'm confused by a code decision, I force myself to answer, <em>why <strong>would</strong> they do it that way?</em> I make a little list. The list is different each time, but one item that is ever present is: <em>There is a lot of ways to do this, and this might have been the best way they knew how.</em></p> <p>Like in the parking situation, we rarely have enough information or context to critique effectively. We make a lot of assumptions in critique, but in curiosity, we can <em>ask</em>, we can <em>speculate</em> but ultimately never assume anything. Curiosity is expansive, critique is reductive.<br /> Also, if you feel in a position to critique, it's a gamble. You're allowing yourself to show your ass if you're wrong. Curiosity always allows room for evolving information, missing context, and knowledge you didn't have. After two years in a pandemic, I would hope we'd all see how quickly things can evolve and change on a global scale.</p> </li> </ol> <p>I hope the next time you encounter a shitty park job or a strange function or even a weird situation in your life that makes no sense, you can count to ten, speculate a few reasons why they might have done it that way, and invite curiosity and context into your life.</p> <h2 id="questions-and-corrections" tabindex="-1">Questions and Corrections <a class="direct-link" href="https://www.tatianamac.com/posts/context-in-engineering/#questions-and-corrections">📌</a></h2> <p>For questions, please <a href="https://www.twitter.com/TatianaTMac">reach out on Twitter</a>! I can't promise to answer all your questions, but I'll try my best!</p> <p>For corrections (typos, factual inaccuracies), please file a <a href="https://github.com/tatianamac/tm11ty/issues">GitHub issue</a>.</p> Banal binaries: How power plays into how we communicate 2021-10-12T10:04:22Z https://www.tatianamac.com/posts/power-binaries/ <p>At work, I like to observe who:</p> <p>requests v. demands<br /> is direct v. is indirect<br /> responds v. ignores</p> <p>The data reveals a lot about how people wield power, especially subconsciously.</p> <p>Requests are often, “when you get a chance, could you please do X? I would like it by Z date.”</p> <p>Demands are, “you need to do X by Z date.”</p> <p>But it gets more complicated:</p> <p>An indirect demand could look like, “we need to do X ASAP.” “We” in a lot of situations is an unspoken substitute for “you.” ASAP is often an ambiguous urgency. power becomes a critical piece of this.</p> <p>“We” can hold a collaborative tone when power is equal and trust is shared.</p> <p>As with many things, “we”—a banal pronoun—can become complicated when you look at power.</p> <p>Going back to the request v. demand, “we need to…ASAP” can be code for “I want you to do this by a time I haven’t disclosed but will drive urgently toward. When done, I’ll take credit.”</p> <p>There is often a passive understanding between both parties that “we” means “you” and “ASAP” means “I will move the deadline (up) as it suits me.”</p> <p>Situations like this are anxiety-ridden, especially for many of us neurodivergent folks.</p> <p>Now, this is when ignoring comes into play.</p> <p>As a highly anxious, high producing person, I often ask a lot of upfront questions (trauma is a strong journalist) to avoid the ambiguity that the above situation creates.</p> <p>Often I notice those questions just… go unanswered. now here you might respond “assume positive intent.”</p> <p>And I would respond that “I don’t assume any intent, but observe all impact.” It’s always possible someone isn’t intentionally ignoring me; an ADHD person like me knows that especially well.</p> <p>But the impact remains: not getting clarity leads to massive anxiety and ambiguity.</p> <p>The ignoring is often a passive and subconscious wielding of power in at least two ways.</p> <ol> <li>People in power are used to being accommodated by people who only speak when spoken to; the expectation is that the helpers just know what to do, and do it without disturbing the helped. helpers should know.</li> </ol> <p>Failure to just know are an issue of the helper’s “lack of expertise or initiative” not of the helped’s poor and lacking communication.</p> <p>The person with less power is far more likely to be blamed for dropping the ball, and here, the former collective “we” becomes “they.”</p> <ol start="2"> <li>The person can later decide if the passive indirect demand was actually important or not. If not important, they can easily come back and say, “oh, it wasn't that important.” If it is, they can dump the blame, “oh, I thought you had it sorted.” Retroactive hindsight is a thing, so depending on how things went, they have set up an exit for themselves and a trap for you.</li> </ol> <p>Does this sound Machiavellian? It is, and also, I think that more often than not, corporatism and capitalism encourage/require us to be Machiavellian without even acknowledging it. In many ways, this is worse because we aren't even aware of or intending to commit a lot of this harm. We are even less able to control our harm here. It's not intentional on our part, but it is intentional design by the system.</p> <p>The system always favours the ones with the most power and is designed to passively and subversely support that group. The person/people with less power is/are far more likely to be blamed for dropping the ball, and here, the former collective “we” becomes “they.”</p> <p>On the flip side “annoying” helpers like me will insist on getting answers and keep a paper trail (trauma the journalist!) and we are seen as “difficult, unaccommodating, needs a lot of direction.”</p> <p>The game is often manipulated to be lose-lose for the less powerful.</p> <p>Now, when I say I observe this it doesn’t mean I isolate and document each interaction. I understand we live in a pandemic and many of our actions are banal and unpredictable.</p> <p>I get it. I’m here too. However… what I do mean is that I observe these binaries from the first paragraph as <em>patterns,</em> especially at scale of dozens of interactions. Patterns of power, even if passive and subconscious, often tell me a lot. They show me ways and means to protect myself at work.</p> <p>This entire power dynamic is one of the most harmful and yet quiet ways that white supremacy culture thrives in the workplace.</p> <p>It’s a way that many mediocre majoritised people thrive with little effort while exceptional minoritised people barely survive with a lot of effort.</p> <p>This power dynamic, like white supremacy, goes unnoticed because it is baked into the architecture of the organisation, the politics of the workers, and ultimately, what it takes to survive.</p> <p>I hope this thread opens up more awareness to it, and conscious actions to resist.</p> <h2 id="questions-and-corrections" tabindex="-1">Questions and Corrections <a class="direct-link" href="https://www.tatianamac.com/posts/power-binaries/#questions-and-corrections">📌</a></h2> <p>For questions, please <a href="https://www.twitter.com/TatianaTMac">reach out on Twitter</a>! I can't promise to answer all your questions, but I'll try my best!</p> <p>For corrections (typos, factual inaccuracies), please file a <a href="https://github.com/tatianamac/tm11ty/issues">GitHub issue</a>.</p> Enter strawman: Build a tangible form to anchor esoteric discussions 2023-03-08T01:47:33Z https://www.tatianamac.com/posts/enter-strawman/ <p>You ask, &quot;Should I be making a new directory for this feature I'm building?&quot; You expect a return value of: &quot;yes&quot; or &quot;no.&quot; You had a 50% chance of guessing the &quot;correct&quot; answer...right?</p> <p>Four hours, 49 messages, 13 participants (4 whom you've never met?) later, you have not a boolean but instead something rather <em>undefined</em>:</p> <p>&quot;What makes a feature a feature?&quot;<br /> &quot;Isn't everything in React a component?&quot;<br /> &quot;Where do I put functions that aren't hooks?&quot;<br /> &quot;Why are some of the data objects in snake case and others in kebab case?&quot;<br /> &quot;Why did we invent React when it's just PHP and a side of jQuery?&quot;</p> <p>Bigger, harder, sometimes just unrelated questions around how we define directories writ large have buried your question. At this point you might give up and leave this unanswered thread to disappear into the Slackwork. (I would blame neither you nor myself for the times I may or may not have have allegedly done this.)</p> <p>If you've not experienced this situation yourself, it almost always starts off with a <em>harmless question.</em></p> <p>Harmless questions are often an unintentional open invitation—a bat signal—for every opinion that's ever existed peripherally related to the question. People generally start off trying to answer the question directly and in earnest. Whatabouts, advocacy for the Devil, edge cases, differences in experiences, flock toward the bright light of existentialism that I (only sort of) exaggerated above.</p> <p>When you find circled by bats[1] as I often do, enter strawman.</p> <p>A strawman argument is when someone creates a false premise or variation upon the core argument in order to show how the core argument is false. Make argument A, they'll say argument B, which kinda looks like A, is false. Therefore argument A is false.</p> <p>While incredibly annoying at the family dinner table and in Congressional session alike, building a strawman to be a unified mental model grounds discussions in reality.</p> <p>In the case of the directory, your strawman could be an ASCII diagram of a folder structure with real examples from your code base. Whatever your question scope, determine what form your strawman is—a diagram, a list of options, pseudocode. Not even correct, perfect, or even particularly good, the strawman's main job is to just exist. I'd strongly suggest doing it quickly and not allowing for too much editing or analysis as you put down the first draft.</p> <p>The strawman is built to stand in the field and divert the bats away from the light and toward something tangible, adjustable, and most importantly: held in the same form.</p> <p>The difference between the strawman your cousin builds at Christmas dinner to prove a conspiracy theory and the one you'll build: Your strawman is there to build up an idea rather than to tear it down.</p> <p>The question vortex happens because each participant responding to that question likely imagines something different in their head than the next person. Each person frames their questions and critiques through <em>their</em> mental model, which may be very well-defined or amorphous depending on how they think (look up &quot;can you visualise an apple&quot;).</p> <p>By doing this exercise, I have found:</p> <ul> <li>Visualising and revising technical details in your head is incredibly difficult. Most people's mental models we create don't actually hold state. Unless you have an eidactic memory, how you envision this modal probably subconciously shifts a bit with each piece of the conversation. Unscientific and shifty, it's akin to marking and hanging art with your arms, something I may or may not have allegedly done.</li> <li>What may be valid theoretical concerns often don't manifest into applicable issues—or at least don't need to be solved now if you can't produce any real examples of it. Pulling in real data will often show you this, as it did me when we used real features and components in a directory exercise.</li> <li>Conversations that begin with a question, no matter how innocuous, will invite other questions. We should encourage that, imho, as it means that people are leading with curiosity. We also must move forward and not stay here too long where you start to question if reason is reasonable. Don't stay in a question stasis; it's a one way road to nihilism.</li> </ul> <p>The strawman aligns our mental models (mostly, as best as we can), forces us to reconcile the theoretical concern with tangible application, allows us to ask questions with a form of reference. Sometimes the strawman will be closer to its final form than you might think. Other times, the difficulty of crafting the strawman or the wretchedness of the form may help you to move on from the exercise. Regardless of the outcome, the next time you find yourself in a endless engineering musings vortex, ask your team... <em>What are we going to do? Do you want to build a strawman?</em> ∎</p> <p>[1] If you are here to question whether a strawman and a scarecrow are the same thing, did you notice I didn't ever use the word scarecrow and just subsumed it into strawmen like it was always one thing? Are you wondering how often this trickery happens? Why did they call it a strawman and not a scarecrow? Are you curious why I didn't degender strawman? Are you making up reasons? Why didn't you listen to Admiral Akbar? Because yeah, this is a trap, you sweet little batcrow.</p>