In Retrospect: My First Year in a Tech Startup

photo-1416339684178-3a239570f315

No, I’m not one of those startup founders trying to convince the world and myself that I made an excellent decision. Maybe not yet. I am one of those consultants working for one.

Last November 25, 2014 I celebrated my first year in the startup I joined after I thought that maybe the corporate world is not for me. Up to now, I can still recall the mixed feelings I had and the reactions I got from people who were around me at that time. Why a startup? Why not some big company out there that offers good pay and a lot of benefits for relatively less responsibilities? Aren’t you being a little too hard on yourself? I heard you’ll be working your ass off in every project, why would you want to do that when in bigger teams, all you need to do is implement a feature or two each day? Is that startup even stable? What if it’s not? You probably just need a bit of excitement. Join another hackathon this weekend. Maybe that should give you your adrenaline fix.

Truth is, these doubts aren’t baseless. Being in a tech startup is not like days of wine and roses but more like afternoons to evenings of coffee, maybe an energy drink, and cold pizza. It’s okay but not as glamorous as it may appear. It takes the right mindset to appreciate what’s happening. With all the coolness factor aside, working in a startup is not really for everybody. It requires extra dedication and commitment even from contractors so I won’t advise signing up with one just for the thrill. Unless of course, you’re comfortable switching employers anytime or couldn’t care less of how people see your work.

Let us list down some good points for discussion.

Career Growth

Career growth is definitely fast. If you’re the type who learns by experience, takes risks, and dares to do more than what’s usually expected of you, a startup is a good environment. Move fast and break things they say and that cannot be any more true. You just have to learn fast as well and be responsible enough to fix everything you break. Unlike in a corporate setting, you cannot really expect somebody to cover up your mess. That sounds easy; we’re grown-ups after all. But it can be a lot more difficult when you factor in your clients’ expectations and keeping the company afloat. Yes, that’s coming from a consultant and not a startup owner.

Let us meander a bit to elaborate this.

With the organization so small, every single thing you do has impact. If a mistake occurs in the estimates presented to your customer and a task takes more time than it should and you don’t use your free time to help out, you will most likely suffer the consequences as well. Customer satisfaction rating will fall. You won’t get their recommendation which is essential in building a name and getting more customers. The delay can also be carried over to other projects in the pipeline and these other customers might give you the same bad ratings for that. A startup can only last for so long without customers so that’s like saying hello to the end of the business.

You might say that escalated quickly but this is actually not an uncommon scenario among business developers. It’s just that in the corporate world, these concerns remain in the business development unit and employees usually just wait for the new projects. So yeah the it’s-not-my-job-let-them-do-it attitude does not apply very well in a startup.

Now let’s get back to where we were earlier. A great part of the challenges of being in a startup comes from limited human resource. If you prefer just coming in and working on a handful of coding tasks I’m afraid you would find working in a tech startup frustrating. As implied earlier, in a startup, everybody is desired to be flexible and committed to keeping the company running. It sounds corny, but yes, working in a startup requires passion. It cannot really pay  you extra for your hard labor that fast aside from satisfaction. If you don’t have it, you would most certainly think that you are being ridiculous and consider going back to the corporate world.

Together with the stress, development of technical skills is guaranteed. With work load that can be way bigger than a team can comfortably handle, there’s more than enough of the challenging tasks for everybody. As a developer, you’d be working at the core of an application before you know it. As much as they might want to, your seniors cannot really afford just making you work on components of little importance They would have to keep themselves sane and hand over some of their work. The same logic applies to the development of non-technical skills. Different roles do exist as someone has to focus on specific things to avoid chaos. But one way or another, everybody takes part in planning, monitoring, communication, marketing, and all those other management tasks. A startup is certainly a place for people who love collaboration.

Social Events and Fun Stuff

If you are used to attending big company events with grand buffet and entertainment, you will most likely find a startup event a bit lousy. Even with good funding, it’s unlikely that a hotel will let you rent the ballroom for a group of people that will not fill a mini exercise studio. But if you had a stint with events planning in your big company, you might appreciate the ease of planning a social event for a startup. It’s so easy it can be accomplished by anybody in four steps.

  1. Pick a random activity.
  2. Ask if everybody is good with it. If not, go back to Step 1.
  3. Check your fund. If not enought, go back to Step 1.
  4. Call the place for a reservation. You can decide on the food later.

In addition to the small number of people, another good thing with a startup is that it is most likely filled with young and active people who can have fun in the tightest budget. They don’t really need a show, they are the show. Bowling night? Count me in. Karaoke night? Count me in. Ice skating? If you promise to scold those skating prodigies if they laugh at me when I fall flat on my face, count me in.

