What are all the things a startup web service needs?
So you focus on getting your “don’t worry be crappy” code together to bootstrap your startup and get something the real world can play with. All the user-oriented features you need are there for 1.0.
But what about the rest? What about the things you need to make the service tick, to keep in touch with the users etc? These things are really important, as you can bet things are not going to go smoothly all the time, especially at the beginning.
We’re just going through this phase – all the basic 1.0 coding is near completion, and now we need to make sure we don’t miss out any major “duh” features we need to keep things going.
Off the top of my head, I can think of the following:
- Effective web stats so you can see how people are using the site
- Database backup policy and off-site backup of your users’ data
- A mechanism to easily send downtime/update/marketing emails to all your registered users
- The ability to add a banner on the site to indicate scheduled downtime
- Terms of use
- A predefined plan of action to take if the servers are swamped
- A way to update key content without a redeploy (= scheduled downtime!)
- Basic reporting to see how many new users you are getting, and what they are doing – over and above webstats, a summary of your domain objects etc.
- Make sure load/health reporting is set up and working in advance
- Detailed functional tests and/or manual test plans ready and in place. You tested 1.0 right?
Do you have anything to add to this?
UPDATE: commenters have also very wisely suggested -
- Screencast showing users how to use the service
- Issue tracker for support
- Privacy policy / data protection policy
How Android is just going to be J2ME hell all over again
I’m lucky to be out of mobile phone development now. I spent about 2 years coding J2ME games for a wide range of handsets and as anybody who has done it knows, its really shitty. This is because J2ME has standard APIs, but implementations vary in quality, nuance and in some cases downright fail to meet spec. Not to mention all the phones have different API sets and hardware abilities, input methods, screen sizes that vary wildly etc. Oh and I forgot – bugs across different firmware versions of the same handset – users without iPhones being unlikely to upgrade firmware as it is likely non-trivial / not handed to them on a plate.
I’m an iPhone fan, because iPhone makes mobile phones not suck. That’s all I cared about when I got one.
If I was an active phone developer now, I’d be very happy to dev exclusively for iPhone because of the tools and APIs and low variance in standard hardware. Issues about app store review policy notwithstanding (that’s a serious problem that has to be, and I think will be resolved). If you write good apps there’s easily a big enough market size already to make some good money.
Anyway last night I read this Fake Steve Jobs piece – ever sharp: Developers only now realising that Android is not a platform
You see when writing mobile apps the number of handsets you have to port to and test with (requires owning the phone typically) is key to your financial bottom line. Mobile operators want/force you to make sure your app supports a wide range of their crappy handsets, even if you will sell 1 copy of your app per year on that handset.
Because it is a phone there are few apps for or it has their logo on the phone, you have to support it.
You have to waste days debugging memory use issues – often across many different handsets
You have to waste days working out why your colours are coming out wrong on a crappy handset that has sold in high volumes and has a CPU so slow your game is barely playable.
You have to test every feature of your game/app to completion, with lengthy usage tests, incoming call issues etc to be sure it will not fall over / frustrate the user after a while. A quick flick through = poor QA.
The cost and effort behind this is immense and in many cases a complete waste of time. Generally speaking as a mobile dev you want to target the smallest number of phones that give you the biggest market share of people who actually pay for downloaded apps.
Now even with a unified “app store” for Android, you’ll still have to pander to these same requirements even if there is no network operator standing in your way. Because to make money, you have to follow the high volume handsets. Earth to those new to mobile dev: the highest volume handsets are very rarely the most capable or attractive from a development perspective. After the market matures, the highest volume will be in the cheapest/most subsidized handsets. This will likely be operator-badged “plastic-extruded turd with calculator buttons on” handsets.
This is why the FSJ post is right on the money. The higher iPhone market share grows – and the more global it becomes, because this is a double whammy compared to j2me dev with no mainsteam cross-phone app marketplace – the more attractive iPhone dev becomes. It is just easier to make more money there.
You have effectively one target device (ipod touch may not have mic and no phone but that’s it, 3gs has… compass oooh) and a clean reliable platform. Even firmware issues are almost removed because Apple/iTunes make it so trivial for people to update.
Contrast this with Android. From what I have read, it seems the O/S is not a rigid guaranteed platform like iPhone OS, and of course it is targetted at the mass market of phones. This will mean that the capabilities and APIs and quality of implementations will vary across all the handsets – just like in your old enemy J2ME.
High volume phone makers will try to shoehorn Android into as little RAM and CPU as they can, with the cheapest acceptable screen they can (who cares if everything looks a bit yellow!), to hit the lowest price point to make their handset the most attractive to the network operators so they can hit high subsidised sale volumes. If there’s some problem with a part of an API – maybe the CPU is too slow to do it, or the GPU can’t handle it, or the screen is “4.5-bit CMYK” colour as opposed to 24-bit RGB, they will just cut a corner/break compromise that API and almost certainly not document this. It is commercial reality. It is the classic design down to a price, not up to a standard.
J2ME suffered exactly this problem and Sun couldn’t fix it even though they had a licensing scheme for the VM. Because Google has open sourced Android, I don’t see how they’re going to be able to introduce a “Google Certified Android” standard that requires complete TCK success for all Android deployments.
As such, mobile devs on Android are doomed to the same existence they’ve had for a decade on J2ME.
Each new Android handset means another target to test, often requiring you to buy the handset contract free (ouch!), and the diminishing returns as the market is flooded with new handsets each garnering less of the market for your app.
Of course you’ll still be coding Android apps because manufacturers will be running to unite under an “iPhone beating OS”. Really, all that’s changed is you’re coding to Android APIs instead of J2ME.
I don’t mean to say Android won’t be successful. iPhone OS will not be “the” dominant OS in the mobile phone market any time soon, maybe never.
The thing Android devs have to fear is this: the mass market success of Android. Why? Because the mass market success = high volume = cheap crap phone, not a smartphone. That is where the money will be for Android apps, and guess what – its going to be really pretty ugly. You’ll make a “reference port” on your high end Android handset with touch and lots of RAM and great performance, and then have to downshift everything to the shitsville high volume ones.
So in terms of small developers making money off their apps, I’m very confident the ROI on iPhone will be far more favourable.
Let the big guys deal with the horror of porting and QA teams for all the Android stuff.
Oh, and wait it remains to be proven that Android users will actually pay for apps in any quantity. Apple creates an environment of value where people understand that, generally speaking, you get what you pay for. As FSJ often says… “freetards” don’t get this.
UPDATE: Oh look what just hit the news… one of (if not the) biggest J2ME game devs is scaling back their Android efforts. “It is not as neatly done as on the iPhone. Google has not been very good to entice customers to actually buy products. On Android nobody is making significant revenue,” AKA “freetard” attitude = no money for developers.
Atlassian JIRA 4 and Greenhopper – First look
I recently upgraded our JIRA instance to version 4 and installed the GreenHopper plugin – after getting them for the bargain price of $10 as part of Atlassian’s amazing repeat bargain offers for charity. I can’t recommend this enough – $10 for enterprise Jira is amazing.
I have used JIRA for something like 5 years now. I am a big fan, in that it is definitely the best issue tracking solution out there. However I’m also quite critical of it at times, because I think it often fails in usability and UI terms to deliver an intuitive experience for those doing software (and particularly web) development.
So I thought I’d write some initial views on the Jira 4 UI and GreenHopper – my hope being that GreenHopper will alleviate some of my release planning frustrations with Out-of-the-box Jira. These are most definitely first impressions. Any major UI changes are likely to be met by resistance by seasoned users of any application.
First, the good:
- Jira’s main dashboard UI etc looks cleaner, drop-down menus for quickly getting to specific projects are welcome
- The whole thing feels less cluttered because the right hand side bar which, in my experience was almost never used by most JIRA users, has been taken away
- The drop-down action menu for each result in an issue navigator search is great
- The activity stream stuff is very helpful
Now, the contentious core JIRA stuff:
- I now feel like I have no issues. If only it were true. The whole JIRA UI feels “too” sparse, I feel like I cannot see my workload properly any more / the status of the project. A prime example is when you click on a project version and are shown the version summary tab which seems to show at max 3 updated + 3 “Due” issues. What use is that? Doesn’t seem configurable. UPDATE: Brian Lane, JIRA product manager has told me this is configurable in a configuration file but not in the UI, where the setting jira.project.summary.max.issues=3 can be found.
- Roadmap view – for me at least – is completely useless now. It no longer shows all issues for a version if there are “too many”. This should at least be configurable and behave like old Jira by default. Its an imperfect world. Some of us have 170 issues in a version What’s more the issues are sorted obscurely – you’d assume if only showing 50 issues it would show the 30 unresolved issues, but for me shows about 8 of those and 40+ resolved ones. Roadmap does not show me my roadmap, I have to drop into issue navigator
- I hate portlets. For dashboard overview stuff, fine – but they are used in other places too eg project overview, which feel like UI/usability cop-out. Its not Web 2.0, its iGoogle. Portlets are too generic to make any app feel seamless.
- “advanced” searching with some new Jira QL is enabled by default it seems, which I think is a mistake. Bring back the good old simple search for most users by default. UPDATE: Brian Lane also told me that this is not the case, it is not on by default. I don’t know how it became on for me though.
Next, my first impressions of GreenHopper:
- GreenHopper is very specific to a particular Agile methodology and “card” (or post-it) metaphor. This IMO is enough to make it a total WTF for any users who are not Agile Scrumbag 3rd Dan Blackbelt Extremists. That includes me.
- I was hoping for drag and drop planning of issues eg assigning them to people and versions in the roadmap. This is there, to a degree. GreenHopper is major overkill for the majority of users – and yet with no DnD scheduling in core Jira, you have little choice if you want to avoid the horribly repetitious standard Jira workflow steps to change fix-for on issues during planning where batch changes are not that workable as they require scanning all the issues before making your changes.
- The UI is highly functional for the specific metaphor and methodology, but is frankly insane for every day users. It makes me feel ill trying to using it. Too much colour. Too many options. Too small fonts. Web 2.0 was years ago, we’re allowed to use a font > 12px high now you know!
Things I want day to day but can’t seem to achieve even with the power of Greenhopper and Jira 4:
- Drag issues to become subtasks of a parent
- See a “tree” of issues as a list eg parent issues with subtask issues shown below them
- Get an instant view of how close we are to the top-level features (parent tasks) being completed – eg the red/green bar of subtask completion for all parent tasks, shown in a flat list. Don’t get me started on the “Task board” of GreenHopper. Powerful yes. For mortals? No way.
- JIRA completely lacks the personal element commonly found in Web 2.0 apps – avatars for user accounts. Github has this, so do most other hosted web 2.0 apps. Its a real omission and means functionality like “drop issue onto user’s face to assign it” is not yet possible.
JIRA is very powerful, has had some solid UI improvements, but ultimately I think from a web-app developer’s point of view it is now weakened by its un-opinionated and excessively generic underpinnings. This can be seen by the way GreenHopper had to shoehorn its way into JIRA UI with some truly ugly configuration screens, mismatched fonts, general lack of integrated look and feel – and popup windows with standard Jira issue edit screens in.
It feels like JIRA is still firmly rooted in the waterfall-approach era. It has been very successful by trying to please everybody, but I feel that it is not yet up to the task of truly excellent web-development tracking – although it certainly remains the best option out there at this time in my opinion.
The GreenHopper plugin tries to bring a visual metaphor to all this, and that is welcome. However I think the visual metaphor of just dragging issues in the normal JIRA roadmap view would work a lot better for 90% of users than the agile “card” approach and all the steroids that those UI screens have been given.
I hope this doesn’t come across as too negative. Both products are a move in the right direction and there’s no way you can do wrong with the currently special offer pricing that’s for sure.
However I hoped for a bit more progress in Jira’s UI for release planning etc out of the box - I wrote about these desires way back in 2006 - and GreenHopper despite normally being a premium product for exactly this, in my opinion fails to meet the needs of real-world users (eg the ones who don’t live in an Agile methodology bubble).
I’ve released another Grails plugin
Witness the power of the bean-fields plugin for Grails!
<bean:withBean beanName="form">
<bean:field property="firstName"/>
<bean:field property="lastName"/>
<bean:field property="company"/>
<bean:field property="email"/>
</bean:withBean>
This will render input fields of the appropriate type, with sizes set according to the fields’ constraints, select field items from inList etc. It also renders label tags, errors local to the field, and required indicators.
You can customize the markup used for all this stuff, so that you get a consistent and noise-free rendering of fields across all your GSP views.
Please do check it out and let me know if you have any issues.
Development is easy. Creating product is hard.
I’m working very long hours at the moment. By day I work on Weceem CMS and by night I am acting as the architect and producer of a new web service that I am developing with some friends.
Of course the web service is being built with Grails – it would be insane to use anything else! Chris our developer is doing an excellent job – Grails is massively empowering. In the timescale we’ve been working to an amazing amount of stuff has been achieved – even when some of it is being learned on the job.
Oh and of course the core idea is there but the details are being fleshed out as it is developed, but Grails reduces the pain for Chris as changing direction on some features is not as heartbreaking as throwing out weeks of work on thousands of lines of code.
Our designer Pat is also working well with editing GSPs directly, something new for her which she is enjoying, along with learning the joys of Blueprint CSS and jQuery UI.
However, what was obvious to me before starting this project, is painfully obvious to me now. Modern tools like Grails take the classically hard part of making a software product and turn the problem upside down.
We don’t spend time fiddling around with config and trying to glue various tech together, writing reams of bean accessors and lame JDBC code etc. – we spend all our time trying to meet the challenge of creating an application that really makes sense to users, hides all the technical detail – while providing features that a few years ago would have been considered very low priority due to the work required to get even the basics off the ground.
Expectations of modern web apps, especially the expectations that come from ourselves as designers and users of such services, are very high.
This is however a “high quality problem” compared to chipping away at a massive mountain of code just to get something half-assed ready, and deferring all the parts that are important and useful to end users (and hence ultimately the business) until later.
Time is of the essence. Grails cuts out maybe first 3 months of dev, and we focus on the business problems.
It’s a no-brainer in that sense.




















