Thursday, September 27, 2012

Community-owned Hackerspace


A hackerspace or hackspace (also referred to as a hacklab, makerspace or creative space) is a location where people with common interests, often in computers, technology, science, digital art or electronic art, can meet, socialise and/or collaborate. – Wikipedia

Somehow, I do like the idea of hackerspace. I am a believer if we can group a bunch of passionate like-minded people together, we can do great things together. A comfortable venue for people to easily hangout (on purpose or bumping into each other) is the fundamental of friendship, which foster trust, and eventually allow them to work on projects together (or help each other in various ways), and hopefully form the culture of hacking and creation.

How is hackerspace different from co-working space?

Co-working space is just physical space where anyone can come in to work, equipped with a desk and Internet access for a fee, and perhaps to hold a meeting. You will probably meet all walks of life (not necessary like-minded people), and there is no culture or atmosphere to interact with each other, or to work together. Hackerspace should have the crowd you are looking forward to meet, who understand your lingo, share your passion and can’t wait to help or complement each other.

I believe the infrastructure between a co-working space and hackerspace might be almost similar, but not quite the same (as a Vietnamese told me, same same but different). A co-working place need to provide more rentable places to be profitable, thus the more the table the merrier. A hackerspace should provide infrastructure which encourage experimentation, collaboration, idea & knowledge sharing, and perhaps a quiet space for those who need to concentrate and work. Maybe a lab for hardware hacking, a place to showcase your product so everyone could use it and gave feedback, a reading corner, a place people where people who like to hangout (on weekends as well) because it’s fun and cool.

I might be a software programmer, which I might also be interested to learn about hardware hacking, and I don’t mind trying some art creation. A hackerspace should have enough diversification which can co-exist and complement each other.

Isn’t the existing hackerspace good enough?

I didn’t actually went to any hackerspace before (I am not aware of any which is interesting enough), but I did visit fluentspace once. It’s nice and spacious, with good working chair. Some interesting people work there, some freelancers, some overseas talent on a short visit at Malaysia.

Why I didn’t go there often? I could find myself a few excuses, and let see if it hold:

  • I didn’t know the people there well enough to attract me to the place. Why not go there and make some friends? Well, I’m a shy person. I wish there are some ways to find out who is working there, what are they working on, and find something which interest me.
  • The fee is slightly high for me, RM 600 for a desk and a daily pass of RM 40 per day. I am not saying it’s expensive by market rate, but I am working from home (you can’t beat free). If I am comfortable working from home, why am I looking for a hackerspace? I would probably work from home most of the time (especially when I need to concentrate), but I would like work together with other people occasionally, maybe once a week, or maybe have a more relaxed working day on weekend (btw, fluent space closed at 7pm and weekends). In my mind, I was hoping it would open on weekend for some hacking fun, and perhaps a more flexible walk-in fee (maybe RM 10) for half a day (it’s good for the business if they have surplus).
  • Location: though Kelana Jaya is not that far away from Puchong, but the idea of traffic jam, toll and parking already made me feel tired. It might sounds like a lame excuse, which I agreed this is just a minor factor (it would be cool if it’s within walking distance, or within LRT reach which Puchong have none).
  • Most important is lack of updates on what’s going on there (or who is there working on what), thus nothing to attract me to visit.

How to start a hackerpace?

Personally, I don’t believe a hackerspace should be a business; if you focus (on worry) about profitability, we can’t really provide a real “hacker” experience for the community. Without a business model, how do we sustain the place?

We could borrow the idea from Wikipedia, where every year a donation is held to secure enough funding to run the place for a year. The money come from poor hackers like me, and hopefully some hackers who sold their startup for millions, and perhaps some corporate sponsors like Google, Amazon, Microsoft, MDEC and etc.

We could do it ala Kickstarter way: create a plan, crunch the number, and ask the community if they would like to support the idea. It helps to validate if the idea serve the needs of the community, and the community would get on vote on the location on the 1st hackerspace (follow the majority backers). Those who contribute RM 1000 probably will get 1 year free membership; if you sponsor RM 20,000, you get to name the place (e.g. Hackerspace Professor X).

How to run it?

Trust or Foundation

The place should be managed by a trust or foundation, so that no one party owns the place, and the board members would be elected on a yearly basis (people will move on eventually, and fresh bloods can take over with more innovations and ideas).

Decentralized Structure

I would like to toy with a decentralized structure, where the place is truly run by the community without central management. One thing I dislike about physical office is that the owner needs to be physically present to manage the place (open up, close up, etc.), or employ someone trustworthy (hard to come by) to manage it on behalf; when the worker is on MC, the owner need to run the errant; if the owner is on MC, the place is closed.

