I have to come clean about my project

I have something to tell you and come clean about. I haven’t touched my beloved dailyvibes code base since April. And if I am being completely honest, I kind of lost steam in March. (To give you some context, I started thinking about the project in October and working on it last November. Since November I tried to ship something every 2 weeks.)

Everything was fine until about March. In March, I felt that I did not like where I was going, I was having a bad time, and I was losing project’s direction. I even had thoughts of abandoning it.

I also knew that my app was stable enough for people to use. Thus, if I was about to abandon my work then at least people would not lose their data. These thoughts allowed me to slow down and to reflect. Afterall, I still care about the project.

you're going to have a bad time image

Whenever I start thinking this way about a project, I become aware that it is a good time to step back and reflect. In other words, it is a good time to see if my time is worth investing into a project.

To start, I wanted to figure out what was causing me to feel this way. I narrowed it down to the following three issues:

1. I was facing technical issues.

subject to technical issues - free image from https://pixabay.com/en/problem-technical-issues-technology-1951987/

As I work solo, I did not want to spend my limited time on things that do not move the project forward (in the users eyes). But, it got to a point where I needed to eat that frog. It is one of the challenges that comes with indie work. You wear many hats. You are playing the role of a product manager and have to decide on what to work on. Sometimes you have to do the work that you do not want to.

2. I was not happy with the direction of the project.

lost found searching - image from https://pixabay.com/en/lost-found-lost-and-found-searching-1605501/

At the beginning of the project, I needed to do some market research. I needed to check if this project was worth my interest and time. How did I do my market research? Well, it was very simple. I downloaded all the productivity / todo apps from the Apple App Store and I played with each one of them. I noted down ideas that I liked and things that I did not like. But, by doing that, my phone looks like this now:

my ios screen

After playing with each app, I’ve come to realize that most of the apps do the same thing.

What this means to the users is that they have a lot of choice in this saturated category of productivity. In otherwords, they can switch from my product much easier.

What this means to me is that I don’t need to stress on competing. I was aligning dailyvibes with other similar apps. This process made me bored and stopped using the app. Dailyvibes started because I was not happy of the solutions. Instead I will focus on building features that will be useful to the end user and to me. I will focus on the product and its quality.

So I took a step back and recorded the actions that I do every day. I interact with the following data structures: tasks to complete today, notes/text snippets, links/bookmarks, gifs / images and photos. One thing that kind of doesn’t fit is positive thoughts / quotes. I need to think some on this.

So I will work on integrating these things into dailyvibes and thus forcing me to dogfood my own app. What will make all these things work together is some kind of linking mechanism. I will definitely polish this as time moves on.

After all, users have so much choice.

3. I did not know what direction Apple will take Mac OS apps in.

marzipan rumours

The next biggest feature for dailyvibes is to create a server component. Which will be then followed by a syncing mechanism of some sort between the server and iOS app. Both of these components, would position me well to create either a a desktop companion app or a web app. I chose to wait until June to make this decision because of WWDC.

I could not decide if I wanted to leverage the iCloud ecosystem and have apple do all the legwork or me. I’ve investigated both options. I decided to roll out my own for three reasons:

  1. I know how,
  2. I want to practice for my personal project, and
  3. I want to have control over my data.

I hope that these decisions will also benefit the users.

I also could not decide if I wanted to spend time on a native Mac desktop app or on a web app. I am familiar with web but I am very new to the Mac. I investigated both options. I am deciding, at least for now, to focus on the web app component because I am more familiar with that. Plus, Apple admitted that there will be changes to Mac OS next year. I’ll revisit native Mac app next year.


It is nice to step back and reflect on how far you’ve come with a project. It is good to be mindful. Albeit, I will be first to admit that it is challenging to talk about your project when it is not going as you expect. I am, once again excited, to keep working on the project and I have a better vision moving forward.

This is a nice feeling when you are happy with your decisions. Also, the organic discovery isn’t that bad either:

Q1 results Q2 results

If you’re making something, you have to be the first to believe in success of your thing. Do one thing every day that moves the project forward. Everything else will [hopefully] work itself out.

Thanks for reading and until next time,

Alex

PS: You can download Daily Vibes by searching using your favorite iOS device on Apple App Store or from https://dailyvibes.ca.

Unless otherwise mentioned in the post, those projects are side projects which I work on on weekends and evenings, and are not affiliated with my work or employer.

Tags: software development, software engineering, doubt, mindful   |   Report a bug via Twitter

