15/06/2014

Hackathon/Startup Weekend from a coder's perspective

After another successful weekend of hacking together a group project, and whilst the buzz of emotions are still in effect, I have jotted down some notes of what I believe are some good tips for a coder's hackathon/startup weekend.

1. Prepare


Prepare yourself for anything that you will need. Make sure you bring all the technical equipment you think you will need, or even spares so that people on your team may be able to contribute if they lack the equipment or yours breaks down. Extra power cords, phone cords, devices defiantly help just-in-case others have left at home.

2. Minimal Viable Product


Before you start, throw all your ideas on the table and pick just one that your group thinks reflects the main direction that you are going for.

3. Salvage


Take any code you have, or at least have it in accessible in remote repos like bitbucket and githup. This is a weekend of producing, you will have to be as agile as possible. Anything that helps you in hacking up a MVP (Minimal Viable Product) is key to having something tangible for presenting a demo at the end of the weekend.

4. Commit


Which brings us to the next point, always start with making something very simple, basic and pretty that’s focused around that single idea/feature. Commit this. Your group will be guaranteed to be pivoting at least once in the weekend and if you are half way through a high difficulty feature and you Pivot, you will be better prepared.

5. Channel your energy


If you are low on team members, focus on one platform. This way you can all contribute to an end goal without having people heading down too many different pathways. Plus, when you are presenting you will most likely be going to be showing off your one best platform anyway.

6. Try new things


I know a lot of blogs/guides say don’t venture outside of the realm of your existing knowledge. But I disagree, don’t be afraid to try new coding languages/platforms, but only do this if you are certain that someone in the team has at least a decent knowledge on the platform. That way he can task off basic level/easy tasks to you and he can be the guy focusing on the hard-level items. This way everyone is churning out features at the same rate. You can ask him things, but be careful not to distract too much as it will prevent him focusing.

7. Designers


Designers are vital, make sure you have at least one. No one really cares if it’s stacked with features if they can’t at least see that it looks good at presentation time. You have a weekend, so you won’t be having too many features anyway (unless you pre-built, which is kind of beside the point of the weekend), so having a designer is key.

8. Prepare the deck


Start planning your presentations a day in advanced. Have your designers/marketers constantly focusing their efforts on adding things that will present well.

9. PMs


It’s probably not the most vital, but try to have a Project Manager on your team. Having a coder who is constantly bombarded with questions and input of where the project is heading takes away the coder’s ability to focus on building the platform. We work best and are most productive when we’re in the zone. Also, with a bigger group it’s always handy to make sure everyone is coordinated and travelling in the same direction.

10. Most importantly


Have fun, and defiantly try to enjoy the creative and emotional atmosphere. If you failed to make anything viable, just make fun of the fact and no one will end up caring.

25/08/2012

Android vs iOS from a developer's perspective

The purpose of this entry is to discuss some pros and cons for both of the main mobile development platforms from my experiences. I have been working on both android and iOS for most of this year, and I believe there are some great development features from both platforms.

Integrated Development Environment


While there are a few alternatives out there in terms of IDEs, most of this article will be focused around the main environments. Eclipse (java) with Android SDK for Android, and Xcode 4 (objective-c) for iOS. Both of the IDEs have nice interfaces that allow for quick and easy access to a majority of tools, project files, debug options and console outputs. Although the new Xcode's assistance feature's ability to split screen relevant coding (say you're manipulating a view controller on the left side of the screen, it will intuitively bring up the .m or .h file on the right side for referencing and coding). In fact, Xcode does a fantastic job of allowing the free flowing of coding so you're never stuck in one spot trying to find a certain feature to add nor trying to dig up a resource file or source code file. Although there is one downside of developing with Xcode, you have to be running a MAC operating system. One thing eclipse android has over Xcode iOS is it's console error messages. If something breaks, eclipses displays a fantastic stack of error logs and successfully pinpoints down to the lowest level, the error that occurred. Double-click on the error and viola, you're taken to the line of code at which it occurred. iOS does this somewhat, but allot of the time you're left with one console message that doesn't describe anything at all, although after a while you do get a 'feel' of what went wrong. So I believe eclipse is just ahead on this one.

Device Emulator


While Android does offer some customization with their emulators (you can customize the emulator so that it has just about anything), it does have a major set back... speed. If you try to run any type of app on the emulator device, it runs at about 2 frames per second. Boot up times on the emulator (if you haven't found the screen saving feature) run into the minutes for the Android emulator. Apple iOS, on the other hand, has a very smooth and realistic emulator which fairly closely mirrors a real-life device (with the exception of some things like sending messages or emails, but that's more of a security limit). Since most iPhone devices don't really differ from one another in terms of screen size and hardware, apple can get away with having a set device for the emulators. Apple wins this section hands down.

User Interface Development


When creating interfaces, both seem to differ in how they go about configuring and arranging user interfaces. Android's interfaces are laid out using a XML markup language, each element is configured separately using programmable properties. You can, alternatively, change the layout of your interface using the GUI section by dragging and dropping UI elements into a phone-like representation of the user interface. But after adding a few elements into the window, it becomes obvious that this feature wasn't really designed as the main way of developing interfaces. Elements start to disappear or get automatically placed into random places, so I found it wise to stick to the XML language files and use the GUI as a semi-preview of what the interface 'might' look like. Although, it may be tedious programming all the interface element's properties separately, it does allow for some quite uniquely custom-designed interfaces. Apple, on the other hand, has come up with quite a polished system for developing interfaces. Luckily for apple, they only release devices with similar screen sizes, so interfaces can be quite easy to set up as there is no mucking around with hard-coding alignment, size and positional properties, it seems to all work automatically for you so you can focus more on creating solid and well defined code. The new storyboard feature that was brought to Xcode in iOS 5.0 makes it even simpler as it shows a graphical representation of your program/application and how it will transition between views and offers "snap-on" solutions for navigational controllers and tab-bar controllers. So for creating basic interfaces, I believe apple's system is the best in the business.

App Market


While apple has more of a profitable market in terms of app sales, it is costly to become a developer on their market. The developer's program sets you back $99/year and is a requirement to upload any apps onto the app store. So on top of buying a MAC laptop/desktop, you also have to pay a yearly subscription, so the costs do add up. On the other hand, android has a one-off payment of US$25 which gives you a merchant account and allows you to upload your app onto the Google app market (now called Google Play). So, the android is more of an easy to access market. The android market's lax review system allows for instant submissions of you app, it's literally on the market 10-30 minutes after uploading. Apple has a rigorous review system where each app has to be reviewed before it's put onto the market, which is good in that way that it prevents buggy apps flooding the app store but can be quite a pain when you get rejected and have to go back to the drawing board and redesign/recode your app. But in the end, this tough review system allows for more of a respected and trusted app market. It's hard to tell which app market is better though.

Conclusion


While both seem to have their own unique strengths and weaknesses, it's good to be able to experience and appreciate what both have brought to the development world. Switching between platforms brings a refreshing change compared to sticking to one monogamous platform. So, as we verge into more of a mobile world, the focus is shifting to creating programs that have a stronger focus on the User Experience than jam packing programs with a high amount of features.