Clear Vision, Not So Clear (or.. The User Is Me)
Tags: ios, design, database, beginners
Published: 2024-03-27 15:15:57

## Weekly Updates?
I began on DEV with the intention to "learn in public," but I tend to want to put everything about something into one article, and I get a bit bogged down. So I'm challenging myself to set a timer and put out something short but meaningful once per week. In that spirit...

## My Current Project
I've been learning SwiftData lately in Paul Hudson's [100DaysOfSwiftUI](https://www.hackingwithswift.com/100/swiftui). SwiftData is the new version of Apple's CoreData API for persisting data in a database-like structure. Compared with CoreData, SwiftData seems like a walk in the park; many functions that previously took a bunch of opaque, wacky code now only take a single line of opaque, wacky code! 

Anyhow, this seemed the right time to tackle an app from my wishlist which requires database capabilities. My new project is called "iWeek" for now, and it's my version of a fancy to-do list. Everybody's got one of those, right?

## How It Started
This will be my dream app for organizing my week in a simple way that makes sense to how I work. So I had a very clear vision for it. I knew what I wanted it to look like and how it should function. I made some quick sketches on paper and dove into the code feeling confident I could knock this thing out in a day or two.

## How It's Going
First I had to deal with some scary purple triangles - those are xCode's warnings that something you've done is very wrong - with unhelpful error descriptions that kept me running in circles for a couple of days.

Once I figured that out (my errors were actually fairly trivial; the messages just had me looking in the wrong places!), I spent a couple of days creating a list view and an edit view. Some of the app's core behaviors are now working wonderfully. 

However, this morning I started thinking about how to complete the functionality required for my MVP (Minimum Viable Product). And... I'm feeling a bit bogged down. 

When the user adds or edits an item, are they adding or editing the item or the item type? Should it change that item for the current day, or for every future Wednesday? How can they easily update time spent on the item? How can I allow the user access to the various types of changes they might want to make? When you touch an item on the screen, what will be the response? If there are three different things the user might want to do, how can I make those accessible in an intuitive way? 

As you can see, what started as a clear vision has become bogged down in details.

## Clear Vision, Not So Clear!
I'm sure I'm not the first person to ever fool themselves into thinking they knew what they were trying to build. It's like waking from a vivid dream. I thought I had a solid sense of this app, but now all the details have muddled together into a pool of nonsense. 
 
If I poke it with a stick, my "clear vision" becomes: "Simple, intuitive to use, guides me through my day. Looks like a list of items for Monday, which I can swipe over to Tuesday, Wednesday, etc." 

I'd call that a clear-ish directive, but it's certainly not the fully-formed blueprint I thought I had in my head. 

I guess what I've discovered is: more thought is required.

## The User Is Me!
I haven't solved it all yet, but thinking about it this morning in the shower, I did gain one helpful insight: The User Is Me!

I've been lost in a maze of "what if"s - what if the user wants to do this; what if the user wants to do that...

Well, the user is me! So I don't really need to wonder. I know how I want this app to behave. I just need to actually imagine myself using it, in high-res detail, and many of my conundrums will clear themselves up. Right?

## ..and Maybe You
If I can make an app I love to use, I'm sure others will as well. So will keep my focus on what I want the app to do for me, and not worry about including every possible option on every screen. 

That's what I've been learning this week. I hope it's helpful to you. Please post a comment!