<?xml version="1.0" encoding="UTF-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" xmlns:content="http://purl.org/rss/1.0/modules/content/" xmlns:atom="http://www.w3.org/2005/Atom" version="2.0" xmlns:itunes="http://www.itunes.com/dtds/podcast-1.0.dtd" xmlns:googleplay="http://www.google.com/schemas/play-podcasts/1.0"><channel><title><![CDATA[Tech with Steve Armstrong]]></title><description><![CDATA[Practical articles on Java, Spring Boot, and backend engineering, from beginner fundamentals to production-grade insights. Written for developers who want to understand how things actually work, not just get them running.]]></description><link>https://www.stevearmstrong.org</link><image><url>https://substackcdn.com/image/fetch/$s_!QVIU!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4a083f-a968-4bcc-82bb-1e1ffe856ffa_96x96.jpeg</url><title>Tech with Steve Armstrong</title><link>https://www.stevearmstrong.org</link></image><generator>Substack</generator><lastBuildDate>Tue, 28 Apr 2026 10:48:35 GMT</lastBuildDate><atom:link href="https://www.stevearmstrong.org/feed" rel="self" type="application/rss+xml"/><copyright><![CDATA[Steve Armstrong]]></copyright><language><![CDATA[en]]></language><webMaster><![CDATA[stevearmstrongdev@substack.com]]></webMaster><itunes:owner><itunes:email><![CDATA[stevearmstrongdev@substack.com]]></itunes:email><itunes:name><![CDATA[Steve Armstrong]]></itunes:name></itunes:owner><itunes:author><![CDATA[Steve Armstrong]]></itunes:author><googleplay:owner><![CDATA[stevearmstrongdev@substack.com]]></googleplay:owner><googleplay:email><![CDATA[stevearmstrongdev@substack.com]]></googleplay:email><googleplay:author><![CDATA[Steve Armstrong]]></googleplay:author><itunes:block><![CDATA[Yes]]></itunes:block><item><title><![CDATA[Spring From Scratch: Part 1]]></title><description><![CDATA[What Is Spring Boot and Why Does Half the Java World Use It?]]></description><link>https://www.stevearmstrong.org/p/spring-from-scratch-part-1</link><guid isPermaLink="false">https://www.stevearmstrong.org/p/spring-from-scratch-part-1</guid><dc:creator><![CDATA[Steve Armstrong]]></dc:creator><pubDate>Mon, 06 Apr 2026 02:03:42 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!QVIU!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4a083f-a968-4bcc-82bb-1e1ffe856ffa_96x96.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>By Steve Armstrong | Senior Software Engineer</em></p><p>I worked at Infosys on India&#8217;s first GST e-invoicing system. Spring Boot was the backbone of that backend. Millions of invoices, strict government compliance requirements, zero tolerance for downtime. It held up fine. That&#8217;s more or less when I stopped questioning whether this framework was worth learning.</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.stevearmstrong.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Tech with Steve Armstrong! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div><p>This series is for people who want to actually understand Spring Boot, not just get it running and move on.</p><div><hr></div><h2>Spring Framework is not Spring Boot</h2><p>This trips up a lot of beginners, so let&#8217;s get it out of the way first.</p><p><strong>Spring Framework</strong> is a toolkit for building Java applications. It has been around since 2003 and is modular by design. You use what you need and ignore the rest.</p><p>The main modules:</p><ul><li><p><strong>Web</strong> &#8212; handles incoming HTTP requests, processes them, returns a response (HTML for a browser, JSON for an API)</p></li><li><p><strong>Data</strong> &#8212; abstracts away the repetitive parts of working with databases, whether that&#8217;s SQL or something in-memory</p></li><li><p><strong>AOP (Aspect-Oriented Programming)</strong> &#8212; lets you attach cross-cutting concerns like logging and security to your application without scattering that logic everywhere</p></li><li><p><strong>Core</strong> &#8212; dependency injection and object lifecycle management. This is the thing that makes Spring, Spring.</p></li><li><p><strong>Test</strong> &#8212; utilities for testing Spring components</p></li></ul><p>Each module has a specific job. That&#8217;s the design philosophy and it works.</p><p><strong>Spring Boot</strong> is a layer that sits on top of Spring Framework. It exists because setting up a raw Spring project involved a tedious amount of configuration that was almost identical every single time. Someone eventually decided that was silly, and Spring Boot was the result.</p><p>It gives you an embedded server, pre-wired dependencies, and a project structure that works out of the box. You spend less time on setup and more time on the actual problem.</p><p>Spring Framework gives you the parts. Spring Boot gives you the parts already assembled.</p><div><hr></div><h2>The Ecosystem</h2><p>Spring Boot is one project in a larger family. Worth knowing what else is out there:</p><ul><li><p><strong>Spring Boot</strong> &#8212; removes setup friction. Your starting point.</p></li><li><p><strong>Spring Framework</strong> &#8212; the core toolkit. Everything else builds on this.</p></li><li><p><strong>Spring Data</strong> &#8212; cleaner database access</p></li><li><p><strong>Spring Security</strong> &#8212; authentication and authorization</p></li><li><p><strong>Spring Batch</strong> &#8212; large-scale batch processing</p></li><li><p><strong>Spring Integration</strong> &#8212; messaging and system-to-system communication</p></li><li><p><strong>Spring Cloud</strong> &#8212; microservices and distributed systems</p></li></ul><p>You do not need most of this right now. It is just useful to have a mental map so you know what to reach for later.</p><div><hr></div><h2>What This Series Covers</h2><p>We are going to build a backend store application from the ground up. Each part introduces one concept and builds on the previous one. No jumping ahead.</p><ul><li><p><strong>Part 1</strong> (this one) &#8212; What Spring and Spring Boot are, and how they relate</p></li><li><p><strong>Part 2</strong> &#8212; Project setup and understanding what every file actually does</p></li><li><p><strong>Part 3</strong> &#8212; Your first REST API endpoint</p></li><li><p><strong>Part 4</strong> &#8212; Database access with Spring Data</p></li><li><p><strong>Part 5</strong> &#8212; Validation, error handling, and not embarrassing yourself with your API design</p></li><li><p><strong>Part 6</strong> &#8212; Security with Spring Security</p></li></ul><p>More parts after that depending on where the series goes.</p><div><hr></div><h2>Who This Is For</h2><p>You know basic Java. You have heard of Spring but the official documentation made your eyes glaze over. You want to understand the why, not just copy code that works for reasons you cannot explain.</p><p>If that is not you, this probably is not for you.</p><p>Part 2 covers project setup. See you there.</p><p>Steve</p><div class="subscription-widget-wrap-editor" data-attrs="{&quot;url&quot;:&quot;https://www.stevearmstrong.org/subscribe?&quot;,&quot;text&quot;:&quot;Subscribe&quot;,&quot;language&quot;:&quot;en&quot;}" data-component-name="SubscribeWidgetToDOM"><div class="subscription-widget show-subscribe"><div class="preamble"><p class="cta-caption">Thanks for reading Tech with Steve Armstrong! Subscribe for free to receive new posts and support my work.</p></div><form class="subscription-widget-subscribe"><input type="email" class="email-input" name="email" placeholder="Type your email&#8230;" tabindex="-1"><input type="submit" class="button primary" value="Subscribe"><div class="fake-input-wrapper"><div class="fake-input"></div><div class="fake-button"></div></div></form></div></div>]]></content:encoded></item><item><title><![CDATA[IntelliJ Tips and Tricks]]></title><description><![CDATA[The ones that actually save time. Not the ones that look impressive in a demo.]]></description><link>https://www.stevearmstrong.org/p/intellij-tips-and-tricks</link><guid isPermaLink="false">https://www.stevearmstrong.org/p/intellij-tips-and-tricks</guid><dc:creator><![CDATA[Steve Armstrong]]></dc:creator><pubDate>Sat, 12 Oct 2024 21:25:48 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!QVIU!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4a083f-a968-4bcc-82bb-1e1ffe856ffa_96x96.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><em>By Steve Armstrong | Senior Software Engineer</em></p><p>I have been using IntelliJ full time for years. Enterprise Java, large codebases, the kind of projects where you spend more time reading code than writing it. Over that time you stop caring about features that look cool and start caring about the ones that make you faster.</p><p>These are those ones. Some are obvious. Some most people never find. All of them are worth knowing.</p><div><hr></div><h2>1. Breakpoint Groups <em>(hidden gem)</em></h2><p>Open the Breakpoints dialog: <strong>Windows:</strong> Ctrl + Shift + F8 <strong>Mac:</strong> Cmd + Shift + F8</p><p>Most people scatter breakpoints across a codebase and then forget which ones belong to what. IntelliJ lets you group breakpoints and give each group a name. The way I use this: whenever I pick up a Jira ticket, I create a group named after the ticket number &#8212; say, <code>PROJ-1042</code> &#8212; and add every breakpoint I set for that ticket to that group.</p><p>When you are done with the ticket, uncheck the group. All those breakpoints get disabled in one click without deleting them. When the ticket comes back for rework, you just re-enable the group and everything is exactly where you left it. No hunting through files trying to remember where you were debugging.</p><p>To create a group, right-click any breakpoint in the Breakpoints dialog and select <strong>Move to Group</strong>. Name it after the ticket number. It takes ten seconds to set up and saves a lot of confusion on longer tickets.</p><div><hr></div><h2>2. Search Everywhere</h2><p><strong>Windows:</strong> Shift Shift <strong>Mac:</strong> Shift Shift</p><p>Double tap Shift and a search box opens that finds literally anything &#8212; classes, files, symbols, actions, settings. If you are still using the file tree to navigate, stop. This is faster for everything.</p><div><hr></div><h2>3. Find Action <em>(hidden gem)</em></h2><p><strong>Windows:</strong> Ctrl + Shift + A <strong>Mac:</strong> Cmd + Shift + A</p><p>Can&#8217;t remember a shortcut? Search for any action by name and run it directly. This is also how you discover features you didn&#8217;t know existed. Type &#8220;column selection&#8221; or &#8220;wrap with&#8221; and see what comes up.</p><div><hr></div><h2>4. Recent Files</h2><p><strong>Windows:</strong> Ctrl + E <strong>Mac:</strong> Cmd + E</p><p>Opens a popup of your recently accessed files. You can also start typing to filter. Faster than any tab management strategy you currently have.</p><div><hr></div><h2>5. Navigate to Last Edit Location <em>(hidden gem)</em></h2><p><strong>Windows:</strong> Ctrl + Shift + Backspace <strong>Mac:</strong> Cmd + Shift + Backspace</p><p>Jumps you back to the exact line you last edited. Useful when you are reading code across multiple files and need to get back to where you were working. Most people do not know this exists.</p><div><hr></div><h2>6. Multiple Cursors <em>(hidden gem)</em></h2><p><strong>Windows:</strong> Alt + Click <strong>Mac:</strong> Alt + Click</p><p>Click in multiple places while holding Alt and you get a cursor at each location. Edit all of them simultaneously. Useful for renaming repetitive patterns that a refactor tool would overcomplicate.</p><div><hr></div><h2>7. Select Next Occurrence</h2><p><strong>Windows:</strong> Alt + J <strong>Mac:</strong> Ctrl + G</p><p>Select a word, then keep pressing this shortcut to select the next occurrence of it in the file. Each one gets its own cursor. Edit all of them at once. Faster than find and replace for simple cases.</p><div><hr></div><h2>8. Expand and Shrink Selection</h2><p><strong>Windows:</strong> Ctrl + W / Ctrl + Shift + W <strong>Mac:</strong> Alt + Up / Alt + Down</p><p>Expands or shrinks your selection by syntax scope &#8212; word, expression, statement, block, method, class. Much more precise than dragging. Use it when you need to copy a whole expression without counting brackets.</p><div><hr></div><h2>9. Matching Brace Navigation</h2><p><strong>Windows:</strong> Ctrl + Shift + M <strong>Mac:</strong> Ctrl + M</p><p>Jumps your cursor between the opening and closing brace of a block. Useful in deeply nested code when you want to quickly check where a block ends without scrolling.</p><div><hr></div><h2>10. Navigate Between Methods</h2><p><strong>Windows:</strong> Alt + Up / Alt + Down <strong>Mac:</strong> Ctrl + Up / Ctrl + Down</p><p>Jumps to the previous or next method in the file. Saves a lot of scrolling in long classes.</p><div><hr></div><h2>11. Toggle Field Watchpoint <em>(hidden gem)</em></h2><p>Right-click on a field in the editor, then select <strong>Toggle Field Watchpoint</strong>.</p><p>This one is underused. A watchpoint pauses execution whenever the value of that field changes, showing you exactly where and when it was modified. Invaluable when tracking down unexpected state mutations in a running application. You don&#8217;t need to scatter debug print statements everywhere &#8212; just set a watchpoint and let the debugger do the work.</p><div><hr></div><h2>12. Evaluate Expression During Debug <em>(hidden gem)</em></h2><p><strong>Windows:</strong> Alt + F8 <strong>Mac:</strong> Alt + F8</p><p>While paused at a breakpoint, open this and run any expression against the current state of your program. Call methods, inspect objects, test logic &#8212; without restarting. One of the most powerful debugger features and one of the least used.</p><div><hr></div><h2>13. Extract Method / Variable</h2><p><strong>Windows:</strong> Ctrl + Alt + M (method) Ctrl + Alt + V (variable)<br><strong>Mac:</strong> Cmd + Alt + M (method) Cmd + Alt + V (variable)</p><p>Select any expression and extract it into a named variable or a separate method. IntelliJ handles the refactor cleanly. Use this constantly when cleaning up bloated methods.</p><div><hr></div><h2>14. Inline Variable <em>(hidden gem)</em></h2><p><strong>Windows:</strong> Ctrl + Alt + N <strong>Mac:</strong> Cmd + Alt + N</p><p>The opposite of Extract Variable. If you have a variable that is only used once and adds no clarity, this replaces it inline. Useful during cleanup when you realize a variable name isn&#8217;t earning its keep.</p><div><hr></div><h2>15. Live Templates</h2><p><strong>Windows / Mac:</strong> Ctrl + J</p><p>Type a short abbreviation and expand it into a full code block. <code>sout</code> becomes <code>System.out.println()</code>, <code>fori</code> becomes a for loop. You can also create your own. Go to Settings, search &#8220;Live Templates&#8221;, and build whatever boilerplate you type repeatedly.</p><div><hr></div><h2>16. Structural Search and Replace <em>(hidden gem)</em></h2><p>Edit menu, then Find, then Search Structurally.</p><p>This is find and replace but it understands code structure, not just text. You can write patterns that match code semantically &#8212; for example, find all method calls with a specific signature and replace them. Almost nobody uses this. It is genuinely powerful for large refactors.</p><h2>17. Increase IntelliJ Memory Allocation</h2><p>Help menu, then <strong>Change Memory Settings</strong>.</p><p>By default IntelliJ runs with a fairly conservative heap size. On large codebases this shows up as sluggishness, freezes during indexing, or outright out of memory errors. The fix is straightforward &#8212; go to Help, Change Memory Settings, and bump the heap size up. 2048 MB is a reasonable starting point. 4096 MB if your machine can spare it and you are working on a large monorepo or multiple projects simultaneously.</p><p>After changing it, restart IntelliJ. You will notice the difference during indexing and when running multiple run configurations at the same time. If you are on a machine with 16 GB of RAM or more and you have not done this yet, do it now.</p><h2>18. HotSwap &#8212; Reload Changed Classes Without Restarting <em>(hidden gem)</em></h2><p>While attached to the debugger, press <strong>Windows:</strong> Ctrl + Shift + F9 <strong>Mac:</strong> Cmd + Shift + F9 to recompile the current file. Then go to Run, then <strong>Debugging Actions</strong>, then <strong>Reload Changed Classes</strong>.</p><p>This pushes the recompiled class directly into the running JVM without stopping and restarting the application. No full redeploy, no waiting for the server to come back up. You make a change, reload, and keep debugging from where you were.</p><p>There are limitations &#8212; you cannot hot swap structural changes like adding new methods or changing method signatures. But for logic changes inside existing methods, it works reliably and saves a significant amount of time when you are iterating on a fix. In a large Spring Boot application where a full restart takes two or three minutes, this compounds quickly over a debugging session.</p><p>If you want to go further, look into <strong>DCEVM</strong> or <strong>JRebel</strong> &#8212; both extend HotSwap to support structural changes as well. But the built-in version handles most day-to-day cases just fine.</p><h2>19. The Problems Tab</h2><p>View menu, then <strong>Tool Windows</strong>, then <strong>Problems</strong>. Or look for the Problems tab at the bottom of the IDE.</p><p>The Problems tab gives you a consolidated view of every issue IntelliJ has detected across your entire project &#8212; compilation errors, warnings, code quality issues, typos in string literals, missing dependencies. All in one place, grouped by file.</p><p>Most developers only find out about problems when the compiler yells at them or when something breaks at runtime. The Problems tab surfaces issues passively in the background as you work. You do not have to go hunting &#8212; if something is wrong anywhere in the project, it shows up here.</p><p>The more useful habit is to check it before raising a pull request. It will catch things like unused imports, unreachable code, or a null safety warning that your eyes skipped over during review. Takes ten seconds and occasionally saves you a comment from a reviewer pointing out something embarrassing.</p><div><hr></div><p>That covers most of what I reach for daily. If there are specific workflows you want covered &#8212; debugging, Git, Spring-specific tooling &#8212; let me know in the comments.</p><p>Steve</p>]]></content:encoded></item><item><title><![CDATA[Onsite Software Engineer Onboarding: Targeted Plan for a Five-Person Team]]></title><description><![CDATA[Team Structure]]></description><link>https://www.stevearmstrong.org/p/onsite-software-engineer-onboarding</link><guid isPermaLink="false">https://www.stevearmstrong.org/p/onsite-software-engineer-onboarding</guid><dc:creator><![CDATA[Steve Armstrong]]></dc:creator><pubDate>Tue, 16 Jul 2024 18:15:58 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!QVIU!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4a083f-a968-4bcc-82bb-1e1ffe856ffa_96x96.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Team Structure</h2><ul><li><p>1 Manager</p></li><li><p>4 Team Members (including you)</p></li></ul><h2>Day One: Establishing Your Presence</h2><ol><li><p><strong>Workspace Setup</strong></p><ul><li><p>Arrive early to set up your physical workspace</p></li><li><p>Ensure your computer and necessary peripherals are functioning</p></li><li><p>Locate essentials: restrooms, break areas, meeting rooms</p></li></ul></li><li><p><strong>Team Introduction</strong></p><ul><li><p>Meet with your manager for an initial briefing (30-45 minutes)</p><ul><li><p>Discuss team structure, your role, and immediate priorities</p></li><li><p>Understand reporting structure and communication preferences</p></li></ul></li><li><p>Introduction to your three team members (15 minutes each)</p><ul><li><p>Learn about their roles and current projects</p></li><li><p>Understand how your work will intersect with theirs</p></li></ul></li></ul></li><li><p><strong>Environment Setup</strong></p><ul><li><p>Set up your development environment with help from a designated team member</p></li><li><p>Request access to necessary systems and repositories</p></li><li><p>Familiarize yourself with the office network and any VPN requirements</p></li></ul></li><li><p><strong>First Team Meeting</strong></p><ul><li><p>Attend your first team meeting (if scheduled)</p></li><li><p>Introduce yourself briefly to the whole team</p></li><li><p>Observe team dynamics and meeting structure</p></li></ul></li></ol><h2>Week One: Deep Dive and Integration</h2><ol><li><p><strong>One-on-One Sessions</strong></p><ul><li><p>Schedule 45-minute sessions with each team member:</p><ul><li><p>Team Member 1 (Day 2): Focus on codebase structure and coding standards</p></li><li><p>Team Member 2 (Day 3): Discuss testing practices and CI/CD pipeline</p></li><li><p>Team Member 3 (Day 4): Explore system architecture and design patterns</p></li><li><p>Manager (Day 5): Review week's progress and set concrete goals</p></li></ul></li></ul></li><li><p><strong>Hands-On Tasks</strong></p><ul><li><p>Complete a small task assigned by your manager</p></li><li><p>Aim to make your first commit and go through the team's code review process</p></li><li><p>Shadow a team member during a debugging or problem-solving session</p></li></ul></li><li><p><strong>Team Dynamics</strong></p><ul><li><p>Observe how the team collaborates during the day</p></li><li><p>Understand each team member's strengths and specialties</p></li><li><p>Identify the go-to person for different types of questions or issues</p></li></ul></li><li><p><strong>Local Environment Mastery</strong></p><ul><li><p>Ensure your local development environment mirrors production</p></li><li><p>Practice the full development cycle: from local changes to deployment</p></li></ul></li></ol><h2>Week Two and Beyond: Contribution and Growth</h2><ol><li><p><strong>Increased Responsibility</strong></p><ul><li><p>Take on a more substantial task or feature</p></li><li><p>Collaborate directly with one of your team members on a shared task</p></li><li><p>Start participating in code reviews for your peers</p></li></ul></li><li><p><strong>Regular Check-ins</strong></p><ul><li><p>Daily quick sync with your manager (5-10 minutes)</p></li><li><p>Weekly one-on-one with manager (30 minutes)</p><ul><li><p>Discuss progress, challenges, and upcoming priorities</p></li><li><p>Seek and provide feedback</p></li></ul></li></ul></li><li><p><strong>Team Contribution</strong></p><ul><li><p>Volunteer to lead a section of the next team meeting</p></li><li><p>Offer to document a process or update existing documentation</p></li><li><p>Propose an improvement to the team's workflow or tooling</p></li></ul></li><li><p><strong>Cross-Functional Interaction</strong></p><ul><li><p>Attend a meeting with a interfacing team (e.g., product, design, or ops)</p></li><li><p>Understand how your team's work impacts other departments</p></li></ul></li><li><p><strong>Continuous Learning</strong></p><ul><li><p>Set up a weekly knowledge-sharing session with rotating topics</p></li><li><p>Each team member (including you) presents on a relevant technology or concept</p></li></ul></li></ol><h2>Targeted Interaction Plan</h2><ol><li><p><strong>Manager</strong></p><ul><li><p>Daily: Quick morning sync to align on day's priorities</p></li><li><p>Weekly: In-depth one-on-one for progress review and feedback</p></li><li><p>Ad-hoc: Don't hesitate to ask for clarification on expectations or team dynamics</p></li></ul></li><li><p><strong>Team Member 1 (Codebase Expert)</strong></p><ul><li><p>Week 1: Deep dive into codebase structure</p></li><li><p>Week 2: Pair programming session on a complex feature</p></li><li><p>Ongoing: Go-to person for code organization questions</p></li></ul></li><li><p><strong>Team Member 2 (Testing Guru)</strong></p><ul><li><p>Week 1: Overview of testing strategy and tools</p></li><li><p>Week 2: Collaborate on writing tests for your first feature</p></li><li><p>Ongoing: Consult on best practices for test coverage</p></li></ul></li><li><p><strong>Team Member 3 (Architecture Specialist)</strong></p><ul><li><p>Week 1: System architecture walk-through</p></li><li><p>Week 2: Discuss how your current task fits into the larger system</p></li><li><p>Ongoing: Involve in discussions about scalability and system design</p></li></ul></li><li><p><strong>You</strong></p><ul><li><p>Week 1: Focus on absorbing information and establishing relationships</p></li><li><p>Week 2: Start contributing actively in discussions and code reviews</p></li><li><p>Ongoing: Rotate sitting next to different team members to learn from their workflows</p></li></ul></li></ol><h2>Best Practices for Onsite Collaboration</h2><ol><li><p><strong>Leverage Physical Proximity</strong></p><ul><li><p>Use face-to-face interactions for complex discussions</p></li><li><p>Observe and learn from your teammates' problem-solving approaches</p></li></ul></li><li><p><strong>Respect Shared Spaces</strong></p><ul><li><p>Be mindful of noise levels in open office areas</p></li><li><p>Keep shared spaces clean and organized</p></li></ul></li><li><p><strong>Utilize Whiteboarding Sessions</strong></p><ul><li><p>Suggest in-person brainstorming for complex problems</p></li><li><p>Practice explaining your ideas visually</p></li></ul></li><li><p><strong>Build Rapport</strong></p><ul><li><p>Join team members for lunch or coffee breaks</p></li><li><p>Participate in any team-building or after-work activities</p></li></ul></li><li><p><strong>Balance Digital and In-Person Communication</strong></p><ul><li><p>Use chat for quick questions, but don't shy away from walking over for longer discussions</p></li><li><p>Be present and engaged during in-person meetings</p></li></ul></li></ol><p>Remember, your goal is to become an integral part of this small, onsite team as quickly as possible. Focus on building strong, collaborative relationships with your manager and three teammates while rapidly coming up to speed on the technical aspects of your role.</p>]]></content:encoded></item><item><title><![CDATA[Time-Blocked Daily Schedule for New Software Engineer]]></title><description><![CDATA[Morning]]></description><link>https://www.stevearmstrong.org/p/time-blocked-daily-schedule-for-new</link><guid isPermaLink="false">https://www.stevearmstrong.org/p/time-blocked-daily-schedule-for-new</guid><dc:creator><![CDATA[Steve Armstrong]]></dc:creator><pubDate>Tue, 16 Jul 2024 18:11:52 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!QVIU!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4a083f-a968-4bcc-82bb-1e1ffe856ffa_96x96.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<h2>Morning</h2><p><strong>8:30 AM - 8:45 AM: Arrival and Mindful Start</strong></p><ul><li><p>Arrive at the office</p></li><li><p>Practice a short mindfulness or focus exercise</p></li><li><p>Review personal goals for the day</p></li></ul><p><strong>8:45 AM - 9:00 AM: Workspace Setup and Task Prioritization</strong></p><ul><li><p>Set up workstation for the day</p></li><li><p>Review and prioritize tasks using a task management tool</p></li></ul><p><strong>9:00 AM - 9:15 AM: Daily Sync with Manager</strong></p><ul><li><p>Quick check-in on priorities</p></li><li><p>Address any blockers or concerns</p></li><li><p>Align on day's objectives</p></li></ul><p><strong>9:15 AM - 9:30 AM: Team Stand-up</strong></p><ul><li><p>Participate in daily stand-up (if team follows agile practices)</p></li><li><p>Share your progress, plans, and any blockers</p></li></ul><p><strong>9:30 AM - 10:45 AM: Deep Work Session I</strong></p><ul><li><p>Focused coding time on highest priority task</p></li><li><p>Use Pomodoro technique (25 min work, 5 min break)</p></li></ul><p><strong>10:45 AM - 11:00 AM: Active Break</strong></p><ul><li><p>Short break with physical movement (stretch, walk)</p></li><li><p>Hydrate and snack if needed</p></li></ul><p><strong>11:00 AM - 12:00 PM: Learning and Exploration</strong></p><ul><li><p>Study codebase or documentation</p></li><li><p>Work through any training materials</p></li><li><p>Explore new technologies relevant to your work</p></li><li><p>Document learnings in personal knowledge base</p></li></ul><h2>Afternoon</h2><p><strong>12:00 PM - 1:00 PM: Lunch and Networking</strong></p><ul><li><p>Take a full hour for lunch</p></li><li><p>Join different team members each day to build relationships</p></li><li><p>Once a week, lunch with a member from another team</p></li></ul><p><strong>1:00 PM - 2:15 PM: Collaborative Work Session</strong></p><ul><li><p>Pair programming session</p></li><li><p>Code review participation</p></li><li><p>Collaborative problem-solving</p></li><li><p>Rotate pairing partners throughout the week</p></li></ul><p><strong>2:15 PM - 2:30 PM: Quick Break and Reflection</strong></p><ul><li><p>Short break to refresh</p></li><li><p>Reflect on learnings from the collaborative session</p></li></ul><p><strong>2:30 PM - 3:00 PM: Targeted Skill Development</strong></p><ul><li><p>Work on a specific skill identified in your onboarding plan</p></li><li><p>Could be technical (e.g., new language feature) or soft skill (e.g., communication)</p></li></ul><p><strong>3:00 PM - 3:45 PM: Team Member 1:1 or Cross-functional Meeting</strong></p><ul><li><p>Rotate through team members each day for 1:1s</p></li><li><p>On days without 1:1s, attend cross-functional meetings or work on documentation</p></li></ul><p><strong>3:45 PM - 4:00 PM: Active Break</strong></p><ul><li><p>Short break with physical movement</p></li><li><p>Informal chat with a team member if possible</p></li></ul><p><strong>4:00 PM - 5:00 PM: Deep Work Session II</strong></p><ul><li><p>Focused work on secondary priority tasks</p></li><li><p>Implement learnings from earlier sessions</p></li></ul><p><strong>5:00 PM - 5:20 PM: Daily Wrap-up and Documentation</strong></p><ul><li><p>Document progress and learnings</p></li><li><p>Update personal notes or team wikis</p></li><li><p>Reflect on the day and plan for tomorrow</p></li><li><p>Update task management tool</p></li></ul><p><strong>5:20 PM - 5:30 PM: Manager Check-out and Shutdown</strong></p><ul><li><p>Brief check-out with manager</p></li><li><p>Share any significant learnings or blockers</p></li><li><p>Clean up workstation and prepare for next day</p></li></ul><h2>Weekly Special Blocks</h2><h4><strong>Monday Morning: Weekly Planning</strong></h4><ul><li><p>Review and set goals for the week</p></li><li><p>Align personal objectives with team sprint goals</p></li></ul><p><strong>Friday Afternoon: Weekly Retrospective</strong></p><ul><li><p>Personal reflection on the week's progress</p></li><li><p>Identify areas of improvement for next week</p></li><li><p>Share key learnings with the team</p></li></ul><p><strong>Bi-weekly: One-on-One with Manager</strong></p><ul><li><p>In-depth discussion on progress, challenges, and career development</p></li><li><p>Seek and provide feedback</p></li><li><p>Adjust onboarding plan as needed</p></li></ul><p><strong>Monthly: Team Building Activity</strong></p><ul><li><p>Participate in team social events or structured team building exercises</p></li></ul><h2>Flexible Blocks (to be scheduled as needed):</h2><ul><li><p><strong>Technical Deep Dives</strong>: Schedule 90-minute sessions with different team members for in-depth technical discussions.</p></li><li><p><strong>Open Source Contribution Time</strong>: Allocate time to contribute to relevant open-source projects (if encouraged by the company).</p></li><li><p><strong>Innovation Time</strong>: Set aside time for experimenting with new ideas or technologies that could benefit the team.</p></li><li><p><strong>Mentoring Sessions</strong>: As you progress, start mentoring interns or newer team members.</p></li></ul><h2>Customization Notes:</h2><ol><li><p>Adjust times based on team's working hours and meeting schedules.</p></li><li><p>Be flexible, especially for urgent tasks or spontaneous learning opportunities.</p></li><li><p>Gradually increase deep work sessions and decrease structured learning time as you progress.</p></li><li><p>Use time-tracking tools to understand where your time is spent and optimize accordingly.</p></li><li><p>Regularly review this schedule with your manager, adjusting based on your progress and team needs.</p></li><li><p>Consider using different focus techniques (e.g., Pomodoro, time-blocking) to find what works best for you.</p></li><li><p>As you become more integrated, allocate time for cross-team projects and leadership opportunities.</p></li></ol><p>Remember, while structure is important, the key to successful onboarding is remaining flexible and open to learning opportunities as they arise. Regularly reassess this schedule to ensure it's supporting your growth and contribution to the team.</p>]]></content:encoded></item><item><title><![CDATA[Accelerated Onboarding Guide for Proactive New Software Engineers]]></title><description><![CDATA[This guide is designed for new Software Engineers who want to maximize their efficiency and impact from day one.]]></description><link>https://www.stevearmstrong.org/p/accelerated-onboarding-guide-for</link><guid isPermaLink="false">https://www.stevearmstrong.org/p/accelerated-onboarding-guide-for</guid><dc:creator><![CDATA[Steve Armstrong]]></dc:creator><pubDate>Tue, 16 Jul 2024 17:57:27 GMT</pubDate><enclosure url="https://substackcdn.com/image/fetch/$s_!QVIU!,w_256,c_limit,f_auto,q_auto:good,fl_progressive:steep/https%3A%2F%2Fsubstack-post-media.s3.amazonaws.com%2Fpublic%2Fimages%2F4b4a083f-a968-4bcc-82bb-1e1ffe856ffa_96x96.jpeg" length="0" type="image/jpeg"/><content:encoded><![CDATA[<p><strong>Day One: Hit the Ground Running</strong></p><ol><li><p><strong>Immediate Action Items</strong></p><ul><li><p>Set up your workstation and request any missing accesses</p></li><li><p>Schedule 15-30 minute 1:1s with all team members for the first week</p></li><li><p>Request access to the codebase and start exploring</p></li><li><p>Ask for company and project documentation</p></li><li><p>Set up your IDE and development tools</p></li></ul></li><li><p><strong>Rapid Integration</strong></p><ul><li><p>Introduce yourself concisely to your team, focusing on your skills and experiences</p></li><li><p>Request a product demo from a user's perspective</p></li><li><p>Ask for an architectural overview of the system</p></li><li><p>Learn about the development workflow, including version control, code review, and deployment processes</p></li><li><p>Understand the team's coding standards and best practices</p></li></ul></li><li><p><strong>Early Contributions</strong></p><ul><li><p>Ask for a small, manageable task to work on immediately</p></li><li><p>Begin setting up your development environment</p></li><li><p>Start documenting any unclear processes or setup steps you encounter</p></li><li><p>Review recent pull requests to understand the team's code review process</p></li></ul></li><li><p><strong>Cross-team Networking</strong></p><ul><li><p>Request a list of key team members and stakeholders</p></li><li><p>Understand how your role interacts with other departments</p></li><li><p>Identify the main users or clients of your team's software</p></li></ul></li><li><p><strong>Goal Setting</strong></p><ul><li><p>Draft initial personal 30, 60, and 90-day goals based on your day one learnings</p></li><li><p>Include goals related to technical skills and domain knowledge acquisition</p></li></ul></li></ol><p><strong>Week One: Accelerate Your Integration</strong></p><ol><li><p><strong>Deepen Understanding</strong></p><ul><li><p>Complete setting up your development environment</p></li><li><p>Aim to make your first code commit by the end of the week</p></li><li><p>Continue 1:1s with team members and key stakeholders</p></li><li><p>Start mapping out the main components and services of the system</p></li></ul></li><li><p><strong>Expand Contributions</strong></p><ul><li><p>Take on additional small tasks as you complete your initial assignment</p></li><li><p>Actively participate in team meetings and discussions</p></li><li><p>Offer to pair program with a team member to learn the codebase faster</p></li></ul></li><li><p><strong>Technical Deep Dives</strong></p><ul><li><p>Request or organize technical deep dive sessions on critical systems</p></li><li><p>Start learning about the rationale behind key architectural decisions</p></li><li><p>Understand the testing strategy and tools used in the project</p></li></ul></li><li><p><strong>Process Familiarization</strong></p><ul><li><p>Understand and start using the team's task management and communication tools</p></li><li><p>Familiarize yourself with the team's agile processes (if applicable)</p></li><li><p>Learn about the team's approach to technical debt management</p></li></ul></li><li><p><strong>Knowledge Acquisition</strong></p><ul><li><p>Dedicate time each day to explore different parts of the codebase</p></li><li><p>Review any available internal training materials</p></li><li><p>Start building a glossary of domain-specific terms and concepts</p></li></ul></li></ol><p><strong>Week Two and Beyond: Maximize Your Impact</strong></p><ol><li><p><strong>Increase Contributions</strong></p><ul><li><p>Take on more complex tasks and projects</p></li><li><p>Actively participate in code reviews and technical discussions</p></li><li><p>Start contributing to architectural discussions</p></li></ul></li><li><p><strong>Continuous Improvement</strong></p><ul><li><p>Propose improvements to processes or documentation based on your fresh perspective</p></li><li><p>Share your onboarding experience and suggest enhancements</p></li><li><p>Look for opportunities to improve code quality or system performance</p></li></ul></li><li><p><strong>Expand Your Knowledge</strong></p><ul><li><p>Continue daily exploration of different parts of the codebase</p></li><li><p>Seek out and complete any available internal training materials</p></li><li><p>Dive deeper into the business domain:</p><ul><li><p>Read relevant industry publications or whitepapers</p></li><li><p>Understand the competitive landscape and market trends</p></li><li><p>Learn about the end-users and their needs</p></li></ul></li></ul></li><li><p><strong>Proactive Problem Solving</strong></p><ul><li><p>Identify challenges within your team or project</p></li><li><p>Develop and propose solutions to your manager</p></li><li><p>Look for ways to automate repetitive tasks or improve development workflows</p></li></ul></li><li><p><strong>Feedback and Adjustment</strong></p><ul><li><p>Schedule a check-in with your manager to review your 30-day goals</p></li><li><p>Seek specific feedback on your contributions and integration</p></li><li><p>Adjust your 60 and 90-day goals based on new insights</p></li></ul></li></ol><p><strong>Best Practices for Accelerated Onboarding</strong></p><ol><li><p><strong>Be Aggressively Proactive</strong></p><ul><li><p>Don't wait for information or tasks to come to you</p></li><li><p>If something is unclear, ask immediately</p></li></ul></li><li><p><strong>Maximize Every Interaction</strong></p><ul><li><p>Come prepared to every meeting with questions and ideas</p></li><li><p>Follow up on discussions with actionable items</p></li></ul></li><li><p><strong>Leverage Documentation Efficiently</strong></p><ul><li><p>Use existing documentation to answer questions quickly</p></li><li><p>Contribute improvements to documentation in real-time</p></li></ul></li><li><p><strong>Balance Learning and Doing</strong></p><ul><li><p>Aim for a mix of hands-on tasks and knowledge acquisition each day</p></li><li><p>Apply what you learn immediately to reinforce understanding</p></li></ul></li><li><p><strong>Communicate Proactively</strong></p><ul><li><p>Keep your manager and team updated on your progress</p></li><li><p>Flag potential issues or roadblocks as soon as you identify them</p></li></ul></li><li><p><strong>Seek and Offer Help</strong></p><ul><li><p>Don't hesitate to ask for help when stuck</p></li><li><p>Offer your skills and perspective to assist others</p></li></ul></li><li><p><strong>Cultivate a Growth Mindset</strong></p><ul><li><p>Embrace challenges as learning opportunities</p></li><li><p>Be open to feedback and different perspectives</p></li></ul></li></ol><p><strong>Additional Tips for Software Engineers</strong></p><ol><li><p><strong>Master Your Tools</strong></p><ul><li><p>Invest time in learning shortcuts and advanced features of your IDE</p></li><li><p>Familiarize yourself with the team's preferred debugging tools</p></li></ul></li><li><p><strong>Understand the Full Stack</strong></p><ul><li><p>Even if you're specialized, gain a basic understanding of all layers of the application</p></li></ul></li><li><p><strong>Stay Current with Technology Trends</strong></p><ul><li><p>Follow relevant tech blogs, podcasts, or YouTube channels</p></li><li><p>Participate in local tech meetups or online communities</p></li></ul></li><li><p><strong>Practice Continuous Learning</strong></p><ul><li><p>Set aside time for coding challenges or personal projects</p></li><li><p>Explore new languages or frameworks relevant to your work</p></li></ul></li><li><p><strong>Develop Soft Skills</strong></p><ul><li><p>Work on clearly communicating technical concepts</p></li><li><p>Practice active listening in meetings and discussions</p></li></ul></li></ol><p>Remember, the goal is to become a valuable contributor as quickly as possible while building a solid foundation for long-term success. This accelerated approach demonstrates your initiative and enthusiasm, setting a positive tone for your tenure with the company.</p>]]></content:encoded></item></channel></rss>