Every once in a while, a key piece of an engineering infrastructure hops to the cloud and gets offered “as a service” to much success. First came Amazon, then Heroku and more recently, Pusher and Parse. I believe that Action.IO could be the next in line.
Having a developer setup and manage a development environment is a great learning experience. But it doesn't scale. Once you have a team, the time you take to setup an environment is precious time wasted. And it gets even more involved as your stack gets complicated.
Companies recognize that. Pivotal Labs spins up fresh machines with the use of Pivotal Workstation. Facebook hosts their environments on an internal cloud, as does Quora on EC2. Not everyone can devote DevOps cycles for that, which is what makes Action.IO so compelling. While you could achieve a similar effect with EC2 AMIs, maintaing a gold standard AMI for a team with a growing stack is not trivial.
Action.IO has trivialized the development environment. Think about the potential: centrally managing dev environments, spinning up custom stack in minutes, and effortlessly sandboxing your projects. All accessible via a browser or a SSH tunnel.
On a personal level, our computers and mobile devices are serving as thin clients to services like Dropbox, iCloud and Google Docs. So why not development environments? We should be able to develop from anywhere. John Gruber recently brought up a great point -
The idea that a dedicated hardware keyboard or a stylus is necessary for creation is ludicrous. I’ve seen people who type faster on an iPad than I type on a hardware keyboard. Arguing that the iPad is only for consumption today is like arguing that the Macintosh was a toy back in the ’80s.
It's only the beginning. Action.IO will mature. As they increase their platform and package support, I can see Action.IO becoming a de facto service for startups and consultancies, in the same way Heroku has for hosting.
The word ketchup originally meant “fish sauce” in a dialect of Fujian province, the humid coastal region that also gave us the word “tea” (from Fujianese te). By the turn of the 18th century, fish sauce and arrack had become as profitable for British merchants as they were for Chinese traders.
From 1750 to 1850 the word ketchup began to mean any number of thin dark sauces made of mushrooms or even walnuts. It wasn’t until the 19th century that people first began to add tomato to ketchups, probably first in Britain.
By the mid-1850s, the anchovies had been dropped, and it was only in 1890 that the need for better preservation (and the American sweet tooth) led American commercial ketchup manufacturers like Heinz to greatly increase the sugar in ketchup, leading to our modern sweet and sour formula.
The evolution of ketchup reads like a classic product iteration; one that spans over centuries and continents. Starting off as a basic fish sauce, ketchup was refined by different cultures to the tune of market feedback. 300 years later, the recipe with the widest appeal won, and ketchup became the world's most popular condiment.
Consumer darwinism at its best.
What other examples have you come across? Let me know.
In perfect engineering-centric ecosystems like Silicon Valley, there's a shortage of engineers.
In imperfect, growing ecosystems, there's a shortage of engineers as well. But for different reasons. Let's look at Singapore as an example.
“There are Singaporean job-seekers, but they all want to manage projects,” he told me. “I already have enough project managers. I need someone to actually do the work.”
People – from startups to large corporations – always wistfully remark that Singapore needs more local engineers. On the “bright” side, the country's relatively liberal immigration policy have given them band aid by allowing them to hire great talent from the region, such as Indonesia and Vietnam.
But the problem still remains: Singaporeans don't want to become engineers.
Singapore's focus on finance, R&D and healthcare in the last decade has paid off handsomely. The country has become a financial, research and medical hub. These are the sectors with “prestige” and money, and that's what people chase.
As a result, computer science/engineering has been marginalized. Becoming an engineer often isn't considered an attractive proposition in Singapore. Even graduates with engineering degrees seek out careers in a “prestigious” industry as their first choice. And if they do remain in the engineering world, they seek out non-engineering positions such as project managers or analysts. Basically, anything but engineering.
The reality is that the incredible paydays “prestigious” industries offer are only attainable by the top 5% of those who pursue them; those who end up as investment bankers, traders, and partners in law firms, to name a few. The other 95% still enter these industries, in hopes of reaching that upper echelon, regardless of their degree or the job they get.
However, that doesn't mean the 95% have better paydays either. In fact, thesesalary surveys indicate that engineering salaries are actually very comparable. So if salary isn't entirely the issue, what is driving away people from engineering?
Perception
“Programming is largely a tradeable job. It is almost impossible to protect the Singaporean programmers against competition from other programmers from lower cost countries. So we have to be realistic how much the company can offer.”
Engineers are perceived as commodities – one-trick-pony code monkeys. Engineering is about creatively building things, with the discipline to actually ship. Despite the pervasiveness and incredible demand for good engineering, there's a lack of appreciation for it. Whenever a top independent consultant gives a quote for a project, the first question that's asked is “why so expensive?”, followed by a reference that outsourcing is much cheaper.
Opportunities
Some of the most innovative companies truly value engineering. But there aren't enough in Singapore to be a guiding light. You have the stalwarts – DSTA, NCS, Accenture, etc. None of them scream inspiration. They project the image of rote, job stability, and decent pay.
On the other hand, you have the new generation of engineering-centric companies such Pivotal Labs (now New Context) and Viki. Although they are very rewarding jobs, they don't have the sufficient visibility to function as motivational factors just yet.
I believe that the way forward is to boost our cultural affinity towards engineering.
Build up the startup sector. Properly.
We have a lot of startup business plan competitions. That works well for traditional industries. However for tech companies, business plan competitions are meaningless. People are better off spending time learning to build a better product than a better business plan.
As a friend wisely said, “competitions should be about building things rather than talking about building things”.
Engineers are motivated by ownership and visible impact. Startups are the best place for that. For that to happen, we must grow the ecosystem the right way, with schools playing their part too.
Interestingly, some of the best and most driven engineers I know are government scholars who studied overseas. They have experience in an established ecosystem, they want to improve the local ecosystem and they love engineering. And yet, they had to fight. Some for a gap year in engineering, and some for their private sector secondments to be startups.
I don't want to kick off another debate about scholarships, but I feel that scholarship boards should recognize that there are other ways one can contribute to the country. Especially if they have the skill set, passion and desire to do so.
Create a culture of building stuff
Building stuff is fun. You get to create value while learning. But there isn't enough encouragement to keep on doing so. We should all have side projects - whether it's an insane dorm room, a video game, or a website. Especially students.
In the perfect world, all computer science/engineering students should be actively involved in clubs like NUSHackers. They would be pursuing personal projects on the side and actively learning beyond the curriculum. As seen in an exchange I had with a NUS student computing society president, we are a long way off.
“So do you guys organize talks for students to expose them to other technologies such as Ruby and MongoDB?”
“No, we organize welfare events such as gaming parties and Valentines Day events. Why would the students want to spend more time coding out of class? ”
“Ok. So do you at least help or encourage students to seek out internships during the break?”
“We are a small faculty so that makes competing in Rag and Flag (a school float parade) tough. So we actually rather the students stay back and help out instead.”
I was pissed.
Most of us have a curious mind when we were young. Thanks to toys like Lego, we grew up loving to build things, but somewhere along the way, we lost that.
More evangelism from the community
There are amazing engineers doing awesome things. There amazing engineering events like RedDotRubyConf, GeekCamp and SuperHappyDevHouse. There amazing engineering communities like Hackerspace and developer user groups.
It's time we step out of these communities to evangelize the joy of engineering. Each one of us has a unique and relevant perspective. Let's share that, especially with students. Start speaking at primary schools, hold workshops at secondary schools, and inspire students at universities and polytechnics.
In the end, it is a numbers game. Singapore isn't very different that other cities and countries of similar size. On a macro level, even the US suffers from the lack of engineers (hence the White House's recent STEM initiative). But the large population papers the cracks, and allows ecosystems like Silicon Valley to exist.
It will be tough, but I have no doubt that Singapore, like its peers, can produce more great engineers. Everyone just has to play their part.
I would love to hear your takes on this, give me a shout out on Twitter.
With the chaos of different screen sizes and a new generation of Web browsers, the design paradigms of layout and typography have shifted away from static layouts and system fonts to dynamic layouts and custom Web fonts.
We do not just need responsive layouts, we also need responsive typefaces.
Screen fragmentation is the new browser fragmentation.
Design has established itself as a differentiating factor in web applications, and along with it, the importance of the visual experience. Testing visuals is usually done by manual inspection, which can get tedious. Integration testing misses out on that very aspect of how your application should look at any given time.
Fortunately, the visual experience on the web is controlled by CSS, and CSS is testable. Frameworks like Needle have taken a stab at it. But I find them too cumbersome to be useful; Needle compares your pages to gold-standard screenshots.
So I was really excited when my friend and ex-colleague Winston released Cactus. Cactus takes a more practical approach and tests based on the computed CSS of the document.
But hold on, isn't it overkill to test your CSS?
No it's not.
You do it already
You already have a style guide. You already know what classes and styles each nook of the UI should have. CSS tests are just a baseline representation of your style guide. Are my headers appearing? Is the nav bar the right height? Does that nested paragraph have the right derived font size? Instead and clicking through the application and boring your eyes to death, all that can now actually be verified automatically.
Refactoring and regressions
Styles get bloated as a project gets larger. And just like any piece of code, cruft and deprecation appear. You have to carefully make sure that any improvement you make doesn't screw up how your page looks. So by asserting that key page elements have key styles, you can refactor with a safety net. You can spend more time refactoring and less time refreshing the browser.
Cross browser testing
We don't live in a perfect world. Inconsistent rendering engines still exist (hat tip to IE). Integration tests give you a peace of mind when you do cross browser testing. CSS tests give you an automated way to ensure that each browser's computed styles are what you would expect.
As web applications get ever more intricate and complex, I see CSS testing playing a crucial part in a fast-paced, continuous deployment environment. And just like other forms of testing, CSS testing is only as effective as the approach you take (don't test like the TSA). When done right, it could give you a huge boost in productivity.
Do check out Cactus and Winston's presentation about it. I personally can't wait to see how CSS testing evolves.
Rewrites are strangely attractive. Developers love to work on a sparkling clean code base. But in reality, there’s much more to a rewrite beneath the surface. Like all those implementation subtitles and edge cases you took for granted.
Rewrites are tempting, but can also be deceptively complex. Don’t rush into one. Have a well thought out plan. It worked for us; we launched smoothly and right on schedule.
As per the student's request, I have removed the contents of this post.
I do still have one question though - how does NOC measure success?
Considering that over a hundred students go through NOC each year, I don't see even 10% of the entire cohort, since inception, starting a company or working at a startup.
The kind of work that has your fingerprints all over it. The kind of work that you'd never compromise on. That you'd sacrifice a weekend for. You can do that kind of work at Apple. People don't come here to play it safe. They come here to swim in the deep end.
They want their work to add up to something.
Something big. Something that couldn't happen anywhere else.
That's right, Apple. In a wide circulated note to new hires. Not hiring copy from that new startup.
Some argue that it's faux inspirational, exploitative copy. I see an example of Apple's dedication to a polished experience. Most companies tend to garble up their internal messaging into high level, un-motivational corporate speak. Apple still maintains that attention to detail, that style of language, even internally.
And to anyone trying to make an impact at/with their company, this easily relatable note makes one great rallying call.
Maslow's hierarchy of needs is a popular theory in psychology that describes human motivations. The hierarchy is commonly portrayed with a pyramid, with our most essential needs towards the base. Many live their lives in accordance to Maslow's theory, especially when it comes to their job.
A typically ideal job comfortably helps you fulfill your physiological and safety needs. With the stability, you would be able to pursue love and belonging. You are motivated to stay on and seek a promotion, with an increased sense of achievement as you climb to the top. And finally, according to Maslow, you reach self-actualization after achieving the levels below it. In other words, only after many years on the job.
But when you go out on your own, you hit self-actualization immediately. A shortcut with sacrifices, if you will.
Friends and family get pushed up the hierarchy as they temporarily become lesser needs. You focus on the achievement at the expense of job security and certainty. You are driven by creativity, spontaneity and the desire of solving problems. Self-actualization becomes the fundamental level of motivation right above your physiological needs (some may argue otherwise).
Startups flip up Maslow's hierarchy. It's a beautiful thing. Give it a try.