<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0" xmlns:atom="http://www.w3.org/2005/Atom" xmlns:dc="http://purl.org/dc/elements/1.1/">
  <channel>
    <title>DEV Community: Shashi Lo</title>
    <description>The latest articles on DEV Community by Shashi Lo (@shashi_lo).</description>
    <link>https://dev.to/shashi_lo</link>
    <image>
      <url>https://media2.dev.to/dynamic/image/width=90,height=90,fit=cover,gravity=auto,format=auto/https:%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Fuser%2Fprofile_image%2F395856%2F089afbe3-de73-4f63-8572-4ff74840a21d.jpg</url>
      <title>DEV Community: Shashi Lo</title>
      <link>https://dev.to/shashi_lo</link>
    </image>
    <atom:link rel="self" type="application/rss+xml" href="https://dev.to/feed/shashi_lo"/>
    <language>en</language>
    <item>
      <title>A Development Bootcamp after a Development Bootcamp</title>
      <dc:creator>Shashi Lo</dc:creator>
      <pubDate>Mon, 09 Dec 2024 15:32:38 +0000</pubDate>
      <link>https://dev.to/shashi_lo/a-development-bootcamp-after-a-development-bootcamp-1p2p</link>
      <guid>https://dev.to/shashi_lo/a-development-bootcamp-after-a-development-bootcamp-1p2p</guid>
      <description>&lt;p&gt;This project has been a secret until now.&lt;/p&gt;

&lt;p&gt;&lt;iframe width="710" height="399" src="https://www.youtube.com/embed/JfLfIKMgnDQ"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;h2&gt;
  
  
  Bootcamp Plus?
&lt;/h2&gt;

&lt;p&gt;That's I envisioned this. With all the services out there offering plus subscriptions, this felt like it aligned. Attending a development Bootcamp is a great service to offer, but it comes with ads. Nothing wrong with bootcamps, but as you go through the program, it's going to only teach you as much as your brain can handle in the short amount of time given.&lt;/p&gt;

&lt;p&gt;This is where an "AHA" moment occurred for me. I have spoken to many people who went to development bootcamps and self-taught developers, career switching into the tech industry. There was a common thread, it took longer to land a full-time position than they anticipated. &lt;/p&gt;

&lt;p&gt;Is there a way for a shorter timeline? Were there programs out there that could support these individuals who have graduated a bootcamp, but now are left to learn on their own? And for those self-taught learners, was there any sort of support for them?&lt;/p&gt;

&lt;p&gt;These questions came crashing down on me. When I started in the development world back in 2006, there was no social media for developers. The people I knew in the tech industry were my co-workers. I did not have a mentor, but I had co-workers helping me out. It was not easy going to them for help because I felt hopeless. I felt like I needed to understand these concepts and not having to always be asking questions. I didn't feel comfortable going to them about my development issues. I needed a mentor and I did not know how to find one, nor did I know I needed one.&lt;/p&gt;

&lt;p&gt;I participated in an NFL survivor pool with a friend. He was the commissioner and managed over 400+ entries from around 80+ individuals manually on a spreadsheet. I approached him to see if he'd be open to having my Discord group of developers build an application for him at no cost. He agreed, and I went off searching for who ever wanted to participate.&lt;/p&gt;

&lt;p&gt;This is where Bootcamp+ comes in. I saw a void. I saw that there were aspiring developers starving to find any sort of experience to help them land their first tech role. This is when I started to put my long waited plans to start cohort 0 for Bootcamp+. &lt;/p&gt;

&lt;h2&gt;
  
  
  Curriculum
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frp1b4c2x406fp1s98h7o.jpg" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2Frp1b4c2x406fp1s98h7o.jpg" alt="Image description" width="800" height="800"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;This wasn't just going to be a normal Bootcamp curriculum. I wanted to put these individuals through a corporate process. It would require patience, learning, and a much slower pace than building a personal project. Many of these individuals had never worked in teams nor with a project process.&lt;/p&gt;

&lt;p&gt;I wanted to bring in an Agile mythology. Every team, every company, has their own way of interpreting agile. Therefore, we are going to take the approach as well. We will figure out what works best for our team and adapt. I wanted to use Sprints and have stand-ups, but with the few months we've been working on this project, it's very difficult to do this when most of us are doing this part-time and this isn't our job. We've started meeting once a week to sync up and providing updates when we have them asynchronously.&lt;/p&gt;

&lt;p&gt;Something new to these individuals was the high level planning of the technologies they were going to use. At first, it was very difficult because many of them just wanted to build before they had a well-thought-out plan. This would force them to learn the “why”. Why are we using this application, why are we using this technology, why are we building it this way. In the beginning, a few of the presentations were read directly from the documentation. I called them out on this and said this isn't a presentation of what they found. Anyone could go to a documentation site and read their docs. I wanted to understand if the technology they chose would be a good decision for the team and what task it was going to accomplish for our project. After some iterations, everyone understood the process. It wasn't easy, but we all learned that planning something before building was a vital process to building out an efficient project.&lt;/p&gt;