Would you let your mother use your software?

Would you let your mother use your software?

Oh and I am not trying to single anyone out in this photo btw

How about your father? sister? brother? wife? husband? fiancé? grandparents? neighbour?

And I can immediate hear some of you say:

  • But Alex … you would say …
  • … they would never use my software… they are not my target audience
  • Or… I would teach them how to use my software properly.
  • Or… I would never let them use it.

To you, my dear friend, I would ask that you play along with me in this exercise.

Suppose that the use of your software became mandatory. Suppose your friend or family member had no help or training from you. Suppose they were that user number #1110101 that you did not want to deal with. Take your pick.

Are you following along?

If you are following, at what I am trying to say here, then I hope you can answer yes to my original question with some degree of confidence.

And no… you cannot use the typical engineering answer of “it depends”. Sorry, I want a binary response here: yes or no.

So, if your answer is a no then I hope that you might start thinking about these important issues. For example, you could start thinking about why are you leaning towards no? Perhaps, what can you do today to increase your level of confidence? Because you can.

Do you call yourself a scientist or an engineer? Do you have some variation of this title? Are you proud to call yourself that? Does it define who you are on a day-to-day basis? If so then you must think about ethics. It is your duty.

But maybe this belief is naive? Maybe this is not how it works in the real world? Maybe being associated with those things is not enough for such heavy consideration? Maybe we should leave ethics to someone else? We make software to solve some problem and that’s that.

Too often I see the answer that it is not applicable to me or my work. Too often I see ambivalence and lack of professional care. To me, this cannot be the winning formula moving forward.

If you’ve been following software development for the past few years, then you’ve noticed a certain trend by now. A trend of malpractice if you will. Followed by a trend of acceptance or standardization towards such malpractice. And if you dig a little deeper into these trends — they are often, but not always, connected to some lapse in ethics.

And if you’re of the mind that ethics and business [and software] cannot mix — I call for you to reconsider and have a conversation. I hope the pressure of shareholders and funding money does not blind your mission or your vision. Try to figure it out.

  • Just because you can do something, should you?
  • If you should, then how can you do so while being ethical?
  • If you cannot remain ethical, then the least you can do is own it. Don’t deny it. You are a professional, aren’t you?

Perhaps our approach to ethics needs a pivot?

  • Maybe ethics, as a field, is too broad of a topic? Too abstract and not applicable?
  • Maybe, it is time to reframe our delivery on ethics?
  • Time to step back and reduce the scope so that we can understand better?

So here is me — trying to do that for you. Next time you are working on software just give it a shot and ask yourself this relatable question:

would you let your _ use your software?

I’ll let you fill in the blank. Don’t be lazy and do make it relatable.

Think about it because your answer should be yes with some level of confidence. It is 2018 and I am trying to take a gradual approach to this topic.

We are use a lot of software every single day.

And guess what?

It is only the beginning.

Just wait until the entire planet, and everyone on it, gets a reliable high speed connection. It is not if but when.

Thank you for reading.

Sincerely,

Alex

PS: I know that I am throwing generalities and I hope you can forgive me for the point that I am trying to illustrate.

PPS: Sorry for the clickbait title — but how else am I going to get you to read about software ethics? Not trying to single out mothers or family members or friends. I am trying to make a point that you should make your work relatable. Think about your end user. There is an actual person sitting on the other side of your code. And guess what? This person is trusting you and your code.

This article was originally published here in April 2018

Unless otherwise mentioned in the post, those projects are side projects which I work on on weekends and evenings, and are not affiliated with my work or employer.

Tags: software development, software engineering   |   Report a bug via Twitter

How to make perfect iOS screenshots with a clean status bar in 2018

Image for the post

Hi friends,

Before we begin

Before I begin, I am assuming you are already running your UITests using fastlane.tools. If not, I would suggest that you get yourself familiarized here. It saves you lots of time and it is especially indispensable for solo developers like myself.

What is this article about?

This article is about improving your iOS marketing material: the screenshots.

So, we will go from this:

Starting point

to this:

Goal of this article

We will be using fastlane.tools in combination with SimulatorStatusMagic library. SimulatorStatusMagic is used to create the perfect status bar:

  • 9:41 AM is displayed for the time
  • The battery is full and shows 100%
  • On iPhone: The carrier text is removed, 5 bars of cellular signal and full WiFi bars are displayed.
  • On iPad: The carrier text is set to “iPad” and full WiFi bars are displayed.

