Passion isn't Enough

Photo by Jefferson Santos on Unsplash

Passion is often talked about in computing as the secret key ingredient in the work that we do. The true power that separates you from the “pretenders”, the newbies that are in it for the money. It has grown louder of late as the field has grown increasingly larger and more diverse. The newbies are often decried as not being “passionate” about programming because they don’t think about it day/night. They’re not spending every spare moment polishing their code late into the night. Heaven forbid they have other interests or priorities.

That’s not what’s most important in the work that we do. I find it often used as a tool for gatekeeping, seeing those who see tech careers as a path to upward mobility as somehow undeserving. As someone who spent most of my youth doing manual labor in agriculture and the service industry, not once was my “passion” ever questioned. Other than at a pep rally for my job at Arby’s, passion was never even mentioned (people get worked up over Beef N’ Cheddars).

But you know what was questioned? My competence and commitment.

Passion is hailed as the thing that will keep you going when thing go sour or as a defense against of burnout.

It’s simply not true.

I started programming when I was 12 but I was burned out on programming a few years ago and needed a break, precisely because my passion allowed my life to get out of balance.

Passion doesn’t imply greater ability either. I went to high school with many passionate basketball players who just weren’t good enough to make the team.

And even after accounting for competence, we often assume passionate people willingly provided what’s needed by the team. There are plenty of talented and passionate running backs that are not committed to picking up the blitz. Similarly, I know many passionate developers uninterested in mentorship, even when the organization sorely needs it. You have to understand what people are specifically passionate about. They may be passionate about “their” code. Passionate developers can often be an impediment to team success, if the passion is self serving.

I live in Mexico and one of my favorite activities is taking early morning walks. I like to see people get ready for the day, watching a city literally wake up before my eyes. All the shop owners, vendors and employees, often getting ready before sunrise, so that people like me can get a coffee or tacos de canasta as we start our day. They have bills to pay and mouths to feed. I have no way to quantify their passion but I’m certain of their competence and commitment because they show up each day without fail. And I’ll take that over passion any day of the week.

Thank You For Your Service

American culture is full of oft repeated expressions of gratitude

“You are a valued customer. We thank you for your patience.”

“Thank you for working overtime on the project”

“Thank You for Your Service”

Is it genuine or simply a stand-in for “better you than me”? 

Is it gratitude or platitude?

What actions are you taking when speaking words of gratitude? 

What compensations are you providing in recognition of service and sacrifice? 

A warm meal.

A place to sleep.

Standing in line for someone so they can rest their legs.

A ride to an appointment.

Help in filling out forms.

A makeup vacation day that can actually be used.

A donation.

Simply taking the time to sit down and listen.

Expressions are cheap. They cost nothing to give. 

Giving is an action. Love is a verb.

What are you prepared to DO to express gratitude?

Cocoa Nomad Podcast: Retrospective #18

In the latest retrospective, I share why I decided to take a loss on selling my house and some tips on keeping yourself financially solvent as a solopreneur

You are extending a line of credit when you start a project. So yeah, it’s a good idea to get them to invest a bit in the beginning. It’s their app after all. 

Eric Wroolie, Overpass Apps

Show Links:

You can listen to the Cocoa Nomad Podcast on the following services:

I’d love to hear from you. Reach out with comments, feedback or show ideas on Twitter or Instagram

The 4 E’s of Meaningful Work

Time and attention are extremely valuable assets and I try to avoid wasting them when selecting projects. By looking at what I like to call The 4 E’s of Meaningful Work, I can maximize the likelihood of a positive outcome. 

I’ve been recently learning  a new approach to mobile app development: using declarative UI instead of the imperative approach that I’ve known and used for years. If you’re not a technical person, don’t worry. Knowing the details of the differences in these two approaches is far less important than how the areas or meaningful work

In talking about the each area, I’ll discuss the benefits, the impact of missing it and how I try to make up the difference. Hopefully, you can use this approach in evaluating the work that you do and improve your decisions about what is worthy your time and attention

