The report was organized around 7 recommendations and how you can apply them in the classroom. Each recommendation is weighed against how strong the supporting research is along with common pitfalls for applying the recommendations and how to avoid them.
I recommend reading the whole report to get the context of the studies that support, but the summaries of each of the 7 recommendations are available on IES’ overview of the study.
Since you can read the summaries on the study’s overview page, I’m mostly just going to talk about how well the recommendations apply to learning software development, and how using a digital medium for teaching is either a benefit or a hinderance.
1. Space learning over time
Students should be exposed to each main element on at least 2 separate occasions, preferably spaced out over weeks or months rather than days. This is something I had not considered for SkillBonsai. On one hand, many skills related to software development build on each other, so are automatically reinforced as the student progresses. Additionally, it’s often enough to know a technology or technique exists and be able to reference it when you need to apply it. Rote memorization isn’t as important for many concepts in software development.
I do believe this concept could be put to use though. For some skills that are worth committing to long term memory, I could email periodic, spaced reminders that include links to refresher or review versions of the initial instruction. Having a reference version of an instruction is valuable in its own right, so this is definitely something I’m going to consider.
The report also added a note that may address some issues with spaced learning as it applies to software development:
One limitation of the literature is that few studies have examined acquisition of complex bodies of structured information.
2. Interleave worked example solutions and problem-solving exercises
I really like this idea and think it applies very well to both software development and online learning. I think one of the more difficult aspects of learning software development is knowing if your code is well formed. Seeing worked examples of good code should be a great way to see if your own code looks similar in terms of simplicity and readability.
The study also recommends that you decrease the examples as you progress:
As students develop greater expertise, decreased example use and correspondingly increased problem solving appears to improve learning.
3. Combine graphics with verbal descriptions
In addition to graphics or video, you should also provide an audio track since the brain can process the visuals better when they don’t have to use their eyes for both reading and interpreting the graphics.
Graphics are often not as obvious in the world of software development, but perhaps the rise of screencasts on the web indicates that video with an audio voiceover is an effective teaching aid. There are other studies, however, that indicate videos are often misleading in how much information is retained by the student.
4. Connect and integrate abstract and concrete representations of concepts
The studies show that students struggle more with abstract representations initially, but are better able to use the learned concepts in different contexts.
I’m not exactly sure how to apply this to software development. Is the bowling kata an example of an abstract concept? Or are we talking about visualizing the MVC framework? I’m going to need to think about this one a little more.
5. Use quizzing to promote learning
If you think of quizzing as a means to help students understand what areas they need to study rather than an evaluation for a grade, quizzing suddenly seems much more powerful.
One concept that I will definitely adopt is the idea of pre-quizzing to prepare students for the material they’re about to learn. This could work very well with SkillBonsai when using an external resource like another site’s tutorial or a chapter in a book.
But how do we validate that a software solution is “correct”? Aside from simple “check the output” tests, perhaps we could add a more subjective checklist for the student to do a self-check on the quality of code, including:
Do your variable and method names express intent (i.e. are they named clearly)?
Are your methods less than 10 lines long?
Are your classes doing more than one thing?
Each quality question could provide links for the student to review what each of those quality checks means in detail if they need a refresher. We could also encourage them to have their solution checked by someone in their local or online programming community.
I think there are limits to what we can do with online quizzing for software development, but there’s a lot of untapped potential with simple multiple choice or fill-in-the-blank quizzing.
6. Help students allocate study time efficiently
It is our belief, however, that students’ ability to manage their own studying is one of the more important skills that students need to learn.
This is probably the key takeaway for me. Students are notoriously poor at “metacognition”, or knowing how much they know. This really resonated with me and I think it’s one of the most important aspects I can bring to SkillBonsai.
In addition to quizzing, the study suggests that students rate each question based on their confidence that they know the answer (before seeing any of the possible answers). This allows them to evaluate how much they think they know and direct them to the areas that need the most study.
7. Help students build explanations by asking and answering deep questions
At first I thought this would be a nonstarter for online learning, but I think there’s a simple solution: ask students to write a blog post about a question or topic. Blogging is a fantastic way to explore a topic and organize your own thoughts. There’s really no way to validate whether a student did it in any automated way, but I don’t think that should be a deterrent.
Do classroom learning methods apply software development?
So, do these classroom instruction and study methods apply to learning software development? I think the short answer is absolutely.
On the other hand, many of the recommendations apply to learning as opposed to improving skills. Is software development more similar to learning history than to becoming a better artist, musician or athlete? If not, does that imply that we should be using different methods to complement the learning methods listed above?
Here are some ways that I think learning software development is different from learning history, math or a foreign language:
Most problems are unique (though they may have common foundations or principles)
There is a wide range of “correct” answers
You need to be both aware of a broad range of technologies as well as being well-practiced in core fundamentals
Weaknesses of online learning
The most obvious weakness of online learning applications is that it’s often hard or impossible to validate that a student has completed assignments correctly. For my purposes, I’m completely ok with this. My target audience is the motivated self-learner, so if someone wants to say they completed an assignment (like writing a blog post) and they didn’t, then so be it.
However! It is important to be able to provide timely feedback to foster their metacognition and head off any misconceptions as early as possible. For that reason, I think many of these core learning concepts are very applicable.
Finally, the report issued the comforting thought:
As with professionals in other fields, such as medicine, that also seek to rely on a base of evidence and yet must deal with important practical problems on a daily basis, educators must make the best use they can of the current knowledge as it is, even while being mindful of its imperfection.
So, even if we can’t apply all learning principles to every subject, the more we know about effective instruction and learning techniques, the better we can work them into our education applications and material.
On Saturday, I helped facilitate the Global Day of Coderetreat 2011 in Pittsburgh. Over 2000 people attended in 90 cities on 6 continents. There were more coderetreat events on this single day than in the combined 3-year history of coderetreats.
Coderetreat is a day-long, intensive practice event, focusing on the fundamentals of software development and design. Muchhasbeenwritten about the format and experience of coderetreats, including this excellent fictional account of a coderetreat attendee, so I’ll focus instead on my perspective of the event as a first-time facilitator.
The goals of Coderetreat
In preparing for my role as a facilitator, I tried to dig deep into what the goals of the event were. The single, primary goal that I ended up with was:
Learn how to write code that adheres to the rules of Simple Design in order to minimize the cost of change.
Now that’s something both developers and managers can get behind. It reads like a user story explaining not only the what, but also why you would want to adhere to the rules of Simple Design.
In addition to the primary goal of writing code to minimize the cost of change, a coderetreat has a ton of secondary benefits including, but not limited to:
Expose people to new object-oriented design concepts
Is a coderetreat the absolute best format for achieving this goal? That’s a topic for another post. But, I do believe you’d have a hard time finding a better way to level up your software development skills in under 10 hours.
Takeaways
This event was awesome. I think I got as much or more out of it as a facilitator than I did as a participant. But how can we make it better?
Set expectations before the event. We need some sort of a “Before You Arrive” kit that gives a very brief overview of the event and tells you how to get the most out of the day. This should include everything from setting up your development environment to bringing enough business cards to share.
Make sure you have plenty of whiteboard space. During a coderetreat, there’s a lot to take in. I love having information radiators for active and passive learning. There are a number of things that I wanted to convey to the participants throughout the day, including:
Wi-Fi credentials
Twitter hashtag
The goal of Coderetreat
The 4 rules of Conway’s Game of Life
The 4 rules of Simple Design
The TDD cycle
List of buzzwords and concepts
Mark Twain quote, “I didn’t have time to write a short letter, so I wrote a long one instead.”
Put more focus on goals at the beginning. The primary goal should be written clearly on a whiteboard to remind everyone throughout the day why they chose to give up their Saturday to program. In addition to the primary goal, I think I could spend more time calling out secondary goals like getting better at pair programming and test-driven development, learning your tools, exposing new OO concepts, and spreading the software craftsmanship bug. If the participants leave with a firm idea of the goals of the event, it will help to spread the idea of coderetreats.
Don’t push the challenges before the participants are ready. Due to the big event, it was too tempting to pull out the whole bag of tricks for the sessions. I think it would’ve been best to give cues to focus on fundamentals for the first 3 rounds and only start to introduce more modest constraints like ping pong pairing and TDD as if you meant it late in the day, if at all. If you’re working with developers who have all been to a coderetreat before, then you might be able to pull out things like “no conditional statements” or “use verbs instead of nouns”, but I think otherwise they put undue hardship on the teams. Learning pairing, TDD, simple design, and even new programming languages is more than enough for most people.
Ask more probing questions during walk-arounds. Much of being a great facilitator is having a strong understanding of OO concepts yourself. This allows you to ask the right questions to stretch a practitioner and guide them toward simple design. I still have quite a way to go on this front, but I think I would do well by reading up on some of the OO concepts and forming questions that I can ask ahead of time.
Write down a list of buzzwords and concepts during the event. If you’ve been to a number of conferences and are interested in Software Craftsmanship, you might take for granted how many buzzwords you regularly sling around. People don’t often want to expose their ignorance, so they may not ask what these buzzwords mean. I think it would be really useful to make note of buzzwords and concepts that pop up in conversation throughout the day like, “DRY”, “YAGNI”, “tell, don’t ask”, “law of demeter, “loose coupling”, and “SOLID design principles”.
Code swapping for the last session could be risky. I’m a big fan of swapping code after the 5th session because it reinforces the primary goal of minimizing the cost of change. When new developers have to deal with an existing codebase, your efforts for clean code are truly put to the test.
There was a fair bit of good-natured ribbing about code quality after swapping code with another pair after the 5th session. If there is a wide gap in skill levels, or people don’t know each other very well, this has the potential to lead to hurt feelings. Use with caution.
6 sessions may be too much for one day. One comment that received a lot of nods at our closing circle was that they would have gone home totally satisfied after just 5 sessions. The 6th session left them a little fried and we only ended up with 8 people (out of about 50) for the traditional post-coderetreat beers. I had a similar experience when I participated in a coderetreat. On the one hand, that feeling of pushing your mind to the limit and leaving completely fried is kind of nice, but perhaps it comes at the expense of leaving people with more energy to challenge their development practices at work come Monday morning.
The rabbit hole
Once you start thinking about writing software using the principles of Simple Design, it’s like opening Pandora’s Box. You become curious about some of those buzzwords I mentioned above like, “loose coupling”, “high cohesion”, and “single responsibility principle”. You realize you’re peering down a rabbit hole and start wondering just how deep the rabbit hole goes …
Halloween is probably my favorite holiday. I say “probably” because Christmas is pretty awesome. It’s close.
When I was working on my Halloween costume this year, I was trying to juggle a few other priorities and had the momentary thought, “Why am I doing this?” I didn’t have any big Halloween parties to go to and it’s not exactly a tradition to dress up for Halloween at my office (I think I was the only one this year).
After a bit of reflection, I decided that even if I only wore my costume to work (yes, I always wear my costume to work), it would still be worthwhile.
What I love about making costumes
Why do I like making Halloween costumes?
Creativity
Problem solving
Real artists ship
So there’s the obvious creativity aspect. Since I tend to be on the more ambitious end of the Halloween costume spectrum, I need to start thinking about my costume at least a month in advance. I love trying to think of something unique that only 10-20% people get. When only a small percentage of people understand your costume, they get excited. It’s like being in on an inside joke.
Problem solving. My last two costumes in particular have involved a lot of schematics and trial and error. In 2009 I was working with chicken wire and PVC pipe. This year, it was all about 3D sprites built out of cardboard.
Finally, I think the best aspect of making a Halloween costume:
Real artists ship.
– Steve Jobs
The time and money pressures of making a Halloween costume force enough constraints to make it an interesting problem. No matter how early I start making my costume, I always end up tweaking it up to the last minute. When October 31st comes though, you gotta get out the door with a costume one way or the other.
I think there’s a really interesting parallel with shipping software that I hadn’t considered until this year. When you go to work or your party in your homemade costume, you know every single flaw of your costume. You know it could be better. But you know what? It doesn’t matter. If you came up with a unique idea and it resonates with people? It doesn’t matter if people can see your tape starting to curl up on your cardboard sword. Make something cool and ship it!
What makes a good costume?
To be a good costume, I think it has to be either:
Unique
Really, really well done
If you’re going as Boba Fett or Jack Sparrow, you’d better be able to stand in as their stunt doubles in “Star Wars: Rise of the Midi-chlorians” or “Pirates of the Caribbean V: Return to Disney World”.
For example, in 2007, Beth went as an Engineer from Star Trek TOS (The Original Series). She bought an authentic Gene Roddenberry insignia patch and had her mom sew her a Starfleet Engineering uniform in 2 days:
That costume was solid. You could probably sell it on eBay to a Trekkie and they’d be the talk of the next convention.
I usually take the other tack - the unique costume. Not that I’m the first person to think of a particular costume, but hopefully I’m the first person you’ve seen with that costume.
The costumes
Here are my costumes from the previous 5 years. In 2007, I inadvertently started a theme of Saturday Night Live alum movie characters.
In 2008, I went as Bob Wiley (Bill Murray) from “What About Bob?”, one of my favorite movies. The unique element here is “Gil”, the live goldfish around my neck. This one didn’t take too much work to put together (I bought the shirt online), but I loved the idea of having a live prop (don’t worry, he found a happy home in a coworker’s aquarium).
Beth went as Starbuck from Battlestar Galactica. Notice a theme?
The pinnacle of my Halloween costumes - me as all 3 of the “Three Amigos”. It was the 3rd in my Saturday Night Live alum trilogy. It was also my most recognizable costume in years. Typically I wouldn’t go for something so obvious, but I’d wanted to do a multiple costume for years. This one special for 2 reasons:
The novelty of going as 3 characters
The execution
It took me about 50-60 hours and cost more than I’d like to think about. I made 2 full-size dummies from chicken wire and PVC pipe and Beth and her mom tailored and designed the outfits from Goodwill suits. Oh, and it has fully-articulated joints. At a party later that night, I fashioned a rod to each of their hands so I could perform “My Little Buttercup”:
This one’s going to be tough for me to top.
And finally, here’s my costume from this year. Do you recognize it? As I said, my personal barometer for costume success is about a 10-20% recognition percentage, so it might not be immediately obvious. If you grew up with an Atari 2600, you might be able to guess it.
I went through the whole design process with this one - research, sketching, and even paper prototypes. Making the pixelized “sword” to scale was a lot of fun and gives me some new techniques I could potentially use for classic video game characters in the future …
Did you dress up for Halloween this year? Why or why not? Let me know on on Twitter
Since switching jobs in May, I’ve done very little Ruby development. I have, however, been to several Ruby and Rails conferences that have kept my interest in Ruby alive. If anything, I think I’m even more eager to get back into coding more regularly.
There are a few real Ruby projects that I plan on digging back into very soon, but I also want to set aside some time to learn and keep up with the rapidly-evolving Ruby ecosystem.
There are just so many great resources in the Ruby community these days that it takes a concerted effort just to keep up. My attempt at a solution is to batch my Ruby learning into one day a week. Naturally, that day of the week should be Tuesday. My plan is to spend 1-3 hours each Tuesday digging into some podcasts, blogs and code.
Resources to learn from each week
Here’s my initial list of resources I plan to draw from:
So, tonight was my first Ruby Tuesday. Um … wow! 1 hour is nowhere near enough time to cover all of these resources.
I tried to listen to the 1-hour Ruby Rogues podcast while reviewing the Ruby5 notes. It was a little hard to divide my attention between the two and I didn’t even finish reading through the Ruby5 notes. I did end up learning a lot of useful stuff though, so the hour spent was very worthwhile.
It’s clear that 1-hour a week isn’t nearly enough to keep up with Ruby. I’m going to need to decide on the depth and breadth of my learning. I think next week I’ll do a few things differently:
Start with the week’s Railscast
Next read Practicing Ruby
Finish with the Ruby Weekly list
Spend 2-3 hours instead of 1
That will at least give me a different set of resources than this week and I can see which provide the biggest value for my time. We’ll see how it goes!
I just completed 30 days of eating and drinking clean with the Whole30 challenge. I’ve been doing some form of a Paleo diet off and on for about 2 years, but the Whole30 challenge really takes it to the next level. You can read about the whole challenge on Whole 9 Life’s site, but it’s basically a super-strict form of the Paleo diet for 30 days:
Eat real, clean foods: meat, fish, eggs, tons of vegetables, some fruit, and plenty of good fats
No grain, dairy, legumes, white potatoes, alcohol, preservatives, or sweeteners of any kind (including artificial)
Focus on quality, not quantity
No “paleo-ified” foods like paleo pizza or paleo pancakes
Don’t weigh yourself
The purpose of the challenge is to heal your digestive system and see what it feels like to eat an ideal diet for a month. The theory is that even trace amounts of some foods (like milk or wheat) can damage your digestive tract and reset your progress. After you make it through the 30 days, you can slowly start adding back some of the “lesser evil” foods (like dairy and legumes) to see how sensitive you are to them.
My experience
So how’d it go? Well, I was about 99% compliant. I had one small glass of champagne to toast my friend’s wedding and the food at the two weddings I went to undoubtedly had sugar and butter in them. I did stick with the most paleo food options available though. I’m claiming success.
The most noticeable outcome is that I lost 15.5 pounds. Of course, Whole30 advocates will tell you that weight loss is not the point. My goal was not to lose weight, but I did want to get rid of some belly fat. My belt loop is now about 1 1/2 notches looser than a month ago and my stomach is the flattest it’s been since college.
I had a few headaches in the first few days. But, after the first week, I felt more clear-headed and had more sustained energy throughout the day.
Was it hard? Not too bad! The social pressure was by far the hardest. I had 3 major obstacles to success in my month of clean eating - 2 weddings and a 3-day conference in New Orleans. Hey, if I can make it through 5 nights of free alcohol and delicious food, anyone can. One of my favorite quotes from the Whole30 description sums it up well:
Quitting heroin is hard. Beating cancer is hard. Drinking your coffee black. Is. Not. Hard.
The toughest for me was the 3rd obstacle - the wedding of one of my best friends from college. Frankly, I felt a little socially awkward drinking a bottle of water instead of holding a bottle of beer or a glass of wine. I actually did quite well until late into the evening when my friend noticed I hadn’t been drinking all night. It was hard to say, “I’m not drinking on your wedding day because I’m doing this self-imposed diet challenge.” I felt worse about disappointing him than any lack of personal enjoyment I might have had from drinking. I did toast him with one small glass of champagne, but that was the only alcohol I had for the whole month.
During these difficult social situations, I frequently thought of the tough love from the Whole30 challenge:
You’re all big boys and girls. Toughen up. Learn to say no (or make your Mom proud and say, “No, thank you”). Learn to stick up for yourself. Just because it’s your sister’s birthday, or your best friend’s wedding, or your company picnic does not mean you have to eat anything. It’s always a choice, and we would hope that you stopped succumbing to peer pressure in 7th grade.
Going out to eat is nearly impossible with the Whole30 rules, so it really forced us to plan ahead and make almost all of our meals at home. We added a ton of wonderful new meals to our recipe book (mostly from the highly-recommended Primal Blueprint Quick and Easy Meals by Mark Sisson of Mark’s Daily Apple).
I wasn’t too hungry most of the time. Eating a lot of protein at every meal allows you to go pretty long without feeling hungry. I even skipped lunch once because of back-to-back meetings and was completely fine (which is not the norm for me). When I got hungry between meals, apples, nuts and hard-boiled eggs make excellent, satiating snacks. When you get hungry on this diet, you just get hungry - you don’t turn into a carb-craving dizzy hulk.
I also started seeking out vegetables. When you’re limited to meat, fruits, vegetables, nuts and seeds, you learn to like vegetables because you know they’re going to be satiating.
The aftermath
After I completed the 30 days, I indulged with a day that included Mexican for lunch (burrito, enchilada, chips & salsa), burger & chips for dinner, and several beers. The food and beer were definitely a treat, but I paid for it the next day. My stomach was not pleased with me and I didn’t end up going to my morning yoga class as a consequence.
The most convincing thing for me that this diet is right is not how good I feel while I’m eating clean (which is pretty good), but just how bad I feel when I’m eating poorly (which is extremely gassy and bloated). If you’re eating crap all the time, your body surely gets used to eating inflammatory foods, but I don’t think your body is going to adapt to a diet of grains and dairy in one lifetime.
Keys to success
Interested in taking on the challenge yourself? Here are my keys to success:
Do it with your partner - if you’re living with someone that’s not eating clean too, it’s going to be tough
Identify your biggest obstacles for the month so you can prepare (mostly mentally)
Plan all your meals each week and get everything in one shopping trip
Get a slow cooker - this was a new device for us and it was a godsend to have tender, seasoned meat ready for us most nights
Whole 9 Life also recommends not to start a Whole30 challenge over the holidays, but if you start today, your last day will be the day before Thanksgiving. Do it!
My intention
In yoga, we often start by setting our intention - both for our practice and for the rest of the day. So what do I intend to do now that I’ve made it through the challenge?
I’m going to loosen the reigns on the rules just a bit. I’ll start drinking a glass or two of wine in the evenings and beer only on social occasions. I’m going to consider eating some dairy and legumes in moderation (still need to research this a bit more). I’m not going to worry about trace amounts of sugar in sauces or condiments. When I eat out, I won’t worry as much about whether the food was cooked in butter or if the sauce has sugar in it.
But there are some new things that I definitely plan to stick to. I’ve learned to like my coffee black. I’m going to avoid diet sodas. I’m going to stick to cooking eggs with coconut oil rather than PAM. I’m going to eat more fruits and vegetables.
Instead of doing a weekly cheat meal or cheat day that many diets recommend, I’m going to try to have more mindful indulgences. I really like Whole 9’s take on the cheat day (part I and part II). They encourage thinking critically about going “cheating”, and enjoying it when you do. The rationale is that your body can handle eating junk on occasion and it’s simply more practical to enjoy celebrations as they come rather than abstaining just because it’s not that specific day of the week. It also means no more binging on carbs and candy and spiking my weight by 5 pounds in a single day.
Finally, I’m going to continue educating myself on why certain foods are thought to be bad and be more mindful of how food affects me. I’m curious to find out how sensitive I am to dairy and legumes. I just found out that tomatoes, eggplant and peppers are in the nightshade family, which can be bad for the gut and joints. Excellent! Another category of food that might cause trouble sigh. The journey is just beginning.
Keep writing down one list of the 5 things you love to do and the 5 things you are good at. They will keep changing, but one day they will match up, and there is your path.
At a restaurant last night I told Siri to “remind me to call Mom when I get home” and since she doesn’t know me well yet she asked me to verify my home address. I did that and got the reminder as soon as the geolocation indicated I was home.
One of my favourite software development quotes is from W Edwards Deming, who says “Cease dependence on mass inspection to achieve quality. Improve the process and build quality into the product in the first place.” That means that testing is not a phase to be performed after development is complete. It needs to be done all the time throughout the delivery process by everybody, using techniques such as behaviour-driven development and acceptance test driven development. It also means that quality is not the responsibility of testers - it’s the responsibility of the whole team. Testers are essential to creating high-quality software, but their job is to make the quality of the system transparent, not to be responsible for that quality.
So you want to start experimenting with some of the great new Rails 3.1 features like the new asset pipeline? Follow these instructions and you’ll stay out of trouble.
If you haven’t already, install rvm. Then fire up Terminal and follow these simple steps:
Make sure rvm is up-to-date:
$ rvm get head
$ rvm reload
Get the latest Ruby (1.9.2p180 is recommended for Rails 3.1):
$ rvm install 1.9.2
$ rvm 1.9.2
Get the latest Rails 3.1rc:
$ gem install rails -v ">=3.1.0rc"
Start a new Rails project:
$ rails new rails3play
$ cd rails3play
Set up a new git repository (optional):
$ git init
Create a new rvm project gemset:
$ rvm --rvmrc --create use 1.9.2@rails3play
This will create a new gemset and project .rvmrc file. Edit the .rvmrc file and uncomment the line in the bundler section at the bottom to add ./bin to your $PATH.
Note: rvm will only add this directory to your path when you’re within the project directory, so no worries about it messing up other stuff.
#
# If you use bundler and would like to run bundle each time you enter the
# directory, you can uncomment the following code.
#
export PATH="./bin:$PATH"
This is an important step based on the comments from Yehuda’s blog post about why you should always use bundle exec. Read the post and comments if you want all the background, but essentially this allows you to run executables like rake instead of bundle exec rake and know that you are running the correct version of rake based on properly-resolved Bundler dependencies.
Now you need to leave and re-enter your project’s directory for the new .rvmrc settings to apply:
$ cd ..
$ cd rails3play
Next, run bundle install with the --binstubs flag to create local executable wrappers:
$ bundle install --binstubs
You should now have a new Rails 3.1 project with safe executable gems that respect your Gemfile. Oh, and if you’re using using git:
$ git add .
$ git commit -m "Initial commit"
The conventional wisdom is that you should be checking in your .rvmrc, Gemfile.lock and the new bin directory, so don’t worry about adding anything to .gitignore.
So that’s that’s it! Go make something cool! If you run into any problems, hit me up on twitter
What is the humble approach to product design? Pay attention. Notice which things are working and which aren’t. Experiment and iterate. Question your assumptions. Remember that you are wrong about a lot of things. Watch for the signals. Lose your technical and design snobbery. Whatever works, works.