CINXE.COM

Manifesto | Tighten

<!DOCTYPE html> <html lang="en"> <head> <title>Manifesto | Tighten</title> <meta charset="utf-8"> <meta name="viewport" content="width=device-width, initial-scale=1"> <meta name="description" content="Tighten is a software development firm specializing in Laravel, Livewire, Vue.js, and React."> <meta property="og:title" content="Manifesto"> <meta property="og:description" content="Tighten is a software development firm specializing in Laravel, Livewire, Vue.js, and React."> <meta property="og:image" content="https://tighten.com/assets/images/tighten-com-og-cover.png"> <meta property="og:url" content="https://tighten.com/manifesto/"> <meta property="og:site_name" content="Tighten"> <meta name="twitter:card" content="summary_large_image"> <meta name="twitter:site" content="@TightenCo"> <meta name="twitter:image:alt" content="Tighten logo"> <link rel="canonical" href="https://tighten.com/manifesto/"> <link rel="alternate" type="application/atom+xml" title="RSS feed for the Tighten blog" href="/insights/feed.atom" /> <link rel="stylesheet" href="/assets/build/css/main.css?id=be5c59fd5b50e9520455"> <script defer src="/assets/build/js/main.js?id=b0b646e36cc5d7106b59"></script> <script src="https://outstanding-absorbing.tighten.com/script.js" data-site="QEKUSYAY" defer></script> <script src="https://cdn.amplitude.com/libs/analytics-browser-2.7.4-min.js.gz"></script><script src="https://cdn.amplitude.com/libs/plugin-autocapture-browser-0.9.0-min.js.gz"></script><script>window.amplitude.add(window.amplitudeAutocapturePlugin.plugin());window.amplitude.init('53312f8d59159cea4be6be8d86e93bde');</script> </script> <script src="https://www.google.com/recaptcha/api.js" async defer></script> </head> <body class="bg-black font-sans antialiased"> <div id="app" class="flex flex-col min-h-screen"> <header x-data="navManager()" class="sticky z-50 -top-1 md:-top-6" @scroll.window="scrollListener" @resize.debounce.100ms.window="handleResize" > <nav class="absolute visible w-full h-20 opacity-0 md:hidden bg-charcoal transition-all duration-500 -z-10" :class="{ 'opacity-0 h-20': !mobileNavOpen, 'opacity-100 h-[460px]': mobileNavOpen }" > <div class="h-full text-white transition-all duration-500 pb-7 -mt-80" :class="{'pt-0 -mt-80': !mobileNavOpen, 'pt-20 mt-0': mobileNavOpen }" > <div class="flex flex-col items-end justify-between h-full pr-8 transition-all duration-400" :class="{'opacity-0': !mobileNavOpen, 'opacity-100': mobileNavOpen }" > <a class="flex items-center text-lg font-mono word-spacing-tight font-semibold uppercase tracking-widest border-y-4 border-transparent hover:border-b-yellow duration-300 hover:text-white mb-3" id="servicesNavLink" href="/services/" text="Services" selected="" href="/services/" tabindex="0" aria-label="Services" > Services </a> <a class="flex items-center text-lg font-mono word-spacing-tight font-semibold uppercase tracking-widest border-y-4 border-transparent hover:border-b-yellow duration-300 hover:text-white mb-3" href="/results/" text="Results" selected="" href="/results/" tabindex="0" aria-label="Results" > Results </a> <a class="flex items-center text-lg font-mono word-spacing-tight font-semibold uppercase tracking-widest border-y-4 border-transparent hover:border-b-yellow duration-300 hover:text-white mb-3" href="/insights/" text="Blog" selected="" href="/insights/" tabindex="0" aria-label="Blog" > Blog </a> <a class="flex items-center text-lg font-mono word-spacing-tight font-semibold uppercase tracking-widest border-y-4 border-transparent hover:border-b-yellow duration-300 hover:text-white mb-3" href="/team/" text="Team" selected="" href="/team/" tabindex="0" aria-label="Team" > Team </a> <a class="flex items-center text-lg font-mono word-spacing-tight font-semibold uppercase tracking-widest border-y-4 border-transparent hover:border-b-yellow duration-300 hover:text-white mb-3" href="/about/" text="About" selected="" href="/about/" tabindex="0" aria-label="About" > About </a> <a class="flex items-center text-lg font-mono word-spacing-tight font-semibold uppercase tracking-widest border-y-4 border-transparent hover:border-b-yellow duration-300 hover:text-white mb-3" href="/newsletter/" text="Newsletter" selected="" href="/newsletter/" tabindex="0" aria-label="Newsletter" > Newsletter </a> <div class="py-6 scale-110"> <div class="flex"> <a x-data="button()" @click.prevent="handleClick" href="/contact/" class="bg-charcoal shadow-button-inner-gray border-white bg-origin-border hover:border-transparent hover:animate-button hover:shadow-button-none hover:text-black focus:border-transparent focus:animate-button focus:shadow-button-none focus:text-black focus:outline-none text-xs lg:text-sm xl:text-base leading-none bg-button-gradient font-mono font-bold tracking-wider rounded-full py-2 xl:py-2.5 md:text-center px-3 lg:px-4 xl:px-5 uppercase text-white border bg-[length:1000%_1000%] transition-all duration-500 active:bg-gradient-to-l active:border-transparent active:from-yellow active:to-yellow active:shadow-button-none active:text-black word-spacing-tight whitespace-nowrap" > Contact Us </a> </div> <script> function button() { return { handleClick(e) { e.target.classList.add( 'bg-gradient-to-l', 'from-yellow', 'to-yellow', 'shadow-button-none' ); e.target.classList.remove('bg-button-gradient'); setTimeout(() => { window.location.href = e.target.getAttribute('href'); }, 500); }, }; } </script> </div> </div> </div> </nav> <div class="relative w-full"> <div class="absolute -z-10 w-full max-w-full h-20 md:h-[76px] lg:h-[90px] md:p-6 transition-all duration-500" :class="{ 'md:p-6': !stickyNav, 'md:py-6 ': stickyNav }" > <div class="w-full h-20 md:h-[76px] lg:h-[90px] bg-charcoal"></div> </div> <nav class="h-20 md:h-[100px] lg:h-[114px] pt-0 md:pt-6 pl-5 pr-6 md:pl-10 md:pr-12 lg:px-12 text-white transition-all duration-500"> <div class="flex items-center justify-between h-full max-w-screen-2xl mx-auto"> <a href="/" title="Go to homepage" class="transition-none duration-0" role="presentation" :class="{ 'transition-none duration-0': isMobile, 'transition-all duration-500': !isMobile }" > <lottie-player aria-label="Tighten logo" class="w-[90px] xs:w-[115px] sm:w-[130px] xl:w-[186px]" id="logoPlayer" mode="normal" src="/assets/images/tighten-logo-inverted-rgb-final-clockwise.json" > </lottie-player> </a> <div class="items-center justify-end hidden h-full align-middle md:flex md:space-x-5 xl:space-x-7 2xl:space-x-8 ml-10" > <a class="text-xs sm:text-sm lg:text-md xl:text-base uppercase tracking-widest flex items-center h-full font-mono font-bold border-y-4 border-transparent hover:border-b-yellow duration-300 text-charcoal-20 hover:text-white " href="/services/" aria-label="Services" > Services </a> <a class="text-xs sm:text-sm lg:text-md xl:text-base uppercase tracking-widest flex items-center h-full font-mono font-bold border-y-4 border-transparent hover:border-b-yellow duration-300 text-charcoal-20 hover:text-white " href="/results/" aria-label="Results" > Results </a> <a class="text-xs sm:text-sm lg:text-md xl:text-base uppercase tracking-widest flex items-center h-full font-mono font-bold border-y-4 border-transparent hover:border-b-yellow duration-300 text-charcoal-20 hover:text-white " href="/insights/" aria-label="Blog" > Blog </a> <a class="text-xs sm:text-sm lg:text-md xl:text-base uppercase tracking-widest flex items-center h-full font-mono font-bold border-y-4 border-transparent hover:border-b-yellow duration-300 text-charcoal-20 hover:text-white " href="/team/" aria-label="Team" > Team </a> <a class="text-xs sm:text-sm lg:text-md xl:text-base uppercase tracking-widest flex items-center h-full font-mono font-bold border-y-4 border-transparent hover:border-b-yellow duration-300 text-charcoal-20 hover:text-white " href="/about/" aria-label="About" > About </a> <div class="flex"> <a x-data="button()" @click.prevent="handleClick" href="/contact/" class="border-none animate-button text-black hover:shadow-button-none hover:text-white focus:border-white focus:shadow-button-none focus:text-white text-xs lg:text-sm xl:text-base leading-none bg-button-gradient font-mono font-bold tracking-wider rounded-full py-2 xl:py-2.5 md:text-center px-3 lg:px-4 xl:px-5 uppercase text-white border bg-[length:1000%_1000%] transition-all duration-500 active:bg-gradient-to-l active:border-transparent active:from-yellow active:to-yellow active:shadow-button-none active:text-black word-spacing-tight whitespace-nowrap" > Contact Us </a> </div> </div> <div class="block md:hidden" @click="handleNavToggleClick" @keydown.enter="handleNavToggleClick" @keyup.enter="focusOnMobileLink" tabindex="0" role="button" > <lottie-player class="w-8 h-8 fill-current" id="menuTogglePlayer" mode="normal" src="/assets/images/animated-hamburger.json" aria-label="Mobile menu" > </lottie-player> </div> </div> <div class="max-w-screen-2xl mx-auto"> <a class="absolute sr-only sm:focus:not-sr-only sm:focus:inline-flex items-center !p-3 !mt-2 !ml-4 font-mono word-spacing-tighter font-bold tracking-widest uppercase leading-none bg-charcoal text-yellow rounded-full" href="#content" tabindex="1"> <svg viewBox="0 0 24 24" fill="none" stroke="currentColor" class="h-3 w-3 mx-3" aria-hidden="true" > <path stroke-linecap="round" stroke-linejoin="round" stroke-width="2" d="M19 9l-7 7-7-7" /> </svg> <span class="pr-2">Skip to Main Content</span> </a> </div> </nav> </div> </header> <script> let logoPlayer; let menuTogglePlayer; let scrollThreshold = 25; let mobileViewport = 767; let isMobile = () => window.innerWidth <= mobileViewport; let shouldAnimate = () => !isMobile() && window.scrollY > scrollThreshold; document.querySelector('#logoPlayer').addEventListener('load', (e) => { logoPlayer = e.target; // Check if page is scrolled down and if so, animate the logo if (shouldAnimate()) { logoPlayer.play(); } }); document.querySelector('#menuTogglePlayer').addEventListener('load', (e) => { menuTogglePlayer = e.target; }); function navManager() { return { stickyNav: shouldAnimate(), mobileNavOpen: false, scrollListener() { if (isMobile()) { this.stickyNav = false; return; } this.animateLogo(); }, animate(player, direction) { if (!player) { // Animation hasn't been loaded yet return; } player.setDirection(direction); player.play(); }, animateLogo(direction) { if (shouldAnimate()) { this.stickyNav = true; this.animate(logoPlayer, 1); } else { this.stickyNav = false; this.animate(logoPlayer, -1); } }, seekLogo(player, toEnd = false) { if (!player) { // Animation hasn't been loaded yet return; } if (isMobile()) { if ( player.getLottie().isPaused && player.getLottie().currentFrame > 0 ) { player.pause(); this.animate(logoPlayer, -1); } } }, handleResize() { if (isMobile() && shouldAnimate()) { this.seekLogo(logoPlayer); } }, keyupListener(e) { this.mobileNavOpen = false; }, handleNavToggleClick(e) { let direction = this.mobileNavOpen ? -1 : 1; this.animate(menuTogglePlayer, direction); this.animate(logoPlayer, direction); this.mobileNavOpen = !this.mobileNavOpen; }, focusOnMobileLink() { document.querySelector('#servicesNavLink').focus(); }, }; } </script> <div> <div class="px-6 md:px-16 lg:px-28 py-16 text-white bg-black md:py-24 lg:py-36 xl:py-40" id="content"> <div class="max-w-screen-2xl mx-auto"> <h1 class="font-serif font-extralight text-5xl leading-tight-1 sm:text-7xl sm:leading-tight-1 md:text-8xl md:leading-tight-1 lg:text-8xl lg:leading-none xl:text-10xl xl:leading-none 2xl:text-11xl 2xl:leading-none pb-8 sm:pb-12 sm:-ml-2 md:-ml-3" title="Manifesto"> Manifesto </h1> <h2 class="w-full mb-2 font-serif text-2xl leading-snug font-extralight sm:text-3xl sm:leading-snug md:text-4xl md:leading-snug lg:mb-6"> Build a company you want to work for. </h2> </div> </div> <div class="px-6 md:px-16 lg:px-28 py-0"> <div class="max-w-screen-2xl mx-auto w-full xl:h-[560px] z-10"> <img src="/assets/images/manifesto/manifesto-hero.jpg" class="object-cover w-full h-full" alt="Drawing of two hands surrounding a hexagon" /> </div> </div> <div class="py-24 -mt-24 bg-charcoal-85 lg:-mt-32 lg:py-32"> <div class="mx-auto max-w-screen-sm lg:max-w-[800px] px-6 lg:px-0 text-charcoal-10"> <h3 class="text-4xl sm:text-6xl md:text-6xl font-serif font-extralight mb-8 lg:mb-12 mt-24 lg:mt-24 text-yellow"> The company <em>we</em> want to work for </h3> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> Dan and Matt met by chance encounter at a coworking space in Chicago in 2011. We’d both worked for years in organizations where developers lacked meaningful support and arbitrary deadlines were set by someone else, often without our input. We felt trapped in a cycle where the only way to meet expectations was to work endlessly, which left us burnt out and on the brink of leaving the profession. But a few intense conversations rekindled our passion for the actual craft of software development, and surfaced a shared belief that ran counter to what we had experienced: businesses should exist to serve people. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> We imagined that there might be a better way to run a company, where the primary purpose was to provide a space for people to care for one another, and the actual work output was a crucial but secondary purpose. So we set out to create the company we would want to work for. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> The question that remained was whether a company like this could actually turn a profit. But if our stated purpose was to help people live better lives, and we are very good at our jobs, lots of great and talented people should want to work with us. So we should be successful, right? </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> We ran the experiment for a few years, picking up lots of ideas along the way, and generally seeing what we could get away with. Bit by bit, we dropped the parts we hated and replaced them with ones that we liked. We stopped estimating time, and started giving and expecting trust. We stopped tracking individual hours and started putting in a good day’s work. We stopped agreeing to high-stakes deadlines. We scrapped the dumb parts of Agile and focused on agility itself. We stopped working overtime. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> We discovered that rather than producing average results in a feel-good context, the experiment produced <em>exceptional</em> results. Building structures around caring for people actually <em>correlated</em> with financial and reputational success. We weren’t shocked that it worked, but we were shocked that it worked <em>this well</em>. Looking back, it shouldn’t have been such a surprise. People like feeling supported and appreciated. They hate being treated like “resources” or fungible units of labor. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> Importantly, caring for someone doesn’t mean just saying nice things — it also means having the hard conversations, those which are most beneficial to their growth. It turns out that when every person is heard and supported, our values and practices align and we make <em>incredible shit</em>. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> We’ve come to believe that a people-focused team full of healthy, growing individuals who communicate and empathize well with each other produces better results than anyone else. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> This realization is only the beginning. Implementing it has been hard at times, but it’s mostly been a really fun adventure with a bunch of the most fabulous people we’ve ever met. What follows is meant to be fun too. It’s the advice we wish we someone had given us. It’s a manifesto, so we won’t mince words. Take the parts that interest you, with a healthy pinch of salt, and leave the rest. </p> <h3 class="text-4xl sm:text-6xl md:text-6xl font-serif font-extralight mb-8 lg:mb-12 border-t border-t-charcoal-60 pt-16 mt-16 text-yellow"> Team </h3> <h4 class="anchor-link text-2xl sm:text-3xl lg:text-4xl font-serif font-extralight mt-8 mb-2 lg:mb-4 cursor-pointer text-yellow" id="team--hire-people-not-workers"> <span class="anchor-hover-indicator hidden font-mono word-spacing-tight font-semibold text-base text-charcoal-40">#</span> <span class="hidden sm:inline font-mono word-spacing-tight font-semibold text-base text-charcoal-40 w-12 pointer-events-none">01</span> Hire people, not workers </h4> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> Hiring well is hard. But it’s impossible to make a great company without terrific people. Hire people you actually want to spend time with. A strong team can overcome a bad project or two, but a bad hire might be fatal to that same team. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> Put time and energy into building a hiring process that places value not just on technical ability, but also on things like: </p> <ul class="pb-8 pl-8 leading-loose list-disc list-inside marker:text-yellow md:text-lg md:leading-loose text-charcoal-15"> <li>curiosity</li> <li>creativity</li> <li>self-education</li> <li>empathy</li> <li>observantness</li> <li>intuition</li> <li>active listening</li> <li>professional candor</li> <li>a growth mindset</li> </ul> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> You can teach programming (or design, or project management, or just about any other skill), but you can’t teach someone how to be good and decent. Look for people who aren’t afraid to express a strong preference, or admit to having failed at something in the past, or ask a question that might make them look foolish. In particular, never, ever hire people who are stubbornly preoccupied with proving their own competence. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> Build a pipeline of potential hires long before you need them. Be constantly talking to people you find intriguing or different, in person and on the internet, and cultivate professional friendships with them. Look outside your friend and affinity and comfort circles for these folks. When you encounter a great person who isn’t yet qualified for a certain position, consider hiring them as an apprentice, and help them round out their skills on the job, or offer a mentorship to help them get apprentice-ready. </p> <h4 class="anchor-link text-2xl sm:text-3xl lg:text-4xl font-serif font-extralight mt-8 mb-2 lg:mb-4 cursor-pointer text-yellow" id="team--create-a-place-for-your-people-to-thrive-and-grow"> <span class="anchor-hover-indicator hidden font-mono word-spacing-tight font-semibold text-base text-charcoal-40">#</span> <span class="hidden sm:inline font-mono word-spacing-tight font-semibold text-base text-charcoal-40 w-12 pointer-events-none">02</span> Create a place for your people to thrive and grow </h4> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> Before you hire people, create a space where they can thrive. After you hire those people, continuously cultivate and prune your environment and policies to better serve the team you have and the team you hope to have. Getting these amazing people in the door is only half the battle; giving them an incredible experience is the other. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> Every big decision should be made with your team’s security, growth, family life, physical and mental health, and stress level in mind. Each of these aspects of life is under assault by the fetish of hustle culture, particularly in the U.S. Be the antidote to this. Doing right by your team yields the best results, and helps tremendously with employee retention, but that’s not why you should do it. You should do it because it’s the right thing to do. </p> <h4 class="anchor-link text-2xl sm:text-3xl lg:text-4xl font-serif font-extralight mt-8 mb-2 lg:mb-4 cursor-pointer text-yellow" id="team--build-culture"> <span class="anchor-hover-indicator hidden font-mono word-spacing-tight font-semibold text-base text-charcoal-40">#</span> <span class="hidden sm:inline font-mono word-spacing-tight font-semibold text-base text-charcoal-40 w-12 pointer-events-none">03</span> Build culture </h4> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> Employees’ outside interests are the raw material of company culture. Fill your team with people who have all sorts of wild and diverse extracurricular interests, and give them opportunities to share their passions on company time. Team building exercises are dull with people who never do anything but work, but can be super engaging with a whole crew of fabulous weirdos willing to nerd out about things you’ve never even heard of, or breathe new life to something you thought was boring by going super deep. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> Once you have a team on board, the culture belongs to them. Lead with values and policies at a high level, and in individual interactions at a low level, but let the culture itself develop organically. Nobody likes hackneyed corporate mumbo jumbo or corny rah-rah crap. When they have ideas for how to make things quirky and fun, just participate. Don’t be too heavy-handed at the tiller. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> Great people tend to stick around in engaging, dynamic environments, and bail quickly from banal, life-sucking ones with no clear purpose. Talk to and listen to your team, as people, then try to create a place that these people, in particular, will find energizing. </p> <h3 class="text-4xl sm:text-6xl md:text-6xl font-serif font-extralight mb-8 lg:mb-12 border-t border-t-charcoal-60 pt-16 mt-16 text-yellow"> Methodology </h3> <h4 class="anchor-link text-2xl sm:text-3xl lg:text-4xl font-serif font-extralight mt-8 mb-2 lg:mb-4 cursor-pointer text-yellow" id="methodology--be-agile-not-necessarily-agile"> <span class="anchor-hover-indicator hidden font-mono word-spacing-tight font-semibold text-base text-charcoal-40">#</span> <span class="hidden sm:inline font-mono word-spacing-tight font-semibold text-base text-charcoal-40 w-12 pointer-events-none">01</span> Be agile, not (necessarily) Agile </h4> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> The Agile Industrial Complex, as Matt often refers to it, has convinced the programming world that agility means adopting a certain set of dogmatic practices that use words like “standup” and “Scrum Master” and “velocity.” There is nothing wrong per se with these practices and systems, and they can be valuable when used appropriately. But they aren’t required for great work to get done. </p> <div class="py-6 lg:py-8"> <p class="leading-loose md:leading-loose text-charcoal-15 text-base md:text-lg"> When we talk about agility, we mean exactly what a non-programmer would expect us to mean: being light on your feet and able to change directions on a dime. Athletes are agile. They adapt fluidly, in real-time, to dynamic situations, using fundamentals to guide their moment-to-moment decisions. </p> </div> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> Be agile. Find the tools and practices (whether they’re a part of Agile or not) that allow you to remain flexible and respond quickly and easily to changing requirements. Focus on frequent and candid communication with clients, and choose programming ideologies (like YAGNI and KISS) that commit the minimum code and architecture required to build what you’re making right now, without trying to plan six steps down the road. Ship early, ship often, get meaningful client feedback, and iterate. </p> <h4 class="anchor-link text-2xl sm:text-3xl lg:text-4xl font-serif font-extralight mt-8 mb-2 lg:mb-4 cursor-pointer text-yellow" id="methodology--rethink-estimation"> <span class="anchor-hover-indicator hidden font-mono word-spacing-tight font-semibold text-base text-charcoal-40">#</span> <span class="hidden sm:inline font-mono word-spacing-tight font-semibold text-base text-charcoal-40 w-12 pointer-events-none">02</span> Rethink estimation </h4> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> A ton of ink has been spilled on this topic, so we’ll try to be brief here: Don’t estimate. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> <strong>Reason #1:</strong> It’s impossible to do accurately. In a collective 50 years of software development, we’ve never met anyone who can consistently estimate a meaningful cluster of programming tasks to within an acceptable threshold of accuracy. When a process fails this consistently, it’s time to scrap it. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> <strong>Reason #2:</strong> It’s wasteful. Why spend time on a failed process that could be spent doing the actual work? There’s no good reason. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> <strong>Reason #3:</strong> It puts unhealthy pressure on programmers, which makes them stressed out and miserable. Every time a task takes longer than your estimate feels like a micro-failure. This accrues to make programmers feel like there’s something wrong with them, when we want them to feel creative, engaged, and happy. Out it goes. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> But people are stubborn. They desperately seek clarity, so they endlessly try to rephrase or reframe the idea of estimation. A "t-shirt size" or "just a ballpark" or "just a high-level sense... I won’t hold you to it". Don’t do it. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> If you have to give them <i>something</i>, give them an order of magnitude: "hours", "days", or "weeks". The estimate is usually for someone other than the person asking (e.g. a boss, a customer, a grantor, an investor), so you’ll have to help them figure out how to sell it. This isn’t easy, but it’s honest, human work, whereas making up numbers to appease someone does them a disservice. </p> <h4 class="anchor-link text-2xl sm:text-3xl lg:text-4xl font-serif font-extralight mt-8 mb-2 lg:mb-4 cursor-pointer text-yellow" id="methodology--develop-culture-not-just-processes"> <span class="anchor-hover-indicator hidden font-mono word-spacing-tight font-semibold text-base text-charcoal-40">#</span> <span class="hidden sm:inline font-mono word-spacing-tight font-semibold text-base text-charcoal-40 w-12 pointer-events-none">03</span> Develop culture, not just processes </h4> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> When they help standardize workflows, ensure adherence to requirements, or save time, processes are good. Processes are great at helping to factor out boring, repetitive things. Processes are less good at encouraging behavioral change, but sometimes when we want to encourage a behavior we assume creating a new process is the only way. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> Developing a culture — a shared set of beliefs, values and practices — is harder than developing processes, but culture’s impact can be more lasting, more consistent, and more naturally integrated than process. If every member of your team values accessibility, for example, they’ll consider accessibility throughout an entire project, not just at the final step when your process dictates an accessibility check. </p> <h4 class="anchor-link text-2xl sm:text-3xl lg:text-4xl font-serif font-extralight mt-8 mb-2 lg:mb-4 cursor-pointer text-yellow" id="methodology--respect-team-members-time"> <span class="anchor-hover-indicator hidden font-mono word-spacing-tight font-semibold text-base text-charcoal-40">#</span> <span class="hidden sm:inline font-mono word-spacing-tight font-semibold text-base text-charcoal-40 w-12 pointer-events-none">04</span> Respect team members’ time </h4> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> Programmers need large blocks of uninterrupted time to do their best work. In theory, that sounds pretty easy to provide. Today, however, this need must be forcefully defended, or the programmer’s day will magically fill with meetings, check-ins, drive-bys, micro-distractions, chat pings, and 100 other types of interruption, all of which stand in direction opposition to deep, meaningful work getting done. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> This is true for many kinds of deep work, but it's especially true for programming. Programming requires the practitioner to hold multiple pieces of information in their head in the crucial moments before those ideas can coalesce and pass through the keyboard. When they're interrupted, a programmer has to gather all those pieces together again when they return to the task, costing precious time and jeopardizing key insights. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> When you see a server in a restaurant delivering a giant tray of precariously balanced dishes, do you walk up and tickle their nose? No, you give them a wide berth and let them do their job, lest all those carefully prepared dishes come crashing to the ground. Same with programmers. Don’t interrupt a programmer unless it’s actually important. Create structures where their communication tasks can be performed in the in-between moments, when they aren’t deep under the hood. Make sure everyone understands what constitutes "important enough to interrupt". </p> <h4 class="anchor-link text-2xl sm:text-3xl lg:text-4xl font-serif font-extralight mt-8 mb-2 lg:mb-4 cursor-pointer text-yellow" id="methodology--hold-way-fewer-meetings"> <span class="anchor-hover-indicator hidden font-mono word-spacing-tight font-semibold text-base text-charcoal-40">#</span> <span class="hidden sm:inline font-mono word-spacing-tight font-semibold text-base text-charcoal-40 w-12 pointer-events-none">05</span> Hold (way) fewer meetings </h4> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> If you do client work, you’ll need a kickoff meeting for a new project, and you’ll probably need a regular meeting to deliver work. And some times you just need to get two people on a quick Zoom call to hash something out in a way that's faster and more collaborative than would be possible async. Beyond that, meetings should be steadfastly and ruthlessly eliminated, including the ubiquitous Daily Standup. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> Meetings are costly (add up the hourly rate of every person in the meeting some time), disruptive (ugh, I was so close to a breakthrough, but I have a meeting), and have a nasty tendency to self-replicate (the last part of most meetings is scheduling the next meeting). In too many organizations, scheduling a meeting is used to give the illusion that work is getting done, when in fact the opposite is true: Nobody is getting anything done, because they are in meetings all day. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> Experiment (either actually, or in your mind) with canceling every single meeting for a week, or a month. Did you get any less work done? </p> <h4 class="anchor-link text-2xl sm:text-3xl lg:text-4xl font-serif font-extralight mt-8 mb-2 lg:mb-4 cursor-pointer text-yellow" id="methodology--don-t-shy-from-conflict"> <span class="anchor-hover-indicator hidden font-mono word-spacing-tight font-semibold text-base text-charcoal-40">#</span> <span class="hidden sm:inline font-mono word-spacing-tight font-semibold text-base text-charcoal-40 w-12 pointer-events-none">06</span> Don’t shy from conflict </h4> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> Every conflict offers a choice: This moment can be an opportunity for growth, or a chance to perpetuate unhealthy patterns by leaving crucial truths unspoken. Addressing conflict directly and honestly is good and healthy, in every area of life, and work is no exception. If there is something difficult that needs to be said to a colleague and you fail to say it, you have harmed your colleague in service of your own comfort. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> By the same token, not every critique or suggestion you have for that colleague is <em>actually</em> important. Most, in fact, are not. Take great care in deciding which of these to communicate (particularly to direct reports or people junior to you), then do so with care and kindness, remembering you likely aren’t so perfect yourself either. </p> <h3 class="text-4xl sm:text-6xl md:text-6xl font-serif font-extralight mb-8 lg:mb-12 border-t border-t-charcoal-60 pt-16 mt-16 text-yellow"> Clients </h3> <h4 class="anchor-link text-2xl sm:text-3xl lg:text-4xl font-serif font-extralight mt-8 mb-2 lg:mb-4 cursor-pointer text-yellow" id="clients--remember-clients-are-people-too"> <span class="anchor-hover-indicator hidden font-mono word-spacing-tight font-semibold text-base text-charcoal-40">#</span> <span class="hidden sm:inline font-mono word-spacing-tight font-semibold text-base text-charcoal-40 w-12 pointer-events-none">01</span> Remember: Clients are people too </h4> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> Build a culture of deep care and respect for the human beings at your clients. Approach each new client relationship with the goal of finding out what truly matters to them. Show them you want to understand by asking clarifying questions and checking back in with them on their big goals. If you sense stress or pressure, try to get to its source by talking to the person closest to the source. This approach positions you as a trusted partner for your client, who cares about their needs, and provides meaningful counsel in service of their goals. Be a partner, not an order-taker. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> Treat clients not as sources of revenue, but groups of human beings with real problems that need solving. If your company can help with these problems, tell them. If you can’t, or you aren’t sure, or a certain need comes up against a growth edge of your firm, tell them that too. Focus on delivering maximum value for your client, even if this doesn’t mean maximum revenue in the short term. A client who trusts you and is happy to have worked with your company is far more valuable than one you juiced for maximum revenue. </p> <h4 class="anchor-link text-2xl sm:text-3xl lg:text-4xl font-serif font-extralight mt-8 mb-2 lg:mb-4 cursor-pointer text-yellow" id="clients--demand-and-deserve-their-trust"> <span class="anchor-hover-indicator hidden font-mono word-spacing-tight font-semibold text-base text-charcoal-40">#</span> <span class="hidden sm:inline font-mono word-spacing-tight font-semibold text-base text-charcoal-40 w-12 pointer-events-none">02</span> Demand (and deserve) their trust </h4> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> If your client thought highly enough of your company to hire you, and you’ve treated them with respect, candor, and care throughout the relationship, you deserve their trust. There’s a certain type of person who feels it’s their job to be skeptical of outside vendors. On occasion they will subtly imply you’re not doing a good enough job, not working fast enough, or that you’ve been somehow less than honest. Don’t stand for it. Environments that lack a foundation of trust will eventually make your employees miserable. Politely but firmly tell this person that in order to do great things together, you require their trust. If they react poorly, or simply don’t agree, show your team you care for them by finding a new client who can extend trust. </p> <h3 class="text-4xl sm:text-6xl md:text-6xl font-serif font-extralight mb-8 lg:mb-12 border-t border-t-charcoal-60 pt-16 mt-16 text-yellow"> Community </h3> <h4 class="anchor-link text-2xl sm:text-3xl lg:text-4xl font-serif font-extralight mt-8 mb-2 lg:mb-4 cursor-pointer text-yellow" id="community--give-back-to-the-community-that-taught-you"> <span class="anchor-hover-indicator hidden font-mono word-spacing-tight font-semibold text-base text-charcoal-40">#</span> <span class="hidden sm:inline font-mono word-spacing-tight font-semibold text-base text-charcoal-40 w-12 pointer-events-none">01</span> Give back to the community that taught you </h4> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> Modern programmers, especially those working with open source tools, learn and grow largely through free resources, and we use free software every day in our day jobs. A company that profits from the work of educators and open source contributors owes it to the community to contribute back, whether financially or otherwise. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> Give financial support to creators with Patreons and GitHub sponsor pages. Give educational support by teaching through podcasts, conference talks, and blog posts. Give code support by contributing to open source libraries you use, or writing and releasing your own. Support conferences, meetups, free bootcamps, and other community projects. Use the power, influence, time, and money that come from having a company to uplift and empower the community that enables you to do the work in the first place. </p> <h4 class="anchor-link text-2xl sm:text-3xl lg:text-4xl font-serif font-extralight mt-8 mb-2 lg:mb-4 cursor-pointer text-yellow" id="community--help-create-the-community-you-want-to-be-a-part-of"> <span class="anchor-hover-indicator hidden font-mono word-spacing-tight font-semibold text-base text-charcoal-40">#</span> <span class="hidden sm:inline font-mono word-spacing-tight font-semibold text-base text-charcoal-40 w-12 pointer-events-none">02</span> Help create the community you want to be a part of </h4> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> It's easy to point out when the communities we're in don't look the way we want, whether it comes to diversity, financial support, educational opportunities, or anything else. But as companies and organizations with financial and time resources, we actually have a chance to shape our communities to be the way we want instead of simply complaining about what they're not. </p> <p class="leading-loose md:leading-loose text-charcoal-15 py-3 lg:py-4 text-base md:text-lg"> The best programming communities are those which are good for the people inside them (and the people who are joining). That means they're welcoming, friendly, collaborative, healthy, and safe. As leaders in our communities we can use our time, energy, and money to help this come to fruition. </p> </div> </div> <script> const anchorLinks = Array.from(document.getElementsByClassName('anchor-link')); anchorLinks.map(anchor => { const indicator = anchor.getElementsByClassName('anchor-hover-indicator')[0]; anchor.addEventListener('click', function handleClick(event) { location.hash = `#${event.currentTarget.id}`; }); anchor.addEventListener('mouseover', function handleMouseover() { indicator.classList.add('sm:inline'); }); anchor.addEventListener('mouseout', function handleMouseover() { indicator.classList.remove('sm:inline'); }); }); </script> <div class="bg-cream-400"> <div class="px-6 md:px-16 lg:px-28 py-10 md:py-16 lg:py-24"> <div class="max-w-screen-2xl mx-auto flex flex-col xl:flex-row"> <div class="flex-1"> <div class="font-serif font-extralight text-charcoal-80 text-6xl lg:text-7xl xl:text-8xl pb-10"> Hey, <br class="hidden lg:block">let’s talk. </div> </div> <div class="flex-1 light"> <div x-data="contactForm()" class="py-0 mb-24 text-charcoal-80"> <div class="max-w-5xl mx-auto"> <form action="https://fieldgoal.io/f/AGz9ZcOcd0nXSBLM38wsGiiTkLhuaUxZ" method="POST" x-show="! submitted" @recaptcha-submitted.window="submitForm" > <div class="mb-20 grid grid-cols-2 gap-y-10 sm:gap-y-6 gap-x-10 sm:mb-12"> <div class="relative col-span-2 lg:col-span-1 text-charcoal-80 focus-within:text-black"> <label for="first_name" class="flex items-center justify-between absolute left-0 -bottom-8 sm:bottom-0 pb-2.5 block text-sm sm:text-lg font-serif" :class="hasError('first_name') ? 'w-full' : ''" > First name <span class="font-mono tracking-tight normal-case select-none text-red" x-show="hasError('first_name')" x-text="errors.first_name ?? 'Required'" x-cloak > Required </span> </label> <input id="first_name" class="block w-full py-1 pl-0 pr-0 mt-1 font-mono text-lg tracking-tight text-black bg-transparent border-t-0 rounded-none word-spacing-tighter border-x-0 border-b-charcoal-60 focus:outline-none focus:ring-transparent focus:text-black focus:border-b-yellow md:text-2xl selection:bg-charcoal-80 sm:pl-32 lg:pl-36 sm:py-2" :class="hasError('first_name') ? 'border-b-red focus:border-b-yellow' : 'border-b-charcoal-60 focus:border-b-yellow'" type="text" name="first_name" autocomplete="given-name" autocorrect="off" autocapitalize="sentences" spellcheck="false" x-model="form.first_name" @input="checkError('first_name')" @keyup.enter="submitForm" /> </div> <div class="relative col-span-2 lg:col-span-1 text-charcoal-80 focus-within:text-black"> <input id="url" class="absolute -mx-[86127px] font-mono word-spacing-tighter tracking-tight border-t-0 border-x-0 border-b-charcoal-60 mt-1 focus:outline-none focus:ring-transparent text-black focus:text-black focus:border-b-yellow block w-full text-lg md:text-2xl rounded-none bg-transparent selection:bg-charcoal-80 pl-0 sm:pl-32 lg:pl-36 pr-0 py-1 sm:py-2" type="text" name="url" tabindex="-1" autocomplete="off" aria-hidden="true" x-model="form.url" /> <label for="last_name" class="flex items-center justify-between absolute left-0 -bottom-8 sm:bottom-0 pb-2.5 block text-sm sm:text-lg font-serif" :class="hasError('last_name') ? 'w-full' : ''" > Last name <span class="font-mono tracking-tight normal-case select-none text-red" x-show="hasError('last_name')" x-text="errors.last_name ?? 'Required'" x-cloak > Required </span> </label> <input id="last_name" class="block w-full py-1 pl-0 pr-0 mt-1 font-mono text-lg tracking-tight text-black bg-transparent border-t-0 rounded-none word-spacing-tighter border-x-0 border-b-charcoal-60 focus:outline-none focus:ring-transparent focus:text-black focus:border-b-yellow md:text-2xl selection:bg-charcoal-80 sm:pl-32 lg:pl-36 sm:py-2" type="text" name="last_name" autocomplete="family-name" autocorrect="off" autocapitalize="sentences" spellcheck="false" x-model="form.last_name" @input="checkError('last_name')" @keyup.enter="submitForm" /> </div> <div class="relative col-span-2 text-charcoal-80 focus-within:text-black"> <label for="email" class="flex items-center justify-between absolute left-0 -bottom-8 sm:bottom-0 pb-2.5 block text-sm sm:text-lg font-serif" :class="hasError('email') ? 'w-full' : ''" > Email <span class="font-mono tracking-tight normal-case select-none text-red" x-show="hasError('email')" x-text="errors.email ?? 'Required'" x-cloak > Required </span> </label> <input id="email" class="block w-full py-1 pl-0 pr-0 mt-1 font-mono text-lg tracking-tight text-black bg-transparent border-t-0 rounded-none word-spacing-tighter border-x-0 border-b-charcoal-60 focus:outline-none focus:ring-transparent focus:text-black focus:border-b-yellow md:text-2xl selection:bg-charcoal-80 sm:pl-32 lg:pl-20 sm:py-2" type="email" name="email" autocomplete="email" autocorrect="off" autocapitalize="off" spellcheck="false" x-model="form.email" @input="checkError('email')" @keyup.enter="submitForm" /> </div> </div> <div class="flex mb-12 space-x-10"> <div class="relative w-full text-charcoal-80 focus-within:text-black"> <label for="message" class="flex items-center justify-between w-full font-serif text-sm sm:text-lg" > Tell us about your idea: <span class="font-mono tracking-tight normal-case select-none text-red" x-show="hasError('message')" x-text="errors.message ?? 'Required'" x-cloak > Required </span> </label> <textarea id="message" class="block w-full px-4 py-3 mt-3 font-mono tracking-tight text-black bg-transparent rounded-none word-spacing-tighter border-charcoal-60 focus:outline-none focus:ring-transparent focus:text-black focus:border-yellow md:text-lg lg:text-xl selection:bg-charcoal-80" rows="5" name="message" autocomplete="off" autocorrect="off" autocapitalize="sentences" spellcheck="false" x-model="form.message" @input="checkError('message')" ></textarea> </div> </div> <div class="flex mb-12 space-x-10"> <div class="relative w-full text-charcoal-80 focus-within:text-black"> <label for="how_did_you_hear_about_us" class="flex items-center justify-between w-full font-serif text-sm sm:text-lg" > How did you hear about us? <span class="font-mono tracking-tight normal-case select-none text-red" x-show="hasError('how_did_you_hear_about_us')" x-text="errors.how_did_you_hear_about_us ?? 'Required'" x-cloak > Required </span> </label> <select id="how_did_you_hear_about_us" x-model="form.how_did_you_hear_about_us" @input="checkError('how_did_you_hear_about_us')" name="how_did_you_hear_about_us" class="md:text-lg lg:text-xl font-mono tracking-tight text-black word-spacing-tighter block px-4 py-3 mt-3 bg-transparent w-full md:w-1/2 border-charcoal-60 focus:outline-none focus:ring-transparent focus:text-black focus:border-yellow" > <option hidden selected></option> <option value="laravel_community">Laravel community</option> <option value="laravel_partners">Laravel Partners</option> <option value="vuejs_partners">Vue.js Partners</option> <option value="google">Google</option> <option value="twitter">Twitter</option> <option value="linkedin">LinkedIn</option> <option value="word_of_mouth">Word of mouth</option> <option value="conference_or_event">Conference or event</option> <option value="referral">Referral</option> <option value="other">Other / not sure</option> </select> </div> </div> <div class="flex mb-12 space-x-10"> <div class="relative w-full text-charcoal-80 flex items-start items-center"> <label class="flex items-center cursor-pointer"> <input id="subscribe_to_newsletter" x-model="form.subscribe_to_newsletter" @input="checkError('subscribe_to_newsletter')" name="subscribe_to_newsletter" type="checkbox" class="cursor-pointer object-left align-middle h-8 w-8 text-yellow bg-transparent border-charcoal-60 focus:outline-none focus:ring-transparent hover:border-yellow focus:border-yellow checked:bg-yellow checked:border-yellow" /> <span class="object-left align-middle mx-4 font-serif text-sm sm:text-lg leading-tight text-wrap whitespace-normal">Sign me up to receive occasional email insights from Tighten</span> </label> </div> </div> <div class="flex mb-12 space-x-10"> <div class="relative w-full text-charcoal-40 text-xs"> <p>By submitting this form, you acknowledge our <a href="/privacy-policy" class="underline hover:text-yellow">Privacy Notice</a>.</p> <p> This site is protected by reCAPTCHA and the Google <a class="underline hover:text-yellow" href="https://policies.google.com/privacy">Privacy Policy</a> and <a class="underline hover:text-yellow" href="https://policies.google.com/terms">Terms of Service</a> apply. </p> </div> </div> <div class="flex justify-end w-full mt-10 mb-6"> <div class="flex"> <a class="rounded-full appearance-none cursor-pointer" aria-label="Submit" type="submit" @click.prevent.debounce="$refs.recaptchaTrigger.click()" @keyup.enter="$refs.recaptchaTrigger.click()" tabindex="0" x-bind:disabled="submitting"> <div class="text-sm md:text-base box-border transition-colors duration-300 font-mono word-spacing-tight font-bold tracking-widest rounded-full py-3 px-6 uppercase leading-none bg-yellow hover:bg-white text-black" > <span class="px-4">Send Message</span> </div> </a> </div> <input class="hidden g-recaptcha" type="submit" x-ref="recaptchaTrigger" data-sitekey="6LfHrMwpAAAAAHeFTMbG1xf52XD8Gx6gQG2RX15o" data-callback="onSubmit" /> </div> </form> <div x-show="submitted" x-cloak> <div class="py-12 font-serif text-center font-extralight"> <h1 class="mb-10 text-5xl sm:text-6xl text-yellow">Thank you!</h1> <p class="font-mono text-xl sm:text-2xl"> We appreciate your interest. <br class="hidden sm:block xl:hidden">We will get right back to you. </p> </div> </div> </div> <div x-show="! submitted" class="flex justify-start w-full -mb-3 -ml-2 sm:-ml-3"> <a href="https://fieldgoal.io/" class="flex items-center justify-center text-sm text-gray hover:text-yellow transition-colors"> <svg viewBox="0 0 27 28" fill="none" stroke="none" class="w-4 h-4 mr-2 sm:h-5 sm:w-5" aria-hidden="true" > <path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M0.5 3C0.5 1.61929 1.61929 0.5 3 0.5H24C25.3807 0.5 26.5 1.61929 26.5 3V5C26.5 6.38071 25.3807 7.5 24 7.5H3C1.61929 7.5 0.5 6.38071 0.5 5V3ZM3 1.5C2.17157 1.5 1.5 2.17157 1.5 3V5C1.5 5.82843 2.17157 6.5 3 6.5H24C24.8284 6.5 25.5 5.82843 25.5 5V3C25.5 2.17157 24.8284 1.5 24 1.5H3ZM0.5 13C0.5 11.6193 1.61929 10.5 3 10.5H17C18.3807 10.5 19.5 11.6193 19.5 13V15C19.5 16.3807 18.3807 17.5 17 17.5H3C1.61929 17.5 0.5 16.3807 0.5 15V13ZM3 11.5C2.17157 11.5 1.5 12.1716 1.5 13V15C1.5 15.8284 2.17157 16.5 3 16.5H17C17.8284 16.5 18.5 15.8284 18.5 15V13C18.5 12.1716 17.8284 11.5 17 11.5H3ZM3 20.5C1.61929 20.5 0.5 21.6193 0.5 23V25C0.5 26.3807 1.61929 27.5 3 27.5H8C9.38071 27.5 10.5 26.3807 10.5 25V23C10.5 21.6193 9.38071 20.5 8 20.5H3ZM1.5 23C1.5 22.1716 2.17157 21.5 3 21.5H8C8.82843 21.5 9.5 22.1716 9.5 23V25C9.5 25.8284 8.82843 26.5 8 26.5H3C2.17157 26.5 1.5 25.8284 1.5 25V23Z" /> </svg> Form by FieldGoal </a> </div> </div> <script> window.onSubmit = function (token) { window.dispatchEvent(new CustomEvent('recaptcha-submitted', { detail: token })); }; let contact_form_url = "https://fieldgoal.io/f/AGz9ZcOcd0nXSBLM38wsGiiTkLhuaUxZ"; document.addEventListener('alpine:init', () => { Alpine.data('contactForm', () => ({ form: { first_name: null, last_name: null, email: null, message: null, how_did_you_hear_about_us: null, subscribe_to_newsletter: null, url: null, 'g-recaptcha-response': null, }, errors: {}, submitting: false, submitted: false, hasError(field) { return this.errors.hasOwnProperty(field) && this.errors[field]; }, isSubmitted() { return this.submitted; }, formIsValid() { this.errors = {}; Object.keys(this.form) .filter(field => ['first_name', 'last_name', 'email', 'message'].includes(field)) .forEach(input => { this.validateInput(input); }); return Object.keys(this.errors).length == 0; }, validateInput(key) { if (! this.form[key]) { this.errors[key] = 'Required'; } else if (key === 'email' && !this.hasValidEmail()) { this.errors[key] = 'Email address invalid'; } else { // All validations passed, so remove key from error bag delete this.errors[key]; } return this.errors.hasOwnProperty(key); }, hasValidEmail() { if (!this.form.email || this.form.email.length === 0) { return true; } var email_regex = new RegExp( /^(([^<>()\[\]\\.,;:\s@"]+(\.[^<>()\[\]\\.,;:\s@"]+)*)|(".+"))@((\[[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\.[0-9]{1,3}\])|(([a-zA-Z\-0-9]+\.)+[a-zA-Z]{2,}))$/ ); return email_regex.test(this.form.email); }, checkError(key) { if (this.errors.hasOwnProperty(key)) { // Only re-validate if it had an error already this.validateInput(key); } }, submitForm(event) { this.submitting = true; if (this.formIsValid()) { if (window.fathom) { window.fathom.trackGoal("8XHPBZYD", 0); } this.form['g-recaptcha-response'] = event.detail; axios({ method: 'post', headers: { Accept: 'application/json', 'X-Requested-With': 'XMLHttpRequest', }, url: contact_form_url, data: this.form, }).then(response => { this.submitted = true; this.submitting = false; }).catch(error => { this.submitted = true; this.submitting = false; if (error.response && error.response.data && error.response.data.errors) { this.errors = error.response.data.errors; } }); } grecaptcha.reset(); this.submitting = false; }, init() { window.addEventListener('load', (event) => { window.fathom.trackGoal("FB8Q5F8B", 0); }); }, })) }) </script> </div> </div> </div> </div> </div> <div class="px-6 md:px-16 lg:px-28 py-10 md:py-16 lg:py-24 p-6 pt-24 text-white bg-black sm:p-12 md:p-0"> <div class="max-w-screen-2xl mx-auto flex flex-wrap w-full space-y-10 lg:space-y-0"> <div class="flex flex-col items-start w-full h-full space-y-2 lg:w-2/5 "> <div class="flex items-end justify-between w-full pb-4 md:pb-8"> <div class="w-64 lg:-mt-4 mr-8 lg:ml-[-38px]"> <svg id="tighten-logo-inverted" viewBox="0 0 864 188.9234" aria-hidden="true" > <g> <g id="type"> <path d="M193.71,67.6651v83.4585H174.2486V67.6651l-5.6137-5.6145H134.2037V44.4615h99.5511V62.0506H199.3237Z" style="fill: #fff"/> <path d="M306.8128,135.4044h25.8237v15.7192H248.8038V135.4044h31.4374l4.8652-4.8643V92.3659L280.2412,87.5H248.8038V71.7825h53.1438V130.54Z" style="fill: #fff"/> <path d="M412.6319,143.8263c-4.6788,5.0515-14.2219,9.9174-25.6366,9.9174-23.9522,0-40.9806-18.7136-40.9806-42.2915s17.0284-42.29,40.9806-42.29c11.4147,0,20.9578,4.8644,25.6366,9.9175h4.4909V71.97H436.21v74.4752c0,26.0109-21.7072,42.4786-47.9044,42.4786-18.7128,0-33.4962-5.9888-42.8521-16.0934l11.4146-13.4733c7.4853,8.0475,20.0228,13.2861,31.4375,13.2861,18.1513,0,28.8174-9.73,28.8174-25.2623v-3.5542ZM417.4971,119.5V103.4063C410.76,93.8632,401.9651,86.19,389.6147,86.19c-14.7826,0-23.9523,11.04-23.9523,25.2623s9.17,25.2623,23.9523,25.2623C401.9651,136.7145,410.76,129.0429,417.4971,119.5Z" style="fill: #fff"/> <path d="M482.3348,151.1236H463.2477V36.4156h19.0871V80.7641h4.4908a34.1458,34.1458,0,0,1,25.6366-11.6018c18.7128,0,32.1853,11.4147,32.1853,32.56v49.4017H525.5612V105.8393c0-11.04-3.5559-19.2751-15.9063-19.2751-11.2275,0-20.022,10.1062-27.32,21.3337Z" style="fill: #fff"/> <path d="M577.4013,87.8743H558.6886V71.7825h23.3907V44.4615h19.2742v27.321H640.65V87.8743H605.8444l-4.678,4.6788V114.26c0,13.66,5.0523,22.2678,18.1505,22.2678,11.6026,0,18.3385-6.1744,26.3852-16.84l11.4146,13.099c-9.1688,12.91-23.0164,20.9578-37.9861,20.9578-21.7072,0-37.0513-11.2275-37.0513-36.8641V92.5531Z" style="fill: #fff"/> <path d="M717.193,153.7437c-28.2559,0-47.53-18.3393-47.53-42.2915s19.2742-42.29,45.2843-42.29c31.6246,0,46.0337,24.888,46.0337,48.84h-67.74l-3.7423,2.62c3.5551,8.6074,12.35,15.9047,27.6945,15.9047,11.4146,0,21.3321-3.7414,31.8118-11.6018l9.356,12.7248C744.5131,148.6906,730.8535,153.7437,717.193,153.7437Zm19.4614-50.5246,1.6835-3.93C734.4085,91.9916,725.8,86.19,714.9472,86.19c-10.6661,0-20.7707,5.0531-25.0752,14.5963l3.3688,2.4329Z" style="fill: #fff"/> <path d="M801.6873,151.1236H782.6V71.7825h19.0871v8.9816h4.4908a34.1458,34.1458,0,0,1,25.6366-11.6018c18.7128,0,32.1853,11.4147,32.1853,32.56v49.4017H844.9137V105.8393c0-11.04-3.5558-19.2751-15.9063-19.2751-11.2275,0-20.022,10.1062-27.32,21.3337Z" style="fill: #fff"/> <rect x="281.0028" y="36.4156" width="21.1679" height="21.1679" style="fill: #fff"/> </g> <polygon points="71.986 44.467 60.893 33.762 60.893 0 43.774 0 43.774 33.681 32.585 44.467 0 44.467 0 62.028 32.663 62.028 43.774 72.726 43.774 106.38 60.893 106.38 60.893 72.725 71.986 62.028 104.877 62.028 104.877 44.467 71.986 44.467" style="fill: #ffbc00"/> </g> </svg> </div> <div class="flex mb-3 lg:hidden space-x-5 text-gray"> <a class="text-charcoal-50 hover:text-white" href="https://twitter.com/TightenCo" role="link" aria-label="Twitter"> <svg viewBox="0 0 20 17" fill="none" stroke="none" class="w-5 h-5 fill-current" aria-hidden="true" > <path fill-rule="evenodd" d="M17.6439514,2.67547417 C18.4915185,2.14746831 19.1418677,1.31023678 19.4470858,0.312892365 C18.6535188,0.803008922 17.7766039,1.15745731 16.8409931,1.34934833 C16.0943828,0.51822798 15.0272935,0 13.8463344,0 C11.5806773,0 9.74467336,1.91279903 9.74467336,4.27171413 C9.74467336,4.60660674 9.77871691,4.9329437 9.84915185,5.24461383 C6.44010096,5.0661674 3.4172683,3.36725964 1.3922639,0.781008678 C1.0389153,1.41412682 0.83700182,2.14746831 0.83700182,2.92969922 C0.83700182,4.41104901 1.56130774,5.71884132 2.66244057,6.4864054 C1.98978693,6.46440516 1.35704643,6.27006967 0.802958267,5.95228836 L0.802958267,6.0048445 C0.802958267,8.07531195 2.21635264,9.80233114 4.09579151,10.1934466 C3.75066033,10.2936699 3.38909432,10.3437816 3.01344133,10.3437816 C2.74931032,10.3437816 2.49104889,10.3181146 2.24217879,10.268003 C2.76339731,11.9644663 4.27892235,13.2013689 6.07501321,13.2343693 C4.66983624,14.3808265 2.90074544,15.062834 0.979045607,15.062834 C0.648001409,15.062834 0.320478958,15.0445005 0,15.0041667 C1.81604743,16.2154024 3.97253038,16.9230769 6.28983976,16.9230769 C13.838117,16.9230769 17.9632564,10.413449 17.9632564,4.76794187 C17.9632564,4.58216202 17.9609086,4.39760442 17.9526912,4.21549128 C18.7544756,3.61292903 19.4517814,2.86003178 20,2.00324448 C19.2639549,2.34302603 18.4727358,2.57280636 17.6439514,2.67547417 Z" /> </svg> </a> <a class="text-charcoal-50 hover:text-white" href="https://github.com/tighten" role="link" aria-label="Github"> <svg viewBox="0 0 20 20" fill="none" stroke="currentColor" class="w-5 h-5 fill-current" aria-hidden="true" > <path fill-rule="evenodd" d="M9.99907916,0 C4.47773105,0 0,4.47711716 0,10.0003069 C0,14.4184904 2.86503576,18.1663034 6.83876117,19.4886276 C7.33908346,19.5807115 7.5214095,19.2719236 7.5214095,19.0067221 C7.5214095,18.7697597 7.512815,18.14052 7.50790386,17.3062402 C4.72635747,17.9103103 4.13947635,15.9654992 4.13947635,15.9654992 C3.68458209,14.8101538 3.02894503,14.5025937 3.02894503,14.5025937 C2.12099819,13.8825624 3.09770097,13.8948402 3.09770097,13.8948402 C4.10141502,13.9654379 4.62936247,14.9255655 4.62936247,14.9255655 C5.52134811,16.4535437 6.97013414,16.0121551 7.53982627,15.7561619 C7.63068234,15.1103472 7.88913104,14.6695724 8.17459099,14.4197182 C5.95414224,14.1674085 3.6195095,13.3091869 3.6195095,9.47727063 C3.6195095,8.38576997 4.00933116,7.49255655 4.64900703,6.79394702 C4.54587311,6.54102336 4.20270727,5.52380368 4.74722981,4.14745695 C4.74722981,4.14745695 5.5864207,3.87857209 7.4968538,5.17265723 C8.29430001,4.95042819 9.15006599,4.83992756 10.0003069,4.83563031 C10.849934,4.83992756 11.7050861,4.95042819 12.5037601,5.17265723 C14.4129654,3.87857209 15.2509285,4.14745695 15.2509285,4.14745695 C15.7966788,5.52380368 15.453513,6.54102336 15.350993,6.79394702 C15.9918966,7.49255655 16.3786488,8.38576997 16.3786488,9.47727063 C16.3786488,13.3190092 14.0403327,14.164339 11.8131312,14.4117376 C12.1716443,14.7205255 12.4914822,15.3307345 12.4914822,16.2638509 C12.4914822,17.6002947 12.4792044,18.6789036 12.4792044,19.0067221 C12.4792044,19.2743792 12.6596888,19.5856226 13.1667639,19.4880138 C17.1374198,18.1626201 20,14.4172627 20,10.0003069 C20,4.47711716 15.5222689,0 9.99907916,0" /> </svg> </a> <a class="text-charcoal-50 hover:text-white" href="https://www.linkedin.com/company/tightenco" role="link" aria-label="Linked in"> <svg viewBox="0 0 20 20" fill="none" stroke="none" class="w-5 h-5 fill-current" aria-hidden="true" > <path fill-rule="evenodd" d="M0.504468485,6.41311307 L4.40263405,6.41311307 L4.40263405,19.9987194 L0.504468485,19.9987194 L0.504468485,6.41311307 Z M2.35418627,4.71379178 L2.32596425,4.71379178 C0.914863594,4.71379178 0,3.67524651 0,2.36009732 C0,1.01805609 0.94190969,0 2.38123236,0 C3.81937912,0 4.70366886,1.01549494 4.73189087,2.3562556 C4.73189087,3.67140479 3.81937912,4.71379178 2.35418627,4.71379178 L2.35418627,4.71379178 Z M20,20 L15.5797272,20 L15.5797272,12.9683698 C15.5797272,11.1281854 14.8882879,9.8732232 13.3678269,9.8732232 C12.2048448,9.8732232 11.5580903,10.7196824 11.2570555,11.537969 C11.1441675,11.8299398 11.1618062,12.2384428 11.1618062,12.6482264 L11.1618062,20 L6.7826905,20 C6.7826905,20 6.83913452,7.54514022 6.7826905,6.41311307 L11.1618062,6.41311307 L11.1618062,8.54526828 C11.420508,7.61301063 12.8198495,6.28249456 15.0529163,6.28249456 C17.8233772,6.28249456 20,8.23793059 20,12.4446152 L20,20 L20,20 Z" /> </svg> </a> </div> </div> <div class="leading-none pb-1.5"> <a class="font-mono word-spacing-tight font-bold text-sm uppercase tracking-widest pb-1.5 text-gray border-b border-transparent hover:underline hover:decoration-yellow hover:underline-offset-4" href="https://duckduckgo.com/?q=Directions+to+1807+W.+Sunnyside%2C+Chicago%2C+IL&amp;t=h_&amp;ia=directions&amp;iaxm=directions&amp;end=what%3A1807%2520W%2520Sunnyside%2520Ave%2Cwhere%3AChicago%252C%2520IL%2520%252060640%252C%2520United%2520States&amp;transport=drive"> 1807 W. Sunnyside, Suite 1G </a> </div> <div class="leading-none pb-1.5"> <a class="font-mono word-spacing-tight font-bold text-sm uppercase tracking-widest pb-1.5 text-gray border-b border-transparent hover:underline hover:decoration-yellow hover:underline-offset-4" href="https://duckduckgo.com/?q=Directions+to+1807+W.+Sunnyside%2C+Chicago%2C+IL&amp;t=h_&amp;ia=directions&amp;iaxm=directions&amp;end=what%3A1807%2520W%2520Sunnyside%2520Ave%2Cwhere%3AChicago%252C%2520IL%2520%252060640%252C%2520United%2520States&amp;transport=drive"> Chicago, IL 60640 </a> </div> <div class="leading-none pb-1.5"> <a class="font-mono word-spacing-tight font-bold text-sm uppercase tracking-widest pb-1.5 text-gray border-b border-transparent hover:underline hover:decoration-yellow hover:underline-offset-4" href="tel:+13124487405"> (312) 448-7405 </a> </div> <div class="leading-none pb-1.5"> <a class="font-mono word-spacing-tight font-bold text-sm uppercase tracking-widest pb-1.5 text-gray border-b border-transparent hover:underline hover:decoration-yellow hover:underline-offset-4" href="mailto:hello@tighten.co"> hello@tighten.co </a> </div> <div class="hidden pt-3 lg:flex space-x-6 text-gray"> <a class="text-charcoal-50 hover:text-white" href="https://twitter.com/TightenCo" role="link" aria-label="Twitter"> <svg viewBox="0 0 20 17" fill="none" stroke="none" class="w-5 h-5 fill-current" aria-hidden="true" > <path fill-rule="evenodd" d="M17.6439514,2.67547417 C18.4915185,2.14746831 19.1418677,1.31023678 19.4470858,0.312892365 C18.6535188,0.803008922 17.7766039,1.15745731 16.8409931,1.34934833 C16.0943828,0.51822798 15.0272935,0 13.8463344,0 C11.5806773,0 9.74467336,1.91279903 9.74467336,4.27171413 C9.74467336,4.60660674 9.77871691,4.9329437 9.84915185,5.24461383 C6.44010096,5.0661674 3.4172683,3.36725964 1.3922639,0.781008678 C1.0389153,1.41412682 0.83700182,2.14746831 0.83700182,2.92969922 C0.83700182,4.41104901 1.56130774,5.71884132 2.66244057,6.4864054 C1.98978693,6.46440516 1.35704643,6.27006967 0.802958267,5.95228836 L0.802958267,6.0048445 C0.802958267,8.07531195 2.21635264,9.80233114 4.09579151,10.1934466 C3.75066033,10.2936699 3.38909432,10.3437816 3.01344133,10.3437816 C2.74931032,10.3437816 2.49104889,10.3181146 2.24217879,10.268003 C2.76339731,11.9644663 4.27892235,13.2013689 6.07501321,13.2343693 C4.66983624,14.3808265 2.90074544,15.062834 0.979045607,15.062834 C0.648001409,15.062834 0.320478958,15.0445005 0,15.0041667 C1.81604743,16.2154024 3.97253038,16.9230769 6.28983976,16.9230769 C13.838117,16.9230769 17.9632564,10.413449 17.9632564,4.76794187 C17.9632564,4.58216202 17.9609086,4.39760442 17.9526912,4.21549128 C18.7544756,3.61292903 19.4517814,2.86003178 20,2.00324448 C19.2639549,2.34302603 18.4727358,2.57280636 17.6439514,2.67547417 Z" /> </svg> </a> <a class="text-charcoal-50 hover:text-white" href="https://github.com/tighten" role="link" aria-label="Github"> <svg viewBox="0 0 20 20" fill="none" stroke="currentColor" class="w-5 h-5 fill-current" aria-hidden="true" > <path fill-rule="evenodd" d="M9.99907916,0 C4.47773105,0 0,4.47711716 0,10.0003069 C0,14.4184904 2.86503576,18.1663034 6.83876117,19.4886276 C7.33908346,19.5807115 7.5214095,19.2719236 7.5214095,19.0067221 C7.5214095,18.7697597 7.512815,18.14052 7.50790386,17.3062402 C4.72635747,17.9103103 4.13947635,15.9654992 4.13947635,15.9654992 C3.68458209,14.8101538 3.02894503,14.5025937 3.02894503,14.5025937 C2.12099819,13.8825624 3.09770097,13.8948402 3.09770097,13.8948402 C4.10141502,13.9654379 4.62936247,14.9255655 4.62936247,14.9255655 C5.52134811,16.4535437 6.97013414,16.0121551 7.53982627,15.7561619 C7.63068234,15.1103472 7.88913104,14.6695724 8.17459099,14.4197182 C5.95414224,14.1674085 3.6195095,13.3091869 3.6195095,9.47727063 C3.6195095,8.38576997 4.00933116,7.49255655 4.64900703,6.79394702 C4.54587311,6.54102336 4.20270727,5.52380368 4.74722981,4.14745695 C4.74722981,4.14745695 5.5864207,3.87857209 7.4968538,5.17265723 C8.29430001,4.95042819 9.15006599,4.83992756 10.0003069,4.83563031 C10.849934,4.83992756 11.7050861,4.95042819 12.5037601,5.17265723 C14.4129654,3.87857209 15.2509285,4.14745695 15.2509285,4.14745695 C15.7966788,5.52380368 15.453513,6.54102336 15.350993,6.79394702 C15.9918966,7.49255655 16.3786488,8.38576997 16.3786488,9.47727063 C16.3786488,13.3190092 14.0403327,14.164339 11.8131312,14.4117376 C12.1716443,14.7205255 12.4914822,15.3307345 12.4914822,16.2638509 C12.4914822,17.6002947 12.4792044,18.6789036 12.4792044,19.0067221 C12.4792044,19.2743792 12.6596888,19.5856226 13.1667639,19.4880138 C17.1374198,18.1626201 20,14.4172627 20,10.0003069 C20,4.47711716 15.5222689,0 9.99907916,0" /> </svg> </a> <a class="text-charcoal-50 hover:text-white" href="https://www.linkedin.com/company/tightenco" role="link" aria-label="Linked in"> <svg viewBox="0 0 20 20" fill="none" stroke="none" class="w-5 h-5 fill-current" aria-hidden="true" > <path fill-rule="evenodd" d="M0.504468485,6.41311307 L4.40263405,6.41311307 L4.40263405,19.9987194 L0.504468485,19.9987194 L0.504468485,6.41311307 Z M2.35418627,4.71379178 L2.32596425,4.71379178 C0.914863594,4.71379178 0,3.67524651 0,2.36009732 C0,1.01805609 0.94190969,0 2.38123236,0 C3.81937912,0 4.70366886,1.01549494 4.73189087,2.3562556 C4.73189087,3.67140479 3.81937912,4.71379178 2.35418627,4.71379178 L2.35418627,4.71379178 Z M20,20 L15.5797272,20 L15.5797272,12.9683698 C15.5797272,11.1281854 14.8882879,9.8732232 13.3678269,9.8732232 C12.2048448,9.8732232 11.5580903,10.7196824 11.2570555,11.537969 C11.1441675,11.8299398 11.1618062,12.2384428 11.1618062,12.6482264 L11.1618062,20 L6.7826905,20 C6.7826905,20 6.83913452,7.54514022 6.7826905,6.41311307 L11.1618062,6.41311307 L11.1618062,8.54526828 C11.420508,7.61301063 12.8198495,6.28249456 15.0529163,6.28249456 C17.8233772,6.28249456 20,8.23793059 20,12.4446152 L20,20 L20,20 Z" /> </svg> </a> </div> </div> <div class="flex flex-col w-full space-y-2 lg:w-1/5"> <div class="pb-5 -mt-2 font-serif text-3xl font-light text-charcoal-10">Work</div> <div class="leading-none pb-1.5"> <a class="font-mono word-spacing-tight font-bold text-sm uppercase tracking-widest pb-1.5 text-gray border-b border-transparent hover:underline hover:decoration-yellow hover:underline-offset-4" href="/services/"> Services </a> </div> <div class="leading-none pb-1.5"> <a class="font-mono word-spacing-tight font-bold text-sm uppercase tracking-widest pb-1.5 text-gray border-b border-transparent hover:underline hover:decoration-yellow hover:underline-offset-4" href="/manifesto/"> Manifesto </a> </div> <div class="leading-none pb-1.5"> <a class="font-mono word-spacing-tight font-bold text-sm uppercase tracking-widest pb-1.5 text-gray border-b border-transparent hover:underline hover:decoration-yellow hover:underline-offset-4" href="/results/"> Results </a> </div> </div> <div class="flex flex-col w-full space-y-2 lg:w-1/5"> <div class="pb-5 -mt-2 font-serif text-3xl font-light text-charcoal-10">Company</div> <div class="leading-none pb-1.5"> <a class="font-mono word-spacing-tight font-bold text-sm uppercase tracking-widest pb-1.5 text-gray border-b border-transparent hover:underline hover:decoration-yellow hover:underline-offset-4" href="/about/"> About </a> </div> <div class="leading-none pb-1.5"> <a class="font-mono word-spacing-tight font-bold text-sm uppercase tracking-widest pb-1.5 text-gray border-b border-transparent hover:underline hover:decoration-yellow hover:underline-offset-4" href="/team/"> Team </a> </div> <div class="leading-none pb-1.5"> <a class="font-mono word-spacing-tight font-bold text-sm uppercase tracking-widest pb-1.5 text-gray border-b border-transparent hover:underline hover:decoration-yellow hover:underline-offset-4" href="/insights/"> Blog </a> </div> <div class="leading-none pb-1.5"> <a class="font-mono word-spacing-tight font-bold text-sm uppercase tracking-widest pb-1.5 text-gray border-b border-transparent hover:underline hover:decoration-yellow hover:underline-offset-4" href="/careers/"> Careers </a> </div> <div class="leading-none pb-1.5"> <a class="font-mono word-spacing-tight font-bold text-sm uppercase tracking-widest pb-1.5 text-gray border-b border-transparent hover:underline hover:decoration-yellow hover:underline-offset-4" href="/contact/"> Contact </a> </div> </div> <div class="flex flex-col w-full space-y-2 lg:w-1/5"> <div class="pb-5 -mt-2 font-serif text-3xl font-light text-charcoal-10">Community</div> <div class="leading-none pb-1.5"> <a class="font-mono word-spacing-tight font-bold text-sm uppercase tracking-widest pb-1.5 text-gray border-b border-transparent hover:underline hover:decoration-yellow hover:underline-offset-4" href="https://laravelpodcast.com/"> The Laravel Podcast </a> </div> <div class="leading-none pb-1.5"> <a class="font-mono word-spacing-tight font-bold text-sm uppercase tracking-widest pb-1.5 text-gray border-b border-transparent hover:underline hover:decoration-yellow hover:underline-offset-4" href="https://businessoflaravel.com/"> The Business of Laravel Podcast </a> </div> <div class="leading-none pb-1.5"> <a class="font-mono word-spacing-tight font-bold text-sm uppercase tracking-widest pb-1.5 text-gray border-b border-transparent hover:underline hover:decoration-yellow hover:underline-offset-4" href="https://twentypercent.fm/"> Twenty Percent Time Podcast </a> </div> <div class="leading-none pb-1.5"> <a class="font-mono word-spacing-tight font-bold text-sm uppercase tracking-widest pb-1.5 text-gray border-b border-transparent hover:underline hover:decoration-yellow hover:underline-offset-4" href="https://onramp.dev/"> Laravel Onramp </a> </div> <div class="leading-none pb-1.5"> <a class="font-mono word-spacing-tight font-bold text-sm uppercase tracking-widest pb-1.5 text-gray border-b border-transparent hover:underline hover:decoration-yellow hover:underline-offset-4" href="https://novapackages.com/"> Nova Packages </a> </div> <div class="leading-none pb-1.5"> <a class="font-mono word-spacing-tight font-bold text-sm uppercase tracking-widest pb-1.5 text-gray border-b border-transparent hover:underline hover:decoration-yellow hover:underline-offset-4" href="https://laravel-tricks.com/"> Laravel Tricks </a> </div> </div> </div> </div> <div class="px-6 py-10 text-xs lg:py-8 md:px-16 lg:px-28 bg-charcoal text-gray sm:text-sm"> <div class="max-w-screen-2xl mx-auto"> <div class="flex flex-col items-center justify-between w-full lg:flex-row"> <div class="flex items-center"> <div>©2024 Tighten Co.</div> <span class="mx-3">·</span> <a class="underline hover:text-white" href="/privacy-policy/">Privacy Policy</a> </div> <div class="flex items-center order-first pb-3 lg:pb-0 lg:order-last"> <a href="https://jigsaw.tighten.com/" class="flex items-center justify-center text-sm text-gray hover:text-yellow transition-colors" > <svg viewBox="0 0 28 28" fill="none" stroke="none" class="w-5 h-5 mr-2 sm:h-6 sm:w-6" aria-hidden="true" > <path fill="currentColor" d="M22.6,1.218H5.4A4.182,4.182,0,0,0,1.218,5.4V22.6A4.182,4.182,0,0,0,5.4,26.782H22.6A4.182,4.182,0,0,0,26.782,22.6V5.4A4.182,4.182,0,0,0,22.6,1.218Zm0,1A3.181,3.181,0,0,1,25.782,5.4v8.229H22.056a.733.733,0,0,1-.659-.407.578.578,0,0,1,.108-.666l.385-.384a1.616,1.616,0,0,0,.468-1.133V10.93a2.217,2.217,0,1,0-4.434,0v.105a1.593,1.593,0,0,0,.469,1.133l.382.383a.577.577,0,0,1,.11.667.733.733,0,0,1-.658.407H14.375V9.774a1.476,1.476,0,0,0-.821-1.329,1.325,1.325,0,0,0-1.533.248l-.383.383a.857.857,0,0,1-.6.25H10.93a1.467,1.467,0,1,1,0-2.934h.105a.857.857,0,0,1,.6.25l.383.382a1.326,1.326,0,0,0,1.533.249,1.476,1.476,0,0,0,.821-1.329V2.218ZM13.625,5.944a.733.733,0,0,1-.407.659.574.574,0,0,1-.666-.109l-.383-.383a1.617,1.617,0,0,0-1.134-.469H10.93a2.217,2.217,0,1,0,0,4.434h.105a1.614,1.614,0,0,0,1.134-.47l.383-.382a.577.577,0,0,1,.667-.108.731.731,0,0,1,.406.658v3.851H9.773a1.478,1.478,0,0,0-1.328.821,1.326,1.326,0,0,0,.248,1.533l.383.383a.847.847,0,0,1,.25.6v.105a1.467,1.467,0,1,1-2.934,0v-.105a.858.858,0,0,1,.249-.6l.384-.383a1.327,1.327,0,0,0,.248-1.532,1.475,1.475,0,0,0-1.329-.822H2.218V5.4A3.181,3.181,0,0,1,5.4,2.218h8.229ZM5.4,25.782A3.181,3.181,0,0,1,2.218,22.6V14.375H5.944a.733.733,0,0,1,.659.407.578.578,0,0,1-.108.666l-.385.384a1.616,1.616,0,0,0-.468,1.133v.105a2.217,2.217,0,1,0,4.434,0v-.105a1.593,1.593,0,0,0-.469-1.133l-.382-.383a.577.577,0,0,1-.11-.667.733.733,0,0,1,.658-.407h3.852v3.851a1.476,1.476,0,0,0,.821,1.329,1.326,1.326,0,0,0,1.533-.248l.383-.383a.857.857,0,0,1,.6-.25h.105a1.467,1.467,0,1,1,0,2.934h-.105a.857.857,0,0,1-.6-.25l-.383-.382a1.324,1.324,0,0,0-1.533-.249,1.476,1.476,0,0,0-.821,1.329v3.726Zm8.979-3.726a.733.733,0,0,1,.407-.659.578.578,0,0,1,.666.109l.383.383a1.617,1.617,0,0,0,1.134.469h.105a2.217,2.217,0,1,0,0-4.434h-.105a1.614,1.614,0,0,0-1.134.47l-.383.382a.574.574,0,0,1-.667.108.731.731,0,0,1-.406-.658V14.375h3.852a1.478,1.478,0,0,0,1.328-.821,1.326,1.326,0,0,0-.248-1.533l-.383-.383a.847.847,0,0,1-.25-.6V10.93a1.467,1.467,0,1,1,2.934,0v.105a.858.858,0,0,1-.249.6l-.384.383a1.327,1.327,0,0,0-.248,1.532,1.475,1.475,0,0,0,1.329.822h3.726V22.6A3.181,3.181,0,0,1,22.6,25.782H14.375Z" /> </svg> Built with Jigsaw </a> <span class="mx-3">·</span> <a href="https://fieldgoal.io/" class="flex items-center justify-center text-sm text-gray hover:text-yellow transition-colors" > <svg viewBox="0 0 27 28" fill="none" stroke="none" class="w-4 h-4 mr-2 sm:h-5 sm:w-5" aria-hidden="true" > <path fill-rule="evenodd" clip-rule="evenodd" fill="currentColor" d="M0.5 3C0.5 1.61929 1.61929 0.5 3 0.5H24C25.3807 0.5 26.5 1.61929 26.5 3V5C26.5 6.38071 25.3807 7.5 24 7.5H3C1.61929 7.5 0.5 6.38071 0.5 5V3ZM3 1.5C2.17157 1.5 1.5 2.17157 1.5 3V5C1.5 5.82843 2.17157 6.5 3 6.5H24C24.8284 6.5 25.5 5.82843 25.5 5V3C25.5 2.17157 24.8284 1.5 24 1.5H3ZM0.5 13C0.5 11.6193 1.61929 10.5 3 10.5H17C18.3807 10.5 19.5 11.6193 19.5 13V15C19.5 16.3807 18.3807 17.5 17 17.5H3C1.61929 17.5 0.5 16.3807 0.5 15V13ZM3 11.5C2.17157 11.5 1.5 12.1716 1.5 13V15C1.5 15.8284 2.17157 16.5 3 16.5H17C17.8284 16.5 18.5 15.8284 18.5 15V13C18.5 12.1716 17.8284 11.5 17 11.5H3ZM3 20.5C1.61929 20.5 0.5 21.6193 0.5 23V25C0.5 26.3807 1.61929 27.5 3 27.5H8C9.38071 27.5 10.5 26.3807 10.5 25V23C10.5 21.6193 9.38071 20.5 8 20.5H3ZM1.5 23C1.5 22.1716 2.17157 21.5 3 21.5H8C8.82843 21.5 9.5 22.1716 9.5 23V25C9.5 25.8284 8.82843 26.5 8 26.5H3C2.17157 26.5 1.5 25.8284 1.5 25V23Z" /> </svg> Forms by FieldGoal </a> </div> </div> </div> </div> </div> </body> </html>

Pages: 1 2 3 4 5 6 7 8 9 10