# Career Path Created: [[2024_01_08]] 21:03 Tags: #Career ![[Career Path.excalidraw.svg]] Hi! I’m Nick Perez, and I’ve been a software engineer professionally for 6 years and unprofessionally for as a long as I can remember. My most recent job was at a startup called AgileMD (YC S11) for 5 years. I started out as an intern, eventually going full time mostly as a front end software engineer but after a couple of years was promoted into my current full-stack role. I very much enjoy the work available within a startup environment, the many hats you can wear and how there is always something new to work on! Personally, I aim to be [[T Shaped Skills|"T" shaped]] where I have depth in web tech yet breadth across a wide range of other skills. In making things, there is a tension between [[80 - 20 Rule|getting things done]], and [[If you are going to do something, do it right|doing things right,]] as an engineer, my job is to know which to optimize within the right context. I've always been fascinated that despite computers being invented by people, there isn't a single person who completely understands the entirety of a computer. From the circuit design, to assembly, to a browser is quite a breadth of things to master, and as we learn the fundamentals we are able to see the patterns in reinvention. I am deeply passionate and interested in technology, anything from [[Mac Mini HTPC|self hosting my own servers]], to [[AirGradient DIY|soldering an air quality monitor]], and even [[Nibble 65% Keyboard|building my own keyboard]]. The following are a list of projects that I got the chance to work on. ## Projects I've done ### Web Applications I've built out many products at AgileMD. Along the way, I've learned a ton about different patterns of architecting projects, how to debug effectively, how to avoid over-abstraction and many more lessons. I've dealt with tons of UI issues that have led me to deeply understand how to write software for the web. To give examples of things I've made: - A low-code authoring tool which is effectively a simple DSL as a web application - An admin interface for managing complex relationships of groups, members and content as well as the accompanying permissions and auth models - Several file management web applications for different user types - A flowchart authoring and viewing tool based on a complex rich text editor with interactive content ### Design System About a year and a half into my job at AgileMD, I noticed that we were spending a lot of time discussing and rebuilding common UI components. I had recently read Brad Frost's Atomic Design and I realized that what we needed was a design system. The trouble was that while there are many off-the-shelf design systems, our product had to run in Internet Explorer 8 (which was old even in 2020). So, I set out to create a component-based design system library. I wrote design documents, discussed API specifications and had many conversations with our product team to iron out what we needed. Once implemented, it proved to be a huge boon of productivity for both the engineering team building applications on top of the system, and freeing up the design team to re-use components rather than start from scratch with every design. A design system is notoriously difficult to get right in the world of web development, but if I had to estimate the productivity of the team afterwards, I'd say that we are at least 2x more productive. ### Monorepo Now this may be a controversial one, but our projects were in a poly-repo pattern where we would make a new repo even if it was just to share some validation logic across applications (so over 200 repos in total for a team of less than 5). It was very difficult to work with because there was inevitably drift between projects and how things were set up. For a couple of years, I maintained code-mods to upgrade projects to the latest "standards", installing and uninstalling packages adding tooling configurations and writing CI/CD from templates. This worked, but it was a bit of a maintenance nightmare. Additionally, we dealt with making an update in one package you had to "publish through" your changes to other repos even if it was only bumping the version of a dependency. Usher in the monorepo, where we could finally make cross-cutting changes to applications with ease. This gave the team: higher confidence in refactors and using new patterns, a better understanding of the code and where it gets used (you can now command click across package boundaries in a monorepo!) This amplified team productivity by not requiring a review across 3 pull requests when it can now just be 1 (I once even had a change that required 5 reviews for 1 line...). ### CI / CD I've built a few iterations on our CI / CD pipeline. Before the monorepo, we were using semantic-release to define both our change log format and indicate what version a package should be. The pipeline based on the branch that you were on would build a docker image and tag it with the appropriate version. Now that we have monorepo, things get a bit more complicated, as you can release multiple packages with a single commit. When I get the time, I will probably write a blog post on how we got things working because I found a dearth of information on how others have gotten this to work with their monorepo build systems (we chose NX). ## What I'm looking for A software engineer is uniquely capable of generating value for a business. Instagram was sold to Facebook for $1 billion dollars yet only had 13 employees. I believe that my personal value comes from not just seeing the problem for what it is, but having the vision to see what it can be, what it should be, what it will be. There are times that you want someone to solve your immediate problems, your pain points, but then there are times that you want for someone to go a bit upstream of that problem and completely remove that and other problems from existence. I can operate on either of those levels and enjoy each of them deeply. If you give me the "why" for something, I'll get done the "how". - We spend a lot of our time at work, I'd want for my time to be spent doing something meaningful, and more specifically, not interested in profiting at the expense of others; I want to [[Create value, not extract it|create value, not extract it]]. - There is nothing quite like wrestling with a difficult problem and arriving at a solution. - I am eager to learn, to grow, both in my skill but also as a person. - One day, I hope to found my own company, based on the values I've outlined in [[My Vision|My Business Vision]]. If you've read thus far, I hope that we can work together some day, because it shows that you care enough to read this far. ## Resume Here is my resume below: ![[Nicholas Perez's Resume.pdf]]