DEV Community

Cover image for 7 Weeks, 0 Sandboxes, and a Lot of Code
Shakiran Nannyombi
Shakiran Nannyombi

Posted on

7 Weeks, 0 Sandboxes, and a Lot of Code

Lessons From My Software Engineering Internship


When I started my software engineering internship, I thought most of my time would be spent writing straightforward UI components and fixing minor CSS bugs.

I was wrong.

Over the last 7 weeks, I went from breaking down raw Software Requirements Specifications (SRS) to building custom authentication gates, hardening production routes, refactoring monorepo architectures, and managing localized multi-language state persistence.

If you’re currently a student, a self-taught dev preparing for your first role, or just love reading about real-world engineering trade-offs, here are the biggest lessons I learned on the front lines—and why writing clean handovers matters just as much as writing clean code.

1. "Working Code" Isn't Always "Good Code"

In school or side projects, once the feature works on localhost:3000, you ship it and call it a day. In production, that’s where the real work begins.

During Week 5, I built a functional feature that met every technical specification. But after a merge call and design review, we realized the user hierarchy was cluttered and lacked clear ownership boundaries. I had to tear down hours of working UI to rebuild a streamlined, single-contrast CTA layout.

Lesson: Being technically right doesn't mean you're done. Engineering is about clarity, subtraction, and user flow—not just passing tests.

2. Moving Out of the Sandbox (Role-Based Access & Route Guards)

Moving code from a temporary /v2 sandbox folder into /admin primary route directories requires serious security considerations. You can't just hide a button with display: none and assume candidates won't find staff-only portals.

Using tools like Clerk Auth, I implemented strict Staff Access Route Guards to separate identity pools. Candidate roles attempting to access internal management paths hit instant, secure access-denied barriers.

3. State Persistence is Harder Than It Looks

We started by storing quick form inputs in browser localStorage. It worked great for local testing, but scaling an admin console requires converting client-side drafts into live database synchronization.

Handling state transitions, preventing data loss during multi-step onboarding forms, and ensuring seamless API roundtrips taught me more about frontend data flow than any textbook ever could.

4. The Power of Clean Handover Architectures

As my internship reached its final week, the focus shifted from building shiny new features to stabilization and documentation:

  • Purging Technical Debt: Tracked down legacy file references, standardized component folders, and unified global design packages.
  • Cleaning Git History: Grouped commits into modular, scoped batches and configured strictly enforced .gitignore parameters (e.g., locking down uidemo/* mock folders).
  • Documenting Edge Cases: Cataloged setup sequences, API contracts, and known failure modes so the next developer could take over without missing a beat.

Writing clean documentation gives your team absolute clarity and proves you operate with a senior engineering mindset.


Follow the Full Week-by-Week Breakdown!

I’ve been documenting every single week of this journey—complete with technical diagrams, system architecture decisions, Figma workflows, and honest reflections on my personal blog.

If you want to read the deep dives, check out the full series here:

👉 My Software Engineering Internship Journey on Hashnode

Here's a quick peek at what's inside the series:

  • Week 1: Surviving Week 1: Classroom Theory to Real-World SRS & Use Cases
  • Week 2: Data Architecture & Translating Requirements into Figma Design Systems
  • Week 3: Architecting a Monorepo, Custom Auth, and Type-Safe Dev Environments
  • Week 4: Engineering Frontend Funnels & LocalStorage Persistence
  • Week 5: When Being Right Still Means Redoing the Work (Hierarchy by Subtraction)
  • Week 6: Beyond the Sandboxes: Hardening Routes, Admin Portals, & Server States
  • Week 7: The Final Polish: Purging Debt, Handover Architectures, & Closing the Loop

Coming Up: The Final Reflections & Retrospective

As this 7-week sprint comes to an end, I’m putting the finishing touches on a comprehensive retrospective post dropping soon on Hashnode.

Here is a quick preview of what I’ll be covering in the series finale:

The Reality of Engineering Offboarding: What transferring codebase ownership to full-time engineering teams actually looks like in practice.

Key Non-Technical Takeaways: Communication loops, managing scope creep, and navigating merge calls under pressure.

Advice for Future Interns: The exact tools, mindsets, and workflows that made the biggest impact throughout the project.

Stay tuned—the final reflections drop next week!

To everyone wrapping up internships or preparing for junior developer roles: What is your go-to strategy for leaving behind clean code documentation? Do you prefer inline commenting, detailed README files, or live loom walkthroughs?

Drop your thoughts in the comments below! 👇

Top comments (0)