Education

This is the most important area for me so it’s where I tend to start. I am far more likely to do something that provides an educational benefit, even if it’s lacking in the other three areas. In learning Declarative UI, I saw the educational benefits  coming in four ways:

Increase of Competence and Confidence

Learning by doing is a great way to improve efficiency and efficacy.  The process may been slow at the beginning but with each new coding challenge and sample project, I get faster and I find my confidence growing as I integrate the new concept into my current body of knowledge.  

Expands Area of Expertise

Having a different approach to develop mobile apps  provides the added benefit of having more perspective on something that in which I already specialize. Of someone has a need, I can now draw from a larger pool of expertise to find the optimal solution. Having more arrows in my quiver means that like Arrow or Hawkeye, I’m more likely to have to right one for any occasion.

Allows You to Stay Current

Because the declarative approach is the “new hotness”, learning how to do it keeps me current and able to engage in what the cool kids are doing. I don’t give this aspect much weight normally, as there will always be another new shiny thing and I can’t afford to invest time and attention in all of them. In this case, I felt it was a good time as I saw a convergence on both major mobile development platforms. Google was further ahead with its Flutter framework by about 2 years but the strong commitment by Apple with SwiftUI means that I can learn simultaneously two solution to the same problem.

Can be really fun

Learning new things not only increase confidence and competence, it can also be fun. Remember the joy of a young child, constantly asking questions and acquiring new information. I’ve been using resources such as Paul Hudson’s 100 Days of Swift. His approach makes the process fun and I’m digesting it in reasonable bytes. Likewise, the The Boring Flutter Show has an great forum that provides a good mix of education and entertainment

Not Reaping the Benefit of Education?

Not every project will be challenging or allow you to acquire new knowledge of skills or use them in a different way. Too much of this can lead to stagnation and burnout. To combat this, push yourself to go beyond the requirements (if time allows). For example, perhaps the project doesn’t require continuous integration or testing but use the project as a testbed (pardon the pun). Because the project isn’t itself isn’t challenging, you’re free to use you mental capital in learning the new thing.

Economic

While I’d love to imagine that I’m above it, in a world of financial realities, it’s hard to ignore to ignore the economic impact of the work that we do. Deciding to take on this endeavor is no different. There’s an opportunity cost in engaging, you could be reaping financial benefits by doing something else. I’m still doing this because I believe there will be a future economic benefits via client work such as:

Keeps the Lights On

Two of my favorite activities are sleeping indoors and eating. I enjoy them so much, I try to do them daily. Receiving payment for my development efforts allow me to continue doing more work, even if it’s not in luxury. Tacos are cheap but they aren’t free

Creates Runway

Having a financial buffer also creates runway, time in which I can survive financially if my income and expenses remain constant. The more runway I have, the more I’m able to invest in future projects and improvements on existing ones.  As Walt Disney once said, “’We don’t make movies to make money. We make money to make more movies.’

Support Meaningful Endeavors

In addition to keeping my own business and life going, I like to support others who are doing meaningful work. As my economic benefits increase, so does my ability to support them. Some personal examples for me include Black Girls Code and The Human Utility.

Provides a quantifiable measure of value. 

Even though I’m not working on any paid projects using declarative UI frameworks, I can use the current projects to gauge levels of effort when estimating future project costs. In addition, I am able to create reusable components and gain experience which allow me to provide  a better level of service to my clients.

Not Reaping Economic Benefits?

This can be a pro-bono or open source project that you’re working on. It could be a project in which the client didn’t pay or simply an app that you love but hasn’t generated any sales. Take the learning from this project and try to monetize it in other ways.

Exposure

This factor is a hot button amongst creatives. We are often approached to do unpaid work as a way of gaining exposure. I would caution anyone who has heard this to consider a few things. Firstly, reread the previous section. Secondly, paid opportunities also provide exposure  in addition  to the money (Imagine that!). Whether paid or not though, exposure provides benefits:

Offers Social Proof