The text above is taken verbatim from the library’s description.

Why would you want to do that?

Well, such attention to detail adds extra value to your product by making your marketing material that much better than your competition. If you take a second to scan the Apple App store, the top apps provide some level of consistency in their marketing material. It follows, you should work towards achieving a similar level of consistency because it is not really not that hard. And if you set this up once, it will work.

So, I wanted to the improve the screenshots that I use to market Daily Vibes in my next update.

What did I try?

Installed SimulatorStatusMagic using cocoapods by adding the following line to my Podfile, like this:

pod 'SimulatorStatusMagic', :configurations => ['Debug']

Next, I found the following two articles and they gave me good starting points. They were perfect for me because I wanted to use flags in my code like this:

How I wanted to import the library

This would allow me to only import SimulatorStatusMagic during fastlane.tools run.

And, I also envisioned using this one flag throughout other areas of the code.

What I envisioned

So… putting it all together, I wanted something like this:

How I wanted fastlane.tools and SimulatorStatusMagic to work

But, I could not get it to run exactly like that 😭

I really wanted to get this to work. However, as a result of these issues you need some tweaking in 2018.

So what is my curent solution?

  1. import SimulatorStatusMagic
  2. leverage snapshot’s launch arguments - FASTLANE_SNAPSHOT is set to true
  3. call in code as you wanted
    if NSUserDefaults.standardUserDefaults().boolForKey("FASTLANE_SNAPSHOT") {
    ...
      SDStatusBarManager.sharedInstance().enableOverrides()
      setupScreenshotData()
    ...
    }
    

And the code above works … but I will be first to admit that it is not the perfect solution.

As it is currently written, you will need to play the commenting game:

  • comment out import SimulatorStatusMagic and
  • comment out SDStatusBarManager.sharedInstance().enableOverrides()

during regular development and do the reverse during fastlane.tools run.

So… during regular development:

What you have to do during regular development

and … during fastlane.tools run:

What you have to do during fastlane.tools run

As I am familiar with Ruby and Swift, and can get by with Objective-C, I tried to make it work how I wanted and find the source of confusion. I did look at the xcodebuild arguments and scanned fastlane.tools source code up to here. But, since there is only so much time in the day and I work on this during my free time - I did not narrow down the problem.

So if you have a different solution that allows me to run the code how I wanted, please reach out to me via twitter. I will gladly adjust this article to incorporate those changes.

Otherwise, I hope that you enjoy this working solution. I was puzzled during my research in 2018 and I did not see a solution so hopefully this helps someone in upping their screenshot game.

Thanks for reading,

Alex

Note: This article was also published on LinkedIn

Unless otherwise mentioned in the post, those projects are side projects which I work on on weekends and evenings, and are not affiliated with my work or employer.

Tags: software development, software engineering, tutorial   |   Report a bug via Twitter

Improving iOS performance with Xcode and Instruments for dummies

Image for the post

Hi friend, is your app running a bit slow? Are you, perhaps, unsure what to do about it? Where do you start to investigate? Perhaps, like me, you started searching 🕵️‍️ in your code for something evident? (Only to realize that you are going down a never ending rabbit hole?)

Well, stress not my friend because Xcode got you covered ✅ and it will help you find your issues (or put you on the right track at least).

This is a second article that I am writing about an Integrated Development Environment (IDE). The more that I use Xcode, the more I like it 😎 Xcode is really, really awesome. Just give it a try and use it.

Side note: it only took me 182 hours to get to the Instruments panel.

I’m actually really surprised at the amount of tooling that is given to you in this wonderful IDE. My software engineering training gave me my introduction to IDEs via Eclipse and NetBeans. I’ve spent years using those tools (and don’t get me wrong, they are powerful). But to be completely honest, to this day I will pick anything else but these two. They are ugly, clunky, and not intuitive 🌶

Why did I type that paragraph above?

Because if you have an aversion to IDEs and think that Xcode looks just like the other IDEs, then I am here to tell you that it really is not. Xcode IS a pleasure to use and I use it every day. (PS: If you are getting angry while reading this and saying !?Xcode sucks!? Don’t get so upset. I will admit, it is not perfect.)

Instruments

It is this powerful thingy, built on top of DTrace, that comes with Xcode. No need to install extra software. Just download Xcode once and you have everything you need. Don’t have internet connection or you don’t want to be connected? No worries, you can still DO your work.

