My 100 Days Of Code & Product Challenge

Over the past few months I did the #100DaysOfCode challenge and combined it with my own addition, #100DaysOfProduct. I started on 11 August 2019 and wrapped it up yesterday, 133 days later. So now it’s time to reflect! Here are all the things I learned in doing it, as well as all of the check-in/accountability tweets for longevity’s sake 😄

I got a lot done.

I don’t think it’s any big surprise, but if you code regularly, turns out you get a lot of work done! Here are the major pieces of work I got done during the challenge:

  • Learned how to set up and use my first Raspberry Pi
  • Learned how to make cron jobs and used them to create a bunch of timelapse videos
  • Coded & launched a Jekyll blog & Instagram to host said videos…later cancelled the whole project 😂
  • Launched My Theatre List for public sign up (invite-only, but still)
  • Introduced My Theatre List to a lot of strangers, including one group that had at least 100 people 😱
  • Planned out a social media calendar and wrote dozens of post ideas for when the time comes to launch My Theatre List properly
  • Added an activity feed to the home page of My Theatre List, based on feedback I got in talking to users
  • Made a lot of UI improvements to My Theatre List including pagination, better search, homepage illustrations, and more
  • Learned a lot about Cloudinary’s API, upload widget, and Node.js SDK
  • Learned about copywriting and made several attempts at using the new skills in the projects I worked on
  • Wrote an app I can run locally to scrape HTML pages, and used it to list out a bunch of my blog posts
  • Start & finished a demo app of something that will be useful at work, and figured out a way to make it an actual work project
  • Started the project of updating my personal website & combining it with this dev site

Very productive if I do say so!

It’s most useful when there’s a goal in mind.

When I started the challenge, I was working on two projects—My Theatre List and a now-defunct local neighborhood blog which had a Raspberry Pi element. While I definitely made progress on both, I also experienced some distractions along the way (see list above!) and think I could have approached this differently. Particularly with the theatre project, which I really want to get in front of more strangers so that I can get feedback & make it better. If I do a challenge like this again, I’ll think a bit more about where I’d like to be at the end, and set some more concrete goals to make sure I get there.

On the other hand, I’m really excited about the work project because having worked on it is opening up some extra training opportunities at work that I may not have had otherwise. And I’m also really excited to soon have a new website!

Flexibility with the “rules” is key.

100 days is a long time, and some days I just didn’t want to work on code, even for 30 minutes. Whether it was due to an after-work event I was going to, or work travel, or just nice weather(!), giving myself the flexibility to sometimes skip a day or few made this challenge a lot more palatable.

I know, I know…the whole point is not to break the streak, right? I think that works for some things, particularly smaller commitments, but to add 30+ daily minutes of any activity is a big ask (in my life at least!). I made the decision early on to not be super rigid with completing the challenge within 100 days, and I think it made the whole thing much much more enjoyable. The important thing was seeing it through to the end.

Twitter is mostly not a nice place.

My least favorite thing about this challenge was that in doing it, I got sucked into Twitter. I generally avoid social media and try to only use it in ways that are useful (like this challenge!), but if you have to post every day, the Twitter feed is pretty unavoidable. I didn’t really like getting sucked into so many rants and injustices and displays of righteous indignation ¯\_(ツ)_/¯

…Except when it’s great!

On the other hand, I got a lot of encouragement using the #100DaysOfCode hashtag, and a good amount of unexpected help too! I’d post about trouble I was having with some service or other, and on multiple occasions someone from that company or service wrote back to me to help troubleshoot. And if it wasn’t someone at the company directly, there are just a lot of friendly, helpful developers out there! It’s not like I have a lot of followers or any particular influence, so this was a totally unexpected and very welcome surprise benefit of doing the challenge.

I might or might not do it again.

I’m on the fence about this one. I don’t really feel a strong need to do another timed challenge because I code & work on these projects regularly regardless…do I really need to tweet about it and announce what I do every day? Not sure.

On the other hand, I can see in writing this post that it’s actually pretty cool to see how much I accomplished within a set amount of time. And (per the previous point) it can be very fun & beneficial to get input from the general dev community as I work on different things. Will that continue if I just post normally without the #100DaysOfCode hashtag? Again, not sure.

So this one is to be seen!

Without Further Ado, ALL THE TWEETS…

11 August

Started a new project today! This is the hopeful beginning of #100DaysOfCode #100DaysOfProduct. Some recent podcasts & blogs have reminded me how productive it is to learn in public and I experienced this when I did a podcast for over a year…

