By Daniel Lopes
on March 5, 2014
There’s a lot of talk about how important iterations are to make a great product. But what we don't talk about enough is the extent of improvement you get with each iteration. If you iterate one more time can you make your new feature way better or just slightly better?
Everybody wants to ship the perfect website. One that has great pictures and animations, or the perfect feature with a carefully crafted and optimized user interface. But if your first few iterations accomplished 80% percent of what your users need, and your next iteration will improve it by 5% but will cost you a week, you should consider it good enough and move on to the next big thing for your project.
I've been part of projects that spent too much time with small enhancements that didn't make our users 200% better at what they're trying to accomplish, but just 5%, at most. And while the team is working on those small tweaks there are other areas of the app that could use more attention to add more value. A few months in, you'll realize that you didn't make significant progress, you didn't ship feature X that turned out to be vital, but feature Y and Z that are already good enough we only marginally improved.
To avoid this trap I'm constantly asking myself if there's something preventing the usage of the feature we just built. If the answer is no, I timebox the next iteration and after that time is over, it doesn't matter if it's not perfect yet, it's time to ship it and move on to the next big leap. The next big leap could be a brand new feature or a big refactoring/redesign of another feature that is going to make our users life a lot better, not just slightly better.
By Daniel Lopes
on February 26, 2014
I've being collecting reference for years and that helps with both the visual/illustration side of design but also with problem solving in general. I split my references in two separate categories:
Visual design inspiration
If you ever had art classes and tried to learn how to draw you know that the first lessons are always to copy a reference object. All illustrators, no exception, uses reference for drawing. And by using a reference or copying something you start to build a library in our head of what works well together and what doesn't.
Although, most of the time, the visual side of web software, isn't something hard to illustrate it still helps me to collect a bunch visual design inspiration. By doing that I build my own mental library with colors, shades, styles and etc.
For years I've being keeping screenshots of everything I consider interesting on the visual side. For that, websites like Dribbble are quite helpful too.
UI pattern inspiration
Another category I pay attention to are UI patterns. This is different than the visual side. Because with visual I'm only focusing on the illustration, but UI patterns is a much deeper concept for me.
With patterns I analyze how things work together in the context of a the whole idea of a feature. For instance, Tumblr, when you hit the publish button you also see an arrow on the left side with more options that behaves like a dropdown menu. I collect that or by taking screenshots or recording small videos and writing a lot of notes of what caught my attention.
I add these patterns to my mental library so I can reuse them on my own projects when I see myself in a problem that could be solved in a similar fashion.
Today, I keep two private boards on my Pinterest, one for Visual Design and another for UI Patterns. They are both private because I tend to write big descriptions of what I've liked and sometimes where that UI pattern or visual style would work on my current projects.
Inspiration VS Rip-off
The process of building your own reference library is something crucial for any type of creative job. That works for illustrators, photographers, writers, programmers which is no different for UI Designers.
What is important to understand is influence and inspiration is different than outright copying something.
If you deeply understand the problem you are trying to solve and somebody else has already come-up with a UI pattern or visual design that solves the same problem, great! Now you can adapt it to your problem, but it's important to remember that adapting is very different than saying: I need a forum, so I'm gonna clone Google Groups and merge that into my app. Or I like Basecamp's look and feel and I'm gonna clone their CSS.
By trying an already invented UI Pattern and or Visual design with knowledge of the problem; you'll always end up asking different questions. That process will help you come up with a genuine and unique solution to your own.
By Daniel Lopes
on January 27, 2014
It is human nature to adapt and accept the current state of things as good enough. That's not so harmful with disciplines that have existed for thousands of years like civil engineering and architecture, but in software development, it's dangerous to assume that we've reached a state of maturity. For example, in web development, I would love to see more innovation around how designers and developers interact with each other.
To remind myself of our field's infancy, and the infinite room for growth and improvement, I love watching and re-watching this presentation from Brett Victor.
What do you think the future of programming could be?
By Daniel Lopes
on January 20, 2014
Our product team takes an iterative approach to software design which has a strong impact on our view/controller layer, and our Rails app needs to be able to handle that. Making sure the backend still works and keeping a good level of confidence for future iterations is challenging, but crucial to us.
Automated tests are meant to increase confidence for future changes. A popular practice in the Ruby world are acceptance specs that interact with your app through the interface by using tools like Cucumber, RSpec and Capybara. In theory this would cover the whole stack from browser to database, making sure everything works. The problem is acceptance specs are usually tied to your markup, which can have a high cost of flexibility in the view layer.
If you don't use css classes/ids to drive Capybara, or if you are writing semantically "correct" html your life can be a bit easier. But in our case that's not necessarily true. When you are rethinking your views over and over again, you can easily end up changing all of your markup.
Even with high coverage, acceptance tests tend to focus on high level behavior and happy paths, or the obvious bad paths. But the bugs that have a higher cost to fix are usually the edge cases, ones that are hard to cover, even with model specs.
I've experimented with dropping any type of acceptance specs, view specs, or anything that had contact with the view/controller layer, but the result wasn't great and I ended up going back to cucumber after a few weeks.
For the past year, we decided to experiment with heavy test coverage on controllers, in lieu of the standard best practice of having acceptance specs.
The style of controller tests we use rely heavily on touching the model layer and view files, without mocks or stubs. For us, it ensures the integration between our controllers and models. Admittedly, it makes our controller tests slower, but not as slow as anything that uses a browser engine to traverse the dom tree. And you are still able to run your model tests in isolation, which tend to be pretty fast.
Here’s a simplified version of a controller spec:
At line 4 there’s a
render_views method in our controller spec to make sure our views are rendering properly without syntax bugs. It doesn't cover the semantics of our views like capybara, but we don't need that because most of the UI bugs will be caught by our design flow and QA. Plus, those bugs are super easy to fix, even in production.
Maybe DHH decided to name controller tests functional for a reason :)
I hope you enjoyed my first post. I’m planning to write more about our product development practices at The Starter League. I’d love to hear more from you all and welcome any feedback you have on my writing!
By Arjun Venkataswamy
on December 11, 2013
Chicago Public Schools recently announced that they will start requiring computer science for high school graduation. Sounds great, right? Not everyone thinks so. The growing strength of the computer science literacy movement has provoked some backlash, such as Jathan Sadowski's column in Wired.
He thinks that not everyone needs to know how to code, and I agree to an extent. The ecosystem of the world can only thrive with diversity, and that means not everyone can or should be a computer scientist. But I would guess that most "non-technical" people wrote themselves out of programming without having a good sense of either their own potential or the massive power provided by programming and computational thinking.
Sadowski goes on to make the sensationalist claim that teaching programming as a required class will widen the gap between the rich and poor. His most interesting argument is that these programming classes would divert limited and scare resources from other problems in struggling schools, such as basic English literacy. As a former high school math teacher, this idea resonates with me. If we can't even get the basics right, why are we worrying about luxuries like programming?
But academic skills don't stay locked up in a single subject. Reading doesn't only happen in English class and math doesn't only happen in math class. Modern math education, like programming, is about finding patterns, modeling situations, thinking logically and communicating precisely. However, since programming has a focus on building, some students who have a hard time in math respond well to the creative, open-ended nature of writing computer programs. Programming can even help discouraged students get re-energized about school, as they experience academic success in a way they hadn't thought possible.
This last idea is what really excites me. It's what makes me go from "some students would love programming" to "everyone needs to be exposed to programming." At The Starter League we see students every day who never considered themselves "tech" people but end up building amazing web applications. Some of them continue on to be professional developers and some decide that their core strengths lie in other areas. But almost all of them realize this is something they can do. They no longer have to wait for someone else to create technology that solves a problem in their life. And while not every problem is solvable with an app, the ability to participate in and even contribute to our growing technological conversation is priceless.
Too many of the pro-computer-science-education arguments floating around are related to jobs and the economy. These views seem a bit myopic. Our schools are meant for more than corporate training. Education should help students challenge their preconceptions about the world and about themselves. We need to inspire the disenfranchised, disinterested kids who never thought programming was for them. This is our goal with the teacher training partnerships we've set up with Chicago Public Schools and the direct teaching partnerships we have with Northwestern's CTD program and The Latin School of Chicago. Programming, if taught well, can be as exciting and broadening as learning how to read and write.
Selfishly, we in the tech community should be overjoyed if a much wider swath of the population gets exposed to programming. We are overwhelmingly White/Asian, male and middle class. We have certain world views that limits which problems we think are important and what kinds of software gets built. A lot of people don't see themselves in the ranks of the tech community and they don't bother joining. One solution is to ensure a diverse group of students can experience technical success and what it's like to transform an idea into reality with code. This is what a required computer science class can do. Not every student is going to want to become a programmer, but a much more varied group would start considering the possibilities. And when they grow up, who knows what they'll build.
By Mike McGee
on December 5, 2013
"Wow! I have a really awesome landlord!"
This is not a sentence you hear everyday. Actually, this may be a sentence you have never heard before! However, if more landlords sign up to use Rentalutions, this sentence may start to find its way on t-shirts across the USA!
Recently, I had a chance to talk with Ryan Coon, a member of our Winter 2012 Web Development class at The Starter League. He is now the co-founder of a new startup called Rentalutions, a web app that provides easy-to-use tools for mom-and-pop landlords.
How did you come up with the idea?
Since I started renting apartments in 2004 as a student, it always amazed me that I was never able to pay rent online. As I started thinking more about this problem, I realized that it’s not only rent payments that are being done the same way they have been for decades (pen and paper). Before deciding to pursue this idea, I spoke with dozens of friends who own rental properties to understand their pain points and problems that technology could solve.
With Rentalutions, landlords can manage their listings in a much easier and engaging way.
You are also a member of the Winter 2012 Web Development class at The Starter League. Did learning how to build web apps help you in building Rentalutions?
My co-founder, Laurence, and I knew all along that we were going to hire a contract developer to build our MVP. I remember telling Neal in my interview before The Starter League (back then it was Code Academy) that my goals for the program were to be able to communicate with a developer and to understand how he would go about building the app. Even though we now have a kickass developer on our team who handles the development, I find it helpful to fully understand the MVC framework.
How have landlords been receiving this so far?
As you can imagine, landlords are VERY slow to adopt new technology solutions. There are a lot of reasons for this, but the biggest is that they don’t want their rent payments to go missing. That being said, the landlords who have started using Rentalutions love it. In November alone, we handled over $115,000 in rent payments for our landlords!
You are a member of 1871. Has it been helpful in growing your business?
Rentalutions has called 1871 home since the space opened its doors in May 2012. The benefits that we gained have changed a lot over this period of time. In the beginning, we found all of the workshops to be extremely helpful. After launching a product, we started taking advantage of the office hours to refine our product and thinking. Nowadays, the major benefit is having a space to call home. It’s a place that our small team can work and collaborate.
In going through your site, I noticed that you guys have put a lot of energy into your blog. How do you utilize blogging with Rentalutions?
Our blog is one of the primary drivers of new customers for our business. We do this by providing high-quality educational content that landlords can find when searching for answers to their problems. For example, many small landlords don’t know what questions to ask potential renters. When they search for this, they will likely find our blog on questions to ask potential new tenants.
Earlier this year, we spent a large amount of money on paid search marketing. We quickly realized that paying per click was unsustainable for our business, so we shifted to a content marketing strategy. So far, this change has worked really well for us.
What have you learned the most in building Rentalutions?
The most important thing that I have learned in building Rentalutions is how much patience is required to build something great. Everyone would love to build the next Instagram or Snapchat, but the odds of that are extremely low. Building something that has a high chance of success takes hard work, dedication and patience. We’ve been building Rentalutions for about 18 months and still have a long way to go.
What's the next milestone for Rentalutions?
Our big focus right now is on increasing the conversion rate from signup to paying customer. We’re doing this by adding some additional guidance and in-app marketing throughout. A lot of the things we’re doing are the result of suggestions from a fellow 1871 member.
Rentalutions has also had some big news in the last couple months! They have partnered with Apartments.com and the leading landlord education site, Rental Property Reporter to offer discounted pricing on their web services. If you are a landlord in need of a new way to manage, I recommend checking out Rentalutions today!