Navigating a Challenge

I notice that I have been approaching this blog as too “meta” and not providing more concrete examples from my day-to-day. After reviewing these past posts, I see myself behaving like an autobiographical writer who has been there, done that, and is now imparting those lessons to the next generation. I am most definitely not a writer and still have tons to learn about being a productive SWE. Case in point: this week. My quarter has picked up in terms of business (am taking Capstone + Mobile App Development), and am now experiencing the challenge of deadlines.

All of those feelings I talked about in previous posts resulted from having the free time to try and reason/philosophize/generalize my experience. Turns out when things need to get done, feelings sometimes have to take a backseat. If you are anything like me, you have a past, or currently still do, of procrastinating work or having trouble getting started. Here are some practical, actionable steps I am taking to get things done this week that put me on track and I hope this helps you as well!

My Challenge

Our team’s Capstone project has been a conversational bot and tab interface for Microsoft Teams that are packaged as an installable Teams app. My task this week is to instantiate a small front-end table that allows an instructor to enter an office hours schedule – this front-end is what is loaded within a <iframe> by MS Teams when accessing the tab portion of the installed app. In basic HTML, tables are pretty easy, and my challenge does not come from the table itself, but the technology being used to make it happen. This is my first time working with TypeScript and React/JSX and the real challenge is managing the learning curve of getting this table (a form that will take a schedule as input that will be passed to the backend via a form) implemented unfamiliar technologies while meeting a deadline. My initial response to this included feeling incompetent and slow to make progress as learning becomes a grind when starting with something new. I don’t want to let the team down and I also don’t want to look dumb!

My Action Plan:

These are current steps I am taking while chipping away at this task and helped me get started on the task in the face of feelings of analysis-paralysis, incompetence, and stress.

  • Chunk things down. This helps manage incompetence felt when approaching something that is beyond my current scope of knowledge. Just like a piece of pseudocode or the idea of breaking a large function down into multiple functions that carry out a single task, breaking things down to their most basic steps brings clarity. Steps I did the other day to try and see how a React app, TSX, and MS Teams Tab works together were: first explore the boilerplate app and try to point out where my code would possibly go, then make a “hello world” change, then build a basic table from html only, then see and try to replace this table using React/TSX. I am currently working on the “replace a table using React/TSX” step – yesterday I took a code snippet from documentation and am now trying to modify it for this situation. Should this work, I will have learned a lot about this new-to-me technology completing this task. Listing out some of these steps (I prefer writing it out on paper/pen in a notebook) made me realize that I can actually achieve many of these things without having to master TypeScript or React beforehand. Crossing a couple items from the list builds confidence, which can snowball in size after more of the list gets achieved. Enjoy the dopamine that comes with crossing items off a list.
  • Just get started. I can spend a lot of time thinking about how this application should go, what I would do, envision some solution in my head. Even writing the steps down like in the previous point can ultimately be fruitless without actually completing the to-do list. Occassional clarity on the simplicity of a task in the past has resulted in thinking, “Oh, I know this, therefore I can put this off and do something more fun”. No! Just start typing, just get started. Like running, it always sucks for the first 15 minutes as the body warms/loosens up. Same for the brain when starting. You and I have 15 minutes of willpower within us. After starting for 15 minutes, I usually start to engage with my work and working towards the to-do list. The stress is there, but I feel better because I am actually taking action. When action is not taken, the stress lingers and begins to grow.
  • Go with the flow. After having started, if you are in the zone and making quick progress, try to continue to do so. I find myself attempting to make a bunch of excuses to get up and away from the desk for what I think is a break, but after applying some awareness I realize that really I just want a distraction (the brain is saying “Ah, look at what we have done, this deserves rummaging through the pantry and checking the phone!”). Sometimes I get into the zone in the evening, and I am learning to let go of abruptly calling it a night to reasonably push foward (not beyond exhaustion where the brain turns to mush). Counterintuitive, but this helps rather than harshly stopping and attempting to resume the next day.

Results

These three steps have gotten me started, and while I haven’t finished this front-end yet, I have quickly gained confidence in my ability to see this task through completion by the deadline – moving away from a state of overwhelm and incompetence removes a big blocker. Another cool benefit is that I have now wet my feet with new technologies of TypeScript and React that I can add to my skillset when solving technical problems. This is part of the “learning how to learn” process that I wish I had learned earlier, but am grateful for learning now. Should you find yourself getting stuck on a problem that is either unfamiliar/new or just having trouble getting started, employing some of these steps can get you moving in a better direction. Let me know how it works out for you, or if you have advice for me as I am always looking for a way to improve. Best of luck!

Leave a comment

Your email address will not be published. Required fields are marked *