For starter, a group of trustworthy people (the keeper) would have access (keys) to the place, so it solves the problem partially where multiple people run the place together in rotation (with backup). What happens when every keeper decide to go on holiday with no one to man the place? How about a member could send a request to enter the place, then the keepers could approve it and perform a remote unlock of door? Or a member could request for a unlock key a day earlier, and use it to enter the place for the day. For this to work, it requires two things: trust and infrastructure.

Trusted Community

A member of hackerspace would be required to create a profile, with your Facebook, Google+, Twitter, Github or LinkedIn so that others could connect with you, and know you a little bit better. You would need to update what are you working on, and what do you hope to achieve by working in hackerspace. Perhaps I am building a Wikipedia for hackers, and I would like to learn about hardware hacking as well.

In order for you to become a permanent member (allow access to the place even at 2am midnight), someone must vouch for you (know you better, make sure you are not here to sell drugs or planning to break-in), or probably a 3 months probation.

A normal member or guest could still use the place when someone is around, though profile creation is still very much encouraged.

Open Source Design

To create a self-governed hackerspace, I believe it requires a certain hardware and software infrastructure, where members would work together to make things to improve the experience.

On the hardware front, we need hacking to allow remote door access, or automatic changing of access code, or a remote lockdown when break-in is detected. Perhaps a smarter surveillance system, notifying the keeper when motion is detected when no one sign in.

On the software front, we need an app to know who is in the house for the day, what they are working on, and what events are planned for the day. Perhaps who is looking for what kind of help, or who is offering what.

We would open sourced such hackerspace infrastructure design, in order to help others create a better hackerspace.

Passport System

Location is the main drawback of a hackerspace, as we can't have a single central space which suits everyone. What we can do is to encourage more people to open hackerspace (with the help of open source design) at their local community, encourage existing hackerspace to form an alliance, or perhaps turn “unofficial” places into a hackerspace (cafĂ©, office sharing, house, etc.).

With a passport system, a member could travel to any hackerspace, either free or with a discounted rate. Most of these hackerspace will share the common infrastructure  (you would know who is there and working on what, so you would feel less like a stranger). With the app, we could easily find hackerspace near us, or any pop-up hackerspace.

24/7

I would like a see a hackerspace which opens 24/7, thus the decentralized structure is required to avoid bottleneck. Some people like ungodly morning hours (5am), some like late nights (2am), and some people only have time on weekends and holidays, and the place should be flexible enough to serve these needs. Sometimes when I am in the flow, and the last thing I need is people telling me to go home because they are closing.

Fee

Not all hackers are equal: some are still struggling with money, while some have some to spare, while others are thinking of ways to share their wealth in a meaningful way. The concept is to pool money from everyone, so that the community could enjoy the benefits.

Most of the setup and running cost are covered by the yearly donation, but fee are still collected to instill commitment, and cover extra benefits like food. Only minimum fee are collected. People could pay RM 200 for a monthly pass, or RM 10 for a day pass, where the fee are fairly negligible with enough flexibility. To encourage new comers, there is a 3 day free pass for first timer.

If you can't afford to pay, we could offer sponsorship in exchange for your work on one of our hackerspace open source project.

Events

I think events are a core part of community. Besides getting speakers to share their ideas and experience, I think it’s nice to have idea validation day, demo day and let’s work on something for the community day as well.

Most events should be suggested by the community, and if it manage to get enough backers, then the show shall goes live; it there is not enough backers, perhaps it’s time to iterate and refine again.

Play Together

Besides hacking together, it's important to play together as well (or at least trying something outside of hacking). Card or board games, organize paint ball sessions or hiking trips; and to test the limit of your comfort zone, a salsa session.

If you insist on going back to geeky stuff, a LAN game or hacking-on-an-island wouldn't hurt as well.

Conclusion


The Cube
I always pass by The Cube in Puchong, which is a RM 4 million semi-d shop house, 3 storeys with plenty of private parking spaces. I always dream that when I make it, I’ll turn one of these baby into a hackerspace for everyone (then again, RM 4 million could do a lot for a startup). Then Setia Walk just opened up, which is a nice community shop+mall (nice environment with water features, and plenty of food), and plenty of office spaces (hopefully affordable). Maybe that would be nice.