If a tree falls in a forest and no one is around to hear it, does it make a sound? Of course it does, that’s how sound works but who will know? Gaining exposure allows that noise to be heard and validate that it indeed happened.

Builds trust

Publishing work allows you to establish trust with others. By sampling your work, others can gain confidence that you know not only what you’re talking about but what you’re doing as well.

Increases Marketability

Taking on new challenges can make you more marketable. As previously mentioned, staying current with new technologies has educational value but applying those new skills to help those who need it has a multiplying effort. It’s here that we can see the junction of the Education, Economic and Exposure aspects.  There’s one more coming but first:

Not Getting Exposure?

 We live in an age where the democratization of information and access to it provide you  a greater degree of control over how much exposure you can receive. Toot Your Own Horn! Post what you’ve done on your website, blog, podcast and/or video channel. Even if client work is of a sensitive nature (under NDA or classified), there may still be lessons drawn from it that you can migrate into something that can be shared. Talk about the concepts, challenges and solutions in abstract terms.

Esteem 

Human beings are emotional creatures so decisions are not typically made based on tangible factors alone. Self actualization and  esteem are at the top of Mazlow’s Hierarchy of Needs. In addition to the other benefits mentioned, how we feel about ourselves and the work we do is important. It provides benefits such as :

Higher Quality of Work

When we are passionate and enthusiastic about our work, it shows. It’s so much easier to go the extra mile when you are fully invested in what you’re doing. I do caution that passion should not be a substitute for a strong work ethic. Keep your word and do what you say you’ll do.

It Feels Good

Work that we enjoy is less arduous even if it’s hard. As the saying goes, “Time flies when you’re having fun”. 

Not Getting Esteem?

Soul sucking projects are harmful in the long term. Taking on projects that compromise your values can take a toll and doing them is a difficult decision. However, more often than not, it’s not that the work is compromising, it’s just boring. To combat this, it can be helpful to tweak your outlook on these projects.  Find an interesting angle that you do find interesting. It could mean taking a broader view of the project find connection points between it and things that you are passionate about.

Conclusion

Choosing where to allocate your time and attention is as important as the work you do. I hope you find this guided approach useful in your own decision making. I talk in more detail about my process on The Cocoa Nomad Podcast. Feel free to tune in and get more insight and examples.

How do you decide on which projects are worth your time and attention?

Cocoa Nomad Podcast: Retrospective #17

In the latest retrospective, I dive into my transition to writing and teaching, the importance of giving to others, why I needed to cut back on my commitments and the importance of finding a supportive community.

Show Links:

You can listen to the Cocoa Nomad Podcast on the following services:

I’d love to hear from you. Reach out with comments, feedback or show ideas on Twitter or Instagram

Cocoa Nomad Podcast #34: Workflow Mastery

In the same way that a new business needs to have a strong handle on cash flow, a new remote worker has to develop a mastery over their workflow. In this episode I talk about how time/attention management, effective communication and having an accountability/feedback structure can lead to a productive remote working environment for you and your team.

Show Links:

You can listen to the Cocoa Nomad Podcast on the following services:

I’d love to hear from you. Reach out with comments, feedback or show ideas on Twitter or Instagram

Featured on Remote Working Hub

In the same way that a new business needs to have a strong handle on cash flow, a new remote worker has to develop a mastery over workflow. This includes time/attention management, effective communication and having an accountability/feedback structure.

I’m excited to be featured on Remote Working Hub!!! It was a great opportunity to talk about the importance of communication and accountability processes in distributed teams. #remotework #distributedteams #communication #accountability

The Cocoa Nomad Podcast #32: Comfort vs Safety

“We may not be perfect.., but the safest hands are still our own”.

– Steve Rogers  (Captain America: Civil War)

In this episode, I explore the question: “Are you doing what’s safe or what’s comfortable?” and how that question has impacted my choices of the past 4 years.

Many of us have embraced ideas passed down from previous generations that promised to provide comfort and safety. In the last 10 years, we’ve seen how the disruption in our financial and social systems has affected those notions.