&lt;p&gt;Processes that we have not yet gotten to yet are Sprint Demos, thorough code reviews, milestone branches, a release cadence, QA testing in the staging environment, and conflicts. I foresee that these will be a big learning curve as well, but my hope is that after we go through this and publically display our learnings, each one of these individuals will have a leg up on their competition. &lt;/p&gt;

&lt;h2&gt;
  
  
  Roles and Responsibilities
&lt;/h2&gt;

&lt;p&gt;&lt;a href="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9cq65c75jjm687oj2d0w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://media2.dev.to/dynamic/image/width=800%2Cheight=%2Cfit=scale-down%2Cgravity=auto%2Cformat=auto/https%3A%2F%2Fdev-to-uploads.s3.amazonaws.com%2Fuploads%2Farticles%2F9cq65c75jjm687oj2d0w.png" alt="Image description" width="338" height="140"&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;What I did was split up the team into 3 different disciplines. The UX Engineers, Frontend Engineers, and Software Engineers. By splitting the team into these specific roles, everyone had a clear focus of what they owned. This didn't mean they couldn't cross over into another role to help out. It just meant that they understood what their number one priority was.&lt;/p&gt;

&lt;p&gt;UX Engineers would be the ones focused on bridging the gap between design and development. They would build out the UI Component library, work closely with our designer, and build out the layouts for our project.&lt;/p&gt;

&lt;p&gt;Frontend Engineers would focus on the manipulation of data, client side application infrastructure, API integration, and more. &lt;/p&gt;

&lt;p&gt;Software Engineers were our backend developers. They would focus on DevOps, database, server infrastructure, and more.&lt;/p&gt;

&lt;h2&gt;
  
  
  Why waste my time on something that has little ROI (return of investment)?
&lt;/h2&gt;

&lt;p&gt;It's only a waste of your time if you feel like it. Just because others consider it a wash, doesn't mean it has to for you. I always look at the things I do as an opportunity to learn. Even when I lose at sports, fail on delivering on a task, or ate a pineapple pizza. I try to find an opportunity to get better.&lt;/p&gt;

&lt;p&gt;This pertains towards the Gridiron Survivor project because there are immediate rewards for myself conducting this project. I'm using my precious time to manage this product, run meetings, find sponsors, and much more.&lt;/p&gt;

&lt;p&gt;Here's a secret, I'm not losing if someone I care for is winning.&lt;/p&gt;

&lt;h2&gt;
  
  
  This process works and there's proof
&lt;/h2&gt;

&lt;blockquote&gt;
&lt;p&gt;Data may disappoint, but it never ever lies&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;I found this quote while building out my talk about Data Driven UX Decisions. It couldn't be more true. &lt;/p&gt;

&lt;p&gt;In the beginning of this project, I was hoping that at least 1 member of our team would land a job after this project was done. Just 1. I can happily report that 1 person was hired after a few weeks working on this project. This project wasn't the sole reason this person landed their job, but it allowed myself and their employer to see their talents. There's no better way to interview someone without interviewing them than to build in public. If there's a way for someone to hear your thought process, see your work, watch you fail to understand how to not fail the same way again, then do it. &lt;/p&gt;

&lt;p&gt;When you enter the interview cycle, most of the time you will not pass the first or second round. Heck, you may not even receive a call back. The individual that was hired from this project had applied to hundreds of jobs, receive 0 callbacks, and wanted to quit. When my friend and I reviewed their resume and portfolio, we understood why. None of them stood out. It was a very common portfolio that we would look at for 3 seconds and pass on.&lt;/p&gt;

&lt;p&gt;How could a hiring team have known that this person was going to be a great hire if they gave them no chance at all?&lt;/p&gt;

&lt;p&gt;Back to this individual. They are not thriving and enjoying every day of their new development role. I was able to meet them in-person and let them know what my “nod” was. &lt;/p&gt;

&lt;p&gt;From the movie Groove: &lt;a href="https://www.imdb.com/title/tt0212974/characters/nm0690263" rel="noopener noreferrer"&gt;https://www.imdb.com/title/tt0212974/characters/nm0690263&lt;/a&gt;&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;Guy : Why do you do this to yourself? Don't even get paid, risk getting arrested, for what?&lt;/p&gt;

&lt;p&gt;Ernie : You don't know?&lt;/p&gt;

&lt;p&gt;Guy : No.&lt;/p&gt;

&lt;p&gt;Ernie : The Nod.&lt;/p&gt;

&lt;p&gt;Guy : The Nod?&lt;/p&gt;

&lt;p&gt;Ernie : Happens to me at least once every party. Some guy comes up to me and says "Thank you for making this happen... I needed this. This really meant something to me." And they nod... and I nod back.&lt;/p&gt;

&lt;p&gt;Guy : [scoffs]  ... That's it?&lt;/p&gt;

&lt;p&gt;Ernie : That's it.&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;This person thanked me for changing their entire financial future. It was a distant dream that it would happen, but it's now happening.&lt;/p&gt;

