When I had originally set up the database I just went with the MySQL defaults without too much research. I ended up with having
latin1 database encoding and had no real understanding of the storage engine being used. What I really needed was to have default character encoding of
utf-8, and the storage engine to be InnoDB.
If you are wondering what your own database storage engine and character encoding are, here are the MySQL commands to check that.
Check the storage engine that you are using:
select table_name,engine from information_schema.tables where table_schema =
Check the character encoding of your data in each database table:
select c.character_set_name from information_schema.tables as t,
information_schema.collation_character_set_applicability as c where c.collation_name =
t.table_collation and t.table_schema = "your_db";
To change a table's character encoding to
ALTER TABLE tableNameCONVERT TO CHARACTER SET UTF8;
To change the storage engine to InnoDB:
ALTER TABLE tbl_name ENGINE = InnoDB;
Engineering Mistake #7. Lacking PHP Experience Yet Building a Live PHP Application
Prior to working on the ComeHike site, I was primarily a Java programmer. The trend with Java is fewer start-ups are using it as their primary language. New start-ups tend to choose newer and more nimble languages. If I was starting ComeHike today, I probably would have chosen Ruby on Rails. When I was starting ComeHike, I knew how to get the application up and running within minutes using PHP, so I chose to prototype in PHP.
The idea was always that if the site matures, I'll switch to a "cooler" or trendier language. But switching languages and platforms always seems to be a lower priority than bug fixing, talking with customers, or adding new features. So naturally I have never gotten around to switching platforms or languages.
When I started with ComeHike, I knew PHP at a pretty novice level. Since my goal was to rapidly iterate and constantly improve the site with new features and bug fixes, you can imagine the problems caused by the combination of my "haste makes waste" approach and my novice level knowledge of PHP.
Many of the problems rooted by my "hacking around" still sometimes resurface on the site as users find new and creative ways to expose them.
Engineering Mistake #8. Focusing on Development Speed Rather Than Quality
Ultimately, in trying to iterate very fast, I produced many poorly made features that turned off my users. The ideas behind the features were not bad, but the execution was poor due to too much haste and at times lack of discipline on my part. The haste was natural because I was very excited to put these features out into the world and show them to potential users. But as someone trying to create a nice community and useful site, these mistakes were very damaging as showing low-quality and buggy features to users turned them off more than excited them.
Over time I had to adjust my approach and discipline myself to be more patient with features, and make up for being able to produce less features by being more selective about which of the features get built and which get rejected.
Engineering Mistake #9. Didn't Keep SEO Up to Date
At one point, a large number of content pages on ComeHike were ranking in the top 10 of Google search results for thousands of long-tail searches. This gave the site 150% month-over-month growth in traffic coming from search. Then, suddenly, the growth stopped and actually fell quite precipitously. As a site owner, you can imagine the emotional uplift of seeing the site on which you worked so hard experience such amazing growth. You can also imagine how disheartening it was to lose most of that traffic after being penalized by Google after its Panda search algorithm update release. The road back to being de-penalized by Google is an emotionally difficult one that requires lots of work and patience.
Here is a very quick checklist for what you can do to avoid being penalized by this new Google update:
- Do not have thousands of auto-generated pages with lots of overlapping content.
- Make sure your content is original.
- Make sure your pages have plenty of high-quality content that is so good that it would be recommended by people to their friends.
- Do not have a high ad-to-content ratio.
To take the low-quality pages out of the Google index, simply add this tag to your header for those pages:
<META NAME="ROBOTS" CONTENT="NOINDEX, NOFOLLOW">
There is much more to the topic of Google's Panda update, but for this article, I wanted to caution you not to make the same mistake with it that I made.
Engineering Mistake #10. Treating Engineering as the Means to an End
This is a more holistic point and maybe a realization that I inadvertently came to as the site matured. I faced various consequences for underestimating or undervaluing the engineering depth that is needed to create a robust site.
It was easy for me to fall into that kind of a trap because many signals indicate that technology is rapidly becoming a commodity. Putting up and maintaining a site has become ridiculously cheap. Development costs also have shrunk as now one person can do what it took a whole team to do 10 years ago. And if I make engineering mistakes, the various cloud-based solutions can accommodate my oversights.
In hindsight, I came to realize that I was mistaken in such thinking and that mindset led me to make numerous poor engineering decisions for the sake of more rapidly bringing features to market. In my impatient hurry, I did not see some tasks through until the end.