Setia Walk
This is not an idea which I alone could accomplish, and even if I am capable of it, it would be meaningless without the community behind it. Some might think that it is just a fancy physical space, but I believe it’s the place which will trigger a shift of culture and mindset. I still remember when I quit my job 6 years ago, not knowing any friends who did the same, and almost dip into depression, but luckily I survive the change. If hackerspace was there, the survival rate would be higher, and the co-operation rate would be higher, and dreams beyond one person’s imagination would come true.

Monday, September 24, 2012

Review: Freedom Inc

I believe this is a good book (or at least I believe in the idea), but sadly it under-delivered by throwing too many elements which make up Freedom Inc. (you know you wanted to create Freedom Inc., yet there are too many ideas and lessons being thrown around). Like most books, at least it has some good case studies.

Freedom Inc. - Free your Employees and Let Them Lead Your Business to Higher Productivity, Profits and Growth. It might seems like a "dangerous" idea to toy with, believing that your employee are motivated and responsible enough to act in the best interest of the company without the need of tight supervision or told exactly what to do, but I believe that's the fundamental trust between employee and employer. Once you establish the trust and freedom culture, everyone start to take responsibility to make the company better, and self-govern among themselves, and the entire eco-system would prosper.

Notes:


  • Management for the 3%: born of policies to control a small bunch and inconvenient the rest.
  • Toyota: allow feedback to improve existing procedures; not push down by management.
  • Believe in people willingness to do good job and to learn.
  • "How" company are fundamentally hostile environments for the ideas proposed by the front-line people.
  • Culture eat strategy for breakfast: you can have the best plan and the culture isn't going to let it happen, it's going to die ...
  • The cost of stress
  • Perceived control reduced stress
  • From Artisan to Automation
  • The experiment of 5 monkey and a Banana - the way corporate cultures are being sustained and eventually squash all attempts at change.
  • Entrepreneurial Culture -> Real Manager Required -> Discipline (procedure & policies)
  • Change start from top -> Anubi Baboom
  • Freedom is neither hierarchy or anarchy
  • Ordered Liberty: self discipline form of organization
  • Rather than saying "you're supposed to use new oak barrel", you ask, "how to make the best wine?"
  • Zappos: after 4 weeks paid training, offer compensation for people to quit, to ensure people really share Zappos' vision.
  • Vision is more often something to be put on the walls, pasted into annual report and otherwise forgotten.
  • People start owning the company's vision only when they are free to make their own decision to pursuit it.
  • If the environment is right, then we do the product right and we make tons of money and have a blast. You can't force making money and have a blast.
  • Freedom: it's culture and condition to make decision on your own, and freedom to express your art, craft and passion.
  • People don't resist change, they resist being changed.
  • Discuss in a town hall style meeting.
  • Organization chart isn't very useful.
  • Natural work group: get the right people come together, to the right work, and do it right.
  • We are here to make products, good products, not hours.
  • We'll learn by doing, being people of good faith, of common sense, and of good will.
  • Does your company organization chart shows that man is not intelligent, lazy, irresponsible, are thieves and bad?
  • The good prince is one who, by eliminating the constraints and exclusiveness, allows everyone to blossoms as he wishes.
  • Front-line people set the procedures.
  • Once you wakup everyday, you're at risk. There is only one state with zero risk, and it happens when you're dead. Talk about "love freedom" with risk "or die".
  • Change CEO's behavior from talking to listening, removing bureaucratic symbol and practices that treat people as intrinsically inferior, and radically transforming managers' "how" habits into "why" questions.
  • Self governance.
  • People treated with consideration, support for growth and self direction, they self-motivate and take initiatives.
  • When environment is controlling and deprives people of their universal needs, motivation become externally controlled and people do only what they are rewarded or punished for.
  • Octicon Culture:
    • Multi-job
    • No department, replaced by project leader, guru to ensure professional standard, mentors to support. No more job title.
    • Computer System: allow work from anywhere.
    • No wall or partitions, replaced by plants and trees on wheel.
  • Employee want to be treated as independent individual who are willing to take responsibility.
  • Employee want to develop within their jobs and gain new experience, exciting and challenging tasks are more important than status and titles.
  • Employee desires as much freedom as possible, yet accept the necessity of a clear and structured framework.
  • The more freedom ... we as a company want to give to staff, the more clarity we must create about mission, vision, strategy and values.
  • When people are promised freedom but then being denied it, reacted more strongly than those who has no expectation of freedom.
  • If he wanted to build a free environment, he had to transform the executives' arrogant attitude towards Aviss front-line person - get them to become trainee.
  • Self motivation and freedom to act as if this is your own company.
  • Personal & fair, de-bureaucratizing and re-humanizing.
  • Illusion of Control: People will game the system.
  • Fairness & Respect.
  • Make more mistakes than anyone else, but never make the same mistake twice.
  • The genuine commitment to satisfying people's needs is what convinced employees to join in.