&lt;p&gt;That's my “nod”.&lt;/p&gt;

</description>
    </item>
    <item>
      <title>My development thought process for building Frontendmentor.io my team multi-page challenge</title>
      <dc:creator>Shashi Lo</dc:creator>
      <pubDate>Mon, 18 May 2020 15:22:38 +0000</pubDate>
      <link>https://dev.to/shashi_lo/my-development-thought-process-for-building-frontendmentor-io-my-team-multi-page-challenge-4e9</link>
      <guid>https://dev.to/shashi_lo/my-development-thought-process-for-building-frontendmentor-io-my-team-multi-page-challenge-4e9</guid>
      <description>&lt;p&gt;I found my self seeing many development folks doing &lt;a href="https://twitter.com/search?q=%23100DaysOfCode&amp;amp;src=typeahead_click"&gt;#100daysofcode&lt;/a&gt; on Twitter. I attempted this a few years back and lasted a week. It’s difficult to consistency code something amazing everyday when you’ve got a busy family life. When I saw &lt;a href="https://www.frontendmentor.io/"&gt;Frontendmentor.io&lt;/a&gt;, I knew this was something I wanted to try. I didn’t have to be committed a few months to this challenge and could get it done within a week. I wanted to share my thought process behind every website design I develop.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--pESeJUgv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/900/1%2At02wJSbXXGGMjZLMUgPeHw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--pESeJUgv--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/900/1%2At02wJSbXXGGMjZLMUgPeHw.jpeg" alt=""&gt;&lt;/a&gt;Frontendmentori.io my team multi-page Challenge&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Challenge Details:&lt;/em&gt;&lt;/strong&gt; &lt;a href="https://www.frontendmentor.io/challenges/myteam-multipage-website-mxlEauvW"&gt;&lt;em&gt;https://www.frontendmentor.io/challenges/myteam-multipage-website-mxlEauvW&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;GitHub files&lt;/em&gt;&lt;/strong&gt; &lt;em&gt;:&lt;/em&gt; &lt;a href="https://github.com/shashilo/frontendmentor-myTeam"&gt;&lt;em&gt;https://github.com/shashilo/frontendmentor-myTeam&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;&lt;em&gt;Live Preview:&lt;/em&gt;&lt;/strong&gt; &lt;a href="https://shashilo-frontendmentor-myteam.netlify.app/"&gt;&lt;em&gt;https://shashilo-frontendmentor-myteam.netlify.app&lt;/em&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h3&gt;
  
  
  &lt;strong&gt;My thought process for developing a new website design&lt;/strong&gt;
&lt;/h3&gt;

&lt;p&gt;I’ve had the privilege to build many websites using a CMS, for a mobile application, and static pages. This is my usual thought process when dealing with responsive designs. For this project, I wanted to build it as a Pure CSS solution.&lt;/p&gt;

&lt;h4&gt;
  
  
  Get an understanding of the design artboard settings
&lt;/h4&gt;

&lt;p&gt;Take a deep look at the document file settings. It will tell you a lot about what the designer wants for the design. If you look at a Sketch artboard, you can look at its &lt;code&gt;layout settings&lt;/code&gt;. This will give you information on container max-width size, number of columns, gutter width, etc. Talk about being pixel perfect, this is the foundation that will setup you up to doing just that.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--djenEwa7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/918/1%2AfyEZi3Ra_wNhGj_0Yl9ZQw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--djenEwa7--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/918/1%2AfyEZi3Ra_wNhGj_0Yl9ZQw.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Visually check if the design will all be contained in a single wrapper or if it needs to be sectioned
&lt;/h4&gt;

&lt;p&gt;Look at the design and you’ll see if it requires fluid backgrounds for each section. This is a clear indication that you need to create separate sectioned containers. It’s a lot harder to create negative margins, padding, positioning, etc. of a fluid element once you contain it. Therefore, it’s much easier as a developer to control the styles if you create individual containers within sections. For simple designs, you’ll see that the designer used a simple background for the entire page. This is when you can container the entire page into a single container.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--n2blPUHV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/720/1%2AV1K_eHyTPvadP-e1-WD2Jw.jpeg" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--n2blPUHV--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/720/1%2AV1K_eHyTPvadP-e1-WD2Jw.jpeg" alt=""&gt;&lt;/a&gt;(left) Single container. (right) Multiple sectioned containers.&lt;/p&gt;

&lt;h4&gt;
  
  
  View component styles
&lt;/h4&gt;

&lt;p&gt;Make this a habit to click at every component you are styling in the art file. There are settings like font size, letter spacing, line-height, border-radius, box-shadow, opacity, and more. Our human brains cannot translate every bit of information when our eyes play tricks on us. The designer has trusted us to perfect their design to the best of our abilities. All the information is in the document, we just need to look at the details.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--acPBR9D5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/240/1%2AHzA5pQ5KAHoIc_PVN5PtdA.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--acPBR9D5--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/240/1%2AHzA5pQ5KAHoIc_PVN5PtdA.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  Mobile first
&lt;/h4&gt;

