What is Good Enough?

We all want to know…

What is good enough?

Am I smart enough?

Am I strong enough?

Am I capable enough?

Am I able to do what needs to be done? To achieve the thing I wish to achieve?

I can’t answer that for you.

And I’m not sure anyone really can provide a single concrete answer.

For me in my world – where I like to lift weights – what is “strong enough”? There are strength standards. And more thoughts. And other thoughts. And if you search around, you’ll find even more. But look at their bias. Do they consider sex/gender (because that matters)? Do they consider age? Do they consider capabilities (e.g., someone with one arm)?

It’s good to have some indications like these, because they help us understand what is at least possible. To go from zero to world records, that gives us the continuum of what’s possible in the realm of human capability. But we all know that world records are outliers, people with a particular gift to go along with work ethic and time invested. So still, along that continuum, where can we go?

I know a cop who is a large mammal – almost gorilla-like strength. His physical strength was a huge asset in his job. But then, he couldn’t run a foot pursuit worth a damn. He worked to be able to run well, but lost so much strength. Today he’s found a medium between the two. So do these standards consider context? do they consider situation and need?

My chief profession is a software developer. As an iOS developer, my world is narrow in a sense, but one can go quite deep within it. I see web developers, and the vast choice of technologies and approach one can take is staggering. How many languages, how many platforms, how deep, how broad – what makes one a top developer?

Or how about another part of my world, with defensive pistolcraft.  Karl and I may have spoken and written about “Top 10 Drills”, but when you think about it each one of those is a particular standard. And there are so many more. What makes this one a better standard? Which one really qualifies you as “good enough”?

I was teaching this past weekend, and this topic came up. What is “good enough”? What is “sufficient”? It doesn’t really matter the context in life, it’s a general topic that applies to anything.

And all I could think of as a good and acceptable rule?

Just be better today than you were yesterday.

Get Your Apps Ready for iPhone X

Yesterday Apple announced the iPhone X. Over at the Big Nerd Ranch blog, I wrote about what we iOS developers need to do to get our apps ready for iPhone X.

Urban Decay Vice Lipstick – now available for iPhone

For the past 6+ months I’ve been working on a new iPhone app. Now I can finally talk about it. 🙂

It’s an app for Urban Decay Cosmetics (a division of L’Oreal), to help introduce and promote their new Vice Lipstick line.

You can download the app from the App Store here.

(iPhone only, needs iOS 9 or above, and looks best on larger phones like the iPhone 6, 6s, 6 Plus, or 6s Plus; tho it functions on any iPhone, iPad or iPod Touch that runs iOS 9).

What’s really cool about the app is the virtual “try on” feature, where there’s a live camera that superimposes the lip shades on your lips so you can see what they might look like on you! That particular bit of technology comes from Modiface, who themselves have some apps in the App Store and do some pretty neat facial recognition and morphing stuff. Check them out.

I mention this not only because I’m proud of the work (and learned a lot about the cosmetics industry, which I have a newfound respect for), but I’m hoping to get back to writing more now that I’ve been able to come up for air. You may have noticed (or maybe you haven’t) that my writing has been light the past some months — it’s because of the intensity of this app project. But it’s done, and so I hope to get back to writing more regularly.

Anyways, go check the app out and give it 5-stars 🙂

Swiftly geeky

Been very busy so I’ve been unable to write. Many topics in my head, just need time.

That said, for the geeks here I did just publish an article on “The Joys of Swift – Enums” over at my Hsoi Enterprises LLC blog. Tap/click on over and give it a read.


If programming languages were weapons

If programming languages were weapons.

That brings my two worlds together. Funny stuff, and fairly accurate too. PHP was pretty funny, as was the C# one.

PanemQuotidianum 1.0.3 released

Hsoi Enterprises LLC (my day job, now) has released an update to one of our apps, PanemQuotidianum.

Full details of the update here.

If you’re so inclined, please check it out and share it with others.

Thank you.


Time to do my own thing

Today, I step out to be on my own.

I’m leaving the world of W-2 employment to become a full-time independent software developer. I’m making Hsoi Enterprises my full-time gig.

I’m excited, happy, and yes, scared. But very much looking forward to this.

Why am I doing this?

I’ve primarily worked for someone else all my life. But for over 20 years I’ve done side-project work to help scratch my own itches. Four years ago I got more formal with it when I founded Hsoi Enterprises LLC. So I’ve always been semi-indie, and one could say today’s event is just the next step in the evolution. But certainly my primary income came from being a salaried employee in someone else’s company.