Saturday, September 22, 2012

Freelance Programmer Survival Manual

Since I am in the process of “retiring” from freelancing, I think it might fun to share some of the things I  learn from freelancing.

The best thing of being a freelancer for me is that I get to do what I love (programming), and able to make an honest living out of it. Besides, I get to work from home (no traffic), and don’t get to blame the bosses and company, though I still need to deal with challenging customers. There are a few painstaking sides of being a freelancer: dealing with customers who didn’t understand or honored the scope of work, some people just like endless meeting and those who refuse to pay up.

Define the Contract

At the very minimum, you MUST have some kind of documentation to record the scope of work in black and white. Though it’s impossible to be 100% foolproof, but physical record is necessary when something goes awry. Besides the scope of work:

  • State clearly what is included and what is NOT included
  • Payment condition (30% upfront, 70% upon completion; if the delay is on the customer side - more than 6 months from project kickstart, the vendor automatically eligible for full payment of work done)
  • Warranty period (2 months)
  • Maintenance Contract (mandatory or not, start automatically after warranty period ends, must be continuous; online or on-site support; what is included, and what not)
  • Adhoc Maintenance (RM 800 per day, minimum one day)


The purpose of the documentation is just to cover our ass when something goes wrong (change of contact person, misunderstanding, dealing with an asshole, etc.). It doesn’t mean we must follow the scope of work 100%, as small freelancing project usually start with slightly incomplete scope and require more flexibility to keep things moving forward. Put in some buffer (no buffer or being too optimistic usually means losing money), and use your wisdom.

A Purchase Order from the customer is very IMPORTANT (it state the customer buying something from you at a price); without such document, you can’t proof the project exist, or proof the total payment amount.

It’s all about the Customer

The challenges of the project largely depends on the person you are dealing with, the customer. After sometime, I begin to grade if the customer is i) a good person ii) demanding type iii) win-lose type. I will give a lower price to a customer who I believe to have good character, and I would hike up the price if he is a demanding or difficult to deal with type, and would run away if I can identify an asshole or someone with unrealistic expectation. The customer affect the time and effort required to complete the project.

[2012-09-28: based on feedback from zalew]
It's true that it's hard to judge someone's character (especially when you just met them), what's more unpredictable scenario such as "he can have partners who will make your life a living hell" or "another person took over the project". It's true that it's always unwise to under-charge, but it pretty much depends on how "desperate" you are (plenty of jobs on hand? charge more. Nothing to do? a little discount to close the deal is better than doing nothing).

When someone ask you to do something for free or give discounts because he will give you more future business, IGNORE them.

If you are dealing with a middle-man, the risk is higher: they might not quite understand the scope of work (wrong information means higher risk of failure), and if the customer don’t pay, the middle-man don’t pay. Most of the time, the middle-man will always take care of their own interest first.

When in doubt, either ask for higher upfront payment (50%) and markup higher, or just run.

When someone ask for under-table money, you know things will just get more complicated in one way or another. DON’T DO IT.

Small is Good

I like small scope with small payment, it’s faster, easier with less complication. If a project is too big, break it down to phases with INDEPENDENT scope of work and payment schedule (if the project got cancelled mid-way, you still get paid for some of the completed work).

Collecting Money

Always take upfront payment, and DON'T start work (besides attending meeting and writing scope of work) before you can touch the money. 30% is the norm, and 50% if the risk is higher. The customer might claim the finance depart is processing the payment (around 1 month), and he require you to start immediately because the project is behind schedule. Ask the finance to expedite the payment, or you can start one month later. Lesson learned: I have a customer who refuse to release the upfront payment because I haven’t completely delivered the project, WTF!

I am lucky that most of my customers are good paymaster, and lately I start to understand why. Most of them are either my friends, my family’s friends or my relatives: meaning I have some kind of personal relationship with them, and if they don’t pay, words will spread to our common friends. Reputable corporation with a close friend working inside is good, and repeating customers are the best.

Middle-man are the worst. I deal with 3 of them before:

  • The first one is a very honorable person, he pays me even though he didn’t manage to collect the payment from his customer.
  • The second one is an asshole. The customer pay him partially, and he keep all the money for himself; when the customer didn’t settle the rest of the payment, he just run away.
  • The 3rd one make excuses about late payment, then run away as well.