&lt;p&gt;I do my best to construct my CSS making the mobile styles the default. If there’s a variation between breakpoints, I use &lt;code&gt;min-width&lt;/code&gt; for the breakpoint that’s needed. This way the styles for the larger screens will remove once the user is on smaller breakpoints. Also, manipulating DOM elements to fit mobile is much more difficult than for desktop.&lt;/p&gt;

&lt;h4&gt;
  
  
  CSS &amp;gt; JS
&lt;/h4&gt;

&lt;p&gt;There’s nothing wrong with Javascript, I just enjoy making things pure CSS as possible. For me, maintaining something in CSS is a lot easier than in Javascript. It may take some extra steps, but it’s rewarding when you didn’t need to rely on Javascript to implement a feature. I’ve done some research on performance, but there’s no clear indication that one or other would provide a greater performance gain than the other.&lt;/p&gt;

&lt;h4&gt;
  
  
  CSS directory structure
&lt;/h4&gt;

&lt;p&gt;I’ve found that having a decoupling your styles into separate files is very useful. It doesn’t just keep it organized, but also trains you to not create large files. I follow the &lt;a href="https://sass-guidelin.es/#the-7-1-pattern"&gt;7–1 pattern&lt;/a&gt; quite closely. Obviously, you want to alter the way you group your files and how you name them according to your project. Not every project will need the exact CSS file structure as the other one.&lt;/p&gt;

&lt;h4&gt;
  
  
  CSS naming convention
&lt;/h4&gt;

&lt;p&gt;If you’re familiar with &lt;a href="http://getbem.com/"&gt;BEM&lt;/a&gt;, you’ll understand the pain points. It’s a good naming convention, but gets very repetitive the deeper you get into your styling. I was getting used to using &lt;a href="https://www.slideshare.net/Jyaasa/bevm-blockelementvariation-modifier"&gt;BEVM&lt;/a&gt;, a variation of BEM, but soon found myself tweaking my naming convention. While &lt;a href="https://tailwindcss.com/"&gt;Tailwind&lt;/a&gt; is one of the most popular CSS frameworks to date, I only like it for prototyping purposes. I don’t see the benefit of using Tailwind to maintain a large scale application or a website. The utility classes are great, but not when you have to use them to style every bit of your element. Therefore, in the project, I used a variation of BEVM and utility classes. Sounds like this would be a good idea for another blog entry at a later date.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--0NGLtuHI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AIeLYCbv4vbowT62mYpdqrQ.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--0NGLtuHI--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AIeLYCbv4vbowT62mYpdqrQ.png" alt=""&gt;&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  I created something interesting
&lt;/h4&gt;

&lt;p&gt;In the process of building this challenge, I found myself reusing a lot of CSS Grid styles. I’ve used &lt;a href="http://flexboxgrid.com/"&gt;Flexboxgrid&lt;/a&gt; in the past, and really enjoyed it’s simplicity. So, I create a SCSS library for CSS Grid using Bootstrap naming convention. While using it for this challenge, it was quite helpful. The design has many screen size variations. It presented many challenges because tablet and mobile screens didn’t use the same grid layout. There was an element that spanned 12 columns on desktop, 10 on tablet, but back to 12 on mobile. It wouldn’t be an issue with Flexbox because you can center things very easily, but no with CSS Grid. You have to explicitly call out where you want the element to start on the grid. I’m not sure if this is useful for anyone else, but I created some examples on Codepen.&lt;/p&gt;

&lt;p&gt;&lt;iframe height="600" src="https://codepen.io/shashilo/embed/eYpPOEd?height=600&amp;amp;default-tab=result&amp;amp;embed-version=2"&gt;
&lt;/iframe&gt;
&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/media/12043c59a1195c4b8895d51c46d6b31b/href"&gt;&lt;/a&gt;&lt;a href="https://medium.com/media/12043c59a1195c4b8895d51c46d6b31b/href"&gt;https://medium.com/media/12043c59a1195c4b8895d51c46d6b31b/href&lt;/a&gt;&lt;/p&gt;




</description>
      <category>designprocess</category>
      <category>css</category>
      <category>frontenddevelopment</category>
      <category>beginners</category>
    </item>
    <item>
      <title>A CSS Setup Built From a Decade of Experience — Part 2</title>
      <dc:creator>Shashi Lo</dc:creator>
      <pubDate>Fri, 02 Nov 2018 14:57:38 +0000</pubDate>
      <link>https://dev.to/shashi_lo/a-css-setup-built-from-a-decade-of-experience-part-2-8nm</link>
      <guid>https://dev.to/shashi_lo/a-css-setup-built-from-a-decade-of-experience-part-2-8nm</guid>
      <description>&lt;h3&gt;
  
  
  A CSS Setup Built From a Decade of Experience — Part 2
&lt;/h3&gt;

