July 19 #CodeNewbie Chat

Right now I am focused on “what I want to be” rather than “where I want to be” in my career and in life. And so I have these four character traits that I’m using to guide me… I want to disciplined, unencumbered, reputable, and skillful.

These qualities may seem to be very abstract, and they would be if not tied with specific actions. But as I connect them to my day-to-day work, I find them to be very helpful.

I am trying to improve my full stack development skills, particularly around web development. For a while I was mostly in a business analysis / product design / leadership role, and so I was leaning on other developers to do most of the everyday Rails + JS coding involved in our client work. I’m still able to do that sort of stuff, but I have knowledge gaps that slow me down, and skills I’ve not used in a while that ought to be sharpened.

So this is the combination of things I’ve come up with to address the situation: I’ve shifted my freelance work to projects that are well within my skillset, allowing me to deliver well in a disciplined and skillful way for clients. This helps with my reputation, because I’m not putting other people’s work at risk due to gaps in my own skills. And the lack of pitfalls and challenges in my day to day work has made me feel less encumbered… less worried about how my own mistakes or excess commitments might build pressure around my work.

In parallel, I’ve started making a new web application of my own, using it as a way to practice building a whole product from end to end. I did this a few years ago and it worked out really well for me, so I’m going back down that road to see how it goes. I don’t have a ton of time to work on this project, so I spend 30-60 mins per day on it. It’s slow going, but the one shovel at a time method does work!

I feel like I can only learn by deep immersion. I also feel like I hold myself to very high standards and so I want to be great at something if others are going to depend on me for it. These two things are sometimes in conflict with one another, but the traits I’ve turned into sort of “character goals” have served as a guiding light so far.

This question is super relevant to the project I’m working on every day for just 30-60 minutes. That’s not really enough time to learn and get work done at the same time, so it is almost like a game of ping pong between “Try stuff doing stuff in order to figure out where my knowledge gaps are” and “Learn what I need to in order to get stuff done.”

So as I collect ideas around my project, I tend to work on the things I think I know how to do first, while leaving the more uncertain things piling up. But I also look at how important each feature I might want to add is, or how painful each design flaw or limitation is, and let that influence my decision making.

Eventually when the price of ignorance gets high enough, I set aside dedicated time to learn a particular skill. So for example, I integrated with Google sign in for the first time a few days ago, even though that is something I had put off for a while. It wasn’t nearly as complicated as I thought it was going to be, but it helped to think in terms of it being a “Practice session” rather than a “TODO List Item” as I worked on it. It helped me be more patient as I worked, and also to take better notes.

To sum it up, if you’re setting goals… it’s a good idea to separate learning goals from production goals. They feed into each other, but the way we think when we want to accomplish a certain outcome is different than the way we think when we want to gain a certain capability. By being intentional about how you set your expectations around each, it is less stressful and leads to less disappointment.

Also, critically important is the idea of not looking at the whole universe of “cool stuff you can learn” in technology because that’s infinite. Instead, look at what you want to work on “kinda soon” and then start to identify specific things you can learn that will help make your job easier. This framework of “In order to build Thing X, I will need to learn Topic Y”, and in reverse, “If I learn Topic Y, I’ll finally be able to build Thing X” is a very useful for identifying and prioritizing your goals, if you can be disciplined about it.

As far as code-specific goals, I’m basically focusing on mastering the various skills and sub-skills that are needed to build fairly complicated Rails 5.1 applications from end-to-end. I have worked with Rails since before its 1.0 release, but a great deal of my programming work has been on business problems where the user interface might be a report, or a simple form which then feeds into some very complicated logic on the backend. I’m trying now to learn what it takes to build more interactive and complex user interfaces… things that require more than a few tables and charts and Bootstrap.

This almost certainly means learning React+Redux, and also learning some more about developing applications for the mobile web. Where in the past I leaned on other team members to do this sort of work, I now feel the need to develop at least a decent foundation for myself.

I’m also looking at possibly building a customer-facing application, which is a fundamentally different challenge to what I’m used to… most of the things I’ve built are business tools that are used by relatively small numbers of people with some very specific domain expertise. Building applications for the uncontrolled, open, diverse world that is the web… is going to be a different experience. I know a bit about the challenges that are faced in consumer applications from consulting work I’ve done, but taking direct responsibility for those things will be a new experience for me.

Staying off of Twitter most of the time is kinda lonely! To help me out, please either subscribe to this blog (see the sidebar for a signup form), or drop a question in my Ask Me Anything repository on Github.

I’d love to answer whatever questions you have around career development as a software developer… that’s something I know a fair bit about and the topic is always interesting to me. For an example, see this response about What I Wish I Knew When I Started My Career.