An Quick Update on OptimaList

We have been so busy with client work the past few months that we’ve barely had a moment to breathe, much less work on OptimaList.

I did get a little more done around the end of October/beginning of November and the plugin is possible 50% completed.

For the first time since July, I have a little break in my schedule between big projects and I want to get a good amount of work done on OptimaList in the coming weeks.

Feeling Panicked

Did you ever try to start a new company, make a new product, take care of a 2 year old, house, and husband, and do client work while trying to go off two antidepressants and a benzo (so you can add being pregnant and taking care of a baby to all the other things you’re doing)?

Yeah, I don’t recommend it. When I have too much to do, nothing gets done. And getting behind just makes everything worse and panic sets in. Add in drug withdrawal, insomnia, and a sick toddler and you end up with negative energy and even more negative time. Oh, don’t forget my normal chronic illnesses that also eat up my energy.

Nothing has gotten done on OptimaList in the past month and I hate that fact. I’m very aware of how some of you generously donated to help Sarah and I (and now Trisha Salas too!) get going with this. I wanted to have the product out by now. Not maybe 1/3 coded.

I’m grateful though that people believe in us enough to support us. That I do have client work bringing in money. That my toddler is normally healthy and happy. That I have great co-founders to help get this company going.

It’s just hard to remember to focus on the good stuff sometimes.

Why OptimaList is Not Finished Yet

For the sake of transparency, I’m going to talk about why OptimaList is not in beta or finished by now.

There’s lots of external reasons I had no control over, such as a two-year old son and client work and summertime.

But the main reason was me. Oh, I wasn’t procrastinating or anything. I work on it as often as I can.

But I wanted to write the best code. The most perfectly structured and as up-to-date code as possible. Or as possible as it can be with WordPress. I decided to only support PHP 5.3+, although I wish it was 5.4+.

PHP 5.3 means namespaces. I hadn’t been able to use them before so I had to read up on them.

I wanted to use the MVC design pattern. Had to read up on that since it’s been awhile. And on how best to use it in a WordPress plugin.

You know how the internet goes. You read one page and then you end up reading twenty more.

It took awhile for me to set up my models, views, and controllers as I wanted. This was just setting up the file structure and creating the namespaces, setting up the classes. No actual working code.

And then there was the templating system.

What do I have that works right now? A dashboard widget that says “test”. JS and CSS files that load but are empty. Two custom post types. An OptimaList menu item. Several metaboxes on the add new list page that are just blank or have one test form field.

Let me talk about the metaboxes for a minute. I’m not using CMB2 or anything because I don’t want to depend on others’ code for this plugin. So I set up my metabox controller, calling a new object for each metabox. Then I realized I was calling save_post for each metabox object, when it really only needs to be called once. So now I need to rethink some of my metabox code. This is just an example of how I’ve ended up overly complicating things.

If I would just write this plugin straight out, not worry about MVC or anything, this plugin would be done. Just write out each metabox code.