&lt;p&gt;Continuing my 3 part series about the way I setup my CSS projects, the next question I wanted to answer was “why I do things a certain way”.&lt;/p&gt;

&lt;p&gt;This is completely opinionated, but every developer will learn what works for them and every developer does things differently. Not everyone will learn by reading books, learn by watching tutorials, and/or learn by just coding. We all have our own ways we learn and implement things. Once you understand what works best for you, grab it by the horn and roll with it.&lt;/p&gt;

&lt;p&gt;If you go into my car or go into my side of the closet, you’ll know that I’m not the most conscious person to keep these things tidy. But, if you look at my code and how I structure my directories, it’s pretty spicy. You betcha, I love food. If I could travel the world eating different types of ethnic foods as my profession, I’d do it in a heart beat. Any who, like Mark Zuckerberg famous said,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“I really want to clear my life to make it so that I have to make as few decisions as possible about anything except how to best serve this community.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Decision Fatigue as it’s known. President Obama, Steve Jobs, Albert Einstein, and many more lived by this. The idea is that to use your brain power on something more important than picking your appearance. So now you’re wondering why I brought this up. It boils down to, why I do things a certain way.&lt;/p&gt;

&lt;p&gt;I was called a “&lt;em&gt;grid nazi&lt;/em&gt;” once. Yes. I’m Hmong Asian-American, so I’m pretty damn sure I’m not one. But what he meant was that I was very picky with his design and how it didn’t align with other elements because he was free-handing it. What I was trying to get at was that I liked his design, but I wanted to teach him how to be more conscious of keeping things symmetrical. Why? Because in design when things flow together, they’re more appealing. When things are cohesive, elements and components are seamless. So to the man I was providing constructive criticism, I was just simply providing my professional feedback.&lt;/p&gt;

&lt;p&gt;In development, when I made critical decisions like being a “&lt;em&gt;grid nazi&lt;/em&gt;”, it’s because I’m planning for maintainability. If things makes sense the way they are, why change it? But if there’s room for improvement and a way to make your code more maintainable, it should become a dance battle!&lt;/p&gt;

&lt;p&gt;To clarify, what I mean by dance battle is you need to think of the pros and cons. Is it worth the time to restructure this particular code to be more maintainable. Next, what’s the effort level. Time = money as many say. Even if you’re not directly receiving money from your efforts, everything that you do with your energy is taking something else away. Therefore &lt;em&gt;Decision Fatigue&lt;/em&gt; comes into play. In the agency world, there is no such thing. Oh trust me, I know. I’ve worked with many agencies and there’s always one sameness, deadlines. They’re never moved and scope creep keeps building up. I totally understand why though. You’re working for a client and they have an expected launch party or an event that this project correlates with. But there’s ways to educate your client to ease the stress level of your team.&lt;/p&gt;

&lt;p&gt;Once of the best things I did was explain to a client that if they wanted to keep their deadline the same, we would have to create post-launch items to come back to after launch. This would be at no additional cost, but it would prolong the project. When you set clear expectations on what’s feasible with the amount of time allocated towards the deadline early and often, clients resonate with your concern about getting everything completed by launch day.&lt;/p&gt;

</description>
      <category>productivity</category>
      <category>css</category>
      <category>sass</category>
      <category>frontend</category>
    </item>
    <item>
      <title>A CSS Setup Built From a Decade of Experience — Part 1</title>
      <dc:creator>Shashi Lo</dc:creator>
      <pubDate>Wed, 11 Apr 2018 15:47:01 +0000</pubDate>
      <link>https://dev.to/shashi_lo/a-css-setup-built-from-a-decade-of-experience-part-1-pee</link>
      <guid>https://dev.to/shashi_lo/a-css-setup-built-from-a-decade-of-experience-part-1-pee</guid>
      <description>&lt;p&gt;I’m often asked how I structure my CSS files for projects, why I do things a certain way, and why I’m so particular with my Git process. I have experience architecting projects with CMS’s like WordPress, Drupal and Magento E-commerce. I’ve also built custom PHP application solutions built with Codeigniter and Laravel. And lastly, I’ve implemented Javascript applications with React, Vue, and Angular in projects. I’ve got so much broad experience that I’d love to share with you.&lt;/p&gt;

&lt;p&gt;First of all, in the spirit of decoupling things, I’m going to make this a 3 part series. I use SASS and SCSS files because I enjoy the syntax and I’m comfortable with it. I utilize GULP to precompile my SCSS files, but would use Webpack if it was for a Javascript project.&lt;/p&gt;

&lt;h4&gt;
  
  
  &lt;strong&gt;How do I personally structure my CSS files for a project?&lt;/strong&gt;
&lt;/h4&gt;

&lt;p&gt;It’s often confusing when you introduce a CSS directory naming convention to your team of developers. The mindset is, why make CSS more difficult to find things? If you are asking yourself this question, then let me ask you this in return. Why are all your components in separate files? It’s the same reason why CSS should be decoupled for the ease of figuring out where changes are, to allow Object Oriented programming, and less chance of merge conflicts.&lt;/p&gt;

