<?xml version="1.0" encoding="UTF-8"?><rss version="2.0" xmlns:content="http://purl.org/rss/1.0/modules/content/"><channel><title>Nate</title><description>A seasoned full-stack engineer with 9+ years of experience crafting scalable applications and cloud-native solutions.</description><link>https://nateoneal.com/</link><item><title>Growing as a Java Engineer in a Full-Stack World</title><link>https://nateoneal.com/blog/java-engineer-fullstack-world/</link><guid isPermaLink="true">https://nateoneal.com/blog/java-engineer-fullstack-world/</guid><description>How building in both ecosystems made me a more deliberate developer.</description><pubDate>Tue, 10 Mar 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Starting in the Java Ecosystem&lt;/h2&gt;
&lt;p&gt;My foundation is Java — Spring Boot, JPA, Maven, the whole stack. There&apos;s something grounding about an ecosystem that&apos;s been production-tested for decades. You don&apos;t wonder if the library you&apos;re using will be deprecated next quarter. The type system is strict, the patterns are well-documented, and the tooling is mature in a way that reflects years of real-world pressure-testing.&lt;/p&gt;
&lt;p&gt;But Java can also feel heavy when you&apos;re trying to move fast. Spinning up a Spring Boot project to test an idea is overhead. The ceremony around configuration, annotations, and dependency injection is worth it at scale, but it adds drag when you&apos;re building a side project on a weekend and just want to see if something works.&lt;/p&gt;
&lt;h2&gt;Why I Started Reaching for TypeScript&lt;/h2&gt;
&lt;p&gt;The first time I built a frontend for one of my own projects, I used React because that&apos;s what everyone was using. Then I discovered TypeScript, and something felt immediately familiar — a strict type system, interfaces, generics. It mapped cleanly onto how I already thought about code from my Java background, just with dramatically less ceremony.&lt;/p&gt;
&lt;p&gt;The difference is velocity. A Next.js project with TypeScript and Tailwind can go from idea to deployed in a weekend. That speed changed what I was willing to try. I started building more because the cost of starting was lower, and building more is how you actually get better.&lt;/p&gt;
&lt;h2&gt;How Both Worlds Inform Each Other&lt;/h2&gt;
&lt;p&gt;The Java mindset makes me a more deliberate TypeScript developer. I think about interfaces before implementations. I default to separating concerns. I&apos;m suspicious of magic and prefer explicit configuration when the stakes are high.&lt;/p&gt;
&lt;p&gt;The TypeScript mindset has made me more pragmatic in Java. I question ceremony where it doesn&apos;t add value. I reach for simpler solutions first. I think about the developer experience of the API I&apos;m building, not just whether it&apos;s technically correct. Each ecosystem has filed down rough edges in how I approach the other.&lt;/p&gt;
&lt;h2&gt;Where My Stack Is Going&lt;/h2&gt;
&lt;p&gt;I&apos;m not abandoning Java — it&apos;s where I do my most serious backend work, and the ecosystem isn&apos;t going anywhere. But I see my future as genuinely full-stack: Java for the systems that need reliability and scale, TypeScript for the interfaces and tools and side projects where speed is the constraint.&lt;/p&gt;
&lt;p&gt;The engineers I respect most aren&apos;t language loyalists. They&apos;re pragmatists who know when to use what. That&apos;s the goal — not expertise in a single tool, but the judgment to reach for the right one.&lt;/p&gt;
</content:encoded></item><item><title>What 6 Months of the NeetCode Grind Actually Taught Me</title><link>https://nateoneal.com/blog/neetcode-grind-lessons/</link><guid isPermaLink="true">https://nateoneal.com/blog/neetcode-grind-lessons/</guid><description>Honest reflections on what daily algorithm practice really builds — and what it doesn&apos;t.</description><pubDate>Thu, 15 Jan 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;Why I Started&lt;/h2&gt;
&lt;p&gt;I&apos;d been putting it off for months. Everyone in the dev community talks about LeetCode like it&apos;s some rite of passage, and I kept telling myself I&apos;d get to it after finishing the current project. Then I found NeetCode&apos;s roadmap — a curated list of 150 problems that map to real patterns — and something clicked. I started the grind not because I had interviews lined up, but because I wanted to close the gap between the code I write at work and the code I knew I should be capable of writing.&lt;/p&gt;
&lt;h2&gt;The Patterns That Actually Clicked&lt;/h2&gt;
&lt;p&gt;The first few weeks were humbling. I&apos;d spend 45 minutes on an &quot;easy&quot; problem, eventually look at the solution, and feel like I&apos;d never seen this language before. But somewhere around week three, sliding window started to make sense. Then two pointers. Then I hit the trees section and everything slowed down again.&lt;/p&gt;
&lt;p&gt;What changed things was tracking the pattern, not the problem. Instead of asking &quot;how do I solve this,&quot; I started asking &quot;which pattern does this problem smell like?&quot; A problem with a shrinking and growing range? Sliding window. Two arrays to compare element by element? Two pointers or a hash map. Once I started categorizing before coding, my solve rate went up noticeably and problems stopped feeling like puzzles dropped from nowhere.&lt;/p&gt;
&lt;h2&gt;What Daily Practice Taught Me About Discipline&lt;/h2&gt;
&lt;p&gt;The grind is less about intelligence and more about consistency. Doing one problem a day feels slow. Doing one problem a day for six months is 180+ problems and a muscle memory for pattern recognition that you simply cannot shortcut your way to. The discipline I built from this carries into everything else — the side projects I finish instead of abandon, the documentation I actually write instead of defer.&lt;/p&gt;
&lt;p&gt;I also learned to be comfortable being stuck. That sounds small. But as a developer who prefers building to debugging, sitting with a problem for 20 minutes without progress used to feel like failure. Now it just feels like process. That reframe alone has made me a calmer engineer.&lt;/p&gt;
&lt;h2&gt;What I&apos;d Do Differently&lt;/h2&gt;
&lt;p&gt;Less time re-solving problems I already understand. There&apos;s a temptation to go back and polish solutions to problems you&apos;ve already beaten, but that time is better spent on the next category you haven&apos;t touched. I&apos;d also start the dynamic programming section earlier — I avoided it because it felt abstract, but it&apos;s one of the most pattern-able sections once you commit to it.&lt;/p&gt;
&lt;p&gt;If you&apos;re thinking about starting, use NeetCode&apos;s roadmap and don&apos;t grind random problems. The structure is the point.&lt;/p&gt;
</content:encoded></item><item><title>How Building Side Projects Changed the Way I Interview</title><link>https://nateoneal.com/blog/side-projects-changed-interviews/</link><guid isPermaLink="true">https://nateoneal.com/blog/side-projects-changed-interviews/</guid><description>What Bookmarked taught me about system design that no mock interview ever could.</description><pubDate>Fri, 20 Feb 2026 00:00:00 GMT</pubDate><content:encoded>&lt;h2&gt;The Gap Between Prep and Real Building&lt;/h2&gt;
&lt;p&gt;There&apos;s a version of interview prep that&apos;s entirely theoretical. You memorize system design frameworks, practice behavioral questions, and grind through mocks until your answers sound rehearsed. I did some of that. But the thing that actually changed how I showed up in interviews was building Bookmarked — a full-stack app that saves tweets directly to a Notion database through a Telegram bot.&lt;/p&gt;
&lt;p&gt;Building something real surfaces problems you&apos;d never encounter in a mock. What do you do when the Telegram webhook and the Notion API have different rate limits? How do you handle a failed sync without losing the user&apos;s data? These aren&apos;t questions you can answer from a framework. You have to build through them.&lt;/p&gt;
&lt;h2&gt;What Bookmarked Taught Me About System Design&lt;/h2&gt;
&lt;p&gt;Before I built Bookmarked, I could talk about message queues in the abstract. After building it, I understood &lt;em&gt;why&lt;/em&gt; you&apos;d want one — because synchronous API chaining is a liability when one service is slower than another. I ended up with a simple retry mechanism instead of a full queue, which was the right call for the scale, but I understood the tradeoff I was making and could articulate it precisely.&lt;/p&gt;
&lt;p&gt;That kind of reasoning — knowing what problem a pattern solves and when it&apos;s overkill — is exactly what interviewers probe for in system design rounds. It&apos;s hard to fake if you haven&apos;t built anything real.&lt;/p&gt;
&lt;h2&gt;How Having Real Projects Changed the Interview Dynamic&lt;/h2&gt;
&lt;p&gt;The moment I started walking interviewers through Bookmarked instead of a to-do app, the conversations got more interesting. Engineers asked follow-up questions. They pushed back on architecture choices. One interviewer spent twenty minutes on the Telegram webhook flow because he&apos;d built something similar and wanted to compare notes.&lt;/p&gt;
&lt;p&gt;That&apos;s a completely different dynamic than reciting answers. Real projects invite real conversation, and real conversation is where you actually demonstrate what you know rather than what you&apos;ve memorized.&lt;/p&gt;
&lt;h2&gt;What Recruiters Actually Want to Hear&lt;/h2&gt;
&lt;p&gt;They want to see that you&apos;ve hit real walls and made real decisions. Not that you&apos;ve followed a tutorial to completion, but that you encountered a problem, weighed your options, and chose one with a reason. The &quot;why&quot; is everything. A mediocre technical decision with clear reasoning reads better than a perfect decision with no explanation.&lt;/p&gt;
&lt;p&gt;Build something you actually use. The specificity of a real problem, and the authenticity of having genuinely solved it, comes through in a way that polish alone can&apos;t replicate.&lt;/p&gt;
</content:encoded></item></channel></rss>