Finding the Path: 2007-2010
My first full-time job after college was stressful. During this year I continued to apply to jobs. After about a year of many rejections I was finally offered a role.
I joined a small team doing contract work primarily for the University of Florida and government-funded non-profit organizations. My role was to create and maintain software projects and take charge of any and all technical work. This included managing hosting, setting up a local development server, managing backups, taking care of security issues, and keeping our local network and workstations running. I used a Linux-Apache-Mysql-PHP (LAMP) stack just as in my previous job.
Leaving the cramped, dark, hectic environment of my previous job was a blessing. The new office was spacious and bathed in natural light. Everyone was friendly and I immediately connected with Loren, the graphic designer / office manager on our team. It's unusual for me to form close friendships with coworkers – it's happened maybe twice.
The effect of having a more comfortable working environment was immediate – I had so much creative energy that I joined four musical projects in the span of a few months! This included Hydrogen Arm, an ambient electronic project that I started with Loren. Music is one of the main ways that I can forge deep connections with people. As a result of our musical collaboration, we became good friends.
I would stay at this job for almost four years. I started at full-time hours but eventually transitioned to 30-hour weeks while also taking two graduate school classes at a time.

Positives
- My supervisor had programming experience and knew not to interrupt a programmer when they were working. I really appreciated him asking me to reach out to him when I would get to a good stopping point whenever he needed my attention.
- Great office. Can't emphasize enough how much of a difference it makes to be able to look out of a window at some greenery every once in a while.
- Rewarding social connections with my coworkers. I made a great friend there and I enjoyed lunch-time conversations with our little group.
- Opportunities to sit-in on high-level planning and design meetings with customers.
- Being open to a flexible schedule that let me go to grad school. My commute consisted of strapping my bike to my car, driving to work, working a few hours, biking to campus, then biking back to work and finishing out my day. Felt like a lot sometimes but experiencing lots of movement and variety in my day is something I want to get back to.
- Had lots of opportunities for learning on the job. For example, I enjoyed the challenge of learning ActionScript programming in Flash and had the opportunity to start employing test-driven design principles. Also had a chance to put my Linux skills to use by creating a local development server. I was also able to get some exposure to Ruby programming which I enjoyed very much.
- While working with some of our clients I had an opportunity to witness the profoundly negative consequences that can arise when an organization doesn’t have a person with technical experience at the highest levels of leadership.
Challenges
- My predecessor had a very different approach to programming. Code was full of duplication, not formatted correctly, and full of short-cuts. Directory structures and file locations were haphazard and names were confusing and inconsistent. Website front-ends used grainy low-resolution JPEG images of text instead of text styled with CSS. One project he walked me through used tons of calls to a sleep() function to get around race conditions. It became clear to me that when considering the speed-quality-cost triangle, this developer valued high speed above all.
- When I started working on code I inherited, I would take my time and clean up these issues as I found them. It became clear to my supervisor that I was taking a longer time to complete similar work and he gave me feedback about it in a way that was quite hurtful. He told me point blank – “you’re slow”. This fed my insecurities about my own shortcomings as an undergraduate and led me to often push myself harder than was healthy for me. It also made me sometimes quite conservative in my technology choices. As a result, I rarely deviated from a pretty narrow technology stack and found myself missing out on important transitions happening at the time away from LAMP and into Ruby on Rails and other more powerful and sophisticated tech stacks.
- I would have appreciated a gentler conversation that could have opened by asking me to break down exactly what went into my first few releases. This would have created an opening to discuss shortcomings I had seen in this company’s quality and a discussion about how to schedule necessary fixes. If I were to encounter this situation now I would proactively, tactfully, and respectfully bring up quality or technical debt issues.
- There were some unhealthy communication dynamics between my supervisor and Loren that would escalate into heated disagreements and some disrespectful language. It was stressful to be around this and it didn’t occur to me at the time to speak up about it.
- Loren did not have programming experience and would often interrupt me. Years later he would try his hand at video game programming and experienced first-hand the almost physical pain of being interrupted while deep in the middle of a challenging problem ;]
- I hired someone who had just completed their MS in computer science. They interviewed well and did well on an in-office programming and skills test that I wrote. That summer, we really needed someone who could hit the ground running and crank out high quality code. I discovered that having a graduate degree does not necessarily make you a great engineer. They still needed mentorship and I was not able to provide that due to how intense my schedule was. We made the decision to let them go and this made me feel pretty shitty. Reflecting on this years laster, I think that we could have figured out a way to provide more mentorship and have them grow to become a productive, permanent member of our team.
About a year into this role I decided to apply for grad school in the same department where I did my undergraduate program. I was bolstered by the surge of confidence that I had experienced when I excelled in my first role and was inspired by the opportunity to truly deepen my technical expertise. I knew that I loved project-based courses and the University of Florida MS in computer engineering program provided a flexible structure that let me prioritize these courses.
I applied, honestly thinking that I wouldn’t be accepted because I hadn’t forged any connections with faculty and because my GPA was so low. I was elated when I was accepted. I should have let my supervisor know about this because my announcement that I would go to grad school part-time stressed him out. He made it clear that he still had high expectations of my productivity as the sole programmer.
My first year of grad school was super rewarding. I got a chance to use Common Lisp to write an instruction set simulator. I got a chance to learn parallel computer architecture from Dr. Alan George and write high-performance message-passing code in C. I also had a chance to combine music and technology by completing coursework in electroacoustic music composition.
However, grad school became very challenging. I would often come home from school and class and have to work on classwork after dinner until the evening hours. I would sometimes spend entire weekends working on class projects.
When I started my current role, I joined a technical metal band named Trial by Torment. We would rehearse from 10pm until midnight twice a week (things you can only do in your 20s…). Our songs were sometimes seven minutes long with many sections, one-off hits, and full-band fills. The combined stresses of all this work started taking a physical toll on me and I started to feel acute anxiety for the first time in my life. I was finding myself waking up before my alarm clock every day, feeling sharp pains in my chest, experiencing tunnel vision and muscle weakness, etc. At one point my chest pain was so intense that my supervisor actually drove me to the hospital. I had experienced my first panic attack.

My excitement for grad school cooled during my second year when I started experiencing burnout. I still enjoyed my projects but studying for tests became a huge drag – I started having to repeatedly use affirmations to get through yet another pass of my flash cards. I also found it difficult to collaborate with others in group projects. I discovered that many students didn’t seem as excited or passionate about their work as I was. Toward the end I was having serious thoughts about quitting but a chance conversation with a friend who had completed his own MS thankfully dissuaded me from that.
By the end I had taken three classes where I completed projects using Lisp and two classes where I completed projects using Erlang. I graduated with a much higher GPA than when I completed my undergraduate program. My experiences in grad school led me to being able to land my next job and really advance my career. However, I was so completely burned out that it took me years to be able to look back on grad school in a positive light.
My time in grad school came to a close and my partner at the time was ready to move on to the internship year for her PhD program. She got matched in Salt Lake City and it was time for me to interview for new jobs. I posted some questions in the Utah Ruby User’s Group and the third response to my questions led to my next job!
To prepare for my transition I interviewed and hired someone who I had worked with at my first job who had a work ethic that I appreciated.
Leaving was bittersweet – my coworkers celebrated with me with a nice dinner. It was time to leave Gainesville and transition into new personal, musical, and work relationships in a place very different from Gainesville in many ways – the Salt Lake City Metro area.
Part 4 of My Software Journey
Part 3: Painful Lessons
Comments ()