Startup events aren’t very different with hanging out with your friends. Unless you joined a startup just to have some money to pay your bills and are not interested in anything it does, you will most likely be surrounded by people with common interests. That explains why a lot of startup employees find their team cool; it agrees with them on a lot of things. Coolness is subjective as we all know. One thing only stops being cool when someone does not appreciate it. When you have common interests it’s not likely to happen. Dress up on client meetings. On other days, you can be Spiderman.

Business and Corporate (Startup?) Planning

Needless to say, the startup culture is less formal and that goes beyond the dress code. One of the reasons why I joined a startup is because I’ve witnessed quite a lot of good initiatives get lost in the formalities of a corporate environment. While I understand some of the reasons why these initiatives did not reach implementation, what’s lost is lost. Maybe I didn’t know better and was no more than an overly eager newbie. Maybe my seniors knew so much better they didn’t have to try a suggestion to know that it’s going to fail. We’ll never know. But when you witness a little too many of these seemingly good albeit daring initiatives get rejected by higher management, you can’t help but get frustrated.

The smallness of a startup makes it easy for anybody to get his/her voice heard (you can even take that literally) and get immediate and sensible feedback. In a corporate environment, a suggestion from a regular employee will mostly likely have to pass the evaluation of his/her leads and managers of varying levels first before it gets to be recognized by the person who actually has the power to implement it.

Employee: I would like a bucket of beer for the team on Fridays.
Director: We got no fund for that. Also, watch your beer gut.
Employee: Okay.

Kidding aside, everybody gets to be a  part of the business and corporate planning in a startup. Why? If they assign you a responsibility that you are not ready for, you’re not the only one who’s going to fall. If you say you’re not sure about one thing, they better take note of it for the whole organization’s good.

I’m not saying that a formal process is not a good thing; we all know companies that are successful because of them. But a small organization would require a certain level of maturity to adopt one. In my opinion, investing time on expectations and commitment management can be a good start to get there.

Organizational Structure and Work Relationship

A startup’s organizational structure is practically flat. With possibly 1:1 man-to-job ratio, good rapport is essential. The line “if you think my job is so easy then do it together with yours while I just sit here and let’s see what’s going to happen” is powerful here even coming from an average employee. That is the reality when you’re a bit understaffed or you have enough funds for star performers but they go for the bigger names in the business. And with each one of you almost of equal importance to the whole organization, one may not find it easy to concede on certain matters. In this case,  the goodness (or badness) of work relationships rests on the attitude of the people involved. But expect very open communication as in a small office, one can only avoid confronting matters for so long.

Despite all the coolness, a startup is not without flaw in its people. To simply put it, some people may be good as a person but not as teammate, a speaker, an organizer, a trainer, or a leader. Some people are good to exchange jokes with but not ideas on running a team. Or maybe like in any other organization big or small, people might just not get you. There’s really nothing much to say on this matter. As professionals we know when it’s time to throw in the towel.

As for me…

There can be right and wrong reasons for joining a startup. But luckily, I believe I have one of the right reasons for joining one; to know my worth as a professional. Something that would be difficult for me to do in a big company where I may be as dispensable as a piece of laptop. And I could say that I’m now learning the realities of not just running a project but also trying to grow a business, faster than a lot of people I know. The challenges were really difficult but undeniably good. If you’re into shock treatment that is. So far it was a good one year. But it can be just me. -aB

Featured Image: Unsplash

Special Dumb Review: Big Hero 6

Featured Image -- 310

iamthearvin:

For a glimpse of one of the most awesome projects I worked on, I am reblogging this special review.

Originally posted on theradioman:

I watched the movie with my nephew. He requested for it. Right from the moment I saw its trailer in one of those movie dates I had, I knew it was going to be cool. I’m a creative working in the tech industry; inventions fascinate me. I thought that was it, that it’s the only thing that will make it appreciable for me. But I was surprised.

It will get a bit nerdy from here. Brace yourself if you have to.

The movie brought me back to my college days when I was working with my dissertation. I worked on a system that taught and implemented feed-forward artificial neural networks (ANN). The goal was way beyond providing a tutorial on ANN. I just had to include it because nobody was buying the idea that the system was capable of simulating human decision-making albeit imperfect. The real goal was to create…

View original 576 more words

Article: Wall Scrabble by Restoration Hardware

Wall-Scrabble-by-Restoration-Hardware

Wall Scrabble by Restoration Hardware

http://hiconsumption.com/2014/11/wall-scrabble-by-restoration-hardware/