&lt;p&gt;The best thing I’ve experienced is to decouple your project structure. I start off with the 7–1 folder naming pattern. If you are working with a CMS, confine your folder structure towards the CMS. For instance, in Drupal you have blocks, views, nodes, pages, etc. These terms relate to the CMS. Therefore, if I’m writing styles for a view, I’m going to create a file inside the views directory of my SASS project just for this view. Therefore I would end up with this folder structure:&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;sass/&lt;br&gt;&lt;br&gt;
base/&lt;br&gt;&lt;br&gt;
blocks/&lt;br&gt;&lt;br&gt;
nodes/&lt;br&gt;&lt;br&gt;
layout/&lt;br&gt;&lt;br&gt;
pages/&lt;br&gt;&lt;br&gt;
views/&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;Now, if I was working with a Javascript application, my fold structure is different. It would be more component driven, but follow the &lt;a href="http://7%E2%80%931%20Pattern"&gt;7–1 Pattern&lt;/a&gt; meticulously. Each component would have it’s own SCSS file to keep them completely isolated from other components. They will have shared styles, but thats when you put global or shared styles into specific files. In the instance of the 7–1 Pattern, ‘components’ are HTML DOM components and not your application components. I create a new directory called ‘elements’ and place my HTML component elements into that directory.&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;sass/&lt;br&gt;&lt;br&gt;
abstracts/&lt;br&gt;&lt;br&gt;
base/&lt;br&gt;&lt;br&gt;
components/&lt;br&gt;&lt;br&gt;
elements/&lt;br&gt;&lt;br&gt;
layout/&lt;br&gt;&lt;br&gt;
pages/&lt;br&gt;&lt;br&gt;
vendors/&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;As you can see, the 7–1 Pattern is a good start, but you should modify it to allow similar naming conventions towards your project. There is no right way or wrong way to do this, because in the end, all these files will be compiled into a minified CSS file anyway. It’s more of a personal or team preference on how you want to organize your SCSS files.&lt;/p&gt;

&lt;p&gt;As a developer, your mindset should always strive to improve. As Olympic Gold medal sprinter Kim Collin quotes,&lt;/p&gt;

&lt;blockquote&gt;
&lt;p&gt;“Strive for continuous improvement, instead of perfection.”&lt;/p&gt;
&lt;/blockquote&gt;

&lt;p&gt;So true because there’s always a better way to do something, you just need to figure out how.&lt;/p&gt;

</description>
      <category>ui</category>
      <category>sass</category>
      <category>css</category>
      <category>frontend</category>
    </item>
    <item>
      <title>The Birth of Fresh CSS</title>
      <dc:creator>Shashi Lo</dc:creator>
      <pubDate>Fri, 24 Mar 2017 13:58:33 +0000</pubDate>
      <link>https://dev.to/shashi_lo/the-birth-of-fresh-css-5c3b</link>
      <guid>https://dev.to/shashi_lo/the-birth-of-fresh-css-5c3b</guid>
      <description>&lt;p&gt;I was suppose to write an article each week for &lt;a href="https://writingcooperative.com/the-52-week-writing-challenge-55210b483a21#.6b0sc7j59"&gt;&lt;strong&gt;52-Week Writing Challenge&lt;/strong&gt;&lt;/a&gt; &lt;strong&gt;,&lt;/strong&gt; but I was sick the entire week. So, I’m going to double up next week and write two articles. This is article 2 of 52.&lt;/p&gt;

&lt;p&gt;Adding on from my previous article, &lt;a href="https://medium.com/@shashilo0428/my-journey-to-a-better-css-framework-72bf6dd068bc#.ij7i6en5f"&gt;My Journey to a Better CSS Framework&lt;/a&gt;, we at &lt;a href="http://creedinteractive.com"&gt;Creed Interactive&lt;/a&gt; felt the need to create a CSS framework that fit our team’s needs. We started to have great conversations on what we needed and how we would bridge the gap between design and development. One of the conflicts we were having were inconsistent component layouts. Some sections didn’t snap to the grid, while others went beyond the container. With further discussions, these are some of the features we decided on.&lt;/p&gt;

&lt;h4&gt;
  
  
  12 column grid
&lt;/h4&gt;

&lt;p&gt;We decided to use a 12 column grid because the measurements made sense. In theory, 1200 is divisible by 2, 3, 4, 5, 6, 8, 10, 12, 15, 16, 20, 24, 30, 40, 48, 60, 80, 120, 150, 200, 240 and 400. That provides a lot of flexibility for creating components. So, overall, our grid is constructed in 12 columns, 80px column widths, with 20px gutter padding, and 10px padding on the outside of the grids.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--iclr2Aa9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AQphBfyMnRnv6OROJ0A2j0w.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--iclr2Aa9--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2AQphBfyMnRnv6OROJ0A2j0w.png" alt=""&gt;&lt;/a&gt;1200px width with 20px gutters&lt;/p&gt;