There’s multiple reasons why I’m doing this. I’ll share two: one business, one personal.

My Own Road

Every good work of software starts by scratching a developer’s personal itch.
– Eric S. Raymond

I like to create useful, meaningful software that enriches and improves people’s lives. Throughout my career, things I’ve done on my own usually happened because I had an itch to scratch, a need to satisfy. The best software always is the software that the developers themselves use regularly. But often, the direction of a product is pushed by people that don’t use the software, or care more about selling the software than about the use of and users of that software – this often leads to less than good software (and the users are left unsatisfied). Long ago I came to terms about the balance between “good” and “good enough”, the need to ship even if it’s not perfect because we need to make money to keep the lights on in our ivory tower so we can keep working towards “good” (thanx, Doug!). So I grant all the realities of business. But by the same token, I firmly believe if one writes excellent software, it pays off greater dividends in the long run. This is not only in the form of revenue, but also in reputation and goodwill. Conversely, if one keeps shipping shoddy software, if users are constantly frustrated and hate your product, that just isn’t a solid business model.

I’m tired of compromising on this front. I know you can make good products, have happy customers, and still make money. Look at Apple, which is probably why I’ve been an Mac and iOS guy all my life but also why I believe you can have gorgeous, user-satisfying products, good reputation, and succeed. Look at Liberty Bottleworks. Look at EliteFTS. No, you cannot please everyone, nor should you try. But you can ensure you please yourself, that you hold yourself to high standards, and work to build a solid reputation with satisfied customers.

I want to make awesome software. I want to make more useful things. I want to make people’s lives better. And I won’t get to where I want to be unless I travel my own road.

My Family – Along for the Ride

[I] do not believe in quality time but quantity time. I do thinking creating great memories is important but not as much as “being there”. Because of this I work a lot of strange and odd hours.

– Dave Tate, owner EliteFTS, talking about his kids and who he is

When I was growing up, my Dad wasn’t around much. It was just due to the nature of his job, and his dedication to it. As a kid, I resented this because while it was nice to have money and nice stuff, what I really wanted was my Dad. So of course I did what all kids do regarding their parental shortcomings: swear to do better when I’m a parent! For me, that meant being around for my kids. (BTW, I got over my resentment many many years ago, because I came to understand Dad much better as I got older… but a story for another time).

Early on in my professional software development career, I saw how this was a job that could be worked remotely. This is not a job that requires being on-site; yes there are benefits to being on-site, but it’s not a hard-and-fast requirement. I also saw how due to this fact, you could have a bit of a non-standard life (I’m looking at you, Robin Mair and Greg Dow). This greatly appealed to me, and I set about making full-time remote/telework a hard-requirement for any job I took in the future.

Due to that dedication and focus, I was able to spend 12 years working full-time out of my house. One way I can sum it up is that when Oldest took his first steps, I learned about it via a phone call from Wife. When Daughter took her first steps, I got a phone call. But when Youngest took his first steps, it was right to me because I was home. 🙂 Over those 12 years, I got to be deeply involved with my family on a daily, even hourly, basis. That’s precious to me.

People keep bringing up those death-bed regrets, and no one says they wished they worked more, that they wished they had less time with their family.

See, much of life tends to boil down to two things: time and money. I can always get more money, but I can not get more time. Time is the more precious of the two.

After the 12 years at home, I took a job in an office. I spent 2 years there. It was an educational experience in many regards, and I’m happy I went back for the experience because I learned much from the good and from the bad. But the biggest thing I took from it was that that was not the life for me. The precious time wasted being stuck in traffic every day. The orchestration of life around a time-clock and someone else’s notion of what “productive” meant. It just wasn’t working for me. This isn’t a slight against any employer in specific, it’s regarding that sort of life in general. It is not for me and does not enable me to best satisfy myself and provide for my family that which is most important — me.

Working at home gives me the ability to be around my family all day every day (helped in part because we homeschool). Yes, some people think, as a result of our work/school situation, we live an insular lifestyle. No, we just are a tight family. This work setup, the ability to have a more flexible work schedule, allows me to provide my children what I believe is right and best for them, including mentorship as they embark on their own business ventures. What’s funny to me is I’ve thought about having daily “stand-up meetings” with the family. Yes Dad, your daily asking of “Son, what did you do today that was productive?” has come full circle. 🙂