You should do the following to protect your interest:

  • ALWAYS put in some kind of licensing control in the software, preferably with a few level of control. If the customer are reluctant to pay, popup reminder (“The trial license has expired. Please renew the license.”) or limit certain features. If it’s clear the customer would not pay, just make sure they don’t get to use your product as well.
  • You are in control as long as the customer continue to use the product. Sometimes the project is abandoned, tough luck.
  • Most of the time, customer will make up some lame excuses for not paying, or claiming you are not doing a good job. Some even try to get you to do more work in order to get your rightful payment for job already completed. Be sober and think carefully of your current situation, and not to be manipulated by the customer.
  • Sometimes it's best to cut loses and get out, so that we could move on and focus on better things.
Funny people could refuse to pay you, insist on continue using your product and still pretend to be rightous. I believe we must treat others as we wish others to treat us, and I am always impressed by someone's distorted reality. The hardest thing to learn is how not to be emotionally affected by them, it just ain't worth it.

When to cut losses?

[2012-09-28: based on question from Anonymous] This is a tough one. 

It depends on do you think the customer is a good person in nature, where you still can reason and convince him, perhaps throw in a bit of goodies to close the deal.

I have some troublesome customers before, where I did throw in extra effort just to close the deal. If it's something manageable with a clear end, proceed to close it. Sometimes customer just like the feeling of getting some upper-hand and freebies; or their bosses wanted something which are in the "grey areas", so do the poor employee a favor if it's not too much (remind them that it's a FAVOR!).

Lately I have a customer which I feel he is taking me for a ride, or perhaps he just have a distorted reality when he always wanted things his way (no exactly a reasonable way). I try to have a discussion with him to come up with a amicable solution, but the conversation just isn't working, and I could smell there are more problems brewing if I continue to work with him. Not that he is an evil person, but he like to be coaxed, like others to bow to his way, and he will probably pay me if I can make him happy (I prefer to keep things professional, ahem ...).

Why did I quit?

The main problem with freelancing is that it’s a repeated full cycle from the ground with each new customer, with is time consuming and high risk (you can’t leverage on something to reduce the effort). Industry wisdom says that to create a sustainable freelance or software business, it all lies with the maintenance contract: knowing you have money flowing in year after year without doing much. Though it might sounds good, but yearly contract also means I take the responsibility to constantly service customers with no escape.

As mush as I like programming, freelancing is still pretty much fulfilling others’ business requirements for a fee, and that isn’t very fulfilling for me.

I found something else which are more interesting and meaningful to me, and I found a way to make a living out of it.

Follow Up

Discussion on Hacker News



Tuesday, September 18, 2012

System Reboot 2.0


A computer could function well for up to 3 years, after which maintenance or upgrading work need to put in place to keep it running up to 5 years; and the same cycle applies to software development.

I develop the first version using raw PHP (no framework, trying to develop my own framework at the same time) with MySQL and plenty of copy and modify JavaScript from other website, and that failed miserably due to high maintenance and low quality work (that version 0.1).

For the next version, I know that I needed a framework, and RoR is pretty hot. I didn’t get to use RoR due to deployment environment constraint, thus I use CakePHP which is a pretty good rail-inspired PHP framework. JavaScript isn’t that complicated about 6 years ago, so just jQuery and plenty of plugins is enough to satisfy the users. The stack runs pretty smooth, except some minor upgrade from CakePHP 1.0 to 1.1, 1.2, 1.3 and I ended at 2.0; eventually a local hosting isn’t flexible enough, thus I opt for AWS.

If it ain’t broken, why fix it?

The current stack had served we well for the past 6 years, and I could probably extend it for a few more years due to the still active framework community and fairly well maintained codebase (after all, I am the only programmer). The benefit of an old stack is that I get high productivity, it’s fairly easy and fast to implement new features and modules because the foundation and supporting library is already there, and I am used to the ins and outs of the system (no more time consuming debugging of a new component). The downside is that I might had made some lousy decisions on how some things should work, and still pay the price to maintain it because it’s too costly to change. The thing is, I don’t know anything bad about the current system, because I haven’t use a better system. I do enjoy the high productivity, but there are always some temptations.

I wanted to develop a new app, and was planning to use the existing stack because it shall be fast and easy. Then again, I admit I am a bit tired of the old stack. I was fascinated by Google App Engine, Python or Ruby, and heard so much about CoffeeScript and Backbone. I might not find the will to upgrade the existing app to a new stack; but if it’s to develop something new, I should probably learn something new as well. Without much logical reasoning, I decided to seek out a new stack.

Reasons for Reboot?


  • Platform: DIY platform vs. managed platform like Google App Engine
  • NoSql vs. RDBMS
  • Temptation of new language: is python and ruby a step forward from PHP?
  • Micro Framework: it less magic and automation a better choice?
  • The rise of JavaScript (perhaps CoffeeScript)
  • Build system for front-end scripts and resources
  • UI and Responsive web design
  • From a publication-centric to user contribution-centric
  • Unloading of old baggage

Google App Engine

I decide to use Google App Engine. I understand the proprietary and lockdown nature of things (with potential of regret if Google screw up), but I do like the idea of being liberated from system admin stuff (webserver and database installation and configuration, security, scalability, etc.). Besides, it had some nice services like Images (Picasa-grade image serving), Memcache and Task Queues. The downside is dependency on BigTable, and with no possibility of exploring MongoDB; though MySql is possible on GAE, but the setup felt like second class citizen. Another downside is I can’t install almost can't install anything on GAE (except pure Python code without disk I/O). There are definitely some advantages and drawbacks, but I choose to let Google handle the platform sociability part.

The road map and bug fixed might be a bit unpredictable, with certain issues remain unresolved for years (fallen into the black hole) and certain feature taking 4 years to arrive. I am hoping things a more matured after 4 years.

Meteor seems like a possible trend, where we don’t even need to manage the webserver or code on it anymore, where the only coding necessary is JavaScript for the browser. Its looks awesome and magical, yet I am not ready to embrace it yet due to the fact that “I lost control of the webserver”, and too much wizardry and automation kind of put me cautionary mode.

NoSql: BigTable

Why use NoSql? It’s because that’s the preferred storage on GAE, and I don’t mind exploring the NoSql way. The big advantage is that you got a really big database where you need it to scale, and schema changing for traditional RDBMS lock up the table big time. I don’t think I would hit such massive scale. I believe there are a lot going on for MongoDB, but sadly it’s not an option opened to me at the moment.

I do like a few cool tricks with BigTable (or NoSql), especially the newer NDB API. It has a few interesting property attributes, such as repeated where you could make a field into list without additional table. With ProtoRPC, you can have enum fields. You can have structured property, it’s like putting another table structure as a column, thus reducing the needs for multiple tables, and inheritance is supported. JSON, GeoPt and Pickle (Python object) are native fields.

The query might be limited (no like statement, no join).

Python

I am bothered by the favoritism gained by Ruby and Python language, and decide to check it out. Language is like a culture (it's about the people and community, with a specific style). PHP doesn’t really have a feature advantage over Java or .NET, I just don’t like strong-typed stuff and enjoy the flexibility of PHP array. Since I am on GAE, python is the way to go for me.

Python style is consistent using underscore convention, with strict indentation and directory structure representing namespace, and elimination of semi-colons and curly braces (which is fine by me). PHP does have a messy naming convention with its core library. I haven’t dig far, with it does have some nice libraries such as WTForm.

Personally, python felt slightly nicer to code in than PHP, and felt more consistent. Another reason is occasional we saw releases of come cool tool and library at Hacker News, and they are usually written in Python or JavaScript. I believe a vibrant community and continuous innovation is important for a language.

Micro Framework

Django is the de facto full stack framework for Python (like Rails for Ruby), but I wanted to try a micro framework instead (less magic and automation). Plenty to choose from such as CherryPy, web.py, Pyramid and Tornado, and I was deciding between Bottle and Flask. I settle for Flask because it seems simpler with less magic, slightly stronger community support and embraces Werkzeug and Jinja2 (good praise from community, existed for a long time). Bottle one file approach didn’t seem like a seller to me.

I really like CakePHP and think it’s awesome, until I tried something more awesome: Flask. It’s lightweight; with less pre-defined structure and more transparency (the code is cleaner, with more control without hacking the framework). It feels more liberated coding with Flask, the blueprints give it a good structure, and flask-appengine-template serve as a good starting point.

The rise of Javascript/CoffeeScript

I realize most of the development work is done on the front-end browser side using JavaScript, thus front-end coding had become more complex and require more structure (a framework). I choose to adopt Backbone (over KnockoutJs and AngularJs) due to the strong community support, with simplistic yet structured nature. I looked in Chaplin for large application development, but I believe the maturity is not there yet, and I would not develop such large application at the moment.

CoffeeScript is love which couldn’t be explained through logicality: it just feels good to code it, with cleaner code, with arguably increased productivity.

Build system for front-end scripts and resources

Front-end web development had gotten more complex that same kind of build or optimization system is required. I started with Brunch with provided skeleton templates which bring me up to speed with the setup, with an application assembler to auto compile CoffeeScript, to merge scripts and stylesheets, with AMD support.

Yeoman seems like a promising star with extra features such as image optimization, might be worth checking out soon.

UI and Responsive web design

It is convenient to utilize Twitter Bootstrap as the UI foundation (grid system, button, forms, etc.). I am still doubtful about the practicality and development cost of responsive web design.

From a publication-centric to user contribution-centric

In my current app (a restaurant review website), I am more focus on publication: the searching and display of information, where the user contribution features isn’t as intuitive as I would like it to be. Think of Pinterest, where contribution could be easily made through bookmarklet.

Unloading of old baggage

Sometimes things are done in a less ideal manner due to inexperience or out of convenience, where we are continuously paying the price through productivity lost, less elegance solution or potential security risk. Correction work seems like too much work for too little value, or it is almost impossible to undo previous mistakes, or the framework is the limiting factor.

To start a new, you get to be plan once more, hopefully with more wisdom and less mistakes.

Conclusion

As a programmer, we always have the tendency to reboot once things started to get messy, or being tempted by new technologies. I admit it’s a bit of both, and I acknowledge the price of productivity lost that I would need to pay, and I do believe the ROI with better design, productivity, performance, features and maintainability is worth the price.

I almost decided to stick with the old stack, but I believe the timing and benefits are at the sweet spot.



Monday, September 17, 2012

Review: Making The World of Software Engineering More Creative by Josh Linkner



 Notes:

  • Creativity Crisis: My daughter was asked to draw a bear in school, and she draw a purple and funky bear, and the teacher says, "that's not what bears look like, go back and redo it". Lesson learned: Don’t take risks, don’t try something new, don’t do something interesting, just do the bare minimum
  • Uglydolls: toy of the year 2007. Disconnection: we teach people to draw normal bear, yet we reward people who design funny bear. Lesson learned: Doing exactly the opposite is what allows us to reach our true potential.
  • Fear: the number one blocker of creativity. You say like, "well what will my boss say? Will I look foolish, whose going to fund this idea? If it was such a good idea somebody else probably would have already said it. If this project goes forward and I’m responsible for it and I screw it up what does that mean to my career?"
  • Creativity as a muscle, where it could be trained through exercised
  • Jazz: 1% of the notes are on the written page and the rest of it you make it up as you go; spontaneous innovation.It’s not that jazz musicians were born more creative it’s that the culture they’ve built enables that creativity.
  • Creativity isn’t only being Steve Jobs and inventing iPod or disrupting an entire field, creativity in the little everyday things can become transformative. How do you conduct your Monday morning meetings? How close is the printer? Can you save a couple of steps? How are you handling quality control? Creativity applied on an everyday basis again can be transformational.
  • Show a random picture, and ask people what is the picture about. We start to make things up.
  • Curiosity is one the key building blocks of creativity. Ask these three simple questions again and again and again. Why, what if and why not? 
    • Example: Why do socks have to be boring? What if socks were colorful and fun and expressive? Why do socks match? Why do socks come in pairs of two you always lose one and that’s annoying?
    • Solution: Little Mismatched, fun and colorful and expressive. You can’t buy a pair of socks that match. They are color coordinated but they don’t match. In fact you can’t even buy a pair at all because they come in sets of 3 or 5
  • Toyota called the ‘5 Why’s’: like the children keep asking why and why, no matter what answer you put up. 
  • Where’s Waldo: You notice everything. All these things you wouldn’t ordinarily see.
  • I looked at the market conditions of the day it was because I aimed at something in the future (no websites back then, now almost every company have one)
  • Facebook isn’t doing this at all and so we are going to win: by the time you complete the product 12 months down the road, Facebook might be doing that as well.
  • Aim at something in the future, use your creativity and innovation to think what’s about to happen not just what’s happening today.
  • Dyson vacuum cleaner: 5100 times of failure. Failure isn’t fatal; instead mistakes are simply the portals of discovery.
    • We are so worried about playing it safe only to learn that playing it safe has become the riskiest move of all.
    • Video: from failure you learn, keep moving forward
    • Sharply criticizing somebody who comes up with a little spark of an idea or letting him go and run and take a couple of risks along the way?
  • Celebrate the failure of the year.
    • Get out of jail free cards: They say take these cards go on a limb be creative and if you really screw something up hand us one of these cards, you’re off the hook no questions asked.
  • Tradition: blindly saluting the flag of the past. Great in the family, deadly in business.
    • Against Tradition: carve the Haloween pumpkin from the bottom: all the goop just plops right out (use gravity), light candle from bottom (no burn) and carry it around with the natural handle on top
  • Pike Syndrome: an imaginary barrier is getting in the way of progress.
    • I don’t have enough resources, I didn’t finalize my (?) my code isn’t tight enough, I’m too tall, I’m too short, too old, too young, I didn’t go to the right school, I didn’t have the right connections.
  • Role Storming: pretend to be someone, and give ideas based on that persona. Pretend to be Steve Jobs, Oprah Winfrey, Charlie Sheen, etc.





Sunday, September 09, 2012

Passion in Startup, how important is it?


I believe most people preach about the need of passion in startup, but I believe most investors don’t care shit about your passion. I believe most entrepreneurs started something because they see the potential, or because they have the advantage, or just by chance; no matter how inspiring the story of someone who turn their passion and hobby into a successful billion dollar company, but how many of us actually started with a passion. Or can you be passionate about money?

Should you be passionate about your business idea? A startup isn’t just about the idea (or the things the startup is supposed to do), but also about developing the business, growth, hacking and perhaps, make money? How many aspect of doing a startup is the founder supposed be passionate about?

As a programmer for a long time, obviously I am passionate about hacking (a more glamorous term for programming). I wanted to be a programmer for life, and I still do, and that’s the main reason I quit my job (so that I don’t have to turn into a manager for the sake of career advancement). I do the occasional cursing, but the power of creation is just too awesome to let go. I might not be the best, but it doesn’t matter, as long as I can create stuffs which I am interested in. Since I can do it well, and love it, so I should do it more often (freelancing and startup seems to fit the profile).

Am I supposed to be passionate about the business idea? One of my early ideas is about Document Management System (the idea is born out of convenience because I used to work for a company which make such product); it might seems like a nice product to build and use, and the market is there, but I didn’t develop it. Then I thought it would be cool to build something to keep track of property prices, since none is available in the market; I did develop it to a certain extent, but didn’t follow through the end. It is not something I am passionate about (property market), just that I happens to be looking for some property during that time. Then I wanted to develop an application to keep track of grocery prices (because I started doing grocery shopping more frequently after marriage), and an application to keep track of events (hoping to find some cool events, but there are only exhibitions and party which I no longer interested in). All the ideas and ventures probably born out of convenience, or to serve my own needs; so far none of them “succeed”, but one survived. I understand that a interesting idea or monetary reward is not enough to make it happen.

I develop a Restaurant Review app, and it did take off in Malaysia. I develop it to scratch my own itch as well, to find good restaurants to bring my girlfriend to. Many thoughts I am good at “Cari Makan” (finding good food), but it’s the exact opposite; it’s because I don’t know where the good food are, that’s why I need an app to help me with it. I always ask myself, why this idea takes off? Perhaps I have some ideas to solve the chicken and egg problems (I apply the same strategy to subsequent apps, but it didn’t quite work), perhaps I am in the right market (restaurant review vs. property/grocery prices) or perhaps I started at the right time (the competitors are fairly weak during that time). Do I have passion for restaurant/food review? I am not quite sure, but I like trying out new places at times, and sometimes I do really need a helping hand to find suitable places (solving my problems). I am not a food critic (contributors), but I would like to find out interesting food places (consumers). Perhaps one of the important elements is that I eat my own dog food: I use the app, and still found it more useful than other apps.

Whenever good ideas crop up in my mind or some friends suggested we work on something together, I always asked would I be passionate about the idea and interested to use the end product; profitability and market size is my last consideration; and a good strategy to penetrate the market is essential (hope for the best doesn’t count).

How do we know that we are passionate about something (in startup context)?

  • Knowing your startup doesn’t make enough money, you will still push on.
  • You will do things to create a better product, a better user experience, a better solution.
  • You try to forget about it or put it aside, but it will still come back to haunt you.
  • You will use the product you created, and feel that it’s the best product.
  • You believe that you could and will do it for life.
  • Whatever makes you doesn’t hate Monday, and probably motivate you to work 7 days per week.

I understand that sometimes we do things for survival out of necessity, and I understand and respect that; but bear in mind that this is just an interim phase, the heart’s desire will outdo the mind’s logic eventually. Sometimes I tried to work on elements which focus on logicality without interest, but I just can’t seems to pull it through: the mind can’t do what the heart doesn’t believe in. Passion could be overrated (it is supposed to be good for you, but not many actually believe it), but I am a true believer. Without passion as the foundation, eventually things will not hold up and fall into pieces. It is not that things will definitely work out with passion, but it probably wouldn't last without it. The mind and heart need to go in sync to achieve happiness, and work is not an isolated part of life which we constantly sacrifice on.

To truly gain freedom in life, we need to find passion and go for the dream :)