add_meta_box( 'my_meta_box', 'My Meta Box', array( $this, 'metabox_content', 'optimalist', 'normal', 'high' );

But instead I have an abstract class that I’m extending. That class contains:

 add_meta_box( $this->main->get_plugin_slug() . '_' . $this->slug, $this->name,
 array( $this, 'metabox_content' ),
 $this->post_type,
 $this->context,
 $this->priority );

I’ve been making this plugin’s code much more complicated than it needs to be. I’ve been having fun, but it’s taking much longer than I expected. I’m trying to stop and just write the code without making it overly complex, but it’s hard.

This whole endeavor I’ve been doing more than I have to. From setting up this website to coding the plugin. But I think it will be worth it in the end.

The Planning of OptimaList

I’ve had a lot of fun planning OptimaList. After years of client work and not many personal projects, I’d forgotten how great it is to get to do what you want to do.

The planning is mostly done and now it’s time to begin coding. I wanted to write about this planning phase first and how we did it.


 

I tried out Aha! for the roadmap. It looks awesome and was fun to play around with during the free trial, but the price made it not the right fit for us.

We went with Trello for our roadmap and code-specific planning (features, add-ons). It worked out well and should we ever need it, the business plan is very affordable.

For diagrams and wireframes, I liked Lucidchart a lot. But we just didn’t have the need for it. We only needed to make a few wireframes and had no need of a monthly subscription. I’ve been using draw.io for them. It gets the job doneĀ  and it’s free.

For our costs we kept track of what we needed to buy and how much they cost with Asana. We also use Asana for general planning – the website, marketing, client work and so on.

We use Google Drive a lot for docs and spreadsheets. We also use Gmail for our company mail.

There wasn’t really a question for us on who to use for hosting. WP Engine.

I knew from the beginning that I wanted to use Easy Digital Downloads for the website store.


 

A lot of planning also went on in a notebook and in Slack. We tried to keep costs as low as we could during the planning phase because we knew we wanted the best for the hosting and plugins.

We’re continuing developing OptimaList while doing client work and while we’re not making progress as fast as we’d like, we get things done every week. We’re going to be developing the website alongside the plugin so that everything is ready to launch at once.

We’re excited to be able to share OptimaList with all of you!

give-logo-large

Why We Chose to Use Give

GIVE makes accepting donations easy.

What Give Is

GIVE is a free WordPress plugin that allows you to accept donations on your WordPress site. With Stripe and an SSL certificate, you can have a working donation form on your site in no time. You can use other payment processors as well.

Why We Chose Give

We considered the usual crowdfunding sites. None of them felt right. They all had their downsides. And they all took a good percentage of your donations.

The GIVE setup allowed us to have the crowdfunding set up we wanted.

We could:

  • Have no set time limit on the donations
  • Have access to the money immediately (7 days for the first Stripe payment)
  • Avoid losing the money if we did not reach the goal
  • Only pay fees to Stripe (2.9% + $0.30 per charge)
  • No restrictions on what we’re raising money for
  • Have full control over everything
  • Have the fun of making a new site
  • Support fellow WordPress plugin developers

GIVE is free, but we leveraged two of their paid add-ons to make it more effective for us. We determined that the Stripe add-on (to process payments) and the MailChimp add-on (for streamlining our email lists) would make things easier on us and our supporters.

Our Experience Using Give

What it cost

Our total cost for GIVE was only $107, but there were other costs involved in putting this website together:

  • Domain name: $32.88 for the URL
  • Hosting: I hosted the domain on my existing SiteGround account, which came with a free SSL certificate for a year.
  • Design: The SELA theme was free, the other plugins were free.
  • Ecommerce: Stripe is free to set up.
  • Marketing: Mailchimp is free to set up and use (for now.)
  • Development Work:  $2000 in lost billable time. (Time spent on this was time lost to billable work. Why bother mentioning this?  Someone reading this may want to know!)

Total out of pocket: $140
Total billable time spent: 16 hrs from start to finish (but remember we added a bit of custom work — because we can!)

Styling Decisions / Feedback for Give

It would have been nice to have descriptions next to the donation level amounts. This wasn’t a big deal, I could just add it to the form content area to show it above the levels.

I had to add some CSS styling to adjust the form fields on smaller screens.  There were few other CSS changes needed, mainly centering some elements.

I needed to show the donation total and the number of donors. I didn’t see  how to do it anywhere  so I went looking in the code for an already existing function to do it. The code was nicely organized and it was easy to find what I needed. I may not have used the most efficient method to display the info, but the important part was that I found what I was looking for without any trouble.

Tips & Tricks for Non Designers/Non Developers

For any non-designers or developers or those with little time? Use GIVE, stick with the way a theme already looks, change a few options in the Customizer, and add your logo. You’ll have your donation site ready in just a few hours. You could set up a donations site using GIVE in much less time than I spent. It was easy to set up and  took very little time. But, of course, I needed to customize the theme I selected and make it my own – that’s the crux of being a developer with a design degree!

Other’s Experience Using Give

Ryan Hellyer posted a 5 star review in the GIVE forum immediately after using our website to send us a donation!

Quite frankly I haven’t even installed this plugin yet, but my experiences as an end-user were quite excellent.

We were glad to hear that GIVE was easy to use for users as well.

support other WordPress plugin developers

The $107 we spent towards the add-on plugins went directly to two WordPress developers we know and trust. One of the most important things you can ever do when building a WordPress site is **know your developers.** And that includes your theme and plugin developers. It’s not just common sense, it’s a security best practice! On top of that, it just feels good to support the work of our colleagues and peers. We’re really excited for the GiveWP.com team and hope they go far with their solution for fundraising via WordPress.

Hindsight

Was it worth doing it this way when we likely won’t even reach that amount in donations? Yes! For me it was. I’ve been making websites as a hobby for a long time before I was making them professionally. I enjoy it; it’s fun. I had a great time making this site. We highly recommend using GIVE!

If you would like to experience using GIVE – feel free to support the development of the OptimaList.io plugin!