..well that finished over a year ago so it’s time to get back to it 😄 Why now: I have 2 projects which I’ve put a lot of hours into but they haven’t seen the light of day because they’re not ‘ready’ yet. I now realize my brain interprets ‘ready’ as ‘perfect’ 😅 Not helpful!

My rules:

1) 30+ min/day on code or product
2) Code = actual app code or devops stuff
3) Product = content, marketing, research, or business development
4) Deadline for success is 11/30 (planned work travel)
5) The tweets, plus important highlights on dev blog
So here we go!

Day 1: Wrote a mini @nodejs app to upload photos to @Cloudinary, separate from the main project repo. Learned how easy it is to implement their upload widget! I also used @Auth0 so that randos can’t upload to my account.

12 August

Day 2: Tweaked the styles of the Cloudinary app I made yesterday, and updated it to accept multiple image uploads at once. Came up with 12 new ideas for content marketing.

13 August

Day 3: Wrote & deployed a landing page for my web design “company” (not sure when I’ll feel comfortable removing the quotes 😅). Also Raspberry Pi arrived! I got started setting it up and blogged about it.

14 August

Day 4: Got remote desktop working on Raspberry Pi…turns out I didn’t need a wired mouse or keyboard after all! Still getting acquainted, but feeling ready to start coding the actual project.

15 August

Day 5: Fixed some bugs that were stopping database associations from updating/deleting properly. The reasons were misnamed form elements and unnecessary if statements. Also fixed a looping redirect. Love squashing those bugs! 🐞

16 August

Day 6: Did a quick Python tutorial in prep for writing the camera time lapse program. Learned about the exponentiation operator (**). All this time and I didn’t know it exists!

17 August

Day 7: Worked on configuring camera time lapse images with bash scripts. Learned how to compile them into a video in the command line too, and will try it out tomorrow.

18 August

Day 8: Worked on some styling and structure updates to the homepage of project #1, & trialed the first timelapse for project #2. Learned Photoshop can also compile a timelapse! Great because avconv doesn’t seem to be compatible with #RaspberryPi anymore..?

19 August

Day 9: Added a welcome screen that new users will see until they start interacting with the site. Also added a feedback form so that I can collect info from people as they’re playing around with the website. Getting closer to opening the site up to users!

20 August

Day 10: Still no success operating #RaspberryPi from itself, but learned about the scp command to copy files with my laptop from Pi and got it to work! Also worked on user being able to change their profile pic in the other app.

21 August

Day 11: Did small adjustments to project 1’s home & welcome pages. Also learned how to use screen for project 2 so that #RaspberryPi can keep going without my laptop (wrote about it).

22 August

Day 12: Participated in @startupschool group call to practice talking about project 1. Good to meet some other founders working on great projects! Also improved sign-up flow.

23 August

Day 13: Finished up the opt-in flow and updated some views.

24 August

Day 14: Learned a bit more about @Cloudinary while setting it up for users to be able to edit their profile pic. Using both their upload widget and Admin API…both pretty straightforward to work with!

25 August

Day 15: Working on project 1 today…made it so users can update their username and it syncs between my app and @auth0. A bit more complicated than it seems it should be? Maybe that’s just learning 😋

26 August

Day 16: Enabled private registration on project 1 (😄 huge win!!) then got hung up doing some form validations. It was the regex (it’s always the regex), which I learned today is blocking when formatted incorrectly 😒

28 August

Day 17: Got some feedback after doing a mini-pitch (😱) at the @LNUGorg meetup tonight, and already caught & fixed one CSS bug! Otherwise working on some content updates and adding feedback into planning for what to work on next.

29 August

Day 18: Another great @startupschool call…these are really helping narrow down how to explain the app. An hour+ thinking and talking about the app on a big picture scale is a completely different exercise from bug fixes and feature improvements.

30 August

Day 19: Worked on some error handling and UI improvements.

31 August

Day 20: Fixed a major issue I hadn’t noticed before, to do with auto-generated html forms on a page. Basically they were all invalidating each other due to non-unique ‘name’ attributes. Created 1 controller to rule them all.

1 September

Day 21: Decided to stop playing it fast and loose storing prices as strings and converted everything over to numbers with a currency code.

2 September

Day 22: Research day…planning an approach for better navigation: pagination, infinite scroll, filtering? A combination? Lots to learn not only in terms of best practices, but also how to code the thing once I decide 🤷‍

3 September

Day 23: Biz dev day ⛵️ 🌬