&lt;p&gt;With certain designs, we would remove the extra 10px on each side, but this was the standard we wanted to move forward with. Now, we have a good foundation to start our projects with.&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Susy Grid System&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Continuing the trend of a lean framework that doesn’t require loading unused styles, I decided to use &lt;a href="http://susy.oddbird.net/"&gt;Susy&lt;/a&gt;. At first, it was really different from what I was used to, but after working with it for a few months, I really enjoyed it. Building your grid on demand was key to my magic row. The idea wasn’t just to build identical columns with the row, but it was to build all sorts of different column combinations. Wouldn’t it be awesome if you could use “row-md-363” and it would create a 3 column grid with the first and last columns having a width grid size of 3 and the middle one being 6? Removing any and all column size call outs would allow for greater flexibility. We weren’t going to remove it entirely, but keep it as a fallback.&lt;/p&gt;

&lt;p&gt;One Susy feature that was going to help me accomplish this was &lt;a href="http://susydocs.oddbird.net/en/latest/toolkit/#span-function"&gt;&lt;em&gt;span nested context&lt;/em&gt;&lt;/a&gt;&lt;em&gt;.&lt;/em&gt; It was quite confusing to me at first until I kept trying it. If you look at this example, it was going to allow me to build my row magic with Susy. The next step is to create a global variable that would generate the row classes I needed without manually creating them for all screen sizes.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/media/6c85b9311c27e16e34208f08cf2f7cc1/href"&gt;&lt;/a&gt;&lt;a href="https://medium.com/media/6c85b9311c27e16e34208f08cf2f7cc1/href"&gt;https://medium.com/media/6c85b9311c27e16e34208f08cf2f7cc1/href&lt;/a&gt;&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;Breakpoints That Make Sense&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
Media query breakpoints can be difficult. You could use min and/or max width, you could define a range for the breakpoint, or you could target specific screens like retina monitors. After reading “&lt;a href="https://medium.freecodecamp.com/the-100-correct-way-to-do-css-breakpoints-88d6a5ba1862#.esjsvshkg"&gt;The 100% correct way to do CSS breakpoints&lt;/a&gt;” by David Gilbertson, screen breakpoints made a lot more sense. We were working with the old way of pinpointing screen sizes according to what was popular back when NSYNC was the premier boy band. Nowadays, we have many different phones and tablet screen sizes. If you look at the example below, you can see why this new breakpoint view will make sense.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://res.cloudinary.com/practicaldev/image/fetch/s--KERGcP7j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A1_-pg9Tl0DAcQDhTbHeExw.png" class="article-body-image-wrapper"&gt;&lt;img src="https://res.cloudinary.com/practicaldev/image/fetch/s--KERGcP7j--/c_limit%2Cf_auto%2Cfl_progressive%2Cq_auto%2Cw_880/https://cdn-images-1.medium.com/max/1024/1%2A1_-pg9Tl0DAcQDhTbHeExw.png" alt=""&gt;&lt;/a&gt;Image provided by David Gilbertson&lt;/p&gt;

&lt;p&gt;&lt;strong&gt;What’s Next&lt;/strong&gt;&lt;br&gt;&lt;br&gt;
We will look at the actual code of the framework and continue to build it out. Setting up a github page would be a good start and open sourcing it.&lt;/p&gt;

</description>
      <category>webdev</category>
      <category>css</category>
      <category>sass</category>
      <category>grid</category>
    </item>
    <item>
      <title>My Journey to a Better CSS Framework</title>
      <dc:creator>Shashi Lo</dc:creator>
      <pubDate>Mon, 06 Mar 2017 17:57:55 +0000</pubDate>
      <link>https://dev.to/shashi_lo/my-journey-to-a-better-css-framework-51n</link>
      <guid>https://dev.to/shashi_lo/my-journey-to-a-better-css-framework-51n</guid>
      <description>&lt;p&gt;I told myself I need to start documenting my thoughts and knowledge. I actually have useful things in my brain that could help others. Who knew!? So, I’m going to join the &lt;a href="https://writingcooperative.com/the-52-week-writing-challenge-55210b483a21#.6b0sc7j59"&gt;&lt;strong&gt;52-Week Writing Challenge&lt;/strong&gt;&lt;/a&gt;. My goal is to pour out my knowledge and experience about web development, mostly front-end. Anything from dabbling into a new framework to my daily work experience with projects at &lt;a href="http://creedinteractive.com"&gt;Creed Interactive&lt;/a&gt;.&lt;/p&gt;

&lt;h4&gt;
  
  
  How it started
&lt;/h4&gt;

&lt;p&gt;How many times have you defaulted to using Bootstrap as your CSS framework because it just works? I’ve done it plenty of times. There are other solutions available, but when you’re working in a team setting, it’s difficult to introduce something new to developers who do not focus on the front-end.&lt;/p&gt;