Oh yeah… I used this wonderful youtube video to get an introduction to Instruments. Apple ofcourse has their own documentation which you can get here.

The following text is basically my brief overview of Instruments.

When you open Instruments, it looks like this:

Xcode Instruments

You can launch Instruments like this:

Opening Xcode instruments open

Or like this:

Opening Xcode Instruments

(I didn’t want to leave you waiting while my slow computer takes its time to compile and open up… but you get the idea)

What you do next is kind of interesting. All of the icons that you see above represent the different kinds of tool that you can run on your application. (I think of this screen as a collection of apps for your app). Hopefully you will understand why I say on your application.

Out of all of the available options, I’ve only gotten familiar with Activity Monitor, Allocations, Leaks, and Time Profiler. Oh yes, not only are these tools wonderful but the naming conventions are intuitive and grouped by colour. Amazing.

Activity Monitor and Time Profiler are in blue. These blue thingys are used to monitor CPU stuffs.

Allocations and Leaks are in orange. These orange thingys are used to monitor memory stuff. (Guess what this other orange Zombies thingy looks at? Did you guess RAM stuffs? Cool right!!!)

You might be wondering to yourself… all of these thingsys are cool sounding, so what? What do I do with them? Well the cool thing about these thingys is that you can just JUMP in and you will figure things out as you go. It is that easy.

I suggest that you play with the other tools available. I am going to focus on the Time Profiler for the rest of this article. At this point in the learning, I found it to be the most useful for me.

Time Profiler - I’ve been using this for…profiling… time? 🤷‍ Basically, I open it up and it looks like this:

Time Profiler in Xcode

You might be asking, now what? How about we hit that big Red Record button ⏺ ? Yup, and it will look like this:

Time Profiler after hitting record button in Xcode

Now what? 🤔

Now you use your app! What Instruments, or should I say Time Profiler, does in the background is it samples your environment… Time Profiler records what it sees your app is doing during a specific time interval. Makes sense?

And if you have ever used software that has some kind of manipulation of a timeline, then you will be just fine.

So this is a snapshot of how your app behaves, or its environment: Time Profiler Sample in Xcode

time profiler records many such samples at a regular interval over time: Time Profiler time line in Xcode

until you press the stop button ofcourse: Time Profiler from start to stop in Xcode

Now what? 🤔

Now you get to take off your developer hat 🎩 and play a detective 🕵️‍ … for real… how cool is that?

Since we are exploring the Timing Profiler, we are interesting in timing. You can open up (expand) the tree, that Xcode conveniently made for you, and go exploring 🗺. See which areas or which methods in your code take a long time. It very simple. Just click expand ⏬ and dive 🏊‍ in: Start exploring Time Profiler in Xcode

Don’t know where to start? Try this:

  1. Click record
  2. Play with you app as regular user (try various uses case)
  3. Stop the recording
  4. And then… you can filter specific time intervals!! How cool is that?!?!?!

Here is an example of me recording as I create a new to-do in dailyvibes and then filtering various time intervals. You can really isolate the various time intervals, like so:

Example of using Time Profiler in Xcode

As you can see, to filter you simple Click and Drag on the timeline… just like any other application with a timeline. It is just that simple. And, when you filter, if you notice, the tree changes. Thus you can really get into the nitty gritty details and find out your problems 🚧.

Oh, and… and… and you can SAVE this sampling and come back to it later: Saving Time Profiler in Xcode

Here is an actual example of me diving deep into the tree 🌲. When you find something juicy, like this: Example of Time Profiler in Xcode

You can… double click on the method, and it will show you EXACTLY which lines 👀 of code that may be troubling: Double clicking on a method in Time Profiler in Xcode

Conclusion

There you have it friends. I’d like you to take away three things from this:

  • Xcode is pretty awesome 🔥
  • Be a digital detective 🕵️‍ and give Instruments a try
  • Be careful ❌ of premature optimization

If you liked this, please let me know. I like hearing feedback so I can improve. You can find me on twitters.

Until next time,

Alex

PS: I hope I did not offend you with the *for dummies tagline. I love technical documents but I feel like they need a bit of flavour sometimes. I simply want this technical mumbo-jumbo to feel relatable and friendly.

Update: This article was also posted on medium

Unless otherwise mentioned in the post, those projects are side projects which I work on on weekends and evenings, and are not affiliated with my work or employer.

Tags: software development, software engineering, tutorial   |   Report a bug via Twitter