Julius Zerwick studied the Launch School Core Curriculum from April 2017 to August 2018. He participated in the Capstone program from September 2018 to January 2019. During that time his team developed the SpaceCraft project. After Capstone, he got a job at DigitalOcean in March 2019 and still works there.
For most of November and the beginning of December 2019, Julius fielded questions from the Launch School community in an Ask Me Anything format.
Here is how the discussion was framed (from Julius’ perspective):
“About a year ago, Sunny Beatteay (Launch School & Capstone grad) posted an AMA inviting everyone to ask him questions. I joined in and found all of the questions & answers really helpful as I was finishing the Core Curriculum and applying to Capstone at the time. I wanted to bring this idea back and so for the next month I will be answering questions from anyone that has them! So if you have a question that will help you and others better understand Launch School, Capstone, or software development in general, ask away!”
The Questions that came in ranged to the following areas:
- Launch School
- Core curriculum vs Capstone
- Capstone experience
- Is Launch School worth it even if I can’t do Capstone?
- Study Habits
- Day in the Life of an Engineer
- Continuous Learning/ keeping up with changing technologies
- Part time vs full time study
- Starting your first software engineering role
- Job search
1) I know you’ve only been working for 7 months so it may be too soon to ask, but do you find yourself having to keep up with changing technologies?
To be honest, I haven’t had to keep up with changing technologies as much as learning technologies & subjects that were new to me. I joined the software networking team at DigitalOcean which focuses on IP address management, private networking, and monitoring our network traffic. Additionally, most of our code is in the Go language and we use both MySQL & Docker a lot, all of which I can to learn very quickly.
“The skills I learned through LaunchSchool prepared me well enough to learn these things quickly.”
2) How often do you have to pick up a new skill for work?
I’ve been picking up new skills all the time for work, some of which I knew I had to learn and others that came up unexpectedly. Coming into DigitalOcean, I knew that I had to learn Go, command line tools, Docker, and MySQL fairly quickly. And during my on-boarding I was directed toward some topics to learn like networking fundamentals.
But other times situations will come up that demand me to learn something I didn’t expect. For example, I had to pick up some Bash scripting in my first two months for some miscellaneous tasks and then it was a deeper dive into git to improve my workflow. And after my initial on-boarding I was tasked with learning Prometheus, Grafana, & LightStep to improve the monitoring & alerting of our service.
So overall, I’ve had to learn quite a few new skills and I generally feel that I’m learning all the time. But I think that’s in large part because engineering at DigitalOcean moves fast and we have a lot of interesting challenges to face which requires me to keep learning.
1) What would you have done if you hadn’t applied for Capstone? Do you think you could have done (something like) Spacecraft without the additional help from Capstone (in a bit more time maybe)?
Good question, I knew that I had wanted to do Capstone for at least 8–10 months before applying so I specifically made decisions to help accomplish it. If I hadn’t applied to Capstone, then I think I would have dedicated some time after finishing the Core Curriculum to just working on projects. Maybe reach out to other students on Slack who were also finishing the Core to collaborate on projects as well.
I think that it would be tough for me to say that I 100% could have done something as complex as SpaceCraft without doing Capstone. While the content of Capstone may change over time depending on how the industry evaluates & hires software engineers, the included topics of algorithms, data structures, & system design made it possible to reason about and build more complex projects.
Additionally, the is a huge benefit to working on a team whose members all have the same schedule, commitment, & end goals. Plus the instructors of Capstone do an excellent job of guiding the research & focus of each team while building their project. It’s hard to overstate how helpful it is to have someone like Chris say “that idea could face X, Y, & Z issues” that you hadn’t thought of, or say “you’re worrying about a potential issue 100 steps away, focus on what’s in front of you”.
I don’t think it’s impossible for one or more students to build something like SpaceCraft without doing Capstone, but it’ll likely take a longer time and be prone to more stumbling blocks in the process. But, I think there is an enormous amount of possible projects out there that Core grads can achieve which will impress companies, hiring managers, and software developers. What matters most in a good project is not being the most technically impressive, but being able to clearly explain the process you went through in building the project, explaining your technical decisions, and getting out there to show your work through talking at Meetups or putting out a detailed article (both of which we did for SpaceCraft).
2) I hear that software engineers often spend quite some time doing adjacent work, like spending hours in meetings about Agile stories. At your present job, how much do you think you’re programming? Approximately 50, 60% of your time? (And by coding I mean: facing your computer, thinking about the problem, not necessarily writing code.)
It depends on the day, but thankfully I usually have several days a week which I spend the majority of my time thinking about the problems I need to solve and coding them up. For example, this week I only have about 5–7 hours of meetings on my calendar. Taking 1 hour a day for lunch, and the result is that out of a 40 hour week I have 28–30 hours (or 70–75% of my time) to use for coding / problem solving.
This really depends on the company you work at, your team’s dynamics, and what responsibilities you have. I’m currently a Software Engineer II which means that I’m not leading any projects yet and thus don’t have many meetings other than those to sync up with my team or company-wide meetings. And my team doesn’t have a daily standup meeting, we just post our work progress on Slack each day and chat about anything that we’re stuck on. But the tech leads and more senior engineers on my team often have over 50% of their time spent in meetings each week and thus don’t get to code as much.
1) I’ve just completed the intro course and I’m about to enrol in Ruby 101. Since I’m working full-time, my biggest concern is that I won’t be able to study enough to build effective study habits.
What was your schedule like when working through the Core curriculum? Which was the single most effective tool/habit that helped you the most throughout your journey?
Good question, I feel that a big part of studying at Launch School is re-learning how to study and finding out what works best for you. I actually studied the Core Curriculum full-time, with only a brief period (~1 month) in the beginning when I was still at my previous job but had decided to leave. During the Core, I generally aimed to study 4–5 hours each day in a focused, deliberate manner. Sometimes if I felt really good that day I would study 6 hours, but I didn’t force myself to.
“I feel that a big part of studying at Launch School is re-learning how to study and finding out what works best for you.”
Studying while working full-time can definitely be tough and I see your concern about not being able to “study enough to build effective study habits”. Instead of just one habit/tool, my advice to you is the following:
- First, internalize that Launch School is going to be a long journey (usually 1–2+ years for many students) which is a good thing because you will be able to build habits over that period of time. You can start with implementing one habit (like Anki which I mention below) for one month and then add another the next month. These habits will serve you well as a student & software developer.
- For each week, set a goal for the number of hours you need to study. If I recall correctly, the recommended amount is 10–15 hours a week. So put that goal somewhere that you can see (for me it was a notepad on my desk) and mark off your hours after each day. I found that having this in front of me every day kept me motivated and ensured that I made progress.
- When you do study, prioritize studying deeply & deliberately. What I mean by this is put away all distractions (phone, social media, close all browser tabs except those used for studying LS). Your goal should be to have all your attention and brain power on the material that you’re studying, thus you may only be able to study 10–15 hours a week but the quality of those hours will be high. Be fully engaged with the content and keep notes on what you understand vs. what you don’t understand. Circle back on the things that you don’t quite fully understand. This is commonly called deep work and there is an excellent book on the topic called Deep Work by Cal Newport which was hugely beneficial to me and could rightly be the single most important habit that helped me (but I’ll keep going).
- I highly recommend that you start using Anki in your studies (https://apps.ankiweb.net/). It’s a free app that allows you to create decks of flashcards to study. The powerful thing about it though is that it spaces out the cards based on how well you answer them. If you know the answer immediately, then you can set the card to appear again in a few days, or a week, or even a few months. If you don’t answer it correctly, it can reset to appear again in a few minutes. This is so useful because overtime you’ll only be challenged on the cards that you don’t know well or you’ll see a card right when you’re about to forget it which will strengthen you memory. I think Anki is especially important for students studying while working full-time because then you can easily review important material in 10–15 min a day & you’ll still remember it months later when you’re studying other courses.
Here is an excellent article on using Anki: http://augmentingcognition.com/ltm.html
The article is a bit long, but the main points are:
- You can use Anki to learn & remember everything.
- Make each card as small as possible (atomic); they have to be easy to remember.
- Practice everyday.
- Keep all your cards in one deck; that will ensure that you review everything consistently and shuffling the subject matter will also improve your ability to recall material.
I could really go on & on with effective study habits (maybe I should do a Tech & Talk on it?), but here are some final quick hits:
- Don’t highlight or take notes just to take notes.
- Skim the material first, then start from the top and read again more thoroughly.
- Repeat exercises that you answered incorrectly, and only those. Focus your time on the problems that gave you the most trouble.
- Summarize the material you’ve just learned & look into mind mapping. Both are more effective than just taking notes as you go.
Finally, here are some resources to help with effective study habits:
1) I wanted to have your view on “Is Launch School worth it even if I can’t do Capstone?” I’m well into 101 but I’m not sure if I’ll be able to do Capstone; logistically is a bit difficult for me. So I’ve gotta think in terms of coming up with my own projects at the end of core. Don’t get me wrong. I’d love to do Capstone. Thanks
Short answer: Absolutely!
Long answer: Yes, it absolutely is. The quality of the material in the Core is much higher than other resources out there (I actually completed a coding bootcamp & did a bit of FreeCodeCamp before LaunchSchool and both were much lower in quality) and the assessments will force you to really know the material much better than others. That along will put you ahead of coding bootcamp grads and even many who graduated college with a CS degree (many CS degrees don’t actually teach programming or software engineering that well).
“The quality of the material in the Core is much higher than other resources out there.”
There have been many former LaunchSchool students who have completed just the Core and gotten great jobs. Here is one example: https://launchschool.com/posts/fa4307e3
As for projects to build for your portfolio once you’ve completed the Core, there are tons of possible projects that a graduate of the Core can do which will be impressive to employers. It can be a bit hard to see it now because you’re just in the 101 course, but as you complete the courses you’ll actually build small projects along the way that can serve as the base for even bigger projects! In the beginning courses, it can be unclear as to what projects you can build near the end. But as you complete the backend & frontend courses, you’ll have the software development process demystified and be amazed at what you see as doable with your newfound skills.
When it does come time to build your projects, I would say keep the following in mind:
- Look for a problem that you or others have experienced and see if you can solve it. My team’s project was built because we felt that there weren’t any open source options for people to collaboratively code on the web (https://spacecraft-repl.com/).
- Spend a lot of time on researching the problem, understanding it’s details, and the possible solutions.
- Once you’re built your project, write up an article or case study detailing your project & the process you went through to solve it. This is oftentimes more impressive to employers, hiring managers, & engineers than the actual project itself! (https://hackernoon.com/building-spacecraft-a-real-time-collaborative-repl-deebcf084ed9)
- Showcase your work by presenting at a meetup! And get your presentation recorded if possible so that you can share it online and with potential employers.
All of the above will help any project stand out so long as the project is sufficiently technical. This means that it’s more than just a to-do list app, basic website, or clone of a popular web app (many coding bootcamps have their students create clones of Reddit, Instagram, Netflix, etc.). And if you find yourself hitting some roadblocks, remember that you have a large & supportive community of current & former students in the Launch School Slack & Forum to answer questions or give help if possible.
I recently quit my full-time job to focus on launch school.
If I move in back with my parents (different country), I’ve got enough in savings to cover up to 2 years of core curriculum, gym + other auxiliary expenses. Parents are happy to support me with basic living expenses while I am here.
I’ve finished “intro-to-programming” book from prep course, now working through “Learn to Program” by Chris Pine, but I seem to top out to around 4h of quality study time a day.
If that is the case, it is difficult for me to justify studying full time when I actually can’t seem to put in the hours required. Seems like it would be better for me to pick up a part time job for the living expenses and still study 4h a day or so.
Given your experience, what’s your opinion on full-time vs part-time ls?
I was in a similar position in which I could study part-time and still keep a job (though it was full-time) or move back home with my parents. I chose to quit my job and dedicate myself to full-time studying, and looking back I would have done it again. Granted, I’m incredibly fortunate & grateful that my parents were of the same mind as your’s and it’s something not everyone has access to.
What I found was that although I could still work and study 4 hours per day, my mileage varied quite a bit given the day. Somedays I would be burnt out by work and struggle to study effectively, barely getting a few hours in. Other times I actually second guessed my decision to study at Launch School because I had a steady income and maybe things would work out over time at my job (which at the time was unsatisfying & lacking in future growth).
So I quit my job & moved back in with my parents across the country. And interestingly, I found that over time I was actually able to increase the number of hours I could study every day! Without a job to drain my mental & physical energy and the ability to get enough sleep & mental rest, I had more energy to pour into my studies and gradually I went from 4 hours a day to 5, then 6, and some days (though not often) I could do 7–8 hours! Studying is like exercise for your brain, and the more you do it consistently (without overloading) the more you’ll be able to do over time.
Additionally, by quitting my job I actually had an even stronger motivation to finish Launch School and crush my assessments because now it was my one & only goal for a career. While this may sound a bit extreme, it was a huge push for me.
So honestly, if you’re at the point where you’ve already quit your job and are all in on Launch School (which not everyone can do) then I would encourage you to stay all in. Try studying full-time for several months, use the spare time to connect with other students, read software articles/blogs, and stretch your new found skills with small side projects/extensions of the projects you work on in the courses, or even find small open source projects to contribute to. And if after a few months you still find that you’d like a part-time job, maybe see what part-time dev work you can pick up online (there’s more than you may think out there).
I’ve never regretted taking the leap to study full-time, and I think it’s a golden opportunity. Just my 2 cents :-)
I’m sure you were uncomfortable when you first started your job…a lot to take in, etc. Now 7 months in, how do you feel? Are you feeling more comfortable/confident? Or are you still (if you were at all) a little scared and drinking from a firehose everyday?
Oh man, good question. To be honest, it can really depend on the week or the day. When I started at DigitalOcean I had a lot to quickly learn like the Go language, using Docker more, computer networking fundamentals, Linux command line tools, distributed systems, our internal tools, and Vim (though that was my own choice :D).
After about 6 months, I felt that I had gotten into a groove and that I wasn’t overwhelmed anymore. It seemed that I finally had the bandwidth to study some topics on the side for my long term career (more computer networking, computer architecture, design patterns for building software systems). But then some new projects came into the mix and I felt a bit overwhelmed again haha. I’m actually at that point right now because we have to architect the next phase of a distributed system while fixing issues with another system that I haven’t touched yet.
At the end of the day, there will always be times where it feels like drinking from a firehose. That’s just the nature of software development with how much there is to learn and how fast things can change. But I think over time you get used to it and no longer worry as much about learning & taking on new things. Because everyone is going through the same thing all the time.
In my opinion, if you’re not feeling some uncomfortableness (or imposter syndrome) with your work (I mean technical challenges) then I’d argue that you’re not in a place where you’re learning & growing. It shouldn’t always be like drinking from a firehose, but rather an ebb & flow over the months.
The last thing I’ll say is that part of feeling uncomfortable is dealing with imposter syndrome, which I faced a lot of during my job hunt and work at DigitalOcean. I don’t think it ever truly goes away, and that we should learn to fight it by recognizing our growth & ability to continue learning and growing.
And so that you hear it from more than just me, here is a fantastic article by Sunny that talks about this very issue. He & I work together (different teams though) and we talk a lot about how often we feel unconfident when firehose periods come around.
1) What did you find really helpful for your job-seeking ability or your current job in 5-month capstone project? (skillsets, networking, job-seeking skills, etc)
I actually wrote an in-depth article on my job hunt here: https://jzerwick.svbtle.com/how-i-navigated-the-job-hunt-and-landed-my-dream-job
Looking back, I think that I would have spent some more time building small, practice projects using the frameworks I had learned during Capstone (Ruby on Rails & React). While I didn’t have too many take home projects to complete for my interviews, there were plenty of companies that asked questions about these frameworks during phone screens. Plus if DigitalOcean hadn’t worked out, I had several other companies in my pipeline that were heavy on these frameworks.
That said, every job hunt is different which means everyone has something they would have done differently that would only have worked for them. For example, some of the others in my Capstone cohort didn’t have as many questions on distributed systems as I did & they wish they had studied that topic more.
2) Are you still using Ruby in your current job? When you start looking for a job, do you think specialize-only-one-programming-language really matters, or employers prefer people who are fast learners and willing to learn new languages?( I ask this cuz when I read some job descriptions, the language they require/ strongly prefer is not in my skillset, just want to know how employers balance these when they filter candidates). Any job-seeking experiences are helpful!
I don’t use Ruby at my current job right now, but I may in the next few months since my team is revamping an older project that was left by the wayside and was written using Ruby on Rails. For the past 7 months, all my work has mainly been in the Go language which I had to learn during my on-boarding at DigitalOcean.
“Any company that truly wants solid software developers who know their fundamentals won’t care which language you know since they’ll expect you to be able to learn the languages they use fairly quickly.”
For more job-seeking experiences, I’d recommend reading my job hunting article that I posted above. Another great one is an article that Sunny wrote on his job hunt which inspired mine (they’re similar in structure but have some differences): https://hackernoon.com/what-it-took-to-land-my-dream-software-engineering-job-17c01240266b
3) Looking back to this LS journey, anything you think you should have done earlier?
The Launch School community is incredibly supportive and informative, and it’s become that due to the people that are a part of it. So jump in and start getting to know others who can help you when you’re stuck & cheer you in your successes. It’ll be a great boost along the road to mastery :D
I’m still early in the curriculum(120); I’m studying full time and aiming for the capstone. I keep on wondering if I should be supplementing my learning with other courses or books from outside Launch School.
On one hand I think that it might help to study certain topics that may not be covered deeply in the core curriculum or in the capstone, but on the other hand, I don’t know exactly know what is or isn’t covered in the capstone, so I don’t want to spend time and energy learning something which I may learn anyways in the future (assuming I actually get into the capstone).
I also wonder if the benefit of learning an outside topic is worth the distraction as well as the loss of focusing all my energy just on the LS path.
My advice would be to focus all your efforts on the Launch School material. It’s incredibly deep and you’ll have plenty to learn. Coupled with the mastery-based approach & assessments to test your understanding, you’ll already be ahead of other people entering the software industry.
“My advice would be to focus all your efforts on the Launch School material. It’s incredibly deep and you’ll have plenty to learn.”
It can be very tempting to study other subjects, I did it myself quite a bit. But I ultimately found that it was a distraction and impaired my efforts in learning the Launch School material. And as for Capstone, the material covered there can change over time. This is because Capstone is helping students target a specific type of company (more competitive, higher quality engineering) and the questions/topics they interview on can change. Right now, a lot of them test knowledge of algorithms & data structures through coding challenges but that could change in the future.
I think that a more worthwhile investment of any extra time you have left over would be to stretch your newfound skills. Try making extensions to any of the projects you complete during the courses. Or take on more of the challenge exercises and try to complete them a few different ways. These are both things that I wish I had done more of when I was going through the Core.
I did write an article on some supplemental books & resources which can help further your studies of the Launch School content, along with some resources to avoid: https://medium.com/launch-school/my-list-of-books-resources-for-ls-students-72e468c41188
That said, the only subject matter that I could recommend spending time learning on the side would be the command line. There are so many useful tools & techniques that you can use, they’ll likely be useful even during the Core, and they’re used a lot on the job as a software developer.
A good starting point would be the Tech & Talk that I gave on Command Line Tips & Tricks (https://launchschool.com/gists/b05ad752) which also has some resources at the end. The slides for the talk can be found at the end of a supplementary article that I wrote here: https://jzerwick.svbtle.com/leveraging-the-command-line-for-increased-productivity
Caveat: All of the recommendations in the articles & talk posted above should only be considered if they don’t conflict with your Launch School studies which I view as the most important thing. When time is limited, skew your focus on Launch School!
One other question. In past experiences, I’ve always learned at a far greater pace on the job versus studying prior thereto (undergrad and law school were my past experiences). When I got to the job, that’s when I really started leveling up and learning a ton. I think it stemmed from two main things (in my case): 1. Actually doing real-world work, 2. More skin in the game.
I can imagine this being true for this as well. Was this the case for you? Now that you’ve started working, has your level ramped up faster than when you were studying? Capstone might be an exception, because that’s pretty intense. Perhaps you could compare to both Core and Capstone.
My plan is definitely Capstone, and obviously I want to be in a strong enough position to get the great job and career start. But I also want to be mindful that another X unit of time spent studying is probably less efficient, from a rate of learning perspective, than X unit of time spent at the good job. In my case, I guess I’m actually logistically fixed to the Summer Capstone cohort, so there’s really nothing I can do with this information anyway. But I’m still curious about what you’ll say and maybe your answer will help others.
Good question Ryan and I think there is a lot of nuance to it. I would say that my level has ramped up faster than when I was studying, which is a result of having lots of challenging work combined with having some truly excellent senior engineers on my team who have taught me a lot. That being said, I think that the reason why I’m leveling up so much at work is because I have such a solid foundation in the fundamentals through LaunchSchool. With that foundation, I would have gotten stuck much more frequently at work and would have struggled to efficiently learn the new things I’m using at work.
Additionally, while I’ve learned a wider range of things since working at DigitalOcean (computer networking, microservices, Go, more advanced testing techniques, awk, sed, so much about the command line, distributed systems, MySQL, etc.) I certainly haven’t had the chance to learn them too deeply while on the job due to the fast paced nature of work. So I often have to devote time outside of work to understand things better and stay ahead of the game.
Compared to Core, I’m learning a wider range of topics and tackling more difficult challenges at work so I am learning more. And compared to Capstone, the pace at my work can often feel very similar though a bit more scattered. In Capstone you’re very focused on just the topics being covered during any given week and then its hyper focus on the project. At work, I may have several separate threads of work that I have to make progress on so there really isn’t the luxury of being hyper focused on just one thing.
But like I said, I do feel like I’m levelling up very quickly from my work and at an order of magnitude faster than the Core. But the only reason why I’m able to do so is because of the huge number of hours that I devoted to studying the Core, going over the topics I had difficulty with again & again, and identifying my weaknesses/gaps in my knowledge so that I can improve. Because when you know the fundamentals down to your bones and you don’t get tripped up about variable scoping, variable declarations, pass by value vs. pass by reference, not having a practiced problem solving framework (PEDAC is amazing), or anything else covered in the Core, then you’re able to focus more on learning more advanced topics or new technologies.
So you do have a point, at a certain point X amount of studying may be less efficient than that amount at work. But the nuance is that (1) those hours of studying will make your learning even faster at work, and (2) you may need to increase the difficulty of your studying. See if you can tackle even harder coding problems, build a project with even more advanced features, and find more ways to test your understanding.
Hope that answers your question!
I attended a bootcamp before joining LS. One of the things that bothered me the most, was that there were so many things that we just had to accept and not really understand how they work or why they work a certain way. I really didn’t feel comfortable having my mental model of a topic be just at the tip and there being so much beneath the surface that I don’t know. This is one of the things that led me to LS.
So far with the LS I am able to have a much deeper understanding of concepts, and my mental models are much bigger, which enables me to explore more and to have more freedom. But I am also realizing that there is so much more going on under the hood and that I will never understand all the layers that are abstracted away when you use a computer and code. This causes me sometimes to have the same concerns that I had after the bootcamp.
My question is how do you recommend balancing wanting to fully understand all the layers and functionality that happens when you write a program and using your finite resources of time and energy. How do I decide how much is enough?
Let me first assuage your worries about having the same concerns after the bootcamp. I also attended an online coding bootcamp before joining Launch School and felt the same as you. As far as I have seen & researched, Launch School covers programming & web development deeper than any other learning establishment. You are definitely in the right place :-)
I see from Slack that at the time of this post you are in the 120 course, so I suspect that most of your concerns will be alleviated once you progress further through the Core and experience more of the depth in material that lies ahead. That being said, there is a balance that you have to strike between learning the material deeply and still making progress toward your goals.
If you truly want to understand all the layers and functionality that happens when you write a program, you are going to be studying for many many years. To understand that amount of detail would require you to learn lower level programming languages like C, then assembly (machine level) languages like MIPS, then computer architecture, electrical engineering, and finally physics. There is also operating systems, data structures & algorithms, discrete math, and so much more you’d have to cover. Is learning all of that now going to be worth it when your goal is to get an entry level role as a software developer in web development, especially when you won’t use 90% of that massive amount of knowledge at your job? I’d argue that it’s not.
I think that you need to accept that you don’t really need to know every single detail of how programming works in order to make progress, and that abstractions are really really helpful! They allow us to accomplish work that otherwise would take so much longer and require more knowledge than is really needed. Ruby as a dynamic language is an abstraction over lower level languages like C which is an abstraction over assembly languages, and it allows us to quickly write programs & applications that can get things done which is fantastic. I’d say there is plenty of time to dive into these finer details if you want once you have a job to support you (which is what I’m doing now).
“For now, I’d recommend that you trust the process of Launch School. If you focus on learning the material to mastery you’ll already know more than most others entering the software development industry.”
For now, I’d recommend that you trust the process of Launch School. If you focus on learning the material to mastery you’ll already know more than most others entering the software development industry, so set that as your level for “knowing enough”. Your level of detail in your studies should match up with the goals you want to accomplish, and in that case I think that would be knowing the material well enough to ace the assessments.
Hope that answer helps you in your studies!
1) I want to know more about Capstone, and your experience in it. Most of the time, what did you do in capstone? Did you spend most of your time working on projects, studying material and concepts, having discussions, mock interviews, etc., and about how much time did you spend doing each of those different kinds of ‘topics’?
I can certainly talk about my experience in Capstone, but please keep this caveat in mind: the content & structure of Capstone is not set in stone. Capstone is designed with a specific goal in mind: preparing it’s members for a job hunt that targets top-tier engineering companies. When I went through Capstone (and I think it’s still the case) many of these companies used coding challenges based on algorithms & data structures, interviews on system design, and small projects (take home project) to judge applicants and so we covered those topics. But we can’t really say how things will change in the future, and thus the material in Capstone over time will be a moving target on the industry at the time. Capstone has already changed since I completed it in December 2018 and it’s now longer by several weeks.
That all being said, when I went through Capstone there were three main phases: solving coding challenges based on algorithms & data structures plus system design, full-stack applications, and the Capstone project. They were all fairly equal in time spent covering those areas (about a month or more each). When we covered algorithms, data structures, & system design our days were split between discussions as a group and practicing problems and we did have weekly mock interviews. During the full-stack project phase we spent a lot of time working on a full-stack application and came together as a group to review our progress every day. And when it came to the Capstone project, we spent most of the time working all-day with our team and met with the instructors periodically to review our progress, if we were stuck on anything, etc.
Like I said, Capstone has already and will continue to change to better match what is expected by top-tier companies looking for developers to hire. But it will always have the following: breadth of material, depth of technical skill & requirements, and a hyper focus on meeting its goals.
2) What kind of material did you learn/work on? Did you spend most of your time studying higher-level framework type of things? Stuff that is hot right now and may not be next year? More fundamentals with some of the previous mixed in? Building upon your previous knowledge or learning things different altogether? Data structures and algorithms? And what would the ratio be between these different kinds of topics? I understand that a purpose of Capstone is to successfully launch students into a competitive career, and I’m wondering what the process of that looks like.
I covered the kind of material that we learned in my answer to question (1) above, along with the ratio between the different topics. When we covered full-stack applications, we did study & use frameworks (Ruby on Rails, React) which were the most prevalent in the industry at the time (and I suspect still are). Despite that, I wouldn’t say that Capstone skews toward covering “what’s hot right now and may not be next year”. Everything that we covered had a proven track record of use in the industry and were often sought after by companies hiring developers. We didn’t cover any more of the fundamentals, instead we used what we learned in the Core as a foundation for quickly learning more advanced topics. So we mainly learned new topics all together rather than anything that was already in the Core.
I highly doubt that Capstone will ever cover a technology that is bleeding edge or has only recently gained popularity. If that were true, Capstone & Launch School would teach Rust, Golang, Vue.js, NoSQL databases, Svelte, etc. While those are all shiny “new” tech they don’t appear on a lot of job descriptions because it always takes the industry years to try new tech because they want to see if it’s viable & has a proven track record.
Like I said earlier, typically Capstone will cover algorithms, data structures, system design, databases, distributed systems, full-stack applications, and the Capstone project. And usually the structure will be a couple of these topics for a set period of time before the next couple is introduced. There is a video by Chris at the end of the backend courses in the Core (or at the start of the frontend courses, I can’t quite remember which) that goes into more detail on Capstone. This is because for many students Capstone can be very far into the future (it took me 1.5 years to finish the Core) and it’s best to focus on what’s in front of you rather than something that is months or years awa
3) Also, if you can answer this, what is your recommendation for being a software developer in NYC (where you work) compared to other cities around the nation? Is there a ton of opportunity for software devs there?
NYC is a fantastic place for software development and there are tons of opportunities available (as far as I can see right now). It actually beat San Francisco as the best tech city in the US earlier this year! https://www.bloomberg.com/news/articles/2019-02-04/new-york-beats-out-san-francisco-to-be-world-s-best-tech-city
If you’re looking to get a job in NYC, then I highly suggest doing Capstone as NYC’s job market is exactly what Capstone is built for. Just about everything that I learned & practiced in Capstone came up during my interviews and I felt very prepared. That said, there are a lot of similarities to the job market in NYC and other cities like SFO, Austin, Seattle, Portland, etc. (from what I’ve heard).
Another thing that is unique to NYC and SFO from other cities is that both have a large number of coding bootcamps. This means that there is a massive number of bootcamp grads who are also looking for jobs and that you would compete with in those cities. So having a rock solid foundation in the fundamentals is even more important to set yourself apart. On top of that, many bootcamp grads have projects that seem impressive on the surface, but they really are often times a bunch of libraries or frameworks tied together. This means that when they get questioned in interviews about the technical decisions, optimizations, and strengths vs. weaknesses of their project they can often struggle to go deep in technical details.
So what’s really important is not only to have a strong project in your portfolio but also understanding the entire process of building it and the technical decisions you made. That’s why a lot of Capstone grads will do a white paper or article on their project explaining everything and it’s truly the details that impress employers. Not many of them will look at the code that you wrote, but many of them will read an article or white paper and ask questions on the project. So focus on the process & details, and practice explaining them simply to anyone. Think of all the kinds of questions that could be thrown at you and prepare answers for them. You don’t need to have perfect answers, but having some forethought will go a LONG WAY.
Phew! That was quite the grab bag of questions! I hope you found them helpful :-D
1) How important would you say your capstone project was in landing interviews or would you have gotten those interviews without it?
The Capstone project was huge in getting me interviews and interest from employers. That said, part of it was the technical depth of the project but I’d argue that just as important was the efforts that my team made in promoting the project. I gave a lot of this info in my answer to John Isom’s questions above, but on top of writing a white paper and article on our project each of us also presented on the our project at Meetups. We also got our presentations recorded and posted them on our personal websites and LinkedIn. I also included the video in many of my emails (both cold introductions and follow-ups) to engineers & hiring managers and it proved very effective in getting a response & interview. I don’t think I would have gotten as many interviews as I did without it.
For more info on how I marketed my project, check out the article that I wrote about my job hunt: https://jzerwick.svbtle.com/how-i-navigated-the-job-hunt-and-landed-my-dream-job
2) Have you had any success getting interviews from remote based companies that are heavily software centric?
Yes I have! In fact, the company that I currently work at (DigitalOcean) is very remote-based! Over 60% of our workforce is remote and I have the freedom to work wherever I want, though I chose to be in the HQ office in NYC. And there are many companies that are becoming more welcoming to remote work, though there are still many companies that will require you to work in their office.
After completing the core and the capstone, are there things that you learned about learning, yourself (what you feel comfortable sharing), people, communication? ( and any other non-programming subject)
I like this question because it touches on how going through Launch School is an experience that’s more than just learning software development. My ~2 years studying at Launch School resulted in changes that were more than just learning a new field, I also learned a lot about myself. I’ll separate the different areas below.
“Launch School is an experience that’s more than just learning software development. My ~2 years studying at Launch School resulted in changes that were more than just learning a new field, I also learned a lot about myself.”
On Learning: I’ve said this many times to other students, but one of the most important things while doing Launch School is to figure out new ways to effectively learn and what methods work best for you. I discovered that I learned best through pen & paper instead of typing out notes. Having pen & paper to write out notes forced me to slow down and consider what I was learning, unlike just rapidly typing up notes. I usually wrote summaries of each lesson, drew mental maps to connect topics, concepts, & ideas, and wrote out solutions to exercises before coding them up.
I discovered Anki and have used it ever since to quickly learn new material and retain what I learned as I moved through the Core. I still use it today as I learn new technologies and read books for my work at DigitalOcean! I go more into detail about Anki in my answer to Fabio Selmi’s question above, so check that out to learn more about it.
In the beginning of studying the Core, I took the online course Learning How To Learn and found that the techniques described in the course were extremely helpful (writing out notes, spaced repetition with flashcards, chunking, and getting plenty of sleep). During college, I had fallen into the idea that in order to succeed I needed to take way too many classes and just “work hard” while sacrificing sleep. This approach failed miserably for me and during Launch School I always made sure to get at least 8–9 hours of sleep a night if possible. The course goes more into the research, but essentially getting plenty of sleep will not only keep you energized to keep learning, it also will help strengthen the connections between topics in your brain!
Lastly, I read the book Deep Work by Cal Newport and it was a game changer. Once again, I go more into it in my answer to Fabio Selmi’s question above, but it was extremely impactful for me. It also pairs well with the concepts taught in Learning How To Learn: spend a dedicated number of focused hours learning new material, then make sure you get plenty of sleep to strengthen those newly made connections.
On People: What I had to overcome while doing Launch School was the fear of missing out compared to what other people my age were doing. Most other people I knew had jobs and were working very hard at them in hopes of getting promoted. Others were taking time off to travel the world & have new experiences. Meanwhile, I was back home with my parents studying Launch School everyday. This was a hard adjustment and at times I felt like my life was standing still compared to others even when I was making progress through the courses. But what I came to realize was that my path was different than others and that’s ok. I was choosing to move slow at the moment (while studying at Launch School) so that I could move faster later (when I get a great job with better career advancement). And the result is that now I have a much better job which I love & I’m getting a lot of new opportunities that I wouldn’t have before!
Looking back, I think part of this journey was accepting that many people (including ourselves) are looking to compare what they have & where they’re at in life with others. And that if things don’t match up favorably, our position in life is “wrong”. I had several friends who didn’t understand why I was leaving to do Launch School when I had a job (even though it was awful. They always asked me “so when are you gonna be done and what’s your plan?”. They couldn’t quite understand why someone would pull themselves out of the “rat race of life” to do something different which also had some uncertainty at the end. I eventually stopped updating them on my progress because of this disconnect & felt much better for having done so. I was able to have a much healthier state of mind & outlook once I just focused on what I thought about my progress, not what others thought.
On Myself: Personally, I had learned that I had been going too fast through my life and had never taken the time to step back and consider the path I was on. My first 25 years of life had been an unrelenting march from high school to college (during which I had jumped around several majors and committed myself to too many organizations/extracurriculars) to a job which had landed me in a place in which I found…that I wasn’t happy. And I realized that I had a choice: I could either just settle with where I was in a bad job that didn’t have much opportunity in a field which I didn’t enjoy, or I could take the chance to do Launch School for something better. And in the following 2 years of full-time study, I took stock of a lot of things in my life.
I realized that I had been moving too fast & taking on too many things in life, and decided that I instead needed to focus on just a few, important things that really mattered to me. Looking back, I hadn’t prioritized making time for myself & my hobbies to enrich my life. And that a big part of the reason why I had ended up in such an unhappy position was because I was trying to do what my friends, society, or culture was telling me to do instead of figuring out what worked for me. So what I really learned from those 2 years at Launch School was that I needed to slow down my pace of life. And I used that time to have some serious introspection to help me chart the next few years of my life. Thus far, that has been one of the most valuable experiences for me that came out of doing Launch School.
- Do you feel that your experience working on SpaceCraft prepared you specifically for the role you’ve taken on with Digital Ocean?
I don’t think that SpaceCraft really prepared me for my role at DigitalOcean as much as the Core & Capstone overall. I did score points in my interviews for having using Docker in SpaceCraft since Docker is so widely used in the software industry, but what really impressed them was the technical depth of SpaceCraft and how well I could talk about the technical decisions we made in building it.
There can be some situations in which a Capstone/personal project helps land certain roles & prepare you for them. I think that if you’re looking to work as a front-end developer you’ll need to have a larger portfolio of front-end projects (based on my job hunt observations), or if you’re trying to land a job in machine-learning/AI then you’ll need to prove you skills in that area. But overall, I think working on SpaceCraft prepared me in general for any potential job that I could have gotten due to the technical depth & amount of research it required, along with gaining experience working on a team.
2) After going through the job search process, and learning about other Capstone students’ projects, do you feel that a focus on different skills/techniques/technologies could have led you down a different path towards another (no doubt wonderful!) opportunity?
It’s certainly possible that focusing on a certain set of skills/techniques/technologies could have lead me down a different path. In my job hunt, I wanted to land a job that was entirely back-end focused and that meant I focused on studying system design, distributed systems, and back-end performance topics more than front-end topics. And that paid off with DigitalOcean as I had a lot of those topics come up in my interview.
I think that if you want to land certain roles, you will need to skew your studies appropriately. If you want to work mainly on front-end technologies, then you should know React or a front-end framework really really well and have a strong portfolio of projects showcasing your work. If you want to work in devops, spend time learning Docker, Kubernetes, CI/CD, and a scripting language (Ruby, Python).
What I wouldn’t recommend is that you try to do the same kind of steering with your Capstone project unless everyone on your team wants to head in the same direction. During Capstone, most of the time teams will be comprised of students with different goals & roles that they want to work in. So don’t try to steer the project in a direction that just suits your goals. Because at the end of it all, what matters the most is that your team is able to complete a technically impressive project & explain it clearly to anyone. That is what impresses employers/interviewers the most!
Thanks Julius, this is really great. I often wonder what it will be like to be a software engineer. Will I feel in some ways like I’m still in Launch School solving problems, studying, and learning new things? Or, will it be completely different actually building and maintaining real world tools and applications with a team? On that note, I’m very curious about these three topic that you threw out:
- Day in the life of a software engineer.
I usually get to work at around 9am and start my day with checking my emails & Slack,. My mornings don’t usually have any meetings, so I try to get in 2 solid hours of work on my tasks. We follow the agile software process which means we work in 2 week “sprints” with pieces of work defined in “tickets”. So I’ll try to code for 2 hours on one or more tickets. Also, everyone on my team will post a message on our Slack team channel detailing what we worked on yesterday, what we plan to work on today, and if we’re blocked on anything (i.e. need some help on a ticket).
At around 12pm we have lunch catered at the NYC office and I’ll grab some food. I’ll also take a 10 minute mental break from the computer with either a walk outside or finding a spot in the office to read.
From 1–4pm I might have a few meetings depending on the day of the week. It could be a team meeting in which we talk about our progress on our tickets or plan the next sprint of work, or it could be some 1-on-1 meetings with my teammates or manager. In between those meetings, I’ll try to work on small pieces of code for my tickets, or if I have no meetings for the day I’ll code for another 2–3 hours.
At 4pm, I start winding my day down and write out what I need to work on tomorrow. By 5pm, I’m typically out the door and on my way home.
2) What it’s like working as a professional software engineer.
Working at a professional software engineer is interesting, and is quite different from being a student at Launch School. I don’t generally work on projects from scratch since teams at DigitalOcean are each in charge of maintaining & building on specific services (small systems) that together make up the overall software system of DigitalOcean. My work usually consists of building new pieces of functionality in my team’s system (an IP address management system written in Go) which means I’m building new API endpoints, code that handles & processes requests from other systems, and queries to our database.
My work will also involve refactoring parts of the system that have grown too complex or have bugs (I think of this as “tending the garden” haha) or doing some research on future projects. Right now my team is checking out whether CockroachDB could replace MySQL for our system and we’re doing some investigations, which is a nice change of pace.
I don’t do that much “pure” problem solving like in the coding challenges in Launch School or on CodeWars, but that practice was extremely beneficial for both interviews and building problem solving skills which I do use everyday when I code at work.
3) What I do at work/What my team is building.
I’m on the software-defined networking team at DigitalOcean which handles a lot of networking systems like IP address management, firewalls, load balancers, & virtual private clouds (private networks for customers). My role is on the IP address management project which handles every IP address at DO.
The main product that DO offers is a virtual private server called a Droplet, which is basically a piece of a server. Servers can have tons of RAM or computing power and are essential for tech companies, businesses, or developers to host their websites or products online, or even for doing tons of data processing. But setting up and managing servers can be a huge pain, and sometimes you don’t need a whole server to run your software, but just a bit of RAM & CPU. So DO uses software to divy up pieces of their servers into smaller, virtual servers that our customers can use.
Now, every Droplet needs an IP address in order to be found on the Internet and have network traffic sent to it. That’s where my team comes it and we manage every IP address for all of our Droplets. We handle the assignment of an IP address to a Droplet, the removal of a Droplet when a customer chooses to delete a Droplet, and any updates that need to be done with an IP address.
I hope that was easy to follow along! I’ve had to work on explaining the above several times to my non-software minded friends & family haha.
How did you prepare for the 101 assessment, the coding live aspect? Did you use external sources to get more practice with the medium level exercises?
I practiced for the live coding assessments by going back to the practice problems for the course and redoing almost all of them. If there were any that I struggled with, I made a note of it and practiced it again. Note, after my first round of redoing the problems I only practiced the problems that I struggled to solve within 45min. I also timed myself as I worked on them to see if I could solve it within 45min. The reason for this is that during the assessment (which I believe is 1 hour long), I knew that I would be slower because I would be nervous and have to talk about my problem solving process to my interviewer, which can take more time than you would expect.
For each problem, I did not try to memorize the solution. Instead, I practiced reading the problem statement, discussing my approach & planned solution (which meant I talked to myself a lot as I practiced), creating test cases & finding edge cases, and working through the problem. The most important thing to remember is that you’re practicing the problem solving process, not the specific problem.
I recommend that you post in the LS Slack asking if anyone wants to pair on some practice problems. Give each other constructive, positive feedback on how to improve! This was one of the most helpful things I did to prepare for the live coding assessments. No matter how good you are at solving problems on your own, it’s always harder when you have to do it live with someone judging your performance.
I wrote an article describing the process I used here: https://jzerwick.svbtle.com/why-you-need-an-interview-script
Later on in the Core, you’ll learn about the PEDAC process which is extremely useful for breaking down and solving problems, especially for interviews. Hope that helps you with your preparations!
Considering you’re now working with mostly backend/infrastructure-related things at DO, are there any technologies, languages or fundamentals you wish you’d have learned during either Core or Capstone because they seem to be required for a backend-related job?
There really isn’t anything that I would change during Core or Capstone from what I remember. I think both are great already and that any recommendations would actually be more distracting than instructive. Once you do finish the Core, you’ll have the fundamentals necessary to quickly learn the backend/infrastructure-related skills & technologies needed for backend-related jobs.
“Once you do finish the Core, you’ll have the fundamentals necessary to quickly learn the backend/infrastructure-related skills & technologies needed for backend-related jobs.”
Having said that, once you’re done with the Core/Capstone I do recommend the following:
- Learn system design and practice it all the time. This is a crucial area that is checked during interviews for backend roles which require building complex systems. Start with this course (https://www.educative.io/courses/grokking-the-system-design-interview) and if you have time after go through this github(https://github.com/donnemartin/system-design-primer).
- Learn the fundamentals of distributed systems. There are a lot of scattered resources here, but a few good ones are this book (https://www.amazon.com/gp/product/1449373321/ref=as_li_qf_asin_il_tl?ie=UTF8&tag=algodaily03-20&creative=9325&linkCode=as2&creativeASIN=1449373321&linkId=882aaf1cbc52d917f89b74b4edebfda0), this blog (https://www.freecodecamp.org/news/a-thorough-introduction-to-distributed-systems-3b91562c9b3c/), this blog (https://www.brianstorti.com/replication/). If you need help wading through these resources, feel free to DM me on Slack! It’s an area that I think needs some guidance given the lack of a good intro primer. I also did a Tech & Talk on this topic here if you want a quick overview: https://launchschool.com/gists/7003b6e8
- Learn about threads, multi-threading, concurrency, race conditions, mutexs & semaphores. These come up in backend interviews quite a bit. A good start would be this course(https://www.educative.io/courses/ruby-concurrency-for-senior-engineering-interviews) and this webpage (https://www.geeksforgeeks.org/mutex-vs-semaphore/). Also, Holden’s upcoming Tech & Talk seems to cover these topics as well so go check it out! https://launchschool.com/gists/72326121
- For technologies, I’d say learn how to use Docker and it’s built-in function docker-compose. Both are heavily used in the industry. Other than that, know what the purpose of a cache, queue, load balancer, & API gateway are. You can learn about them as an overview in my Tech & Talk here: https://launchschool.com/gists/7003b6e8. You can also see the slides here: https://docs.google.com/presentation/d/1jxO9yPe6DCptxZq0P52QD0WIt7Sr5S31tIIZHmrSjDs/edit?usp=sharing
Recently on one of the Slack channels, you said that you didn’t want to start your career at a FAANG company (Facebook, Apple, Amazon, Netflix, Google). Aside from the fact that the full interview process can take months, why else did you want to avoid these companies initially?
Good question, this was something that I decided as I was starting my job hunt. There are a lot of benefits in joining one of the top tech companies including a high salary, usually a decent-to-big signing bonus, stock options that are guaranteed money, & having the company on your resume. But in my discussions with Capstone grads & other engineers in NYC they pointed out something that I didn’t know before: the entry-to-mid level engineers at these companies are actually not in the most desirable spot for long term growth.
The reason for this is that these companies are massive with hundreds, if not thousands, of engineers and it’s usually the lower-tier engineers that are put onto non-challenging projects that maintain existing projects without much opportunity to learn or build new things. I mean, someone has to do the dirty/tedious work of maintaining Gmail & Google Calendar!
What ends up happening is that all the interesting, skill-expanding, challenging work is given to more senior engineers, which means that engineers at the lower levels of the ladder have an extremely hard time growing their skills or standing out among everyone else. It can take even longer to progress toward a senior engineer role at one of the big companies than compared to a startup or mid-sized company. It’s commonly expressed that it’s easier to climb in seniority by leaving one of the FAANG companies (say Google), work for a few years at a smaller company that will challenge you more, and reapply to Google for a senior position, rather than just staying at Google and working for years & years.
So I decided to aim for smaller companies in which I could have more opportunity to learn and grow as an engineer, and I’ve found that it’s paid off. Since joining DigitalOcean, I’m working alongside more senior engineers on a distributed system which has led me to learn a ton, and I’ve had more exposure in the organization to showcase my work and be recognized for it.
Ultimately, I chose to seek job opportunities at companies that would give me the most learning opportunity possible, and I would recommend the same for anyone else entering the industry. Just my 2 cents though, everyone has different goals & objectives for their career!
Any thoughts on the new JS track?
I’m no longer subscribed to Launch School so I can’t look through the new JS track in depth, but overall I trust what Chris, the TAs, and everyone else working at Launch School are doing with the new track. While I personally am fond of the Ruby+JS track and consider learning two languages a plus, I also understand that for people who know that they will be JS focused in their careers the new track is a welcome addition.
In my opinion, JS can be a hard first language to learn because it’s just weird. I like to think of it has a squishy language that can be hard to pin down & reason about as a new software developer. It’s a powerful language and used everywhere, but it’s concepts of hoisting variable declarations,
this, and OOP styles make it a bit complex to wrap your head around, especially if it's your first programming language. When I was learning it, I kept feeling like the language was trying to trick me, while Ruby felt solid in what it was doing & it's OOP style.
Additionally, since the JS track is new it may take some time to work out any potential kinks or for solutions to coding challenges to get posted in each course. This isn’t a bad thing as it opens up another opportunity: seek out other students on Slack doing the JS track and work through the problems together! Get help and bounce ideas & solutions off each other. This is a fantastic exercise in what real-life work is like for a professional software developer working on a team.
I guess my advice would be that if you are enamored with learning JS from the start or if you are very confident that you will want to work as a front-end engineer or with JS, then go ahead and do the JS track. If you want to perhaps keep your options open to back-end development & want to have two languages on your resume, then do the Ruby+JS track.
Regardless which track you choose, be confident that they both have the most important features of Launch School: a mastery-based learning approach toward learning the fundamentals with a fantastic group of TAs to offer support, along with the wonderfully supportive LS community!