I suck at “competitive” scrabble. By that I mean I simply put on the board whatever word I can make with my tiles; if it fits then that would be it for me. Years ago I met this guy who plays scrabble like it’s a chess game. He knows how to put you in difficult positions till you say “pass”, while he makes for unbelievable scores.

Anyway, a board like this would be nice to have in one’s office. You pass by it, add a word, score yourself, and go on with your work. At the end of the day, winners can get a treat. -aB

*Featured image was grabbed from linked article.

How to Clean your Urbanears Plattan

Urbanears-Plattan-dark-grey-01-930x930

So a couple of months ago I bought myself an Urbanears Plattan. My mobile phone functions more like a music player to me and when I switched to a different model and realized that the sound quality and setting is not as awesome as my previous one, I knew I had to dump the earphones that came with it and switch to a headphone. At P2,950 ($79.90 in their website) it’s good enough. It’s stylish and the sound quality is some notches above the average. But since it’s covered in fabric, it is of course likely to get dirty with dust much like our backpacks. Today I emailed customer support and asked how to properly clean my headphone, I own the grey one, and below are her instructions.

Washing Instruction

After months of wear and tear your headphones can get a little bit dirty but fear not, there are actually ways to freshen them up. One should add that doing this is at your own risk and warranty will not apply to water damage.

There are four different parts that can cleaned: plastic parts such as the side of the earcap on Plattan, the fabric cables, the rubber cables and the fabric headband. We’ll go through each of these parts below.

Fabric cable

Things you’ll need:

  • A sink, a large bowl or basin.
  • A mild laundry soap made specifically for delicates or detergents made for babies garments.
  • A soft fabric cloth.
  1. Fill the sink with cold water and add a small amount of laundry soap.
  2. Gently submerge the cable in the water but make sure to leave the plug, microphone and headphone (of course) completely dry.
  3. Once the cable is soaked take the cloth and gently rub together the fabric cable and the cloth. Work the soapy water into the fabric fibers.
  4. Drain the sink, and refill with cold water. Let the fabric cable sit in the rinse water for a bit, swishing them around to get the laundry soap out.
  5. Drain the water and rinse it carefully beneath cold running water.
  6. Lay the cable out flat to dry.

Rubber cable

Things you’ll need:

  • 85% alcohol
  • A soft fabric cloth.
  1. Carefully soak the cloth in the 85% alcohol. Make sure no to use too much so that you risk getting alcohol on the microphone, on the plug or on the Y-connector.
  2. Stroke the cloth up and down along the cable. Do not rub it too hard.
  3. If there are stains that are harder to remove please pay extra attention to those parts and go over them two times.
  4. Let the cable dry.

Fabric headband

Things you’ll need:

  • A sink, a large bowl or basin.
  • A mild laundry soap made specifically for delicates or something like a detergents made for babies garments.
  • A soft fabric cloth.
  1. Fill the sink with cold water and add a small amount of laundry soap.
  2. Gently soak the headband in the water and pay extra attention not to get the hinges wet (or any other part).
  3. Once the headband is soaked take the cloth and gently rub together the fabric and the cloth. Work the soapy water into the fabric fibers.
  4. Drain the sink, and refill with cold water. Slowly sink the headband in the cold water, swishing it around a little to get the laundry soap out.
  5. Drain the water and rinse it very carefully beneath cold running water.
  6. Hang the headphone to dry with the ear caps up and headband down so no water gets into the hinges.

Plastic parts

Things you’ll need:

  • Lukewarm water.
  • A soft fabric cloth.
  1. Wet down the cloth.
  2. Make sure there is no redundant water in the cloth.
  3. Gently wipe the dirty parts clean. Make sure no water finds it way in between the different parts.
  4. Let it dry.

If you have stains that cannot be removed using this technique please do not try to use alcohol or other strong detergents! The plastic parts are coated and if you use anything but a water wet cloth you might destroy the surface. Something that will not be covered by warranty.

Please follow these instructions carefully and exactly, I want to highlight one of his first comments: “doing this is at your own risk and warranty will not apply to water damage”

Needless to say, one has to be careful in washing the headphones. But if you’re looking into buying a new one, Urbanears got a model with detachable fabric covers that are perfectly washable, the Humlan. You might want to check it out. -aB

Source: urbanears.com

Dynamically Loading Stylesheets and Scripts in Cordova with Ember JS