4 September

Day 24: Adding content. One of the best things about building something because you need it is that you actually get to use it 😄 Slowly back-adding all the shows I’ve seen onto @mytheatrelist…today I crossed into 2013!

5 September

Day 25: Another great @startupschool meeting—got some helpful suggestions for connecting with people who would like to use @mytheatrelist. Also worked on some small bug fixes.

7 September

Days 26/27: Closer to the finish line with my #RaspberryPi timelapse videos! They’re now being created 100% programmatically 🥳🎉🎉 Updated my step-by-step for future me and anyone else who wants to try it.

8 September

Day 28: Making the backend more robust so that I can let users add new productions & shows on @mytheatrelist. Will be great when more people can participate and make sure the site works for them.

9 September

Day 29: Making what I did yesterday visible for users in the front end. It’s more than just showing the forms, also writing the copy that goes along with it and trying to make the process simple and inviting!

10 September

Day 30: Worked on the timelapses a bit more. Seems the scripts I set up over the weekend weren’t actually working.

11 September

Day 31: Continued working on letting non-admins add shows. Having to undo all of the blocks I put in place to keep non-admins from the views & actions…I was very thorough 😂

12 September

Day 32: More work on letting non-admins contribute content to the site. Refactored the checkAdmin function to be a promise and added a visual flag for unpublished content in the front end.

14 September

Day 33: Adding more categories for non-admins to work with in the app. Almost done with this bit of work!

15 September

D34: Finished setting up non-admin ability to add to the site yay! 🥳 Contacted some virtual assistants to do data entry so all I’ll need to do is approve going fwd. Now I can focus on more valuable tasks like engaging users & improving usability.

16 September

Day 35: Snuck in some research time on a busy day. Read an interesting article about the stagnation of a comparable site (different industry) and a lot of opinion about what’s gone wrong there. Very insightful.

17 September

Day 36: Spent a while researching pagination because every time I attempted coding it I realized I don’t know what I’m doing 👩‍💻 Sidetracked by figuring out how to ignore the ‘the’s ‘a’s and ‘an’s in the sort. Too little progress for my liking
😐

18 September

Day 37: ….and we have pagination! Getting there slowly but surely 🤗 Almost finished setting up the previous/next buttons then will add in the alphabetical filter.

19 September

Day 38: Another valuable @startupschool call. Finished the simple pagination stuff & pushed it live. Made a new temp logo. Loaded some new shows into the site.

20 September

Day 39: Added pagination to search results…this time with page numbers instead of next/prev pagers. Discovered Bootstrap has styling classes I could have used from the beginning 🤦‍♀️ Oh well I like mine better anyway 😂

21 September

Day 40: Worked on copywriting, but finding the task hard b/c I haven’t really narrowed down a “voice” for the product. Is it my voice? Some elusive ‘we?’ Forcing this work into a commute helps get something on the page, but I’ll need to refine it later.

Also attended @startupschool‘s London meetup which was fantastic. It’s great to chat with people working on some incredibly interesting projects and learn from other people. A bit intimidating being reminded of how much I still have ahead of me but also exciting!

22 September

Day 41: Mostly worked on content updates today, and did a bit of research.

23 September

Day 42: Discovered my wifi apparently went down 5 days ago and thought I’d lost access to the Raspberry Pi 😟 Turned out it just moved IP address. Worked on time lapses once reconnected

24 September

Day 43: A bit more content work, and started planning a ‘latest activity’ feed. Not sure of the best way to query & format different models and keep the look fairly consistent.

25 September

Day 44: Started working on implementing the ‘latest activity’ feed. Pretty basic for now but I have the data coming through so it’s a start!

26 September

Day 45: Worked on site content

28 September

Day 46: Worked on site content again. Tedious work but it’s fun remembering all the shows I’ve seen over the years 🎭🤓

29 September

Day 47: Wrote a little scraper program to help archive an old project I’m closing out. That cheerioJS is a handy little tool! Also added more content & reviews…I’m now up to date through 2013 🙀

1 October:

Day 48: Continuing work on the activity feed and having trouble figuring out the best way to query a join table using the Sequelize ORM. Came across this very unhelpful article trying to figure it out 😂

2 October:

Day 49: Still trying to figure out the best way to query a join table in Sequelize ordered by the join table. I don’t understand how no one else has ever had this question. So obviously I’m not asking the right question 🤔

3 October:

Day 50(!!): More work on the newsfeed and made some progress?? It kind of looks like progress now but really only time will tell 😂 Or, it’s all progress.

