00:00:14.530
Hello, everyone! I'm Kinsey Ann Durham, and this is my colleague, Kim, who will introduce herself shortly. Today, we will be discussing becoming a mid-level developer and sharing our two perspectives on leveling up in our careers.
00:00:20.200
As for me, I am based in Denver, Colorado. I have a passion for fly fishing, and that's my dog Harley in the middle of the picture. I'm very obsessed with her. I also enjoy teaching code in Peru, which is something I am truly passionate about.
00:00:33.220
My background is quite different because I didn’t attend a coding school or have a computer science degree. I started learning to code after attending a RailsBridge workshop, which helped me begin my journey. I come from a more junior perspective and have recently made the transition toward becoming a mid-level developer.
00:00:50.320
Thank you! Now, I’ll let Kim introduce herself. I'm Kim Barnes. I come from a more experienced standpoint, having been in the field for a while. I might use terms or tools that others may not be familiar with, which sometimes requires me to explain them. It can be unfortunate and a bit embarrassing when that happens.
00:01:11.080
I was introduced to programming by my dad, who would assign me basic programming tasks that I had to complete before playing games on the Apple II Plus. He graded my assignments based on their difficulty, saying, 'If you get an A, you can play this many games of Space Invaders or Sneakers.'
00:01:31.360
My passions include my two amazing kids, both of whom are currently in college. I do not recommend having both your kids start college at the same time; it is not very convenient! I also love test-driven development, pairing, and mentoring.
00:01:43.479
There was an early attempt at coaching my little sister to ride a pony, which didn’t go very well. What's cool right now is that Kinsey and I are on the same team. We have the opportunity to work together every day and mentor each other in this process.
00:02:01.830
We both work for a company called GoSpotCheck in Denver, Colorado, and we are always looking for engineers. If you have any questions about that or want to relocate to Colorado, please come talk to us. We also have lots of T-shirts!
00:02:27.610
As Kim and I were planning this talk, we grappled with terms like 'junior' and 'mid-level.' The definitions of these terms can vary, and we think there are many ideas to share that can benefit developers at any level, so we hope you can take away useful insights.
00:02:46.329
We will cover a few areas today: first, technical learning, where we will suggest ways to level up your technical skills; second, domain knowledge, which involves understanding the 'why' behind the code you write. We will also discuss mentoring, focusing on how to become better mentors, and dive into the relationships between juniors and mentors.
00:03:12.210
We wish to share practical methods for making mentoring effective, whether you are in a paired or solo environment. Lastly, we will touch on soft skills that will help you become a well-rounded developer. Kim will kick us off with some ideas about technical learning.
00:03:32.379
Thanks, Kinsey! First off, I want to say that one of the best ways to learn technically is through teaching. Many people believe that you need to be a senior developer to teach others, but I think it is quite the opposite. Even if you've been programming for only a month or two weeks, you can teach someone who has never programmed before. Teach your sibling or your parents; it really helps establish your understanding.
00:03:49.780
Teaching allows you to solidify your learning and fend off imposter syndrome. When you explain concepts to others, you realize that you do indeed know what you're doing. Side projects are also important; you need to find ways to learn outside your regular job. Working on a 'breakable toy' or contributing to open source can be incredibly beneficial.
00:04:07.120
There are many obstacles to contributing to open source, but many awesome people here at the conference can help. Remember that it doesn't only have to be about code; you can also volunteer for programs like RailsBridge or get involved in your local community. Choose projects you are passionate about because coding should be enjoyable, not a burnout.
00:04:34.090
On the topic of burnout, it's crucial to take breaks. If you haven't heard of the Pomodoro Technique, it's a great way to manage your time. The technique suggests working for 20 minutes and then taking a 5-minute break. This helps you step away from your computer regularly.
00:04:48.570
Maintaining hobbies is also essential. I've noticed that many people in boot camps or coding schools abandon their previous passions, like horseback riding or fly fishing, when they start programming. I believe you should make time for those activities; they are vital for your mental health.
00:05:10.420
Learning additional programming languages is important too. While mastering your first language, try to explore others as it helps solidify core concepts. An example from my experience is SQL. One of my first days at GoSpotCheck, I encountered SQL, and I remember being overwhelmed.
00:05:27.970
Most coding schools don’t teach SQL, and it’s crucial to understand it. If you're struggling with SQL, find a mentor who can guide you. Don’t hesitate to play around in databases to deepen your understanding. The only reason I started asking questions of Kim was that I knew she was knowledgeable in SQL.
00:05:43.360
It’s also important to be mindful of how you approach problems. We often jump right into coding without thinking deeply about the issue. Having an awareness around this is essential. Breaking problems down into smaller, more manageable tasks is a proven best practice.
00:06:06.250
Understanding the 'why' rather than just the 'how' is crucial. In project planning and meetings, ask questions about why you are doing a particular task. Understanding the bigger picture enhances your awareness. Additionally, using techniques like pseudocode helps clarify what your code needs to accomplish before diving in.
00:06:26.900
Pseudocode can highlight potential design flaws, as I’ve found it often reveals code smells. Staying focused is also paramount—it's easy to get distracted by various factors like social media or interruptions. Having a mentor, like Kim, who reminds you to stay on track can be invaluable.
00:06:48.290
Set intentional goals for your growth. Acknowledge what you want to achieve each day and communicate with your mentor. Be proactive about your career and take ownership of your learning process.
00:07:14.390
Time and practice are essential components of leveling up. As I’ve recently started mentoring students at an online coding school, I’ve noticed that many expect to become proficient in JavaScript in just two weeks. However, real mastery requires perseverance and effort.
00:07:29.680
Skill development is not innate; it takes grit and determination. Sandy Maxx's talk emphasizes the value of hard work. You need to keep digging in and putting one foot in front of the other to progress.
00:07:51.240
Now, I want to pass the floor to Kim, who has some valuable insights to share about leveling up technically.
00:08:06.270
Thanks, Kinsey! To start the day, think about what you want to learn. A great quote from Venkat Subramanyam, one of my heroes, encapsulates that idea. At GoSpotCheck, we value continuous learning and improvement, so having a target for what you want to learn is beneficial.
00:08:31.700
I want to introduce a concept called the technical learning axis, which my friend David Maduros taught me. The first axis is horizontal, representing various languages and technologies, such as Ruby on Rails, JavaScript, and React. The second axis is vertical, encompassing the core concepts that apply across these languages.
00:08:57.190
While it’s essential to stay current with new languages, it's equally important not to neglect the core principles that unify them. These core concepts help you solve problems, regardless of the programming language you’re using.
00:09:05.520
It’s crucial to balance learning new languages with mastering fundamental principles such as TDD, refactoring, and design patterns. Proficiency in core concepts can help you obtain roles in languages you may not have prior experience with.
00:09:32.210
Those principles are the foundation that allows you to excel at problem-solving. Learning a new programming language becomes easier with each core concept you master. Similarly, as you learn new design patterns, you’ll understand them better across different languages.
00:09:56.020
When I mentor or pair with someone, I can gauge their understanding of these core principles through the language they use. Using terminology appropriately and addressing design trade-offs reflects the growth of their technical awareness.
00:10:18.750
Next, let’s discuss domain knowledge, which is about deepening your understanding of the company, its applications, the code being written, and the problems you are solving. An excellent way to enhance your domain knowledge is to embrace asking questions—even those you might think are silly.
00:10:36.249
Being too cautious about asking questions can hinder your growth. Imagine you’re in a project management meeting, and cryptic terms are thrown around—if you don’t understand something, it's crucial to ask for clarification. Asking questions demonstrates your commitment to understanding the problem space.
00:11:06.370
Sometimes, asking questions leads to greater trust from your team. Your colleagues will appreciate your willingness to seek clarity, which creates a more collaborative and open environment.
00:11:23.030
At GoSpotCheck, we conduct field trips to get a better grasp of our customers’ needs. Our main clients are large alcohol brands, so instead of conventional field trips, we explore liquor stores to see how our applications are used firsthand. This experience is invaluable—it helps bridge the gap between coding and user experience.
00:11:53.340
These field trips broaden your perspective. Pay attention to the customer’s perspective, embrace their needs, and actively work to meet them. Engaging with customers helps you avoid becoming isolated as a developer.
00:12:08.640
Now, let’s pivot to mentoring and explore what makes a quality mentor. One of the most important pieces of advice I have is to remain aware of your word choices and body language while mentoring. It's crucial to be encouraging and to recognize your biases.
00:12:36.310
When mentoring, keep in mind that it's easy to become frustrated, especially when you are passionate about the topic and your mentee struggles. Remember, frustration can discourage learners, so take breaks if you sense this feeling arising. Your role is to support and empower, not to intimidate.
00:12:55.110
Teaching through metaphors can make complex concepts easier to understand. For example, I once struggled with JavaScript's 'this' keyword until a mentor used a soccer player metaphor that finally made sense to me. Consider your mentee's learning style and tailor your teaching accordingly.
00:13:27.800
It’s also vital to focus on the bigger picture. Junior developers often have much more to offer than just raw coding skills. When mentoring, help them recognize their soft skills and other strengths—the whole developer is more than just technical abilities.
00:13:50.749
Support needs to be balanced with challenges. Be a mentor who inspires while also helping your mentee push past their comfort zone. Challenge them when you see room for improvement. Always remember that juniors can teach you too; they bring fresh perspectives that can enhance your understanding and approach.
00:14:09.570
Being a mentor isn’t confined to senior developers. A senior developer might not be the best teacher. Teaching requires practice and a solid understanding of how your mentee thinks. Use their preferred communication style to explain concepts effectively.
00:14:30.990
It's important to gauge when to step in as a mentor or when to allow your mentee to struggle. Learning from mistakes can be valuable, but don’t let them become too frustrated. Struggling through a challenge is often necessary, but you also need to offer support.
00:14:50.500
Similar to an evolving learning methodology, teachable code is an approach to writing maintainable code. A mentor should ensure that their code is understandable to the lowest common denominator so that others can engage with the code whenever necessary. This approach can elevate both the mentee and the quality of the codebase.
00:15:12.260
Encouraging an exchange of feedback is incredibly valuable for developing relationships between juniors and mentors. Regularly ask for feedback on your mentoring style and work to incorporate it. Similarly, offer constructive feedback in return—aim to focus on improving each other’s impact.
00:15:36.510
Being humble as a mentor means acknowledging that you are still learning. There will be moments when a junior asks you questions you don’t know the answers to—this is okay! Use those moments as opportunities to explore together and model problem-solving skills.
00:16:02.730
While Kinsey and I do not have a formal mentorship program at GoSpotCheck, we've built a valuable structure around mentoring through consistent one-on-one meetings. Regular check-ins ensure we align our goals and work together productively.
00:16:21.880
Finding a supportive learning environment is crucial. Many junior developers settle for places where learning is undervalued. If you find yourself in such an environment, it’s essential to speak up about your needs or consider other options.
00:16:41.579
Actionable goals should be a shared focus between a mentor and mentee to help facilitate the transition to mid-level. Understand what a mid-level developer looks like in your specific context and work toward those goals together.
00:17:06.390
There’s immense value in understanding the balance between pairing and soloing. Many of you pair regularly, while others might primarily work solo. Striking a balance between both experiences is crucial.
00:17:30.900
When I started pairing, I struggled with confidence. Often, I’d be hesitant to take the lead during pairing sessions, which limited my learning. Kim encouraged me to take charge more often. While it was challenging, it helped me grow significantly.
00:17:48.460
Having solo time is also essential for struggles and deep learning. Kinsey expressed a desire for a balance of pairing and solo work, wanting to explore coding challenges independently while simultaneously engaging with others.
00:18:05.450
We recently began conducting pairing retrospectives to improve our collaborative efforts. These retrospectives allow us to evaluate what went well and what can be improved in our pairing sessions.
00:18:24.920
Through these discussions, we identify areas where we want to drive more collaboration. It’s a great way to maximize the value of pairing and accelerate learning outcomes.
00:18:43.070
Now, let’s talk about some essential soft skills that contribute to becoming a well-rounded developer. Time management is one crucial area. Effective developers tend to struggle with providing accurate estimates. We need to acknowledge that estimates can be imprecise and identify ways to manage our time better.
00:19:05.760
The Pomodoro Technique is one effective method for managing time and breaks. You can apply this technique when estimating tasks: note how long each takes, and review your accuracy afterward, identifying patterns and refining your estimates.
00:19:23.590
Avoid multitasking when possible, but it is essential to finish your current tasks before switching to high-priority issues. Completing what you start leads to a smoother transition back to your original task after addressing urgent needs.
00:19:47.380
For further time management techniques, I recommend the book 'Getting Things Done.' It provides various insights to help juggle responsibilities across both work and home.
00:20:03.990
Another essential soft skill is developing emotional intelligence. As developers, breaking the stereotype of being antisocial or introverted is vital. Agile methodologies emphasize communication and collaboration, requiring us to engage effectively.
00:20:20.790
Empathy is fundamental when working with colleagues—from product owners to quality assurance teams. It’s not just about agreeing; it involves genuinely understanding where others are coming from. This understanding leads to better collaboration and problem-solving.
00:20:44.500
Mindfulness and work-life balance are also important. Take time for self-care, such as meditating or enjoying hobbies that help ground you. Recognizing your strengths and weaknesses is key; use personality assessments to improve your interactions with team members.
00:21:05.960
Being aware of your learning preferences can significantly enhance your development. If textbook learning isn’t effective for you, seek hands-on opportunities that cater to your style.
00:21:22.800
Finally, cultivating a growth mindset fosters resilience. Embrace challenges as opportunities to improve, and learn from each step along your journey as a developer.
00:21:37.370
Networking is crucial as you advance in your career. Many job opportunities arise through connections rather than traditional applications. Attend meetups and leverage social media to engage with the tech community.
00:21:55.660
In closing, we encourage you to pursue your journey toward becoming a mid-level developer diligently. Set actionable goals, find the right mentorship, and be open to learning on all fronts. The path may be challenging, but persistence and dedication will pay off.
00:22:15.300
We appreciate your attention and time today, and we'd like to share a final thought: always be aware of what you need as you grow in this field. Speak up, seek support, and engage with your network for guidance.
00:22:31.270
To our junior developers, remember that you have much to contribute beyond coding skills. To our senior developers, embrace feedback and offer your support and guidance when you can.
00:22:47.510
Thank you for joining us at this session. We hope you found our insights valuable and encourage you to implement what you have learned in your development journeys.
00:23:06.520
Please feel free to reach out with any questions or for further discussions. We appreciate your engagement and participation today!