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->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 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!

A Personal Thank You To Our Early Supporters

Dear Friends and Colleagues,

With your generous donations we were able to secure the WP Engine hosting account needed and purchase the Easy Digital Downloads extensions we needed. Every donation that comes in is like a little “Atta Girl – Go Get ‘Em” pat on the back. It feels good when people we really respect and look up to as leaders take a few minutes to send us that little emotional boost, and we wanted to write up a blog post honoring their support.

Thank You To Our Early Supporters

Thank You Early Supporters of


I met Kim at WordCamp San Francisco 2013. Not only is Kim one super productive lady, she is one of the funniest people to hang out with as well!  Cindy and I both look to her as a shining example of how well a woman can navigate, manage and direct her own professional WordPress career. Thank you, Kim, for your donation and support. Cindy and I really truly appreciate it; it means a lot.


I’ve known Devin for a while via Twitter & absolutely love what he is doing with @wordimpress and the @GiveWP Plugin (which we use to power donations made to!) Cindy and I are both drawn to small companies run by people of integrity who value transparency and responsible stewardship of their talents and resources. That, to us, is what WordImpress and GiveWP embody. We are looking forward to getting to know Devin and his team better this year. It’s really fun to build new, promising professional connections outside of the big agency life. Thanks, Devin!


I’ve helped spread the word for a lot of friends in WordPress with different crowdfunding campaigns for different needs – be it personal or professional – and in every campaign, I have noticed there are a handful of community leaders who consistently “pay it forward.” Pippin is one of those and I’m not going to lie, Cindy and I both were all smiles when we saw his donation come in. We absolutely look to Pippin’s business model and transparency as a standard we are committed to emulate with OptimaList. Thank you, Pippin – you’re awesome!


I met Josh through Twitter and then in person at the first ever PodCamp last fall in Dallas. Now, let me tell you, Josh is one smart dude! I can generally follow along with most high level development talks, but when I sat through Josh’s PodCamp talk I was blown away! Not only is he an incredibly talented developer, he is an articulate and passionate teacher. Most recently he developed and launched  @CalderaWP – his own premium plugin. We’ve been watching his process closely to glean insights! Thanks, Josh, for taking the time to learn about our plugin and support us. We really appreciate it!


Ok. Not gonna even mince words. When Nick Haskins sent his very generous donation, on the first day of our kick off, we were blown away! Cindy and I have both followed Nick on Twitter for a while and LOVE what he’s doing with the Aesop Story Engine. In fact, when we were trying to decide what we wanted to do for 2015, building a theme for Aesop was actually on the list, and that’s still something we want to do later on down the road. Cindy and I were genuinely humbled by his donation, it means a lot. Truly, Nick, thank you.


Ok so here’s the coolest thing about Ryan: he lives in Berlin and his donation makes OptimaList an “Internationally Supported Plugin!” I seriously think that’s pretty awesome! Maybe OptimaList will really take off and Cindy and I can travel to Berlin and present at one of Ryan’s WordPress Meetups or WordCamps. That’s a legit business expense, right!? But seriously though – thank you Ryan, for your support!  It’s been really fun to build our friendship online over the past year or so and your donation meant a lot!


I used to work with Zack at WebDevStudios and he is – hands down – one of the best front end developers I’ve ever worked with. He is so very talented, always professional, incredibly responsible and refreshingly well mannered. He’s continued to be a good friend even after we both left WDS and I really appreciate his support. He’s an amazing young man and I’m excited to see where this career takes him. He has everything going for him! Thanks so much, Zack! Having your support is really awesome!


Kristal is close and personal friend of Cindy’s. As soon as she donated, Cindy pinged me in the Slack room and was all :smiles:!  Thank you, Kristal, for your donation and support. It truly means a lot!

Moving Forward With

While Sarah is working part time for ServerPress and Cindy is managing a couple of small client projects (mostly Expression Engine to WordPress migrations) the rest of our time has been poured into getting the development cycle off and running. Cindy recently had an awesome strategy and development review with our former boss and best buddy, Paul Clark, and things are lining out well. We hope to begin full production within the next two weeks. Ideally we want to finish production by the end of the summer, but we all know how development timelines go!  We will keep you posted!

It’s Never Too Late To Donate!

If you would like to donate to our cause, check out our donations page for more information. We have actually turned around and reinvested  100% of the donated money back into the WordPress economy. Know that any donations received go directly to business expenses – we are not paying ourselves to develop our own plugin. But every little bit helps and it feels pretty good to be able to push that money back into the community.



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 team and hope they go far with their solution for fundraising via WordPress.


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 plugin!