Yes I know. The life I’m leaving is the life many of us live with. Understand this is a personal preference for the road I wish to journey down. I have friends who prefer working in an office; it’s just not my preference. I have friends that consider commuting to be a useful endeavor; I don’t. I know what my priorities are in life, what I want out of the life I have left on this Earth, including what I wish to provide for my family, and well… tho I’m scared and have no idea how this will work out, I’m closing my eyes and taking the plunge.

What’s Ahead

For the immediate future, it’s about getting established. I have infrastructure to firm up.

I already have some projects to work on, and I actually will  be contracting back with my (now) former day-job for a time and helping them find a replacement for me and transition to that replacement person. For the record, I am thankful for the support and mentorship I’ve received from Lee and Carrie Little, founders and owners of Bar-Z Adventures.

If you or someone (some company) you know is looking for a solid software developer, drop me a line. 🙂

Meantime, I forge ahead. I don’t know how this will work out, and honestly while there’s much about this situation that I’ve done before, there’s much that’s new and novel — I don’t know how it will go, or even if it will wind up being the right road for me to travel. But still, I look forward to the challenges, to the new experiences, and the hope for the life I wish for myself and my family. If nothing else, it’ll be an interesting experience, and I’m thankful for the opportunity.

towards perfection

These days a lot of people see me as a finicky and nit-picking type of person. It’s because when I look at software, I look at it through this ambitious, striving for perfection type of lens that I picked up from Apple. And I hasten to add that I don’t think my products are by any means perfect. It’s the thing about perfection. It’s really hard, probably impossible. But what Apple does is strive for it anyway, even if it’s impossible. I came to respect that attitude very much, to the point that I can no longer relate to people who don’t share that view.

– Daniel Jalkut (emphasis added)

I accept the trade-offs that come in life, and especially in software development. I mean, sometimes you gotta ship if you want to keep the lights on so you can keep working towards that perfection. Besides, rarely do we achieve perfection right out of the box; usually it requires a lot of time, trials, iterations, failures, and effort.

I just don’t like it when people take satisfaction in shoddy, or accept “half-assed” as “good enough”.


UX != NULL && UI != UX && UX > UI

I stumbled upon a great explanation of UX (user experience) vs UI (user interface)

It was Tweeted by Jennifer Aldrich of userexperiencerocks.com. I retweeted, she thanked me, and I responded by saying:

@jma245 You’re welcome. Great explanation that UX != NULL && UI != UX && UX > UI.

For those not fluent in geek, I’ll translate.

People tend to understand the notion of UI (user interface), probably more specifically GUI (graphical user interface). They understand that buttons and menus and things you can click on and tap on, all that pretty stuff on screen — that’s GUI. Or well, that’s UI. But you see, there are more user interfaces than just a graphical one. For instance, some apps have a scripting user interface, that allows a user to interface (!) with the app and drive it with scripts to help make the app do custom things unique to your personal needed workflow. Not to get too geeky, but the point is the user interface are the parts that the user interfaces/interacts with. So, the bike handlebars, the seat, the pedals.

Yes, user interface is important.

But what most people aren’t aware of is that there’s a greater concept: user experience (UX). The UI (or UIs) are part of the user experience, but what’s more important is the experience the user has when using the product. Ever use something that was so awesome you thought it was magical? You kept playing with it merely because there was a sense of awe, of “wow”, of “cool”, of whimsy or whatever. It was just so damn awesome you fell in love and had to show it off to all your friends. Or ever have something that as you used it you found yourself getting slowly frustrated, and next thing you know you’re bashing the thing, screaming, and wanting to throw it across the room?

This is user experience.

Many people do not consider user experience, but the user experience really is the key. It doesn’t matter if your UI is pretty if it sucks to use. Conversely, the UI may be nothing special, but if the experience is awesome, people go forward with it. While we love promoting reason and rationality, in the end we’re human — we are creatures of emotion. Our emotions will drive us, and it is the experience that plays to emotion.

We must acknowledge that UX exists (UX != NULL).

We must be aware that UI and UX are two different things. (UI != UX).

We must strive to make the experience better than the interface, for the interface is merely part of the experience (UX > UI).

Strive to make the UX awesome.

(original posted at the Hsoi Enterprises LLC blog)