GWTA Flutter Project (1st 8 Hours)

As part of my embracing of cross-platform, I’ve taken some time this weekend to port my iOS transit app, GWTA, from native iOS (Swift) to Flutter. My goal is to get a sense of the differences in the approaches using the simplest app I have.

I’ve included some breakdowns of the things that I did along with the approximate time it took to complete.

Project Management Tools (25 minutes)

This should be a simple sprint 😉
  • Screenshots (what you’re building) – these were taken from the iOS Apps
  • Trello Board –  I duplicated the stories (cards) in the iOS version and moved them into a separate list

Environment Setup (155 minutes)

  • Install Flutter
  • Install iOS Simulator
  • Install Android Simulator
  • Install Visual Studio
  • Install Android Studio
  • flutter doctor – check that everything is installed correctly
    • Issues:
      • had trouble locating the Flutter SDK but Android Studio downloaded and installed without issue, allowing it to be seen by Visual Studio
      • Having a later version of Cocoapods displays a warning in flutter doctor
      • for new project, I had to run sudo gem install cocoapods I wonder if I have to do this for every project
      • multiDexEnabled true in app/build.gradle
      • DON’T manually edit the Podfile. Flutter will handle it.

Where Do I Start?

After setting up the development environment, where should I start with the development process? I have a clear idea of the screens that I need as well as the data I want to display.  I decided to take a top down approach and start with the bus routes themselves. I’m going to scaffold out the main screens of the app and fill in the UI as I go.

Screens

  • Route List
  • Route Stop Detail
  • Route Schedule
  • GWTA Information

The first fork in the road was after finishing the basic tooling and app setup, I could display sample data but I wouldn’t get much further without the actual bus route stop information. I had a choice of building out the UI with small sample data sets or setting up the actual route data on the backend. Gravitation towards my backend dev tendencies and to ease my earlier tooling frustrations, I opted for the latter. I knew I would have to eat the Cloud Firestore frog eventually and was hoarse from yelling at VS Code/ Android Studio and I wanted to move forward.

Backend (210 Minutes)

The iOS version has a static list of data. I’d like to move that route data into Firebase to make it accessible to both platforms and update when necessary. In reality, the route information doesn’t change very often but having it located here will prevent me from having to release a new version of the app when/if it does.

Setup/Install Cloud FireStore (25 Minutes)

I’m tempted to start with the Firebase (Cloud FireStore) implementation and have the app download the route and stop information but I’ve had so many bad hackathon experiences starting with the data that I’m a little gun shy.

Create FireStore Models (75 minutes)

One of the challenges I had in the previous version was that some stops are on multiple routes (e.g. The Transfer Center) so I duplicated the stop data for each route. It would be nice if I could represent that a stop was in on multiple routes using the colors, similar to what I’ve seen on transit systems around the world.

  • Create Routes in Firestore
  • Create Route Stops in Firestore

ETL Process for Stops ( 145 minutes)

Extracting stop data from native iOS app  => spreadsheet and converting to JSON to import into Cloud Firestore 

Results

Hello World!

Ironically, I don’t have much front-end progress to show after 8 hours but the route data is loading from Cloud Firestore and I have successfully imported the stop data multiple times (testing the ETL process).  I’ll chalk it up to beginner’s luck. I expect better from the next 8 hours with the focus on UI/UX.  I’m certain there’ll be a few more headaches and roadblocks as I learn more.

Next 8 hours

Add Map UI 

One of my bigger disappointments with the existing iOS app is that it doesn’t make great use of maps. I’d like to show users the closest stops to their current location along with the next arrival time. 

Cloud Firestore Functions

The ETL process doesn’t create the needed geopoint type needed to represent each stop’s location on a map so I will add a trigger to create the field when a new document (stop) is created.

Add Schedule Info UI and Backend Data

The buses runs on different schedules on weekdays versus weekends and I want to display the next arrival time for each bus. 

Add GWTA Information UI

These screens will probably remain simple webviews that link to the information on the GWTA website. I