We make  bad decisions once in a while and this is what our development team experienced working on an Ember project to be converted to a mobile application through Cordova. “What happened?” you would ask. We made a bad decision of independently coding the version to be converted to a mobile app with that version to be used for web and be converted to a tablet app. And now we are trying to avoid releasing a smartphone-only and tablet-only versions of the application because, let us admit it, it’s not very elegant.

It shouldn’t be a big problem if one design is perfectly responsive to all platforms of course. But that is not the case. And going for that approach while reasonable will already make the project bleed as it will entail some rework. We needed a quick fix and that’s what we tried to work out one lazy afternoon.

We got two independent distributions, one for mobile and one for tablet. We could freely dump their JS and CSS files into the Cordova project’s www folder without worrying about anything. The tricky part is keeping one index.html that will load the right script depending on the device where the application will be installed.

Locking the Screen Orientation

We needed to lock the screen orientation. As what is arguably always ideal, smartphone UI should be in portrait mode while the tablet version in landscape. After some searching, we found this plugin at http://plugins.cordova.io/#/package/net.yoik.cordova.plugins.screenorientation. It’s the only one out of the three we tried that gave us what we wanted. A short tutorial can be found here.

Dynamically Loading Scripts

For seasoned Javascript programmers this should come easy. But for us who mostly do our scripting with jQuery, it required a bit of research. A typical index.html of an Ember project to be converted to a mobile app would look like this.

<!doctype html>
<html>

 <head>
 <meta charset="utf-8">
 <title>Mobile App</title>
 <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, target-densitydpi=medium-dpi">
 <link rel="stylesheet" href="styles/12345.main.css">
 </head>

 <body>
 <script type="text/javascript" src="index.js"></script>
 <script type="text/javascript" src="cordova.js"></script>

 <script src="12345.components.js"></script>
 <script src="12345.templates.js"></script>
 <script src="12345.main.js"></script>

 <script>
 //additional scripts here.
 </script>
 </body>
</html>

The head contains the reference to the compiled CSS and the body contains the reference to compiled components, templates, and main JS files. Obviously we cannot keep it this way. There has to be a way to replace the references on the fly or completely remove all mentioned link an script tags and create them along the way. We did the latter.

We started with a bare index.html.

<!doctype html>
<html>
 <head>
 <meta charset="utf-8">
 <title>Mobile App</title>
 <meta name="viewport" content="user-scalable=no, initial-scale=1, maximum-scale=1, minimum-scale=1, target-densitydpi=medium-dpi">
 </head>

 <body>
 <script type="text/javascript" src="index.js"></script>
 <script type="text/javascript" src="cordova.js"></script>
 <script></script>
 </body>
</html>

Just before we closed the body tag, we inserted the script that shall create the nodes we need. It was written in plain Javascript. Note that the compiled scripts contain the reference to third party scripts so we cannot use jQuery. Another important note is that it should be in index.html; well at least in our case. For some reason we could not get it to work when we moved it to the Cordova project’s app script.

/* Window must be done loading before setting orientation. */
window.addEventListener("load", load);

/**
 * Gets user agent and check if it is mobile.
 * This is a very simple check and must be refined.
 */
var ismobile = (/mobile/i.test(navigator.userAgent.toLowerCase()));

/* Dynamically creates the necessary nodes. */
var style = document.createElement("link");
style.rel = "stylesheet";
style.type = "text/css";

var component = document.createElement("script");
component.type = "text/javascript";
component.async = false; //async is being set to false so that script will not immediately fire.

var templates = document.createElement("script");
templates.type = "text/javascript";
templates.async = false;

var main = document.createElement("script");
main.type = "text/javascript";
main.async = false;

/* Assigns stylesheet and scripts according to device. */
if(ismobile) {
 style.href = "styles/phone.main.css";
 component.src = "scripts/phone.components.js";
 templates.src = "scripts/phone.templates.js";
 main.src = "scripts/phone.main.js";
} else {
 style.href = "styles/tablet.main.css";
 component.src = "scripts/tablet.components.js";
 templates.src = "scripts/tablet.templates.js";
 main.src = "scripts/tablet.main.js";
}

/* Finally appends the elements to head and body. */
document.getElementsByTagName("head")[0].appendChild(style);
document.getElementsByTagName("body")[0].appendChild(component);
document.getElementsByTagName("body")[0].appendChild(templates);
document.getElementsByTagName("body")[0].appendChild(main);

function load() {
 var ismobile = (/mobile/i.test(navigator.userAgent.toLowerCase()));
 if(ismobile) {
 screen.lockOrientation("portrait");
 } else {
 screen.lockOrientation("landscape");
 }
}

We only worked on this for a short time and this can most probably be improved. Feel free to insert your suggestions. -aB