4 October:

Day 51: I don’t know where I got the idea about “best practices” for querying a join table using sequelize. I did what I was trying to avoid doing and got the newsfeed working in about 5 minutes 😂 Still have some things to learn but 👍 for now 😁

7 October:

Days 52-53: Took a day off then added a bunch of content into the site. Today…🥁🥁🥁…we have a news feed! The info is coming in, next up—styling it. Super ready to move on from this feature though 😆

25 October:

Work trip is done, back to #100DaysOfCode #100DaysOfProduct Day 54: Started on a project to combine a number of websites into one…planned the structure & basic requirements for blending some very different sites. Worth it to take the time to plan!

26 October:

Day 55: Continuing on from yesterday…built the framework of the site with @hexojs & imported the content from all the other sites. Some posts were already markdown, quite a few were not 🥴 Finished though, next up styling!

27 October:

Day 56: Started prepping styles for the site…customized some CSS resets. Also settled on a color palette I’m happy with by combining @akveo_inc’s color tool with @adevade’s for the grays 👍

28 October:

Day 57: More coding on the project, just setting up the basics now so nothing major to report, but getting some work done on a very busy, long day is an accomplishment anyway!

29 October:

Day 58: Learned how to compile & minify CSS files using @gruntjs for the custom @hexojs theme I’m making. Wrote about it.

30 October:

Day 59: Loooots of content updates to make on @mytheatrelist after being away 😬 Only got 1/2 way through what’s new in London since Sept. Need to improve doing this automatically, or find a different way to QC what comes in from the API

31 October:

Day 60: Finished content updates to @mytheatrelist after being pulled away from the project for a few weeks by work. Also met a founder who is working on a theatre-related tool too—very encouraging to see more people engaging with this space! 🎭

1 November:

Day 61: It’s been long enough 😅 Got back to work on the activity feed, working on filtering out similar items to cut down on clutter. Also got back to feeling like I have no idea what I’m doing 😂

2 November:

Day 62: 🙀🙀🙀 Activity feed is done! Good-enough done at least 😅 On to the next. PS if this looks interesting to you check out @mytheatrelist where the wait list is now being processed 😁 🎭👍

3 November:

Day 63: Back to adding in some of my old reviews…nearly done backfilling through 2014. Also tried to get my raspberry pi working again after some wifi issues. I may have wiped it clean

4 November:

Day 64: Refactored a bit to make updating from the API a bit less manual. Also got set up with a new API so I can add another source of shows. Thinking about the best way to manage & compare data coming from multiple sources.

5 November:

Day 65: Added & styled responsive nav for the big combo project.

6 November:

Day 66: Scaffolded the home page & footer of the big combo project. I decided to build out the design mobile-first which is a first for me. Also focusing on best practices for semantic markup & accessibility.

7 November:

Day 67: Scaffolded a few more main pages in the big combo project. Now all the site content is available, linked, and clickable even if it’s UGGGGGGG-LY 😂 Next will be styling the mobile views. Also got #raspberrypi working again!

8 November:

Day 68: Mostly added content and some of my own reviews into project #1.

9 November:

Day 69: Spent the day learning Ruby on Rails at #RailsGirlsLDN 🥳 Learned A LOT thanks to our awesome coaches 🤟 Coded a bunch, learned just as much from chatting w/people 😄 Also can I re-do my old projects in Rails now? Time machine?! 😅👩‍💻

10 November:

Day 70: Added content & did some work to improve the marketing workflows I set up a while back. Actually spent most of the time figuring out what I set up a while back

12 November:

Day 71: Researched progressive web apps & service workers for a web app that will need to be available offline. It looks like the storage limits will be too small in this case. Not sure of next steps/options.

13 November:

Day 72: Added a bunch more of my reviews into my theatre site…now up to date on every play, musical, and ballet I’ve seen through 2014! 🥳🥳🥳 Only 5 more years and I’m all caught up 😅

14 November:

Day 73: Played around on @codepen a bit, trying out some things separate from the big combo project, which I’m kind of stuck on design wise.

15 November:

Day 74 (yesterday): Starting to flesh out the styles on the big combo site. Spent way too long updating the mobile nav menu and in the end it looks pretty much the same as when I started 😭

16 November:

Day 75: Added fonts to the site and styled headings & navigation with letter spacing that’s just right (at least for now). Found a great tool that lets you preview @GoogleFonts side by side http://www.ourownthing.co.uk/fontpairing/

17 November:

