For the past 18 years I have worked in a variety of roles from green grocer to solution architect. I have been employed by a number of companies and I have always been the employee. That ends today.
As a consultant for one of Australia’s leading software development houses, I often come across the inevitable question from a client, when talking about mobile development: “should I have a native app for each platform I want to target, or should I just have one mobile web application”. Often the answer to that question is not that clear cut. In essence it depends on two factors, namely requirements and current technology.
You obviously always have to listen to the client’s needs and requirements, get to the core of the problem they are wanting to solve and provide a solution accordingly. With that in mind it becomes an exercise in fitting in to one or the other path to successful mobile app development. It is important to get this decision on native or web app right from the start, as it can be an expensive exercise to switch mid project. However, if you are prepared you can guide the client and inform them on the best choices they can make.
In essence it depends on two factors, namely requirements and current technology.
On the other hand you have to stick to what the technology can provide you once you start developing the product. You can of course push the boundaries, which we like to do at Kiandra, but there will be some limitations in whichever technology you choose.
Because this question comes up regularly, I developed a matrix to help myself, and the clients, out in determining whether to go native or web. It goes a little somethin’ like this:
It is meant to be a quick guide to identifying the pros and cons of each approach and help you choose the appropriate one in a particular situation. You have to take into account factors such as requirements, time and flexibility, but in general it is a great starting point.
For both approaches there are people who are for and against, and it is important you choose the solution that will get the job done in the best possible way. Don’t just chose an approach because it is the most popular at that moment.
If you have any other points that I have missed or would fit into the matrix let me know in the comments below.
First published at blog.kiandra.com.au
In a world which increasingly relies on the internet for pretty much everything from funny pictures of kittens to complex Super Annuation calculations (ask @alexjmackey about fun with those), the modest web browser is not so modest anymore. Gone are the days of cumbersome web apps with full page reloads and spinning gifs (and who could ever forget <blink>Awesome Sauce!</blink>). Today web applications has to work on desktop, tablet and mobile formats. They have to work across all modern browsers (and sometimes in some archaeological ones too), be lightweight, responsive and unit tested.
As a software developer you have to be aware of all these areas when you set out to build the next web app of the future. You will most likely have specifications to build after, but what tools can help you really excel in your build process? Below I have listed some of the tools which have helped me nail some issues, or made some tasks much much easier. Let me know in the comments, if you have other tools that are awesome/interesting.
User Agent Overrides
Because the web is now available via pretty much every device with a screen, as a developer you have to accommodate all these different resolutions. You have to make sure your latest post on Estonian knitting looks awesome on a PC, a MacBook air, an iPhone, Nokia’s Latest Windows Phone and many other devices. All of these devices have different user agents, which tell the browser which device it is. The browser and, more importantly, the requested web site can then change it behaviour accordingly.
In Google Chrome you can access the user agent overrides via the Dev tools settings. Hit F12 and go to settings in the lower right hand corner (little cog).
On the settings screen select “Overrides”
Here you can override the user agent and the screen size. This is really handy to simulate all your target devices, and it actually works!
Similar functionality is available in Firefox via a plugin, or in Internet Explorer via the developer tools as well (that is via F12 too).
One of the key ingredients to a successful website is performance. As the below infographic from StrangeLoop indicates, just a 1 second delay in page load time can decrease customer satisfaction by 16% and almost half of visitors will not return to a poorly performing site. On top of that web users now expect the site to work equally fast on mobile devices. Major sites like Google and Yahoo records increase in traffic in the millions for just getting fractions of a second faster page loads. Yes, page load and performance are truly important on all platforms.
Fear not, Page Speed to the rescue! This add on to your developer tools in Chrome made by Google (there is also a FireFox version) instantly gives you an insight into yours or anyone’s site performance.
Once you click on the “Start Analysing” button, the site will reload and all manners of metrics will be recorded. The really cool thing is that you don’t just get a bunch of numbers for sections or areas. All of the data is presented as suggestions on what to improve and how to improve it. Very cool.
You can immediately tackle the high priority items, and prioritise the rest.
One of the pain points of developing smick looking web sites for your local Russian dance association is to deal with fonts. Fonts can be missing, they can be overridden they can be served from different sources. It all makes it complex to keep track of. WhatFont lets you inspect fonts on a page with ease.
Very simple, very easy to use. Makes the font task easy to handle.
Knockoutjs Context Debugger
It installs as an extra section in your developer tools, which is accessible on the elements tabs. Select an element that has knockout binding to it, and watch the magic JS fairies populate your knockout context section. It is extremely valuable if you work with Knockout.
Going hand in hand with performance of a web site is the server side response time. Often the backend of a website has some form of database interaction, whether you are storing recipes or the latest AFL results. If this database connection is slow, your site will be slow. A large majority of sites will be using an ORM to help interaction with the database. One of the more popular ORMs is NHibernate.
Although it is not a browser tool, I use NHProf every time I use the browser to optimise performance. NHProf is a profiling tool for the SQL executed on the database using NHibernate. Because NHibernate makes it difficult to see exactly what is being executed, optimising your NHibernate code is sometimes difficult. But with NHProf you can see exactly what was sent to the database and perform detailed analysis of the queries and results.
The licensing for NHProf is a bit on the expensive side, but the benefits are huge if you are serious about database performance.
When it comes to tools for building software, there are about as many opinions as there are software developers (affectively known as code monkeys). Compiling a list of the top tools of any discipline within software building will be highly subjective. As such this list (well, there are actually two lists as you’ll find out) is a reflection of talking to a small sample of developers. These developers are all highly passionate about software and the creation of such, and all have their personal preferences. This article is not meant to tell you what you should use, but rather (hopefully) present new ideas and inspire you to try out alternatives. Take what you can use and leave the rest.
The first list of tools is leaning more towards the software crowd that has the business analyst or project management hat on. Having said that, all the tools in this list are very useful to developers as well. Chances are, if you are a disorganised developer your code will be disorganised as well. These tools could help organised your day, your project and your code.
Any management of software building is complex. Acceptance criteria, customer expectations, development lifecycle, defects and unexpected events are all part of producing a successful outcome. For those task and more, below is a list of tools that can make your software management journey feel like a two week holiday in the <destination type=”dream”> Siberian Tundra.</destination>
Thought up by Joel Spolsky and his company Fog Creek Software, Trello facilitates easy collaboration between teams. Using a method known as Kanban, Trello has a series of boards which define various steps in a project. Boards contain Lists, which has a number of Cards on them. Cards, or tasks, are the basis for managing the finer grain of a project, and the cards are meant to move from list to list to monitor progress. Users are then associated with boards and can be assigned cards.
The application of Trello is limited only by the imagination of the user. You have complete control of boards, lists, cards, who can see a board and who is doing what. You can attach photos, files and web links. You can tag and label cards for more categorisation and you can track changes to cards.
Top this off with a superb user interface that feels natural and straight forward. The learning curve is very mild.
If you are working on projects that are just medium in size or are working in a medium sized organisation, chances are you have heard of JIRA. Built by Sydney based company Atlassian, JIRA is a one stop option for project tracking and task/issue management on any project. At the time of writing version 5 is the current iteration and offers the end user complete oversight of a particular task’s status, a project’s progress and everything in between.
Just to test the flexibility (and because I am a developer, hence love cake) I once created a JIRA task for my business development manager to bake muffins. I tagged the task with the ingredients required, set the status to “blocker” and put a deadline on the task. The description allowed for some flexibility in the style of muffins and I even contemplated putting additional resources and cost estimates on the task too. The outcome was a healthy dozen muffins enriching my entire team’s day.
Chances are that you have heard of stackoverflow.com, one of the largest technical forum sites on the interwebs. As part of the Stack Network there is pm.stackexchange.com, which is a portal for project managers in particular. Questions relating to project management are put forward, then answered and rated for relevance and quality, much like Stack Overflow.
To organise team communication, business processes, data and content in project management workspaces, Podio supplies a web-based platform which is free to sign up to. You can also select business apps from an online app store or build your own as you see fit.
Being a relatively new service (started in 2011), Podio is very ambitious and does offer a great range of tools for managing leads, tracking job candidates, doing accounting and everything in between. It is a social take on project and team collaboration.
As an aside, I don’t mind either that Podio is yet another quality software package to come out of Denmark. The motherland seem to have a lot of interesting products and ideas coming out in the last few years.
The online office suite has been around for eons in web speak. Launched in 2005 Zoho offers a range of products including word processing, spreadsheets, presentations, wikis, bug tracker, chat, mail and much much more. They were one of the first to offer proper cloud office services, negating the need for software and hardware updates.
The main mantra for a software developer is “why do something, someone else has already done (well)”. If there is a tool that makes your life as a developer more productive, makes you produce better software, allows you to refactor code easier, can massage your back while playing soft soothing music and feeding you snacks or whatever it might be, then we use it. There is always a better way of doing a particular task, and if someone offers you a shortcut to do that, then why try and invent the muffin tin yourself?
If you are like me and always on the go, being in a car, commuting to work, at a client or spending time away from your normal work station in some fashion, then you will quite likely have come across the desire to have your work/pet project/library reading list app with you. Cloud 9 allows you to have a complete development environment within a browser. You can collaborate on projects with other likeminded developers and even edit in real time with another party. Pretty cool.
- Load browser to see what is broken/needs fixing
- Open up the file to edit
- Save change
- Alt+Tab or click on browser window
- Hit F5
- Observe change
As a web developer testing your work in a plethora of different browsers is always arduous. Not only is it easy to skip over the browsers with little use, but even more importantly, where do you get access to IE version 6 or Firefox version 13. And not only that, but you have to test on Windows XP, Windows 7 and Mac OS Mountain Lion. Welcome to the party BrowserStack. These guys have made the effort of keeping around almost any modern(-ish) browser/platform combination you can think of.
It is a truly invaluable tool if you want to make sure you have all your bases covered. Every new browser and platform combo is spun up in a new Virtual Machine, so you have your own instance. You can set up a secure tunnel, so you can test your local html and design on the remote server.
It has almost become part of the default toolset for web developers working with the Microsoft stack to use ReSharper. A lot developers I talk to almost can’t use Microsoft Visual Studio now without this comprehensive productivity tool. Just to name a few features, ReSharper will give you real time code analysis, keep you compliant to agreed coding standards, search huge datasets and thousands of files instantly, code refactoring with ease, code cleanup, multiple refactoring tools and oh so much more.
Chances are that your productivity as a developer will increase significantly, but that is not the best bit. ReSharper takes care of all the boring stuff, such as renaming “cat” to “kitten” in your Fantastic Feline application (@alexjmackey has written that one), so you won’t have to. The team at JetBrains has put a lot of effort into making sure you don’t do the boring repetitive tasks of old grey beard developer days.
As I said in the beginning, this list is highly subjective. This last item is your chance to let us know what your favourite tool is. Fill in the comment below and tells us your favourite tool and why you think it is valuable. It can be anything, as long as it doesn’t involve ducks. Ideally it should be something which improves the dramatically interesting live of developers.
Give it your best shot. I want to know!!
In the not so distant past I decided to start up my own business. The idea was to earn a bit of extra cash by taking on small projects. A relatively simple way of helping out people who are somewhat dehydrated when it comes to IT skills. Oh boy have I learned. Over the past months I have considerably reconsidered my take on being a sole trader. Thus follows my take on the top 7 things to consider when starting your own IT consultancy.
[pullquote]Aim at setting up maintenance contracts, monthly subscription fees or any other form of recurring income.[/pullquote]
- Find residual income
For me the main reason was to build a business that would generate more income the longer I was working it and the more clients I had dealt with. The only way that can happen is through residual income. Finishing a project for a lump sum is nice in that 30 minutes after you get paid. But then you realise that you now have to find another contract. You are simply trading time for money. It is essentially still a job; only difference is that you are your boss. Aim at setting up maintenance contracts, monthly subscription fees or any other form of recurring income. Create once, sell multiple times.
- Double the analysis more than halves project time
Because you are only yourself, you need to be incredibly time efficient. Something I do really poorly. I have more than once jumped straight into a project, where the path was very clear in my head. But poor analysis of client requirements sunk the timeline for the project, as the client thought you meant round, when in fact you said square. Find out what the most important feature or part of the project is in the client’s eyes and go from there.
- Understand what the client wants
An oldie but a goodie. Have you ever asked a tradesman to carry a job, only to find out he understood it completely differently? It is no different in IT. Because you are the expert, the client will talk about concepts and ideas, which are clear in their head, but poorly communicated. You need to come down to their level and speak their language to get in their head and extract the idea in terms that can be put down on paper. I once had a prospect come to me with “I have a Nail & Beauty salon, I’m thinking of having a website.” That was it. Now go and design and code the site. Impossible.
- Learn to say “no”
The most overused word by business people that don’t have a technical background is “just”. Can you just move that up there. Can you just make those pictures smaller. Can you just…. As soon as you open the door to accepting their comments of “just”, you are heading for a loss. A loss of time, loss of scope, loss of profit, loss of sanity. If you have any doubt, re-read point 2 above. Get to the core requirement as early as possible, and stick to it. Ninety-nine times out of a hundred, the client will back down when you say no. You are the expert, you know what is possible. Say no now, but open the door for more work post completion of the project.
- Only take on projects of interest
I took on a project where the client wanted a web server set up as part of the project. I am a developer, not a sys admin. I can probably set up web servers for my own use, but professionally is another thing. I like developing software and exploring new technology. I really have very little interest in servers and infrastructure. I ended up getting a friend to do it and the project took much longer than necessary. The client was unhappy and I was unhappy.
If you don’t regularly communicate with your client about wins and losses, they don’t feel warm and fuzzy. Reassurance from you as the expert, that you are on top of things is paramount. If something breaks and delays the project, tell them. Honesty goes a lot further than silence. I always tell things as they are. If something goes the wrong way, analyse, figure out a solution then tell the client. Let them know that you are on top of it.
- Have fun
Sound like a cliché, but it is true. If you don’t enjoy what you do, then everyone around you will feel miserable too. I will argue that you can’t be successful in your own business if you don’t enjoy the work and the challenges. Sure, there are obstacles, but it feels great to power through them. If you don’t have the passion, don’t bother.