&lt;p&gt;With many viable solutions like &lt;a href="http://getbootstrap.com/"&gt;Bootstrap&lt;/a&gt;, &lt;a href="http://foundation.zurb.com/"&gt;Foundation&lt;/a&gt;, &lt;a href="http://semantic-ui.com/"&gt;Semantic UI&lt;/a&gt;, and more, its reasonable to think there’s no real need to create another framework. But I’m an innovator! I enjoy making things better, faster, more efficient, therefore, I’m going to build my own.&lt;/p&gt;

&lt;h4&gt;
  
  
  My Aha moment
&lt;/h4&gt;

&lt;p&gt;We were conducting an audit on one of our client’s websites because it wasn’t performing well. The obvious issues were: large images, too many Javascript plugins, and large CSS files. You know what I’m talking about if you’ve worked with plenty of WordPress and Drupal websites. After optimizing and resizing the images down to the proper dimensions and minifying both Javascript and CSS files, the performance was much better. But knowing myself, I wanted more improvements. I’m a big fan of lean solutions and removing unneeded extra code. So I ran an audit with Chrome’s developer tools. When I went to look at the “Remove unused CSS rules”, I was surprised that there were over 1800+ rules not used on the homepage. By default, Bootstrap’s CSS file is around 192 kb and 151 kb minified. This doesn’t even include the Javascript file that is 47 kbs minified. Yes, you can remove some features and modify it’s core, but that’s more work on your end. Foundation does an awesome job of providing an interface for you to choose what you want to include/exclude in your base CSS file. But even then, I found myself wanting to something with my knowledge and skills.&lt;/p&gt;

&lt;p&gt;My first thought was to create something lean but not too different. My team was familiar with Bootstrap’s class naming convention, so I was going to keep that part. Our team was also experienced in SASS, so building a base SASS system was ideal. I chose to use &lt;a href="http://gulpjs.com/"&gt;Gulp.js&lt;/a&gt; over &lt;a href="https://gruntjs.com/"&gt;Grunt&lt;/a&gt; and &lt;a href="https://webpack.js.org/"&gt;WebPack&lt;/a&gt; for our build system because it was lean and easier to learn. What I wanted to improve was the use of &lt;a href="http://getbem.com/"&gt;BEM&lt;/a&gt; (Block Element Model) CSS class naming convention. We also had been using &lt;a href="http://include-media.com/"&gt;Includes Media&lt;/a&gt; for our media queries. Lastly, I had to decide how we were going to build our grid system. After discussions with our creative director, we agreed that a 1200px 12 column grid with 10px gutters on both sides would be best for our future designs. At the time I was developing this new CSS framework, Flexbox was just becoming ready to use across all major browsers. In anticipation of this great news, I had a great idea of how to streamline building columns. Why do we have to call out individual column classes that have the same exact column width with the size of each column in it’s own element? That’s because we’re built to do it this way. Well, you don’t have to anymore. Let me save you a couple lines of code from your DOM.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;In the example above, you can see the common way to call out a row and a few columns to build a footer with side by side links.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Doesn’t that look so much better!? If the columns are going to be the same size, why not control that in the row? It makes for less code and improved efficiency. Yes, it means less control over each column, but in some cases I find that it is a valuable trade-off.&lt;/p&gt;

&lt;h4&gt;
  
  
  The Magic Row
&lt;/h4&gt;

&lt;p&gt;The ability to control the outcome of all columns within a row is amazing to me. Less code, less clutter, and increased efficiency. Let’s take a look at the magic.&lt;/p&gt;


&lt;div class="ltag_gist-liquid-tag"&gt;
  
&lt;/div&gt;


&lt;p&gt;Using wildcard selectors for the row class allows you to reference the different screen sizes (xs, sm, md, lg, xl) without adding additional code. Now, all references of the class name of &lt;strong&gt;row-&lt;/strong&gt; will use the same styles.&lt;/p&gt;

&lt;p&gt;The child combinator is something awesome. It will select elements that are direct descendants. Basically, your first cousin. This eliminates the use of individually assigning each column a class name.&lt;/p&gt;

&lt;p&gt;&lt;a href="https://medium.com/media/27d002c840b86ff4d890715ac85f0b63/href"&gt;&lt;/a&gt;&lt;a href="https://medium.com/media/27d002c840b86ff4d890715ac85f0b63/href"&gt;https://medium.com/media/27d002c840b86ff4d890715ac85f0b63/href&lt;/a&gt;&lt;/p&gt;

&lt;h4&gt;
  
  
  What’s Next
&lt;/h4&gt;

&lt;p&gt;Everyone wants to do things better and faster. In development, if you can’t improve what you do on a daily basis, you will fall behind and eventually be replaced. Learn how to do what you do with less. As they say, &lt;em&gt;less is more.&lt;/em&gt;&lt;/p&gt;

&lt;p&gt;I didn’t intend this to be an article of series, but if I’m going to keep up with my 52 blog articles in 52 weeks, I’m going to stop here and continue adding my thoughts on next week's article.&lt;/p&gt;

</description>
      <category>frontend</category>
      <category>webdev</category>
      <category>css</category>
    </item>
  </channel>
</rss>