Day 76: Added content. Didn’t quite get to 30 minutes but I really wanted to take a walk outside while nothing was falling from the sky 🤷‍♀️

18 November:

Day 77: Pro of combining old projects: get to re-use code. Con: sometimes old code sucks 😂 Today I refactored a responsive nav menu from media queries to work mobile first and be more accessible.

20 November:

Day 78: Great event with @codingblackfems! (as usual). Also found a weird bug which I’ve narrowed down is due to some async issues (my favorite topic) and am nearly there getting it fixed.

21 November:

Day 79: Fixed yesterday’s async issue thanks to….ME!! Apparently I wrote it down last time I had the same issue 🥳🥳 Still not entirely sure how it works though 😅 How can I learn this?

22 November:

Day 80: Found & fixed a bug in an old site I’m archiving.

23 November:

Day 81: Did a bunch of research and tests on APIs to narrow down the next one to integrate into the app.

24 November:

Day 82: Added a bunch of content and also backfilled some of my own reviews on @mytheatrelist

25 November:

Day 83: Worked on some styles & inevitably copy for the big combo project, and also added some more productions and a review on the theatre site.

26 November:

Day 84: Added some more content & reviews to the theatre site.

6 December:

Back from Thanksgiving & illness for the home stretch!

Day 85: Updated dependencies including a major version upgrade requiring changes to dozens of files. But for the better going forward!

7 December:

Day 86: Got distracted by a new app idea/prototype I want to try to complete this weekend, so worked on that. These things never go as fast as I think they will 😅

8 December:

Day 87: Continued working on the distraction project and made good progress! Haven’t finished it but not too far away.

9 December:

Day 88: Started on the 3rd & final model & routes for the “distraction app” so nearly finished. Looking forward to deploying this one & testing it out, I think it will be really useful.

11 December:

Day 89: Working on the new app, getting a bit hung up on reference documents in mongoose. Haven’t figured out yet why the exact thing I did in a previous project is throwing errors in this one

12 December:

Day 90: Spot the difference:

submissions: {
type: mongoose.Schema.Types.ObjectId,
ref: 'Submission',
}

vs.

submissions: [{
type: mongoose.Schema.Types.ObjectId,
ref: 'Submission',
}]

Hint: one works, the other causes hours of agony 😭😆

13 December:

Day 91: Worked on cascading deletes for mongoose instances & their subdocuments. It’s not working yet.

14 December:

Day 92: Added some content & review to the theatre project. Also learned that Heroku updates dependencies during the build process which turned out to break the app…I hadn’t pushed the updates since the ejs update which broke include processor directives. The app has probably been done for a week+. So locked the package.json versions!

15 December:

Day 93: Worked on finalizing the distraction app…left some things as WIP to try and get to a finishing point. Deadline is tomorrow evening

16 December:

Day 94: The project isn’t finished and my brain is hurting! 😭 Haven’t yet figured out how to convert a long & complicated array of objects into a different, single object. It’s the crux of this application. In writing this tweet, I think I don’t even need to do this 😭😭😭

Later…

OMG I got it working in the 16 minutes since writing this tweet, after the last few hours trying to do it a different way 😭😂🥳 Why why why

Turned out to be much simpler to implement in the view template than in the route controller.

17 December:

Because it’s well after midnight I’m counting this as… Day 95: Finished & deployed the app WOOO!!! 🥳🥳🥳🥳🥳

18 December:

Day 96: Added some more reviews & content to the theatre site.

19 December:

Day 97: Same as yesterday, updated a few more archive shows and added some more of my reviews to the theatre site. I’ll be really glad when my viewing history is 100% up to date 😄

20 December:

Day 98: More content updates! I decided I want to finish adding all of my old reviews by the end of the year. Today I crossed into 2016 and still have ~100 shows & reviews to enter over the next 11 days.

21 December:

Day 99: Added a bunch more content to the theatre site, aiming to finish the backlog by the end of the year. Also added the @Cloudinary upload widget to a few pages in the app which is long overdue!

22 December:

Day 100 🥳🥳🥳

Added a bunch more content, and finished all the shows & productions in my old spreadsheet. All that’s left to do is add images and my reviews and I’ll be up to date!

23 December:

That’s a wrap! Wrote about my #100DaysOfCode #100DaysOfProduct challenge. Not sure I’ll continue or do it again (that’s to be seen!) but in the meantime, a big thanks to the many who gave encouragement, help, ideas, likes & retweets along the way 😁❤️🙌🙌