My Internship Journey at Apple – Building an Apple Internal FEA Simulation Platform
Note: the following content is a summary of my internship report submitted to Carnegie Mellon University. The original report was reviewed by my manager with confidential information removed. The content is written in a more casual tone for a general audience, technical details are simplified, and some sections are omitted for brevity and confidentiality.
Notes for current Apple employees: please connect to Apple Corporate Network to access the production project at euclid.apple.com and the full technical documentation.
This summer, I had the incredible opportunity to intern at Apple, where I worked with the Sensing FEA Team as a Full Stack Software Engineer. My mission? To build a data platform for sharing Finite Element Analysis (FEA) data and create a web interface that even non-FEA analysts could use to search for and launch simulations. Pretty cool, right?
What I Did
My work touched various aspects of software development, and here’s a breakdown of the main stuff I got into:
Requirement Engineering: I kicked things off by collecting user stories and drawing up user flow diagrams. This helped me get a solid understanding of what the platform needed to do.
Frontend Development: I built the front end using React and Next.js. Clean, fast, and user-friendly!
Backend Development: The backend was powered by Django. It was my first time using Django at this scale, and I learned a lot.
Operations/Deployment: I deployed the platform using Kubernetes and Docker. It was awesome to see everything come together and work seamlessly.
Microservices: The entire project consists of 6 microservices, each serving a specific purpose. I had to design and implement these services from scratch.
Manage SLURM HPC Cluster: I set up a SLURM HPC cluster to run FEA simulations on behalf of users. This was a crucial part of the project, and it was a great learning experience.
Professional Growth
This internship wasn’t just about code — I grew a lot in other areas too:
Self-Management and Project Management
Being the only software engineer on my team was a unique challenge. I had to manage the project entirely on my own and report progress regularly. Agile project management became my best friend — I used GitHub Kanban to keep everything organized and on track.
Apple’s Cloud Infrastructure
Before this internship, I had worked with AWS and GCP, but Apple’s cloud infrastructure was a whole new world. Learning about Apple’s Kubernetes, Docker, and OpenID Connect offerings, as well as their security procedures, gave me new insights into keeping cloud services safe and reliable.
Documentation and API Development
I honed my skills in API documentation using Swagger. This was crucial for making sure the platform was easy to use for both developers and non-engineers alike.
New Insights
Working at Apple gave me some fresh perspectives on cloud infrastructure and data security:
Apple’s Unique Cloud Infrastructure
Apple doesn’t need a massive cloud infrastructure like Google or Amazon, but the services they do offer need to be super reliable. I got to work with Apple’s unique cloud services, which abstract away a lot of the complexities. For instance, Apple’s S3 service adheres to the AWS S3 API standard, but the actual service provider could be Apple’s on-prem infrastructure, GCP, or AWS. Pretty slick, huh?
Disclosure and Access Control
Apple’s strict access controls were another eye-opener. Managing who can access what data involves interactions with OIDC services, disclosure services, directory services, and hidden stores. It was tricky but fascinating work!
Monitoring and Secrets Management
I learned how to set up various containers in a Kubernetes pod, like an init container for retrieving secrets and a sidecar container for forwarding logs. This was key to understanding service health and secrets management.
Challenges and How I Overcame Them
Not everything was smooth sailing, but the challenges made the experience even more rewarding:
Differences in Cloud Services
One of the biggest challenges was getting familiar with how Apple’s cloud services differ from public cloud services. For example, GCP Kubernetes and Apple Kubernetes have some pretty significant differences, especially with ingress configurations.
Self-Paced Learning
Being the sole software engineer on the team meant I didn’t have anyone to turn to for technical help. I leaned heavily on Slack and networked with other engineers outside my group. It taught me the importance of self-paced learning and not being afraid to ask for help when needed.
Unexpected Experiences
There were also some pleasant surprises along the way:
Exposure to Apple’s Internal Services
I got hands-on experience with a range of Apple’s internal services, from S3 and SLURM HPC to OIDC, CI/CD platforms, and secret stores. The amount I learned in just three months was mind-blowing, especially since some interns only get to work with a tiny portion of the software.
Understanding FEA Workflow
Understanding how FEA fits into Apple’s product design pipeline was another unexpected but valuable experience. It gave me a broader perspective on how engineering and design processes come together in a top-tier tech company.
Wrapping It Up
All in all, my internship at Apple was an amazing learning experience. I picked up new skills in cloud infrastructure, API development, and project management that will definitely serve me well in my future career as a software engineer. I can’t wait to see where this journey takes me next! 🚀