
Show HN: An app for middle school students, made by a middle school student. - gtmtg
https://itunes.apple.com/app/idms-student/id535975567
======
gtmtg
Hi everyone - I'm an 8th grade student. I recently created iDMS for the
students at my school. I've also created CiteIt
(<http://citeit.mihirgarimella.com>) and a handful of other applications.

I know it's kind of useless for everyone else, but any feedback on iDMS would
be great. Thanks!

~~~
Edmond
You should build an APPYnotebook App (www.appynotebook.com).... it works
better for school and your classmates would love you for it:)

~~~
gtmtg
Thanks - it looks cool. However, at this point, iDMS is supposed to be an
organization tool, as opposed to a note-taking tool. It's meant to replace
these agenda books that we get.

Again, thanks for the link. I'll take a look at it...

------
franciscoap
Hey, Mihir. Congratulations on your application(s).

All: you can check out his website (containing a portfolio) here:
<http://www.mihirgarimella.com/>

    
    
      *TMAScan*
      TMAScan is a Matlab program that I creataed that aims to automate the
      tumor diagnosis process. Once a physician selects a digitized image of a
      tissue sample, certain portions are extracted and analyzed futher, and a
      final score is calculated. This score is directly correlated with the
      malignancy of the tumor. After extensive testing, I determined that the
      program's scores had a strong correlation with those of the expert.
    

Yep, I have wasted my life. I'm very happy for him, don't get me wrong, but
this suddenly made me very sad for myself.

------
guptaneil
This is brilliant! How did you get access to your school's data? I'm assuming
the bell schedule is hard coded, but what about the events schedule? I would
be surprised if your school provides some sort of developer API, so are you
scraping it? When I was in high school, I remember scraping our bell schedule
to create Dashboard and Konfabulator widgets. This is much higher quality than
anything I made back then!

In a related note, my startup (<https://tabuleapp.com>) is working on
improving managing homework due dates for college students. I guess my itch to
collect school data and make it more organized never left me.

~~~
gtmtg
Thanks! My school uses Google Calendar, so I'm using the Google Calendar API
with AFNetworking to fetch the events.

Tabule looks cool, too :)...

------
nthitz
My high school didn't allow students to use cell phones in class and they were
frowned upon being visible at all. I can't remember anyone in middle school
having a phone although I'm sure people did.

Your school allows you to just use your iPhone willy nilly?

~~~
gtmtg
Not really - before, the policy was that a student could have a phone on them,
as long as they weren't using it.

I had to present to the principal and pitch it to a district committee before
the policy was changed. Even now, students are allowed to use their phones in
class only with this app (or another teacher-approved app).

~~~
forgingahead
Well done! Congrats on getting this built, but also approved by the school
officials. Coding is hard, and it's great that you can do that, but the key
development here was convincing the principal to change the policy so well
done on that!

I like the idea of the electronic hall pass that changes colour -- probably
helped convince the principal to change the policy since that's a direct
benefit to the school admin.

What concerns did they raise, and what do you think helped convince them?

------
sumukh1
Good job on your previous work and on this project. I made an app for my
school district when I was in high school and it was great to create something
that I felt was useful.

If there are other students trying to learn iOS reading this, there are a lot
of resources on the internet. Specifically for games: www.makegameswith.us

~~~
gtmtg
Thanks :)

Any idea if there's anything like makegameswith.us for regular apps? It looks
cool, but I like making these kind of apps as opposed to games...

------
ianstallings
I hope my boss doesn't see this.

------
ReedR95
That's awesome! I made a similar app for my high school a year ago back in
11th grade

<https://itunes.apple.com/us/app/faschedule/id472827413?mt=8>

~~~
gtmtg
Cool - I like the personalized schedule...

~~~
ReedR95
Yea, my school's schedule is extremely confusing (it's a two week schedule,
each day is different) so this makes things much easier.

------
gfodor
Nice work! I played around with it a bit, and couldn't get it to crash. It
seems like a genuinely useful app and you focused on building things that
people could and would actually use, and that's a great skill to have and a
lot of people could learn from it.

I'm worried however that everyone here is not being critical enough since you
are an 8th grader. The only way you will get better is to get honest feedback,
so here's mine. Most of my feedback is design oriented, since I can't see your
code.

First up is calendar tab. First issue is that tapping on the table cells do
nothing, but give me a blue highlight. You should disable selections on these
since they do not actually drill in anywhere. Your choice to split the events
into Today & Upcoming is a good idea. For Today events, you put the time, for
upcoming events, you put the date in the secondary info, which makes sense. I
would suggest for upcoming events, you look into making the dates more
readble. For example, instead of "12/13/12", it would be useful to say
"Tomorrow". Or instead of "12/15/12", say "Next Wednesday." This is more work
for the computer, but less work for your users to do in their heads. (Anytime
there is something you find like this, do it!) For farther out things, include
the day of the week, since (as far as my dusty middle school memory goes) the
day of the week really matters a lot as far as your schedule goes. Finally,
the Feedback button doesn't really belong here. I realize there is currently
not a better place to put it, so I don't really have a good answer for you,
but usually Feedback is not on the first screen of an app since it is a
secondary or tertiary function and that real estate is primary real estate.

Next up, schedule. I like your choice of using the segmented controls for
grade selection, but here's something to think about: how often does your
grade change? Only once a year. Segment controls are useful if you need to
continually switch between things. I noticed you _do_ save the selection,
which is really smart! But, a better approach might be to ask the user when
they first visit this tab what grade they are in, save that, and then provide
a button in the navigation bar to change that setting. (You can try using an
action sheet for this.) This way, you free up that real estate on the screen
to show more information instead of having the segmented navigation taking up
precious space.

Also, in the schedule tab, you have a really, really long list of stuff. In
fact, you realized this, so you added a Jump button! Along the way, if you are
building something like this, and it feels like you need to build something
clever like that, it usually is a sign there might be a way to simplify
things. Here's what I would to do start. First, you can get rid of the
segmentation control like I mentioned above. Now, you could use a segmentation
control instead to choose the type of schedule you are in. The problem with
that though is that there are five types of schedules, and that's a pretty
large number of choices for a segmentation control. But, even more
importantly, just like your grade, you probably don't change your schedule
type very often! In fact, as you noticed since you put it at the top, unlike
your grade (where everyone is probably evenly split between grade), most
people all are on a normal schedule, and then everyone changes to weird ones
once in a while.

A better format for your schedule screen might be something along the lines of
the weather app, where you flick to page between the different schedules. You
can start off on the Normal schedule, and then swipe between pages. This is a
pretty intuitive interface and makes it so the user can jump right to the
information they need on the rare occasion they are not in a regular schedule,
and removes the need to scroll very far. And it also gets rid of the need for
that "Jump" button, which is taking up a very useful slot in the nav bar for
future features!

Next up is assignments. First, lets talk about the "Manage" button. When I go
into manage, there seem to be only two things I can do: move assignments
around or clear the list. I might be wrong here, but I don't see the point of
moving assignments around. This might be the first place where you fell into
the trap of doing something cool that is not very useful, but I could be
wrong. I _think_ the help text said I should be able to delete things, but I
couldn't get that to work. The thing that makes sense is the Clear button.
This prompts me correctly to clear completed assignments, and does so. Since
the rest of the "Manage" mode seems not very useful, and modes in general are
a bad sign when designing stuff, you should remove the manage mode and just
put a "Clear" button in the top left corner. Since you are clearing completed
assignments, it might make sense to try putting "Clear Completed" on the
button, but that could be too long so I would try it and see how it looks. But
right now, hitting "Clear" is a bit scary, since it makes me worry that it
might actually clear _all_ my assignments. (Your pop-up confirmation of course
is an important thing and I was glad to see you added it, but users should be
able to have as good an idea as possible of what they are getting into when
they tap a button!)

Now, when I am not in manage mode there are a few issues. First, I noticed
that when I tap on the checkbox this moves between current and completed. This
makes sense, but the checkbox is very hard to tap. Instead, leave the checkbox
as a way to indicate to the user if things are completed, but make it so i can
check off an assignment by tapping anywhere in the entire table cell. One of
the most important things in a touch interface is to make sure the tappable
areas of the screen are very large and unambiguous. In fact, for many of the
controls on the iPhone, the area you can tap is much larger than the on-screen
representation. (This type of thing is part the reason Apple had to rebuild
their OS from the ground up to be used with fingers instead of mice.)

One more thing about Assignments. If I have a Clear button to clear up
clutter, then why bother moving things between Current and Completed?
Completed is there to prevent cluttering up the Current assignments. You
should pick one way to reduce clutter. Here's what I would to. Make this just
a simple list with no sections (not current or completed.) Leave your
checkboxes in there and tap the cell to check on or off the box. But, don't
move anything around when you tap on them, just leave them there checked or
unchecked. As long as my list is pretty short, I can still tell at a glance
how many assignments I have left to finish. Once it gets too cluttered with
finished assignments, the user can clear out the checked ones by clicking a
"Clear" button at the top. Or, better yet, if you have things this way, you
can change that button to say "Clean Up", which makes it a little more clear
(no pun intended) that when the user clicks that they will not be removing
their _unchecked_ assignments. As a bonus, you remove the need for the
"Current Assignments" bar in the table view, freeing up more room for the list
to fit on the screen (which is even more important now since you will have
checked off items floating around in the list.)

~~~
gfodor
Now lets talk about Hall Pass. This is a pretty neat thing and I first want to
point out that this is really innovative work and could actually be a very
useful thing for your school. Hell, I could see some people starting companies
around such a simple but obvious idea that technology could improve, so hats
off!

A few points on the design though. First, my guess is most of the time, people
are going to get hall passes for one of the options in the "List" view. So,
instead of having the "Where to?" selection be a text box, you can make it a
spinning selector (like the date selector in Calendar, or the time selector
for an Alarm.) I like the design of your custom "List" box, similar to your
"Jump" view, but it's very different than the rest of the app and remember: if
you're being clever like this, you probably need to simplify! iOS already has
controls for this type of problem: the spinner. You can still customize the
look of the spinner a bit if you want to add some flash, but you should start
there.

If you are really worried about people needing to specify one-off destinations
that are not on your list (and so the spinner will not have their choice), you
can always include an "Other" selection in the spinner and then let them type
something. If you go with the spinner route, you should change the field on
the form from a text-box to a nice, large, tappable button that lets you click
to open the spinner and then the label is replaced with your destination. In
general, you should always do what you can to make it so people do not have to
type on their phone, unless they really, really have to.

The minutes thing is rigged up very well, though I would suggest perhaps also
going for a spinner here since that is the standard way to input time
duration. Here's the reason: most of the time people do not need minute-level
precision (like say 17 minutes or 29 minutes) Instead, they need things at
5-minute precison. For a hall pass, which is probably no more than 2 hours
long, that's only 60 minutes / 5 minutes * 2 hours = 24 choices, which is a
perfectly fine number of choices to put in a spinner.

So, for Hall Pass, you can have two buttons, "Where to?" and "For how long?"
that open spinners, one with a list of places (and maybe "Other") and one with
a list of 24 time intervals ranging from 5 minutes to two hours (there is
actually a built in iOS spinner mode to select time intervals I believe,
search around the documentation.) Your two buttons in hall pass are a little
weird since your other tabs follow the style of most iOS apps and have buttons
in the navigation bar. I would move "clear" and "submit" to the left and right
corners of the navigation bar. Also, its weird that you have two ways to
"clear" a hall pass, though this might be a quirk with your school.

The Edline tab is totally fine :)

Finally, some high level points on the design. One of the things about iOS
design is you should generally tend to be subtle. First on color. Your app has
highly saturated red navigation bars, mixed with bright blue buttons and
segmented controls, and the Hall Pass has red and green buttons for clear and
submit. First, you need to choose a color scheme. Red isn't bad, but I'd dial
down the saturation a bit since bright red is a danger color. (In users'
minds, red means "Be careful!" So, you should only create red buttons when
_important_ things are going to be destroyed.) If you are going to choose red
as your main title bar color, your segment controls should complement it. When
designing an app, you generally choose a _palette_ of colors that complement
each other. (Google color palette or color scheme) So, I would change your
segmentation control (if you keep it) to be a lighter tone of red or a grey in
order to match the background of the table view. Also, your instructional
banners are cyan -- they should also match the main palette of the app. Blue
and cyan can complement red if they are used in very small amounts, but
usually it's a bad idea.

Also, you need to be consistent with lighting, layout, and style. I'm not sure
where your buttons came from for Hall Pass but they are a little weird and are
not standard iOS-styled buttons. Finally, one more nit pick: in Assignments,
the blue box at the top to add assignments can use a little adjustment. First,
the cyan background does not match the red theme, as I mentioned, but more
subtly I think it is a little too small as the "Tap here" text is up too far
against the edges of the control. As I've mentioned earlier, you should always
try to stick to convention: if there are other text boxes you've seen, make
yours the same size.

One last point. Your launch screen has a logo for your app. This is totally
fine and it's not really a solid point of criticism, but it's something to
think about. What Apple encourages people to do is to make their launch screen
be a image of their first screen, but without any data (since it needs to be
the same every time.) In your case, it would be the "Calendar" tab, with
nothing in the grey area at the bottom. So, remove the table view, take a
screenshot, and make that your launch screen. When users launch the app they
will see the calendar tab as the app opens and the table view will "pop in".
Check out the other apps on your iPhone like notes and clock to see this in
action.

I hope this has been helpful. Don't take this as an indication this isn't
great work. You are more competent at iOS programming just by looking at this
than many wannabe hackers. Great job. You got a lot of details right. I know
how much work it was to get all this working, even though it probably seems
simple to people who pick it up and just start using it. Just like when you
clean your house the easiest thing to notice is that you left a sock on the
floor, when you build software the easiest thing to notice is where it needs
work, not all the work that went into what is there already.

Main things to remember: go with the flow, if something has been done before,
just copy it (and maybe tweak it), don't be too clever. Think about what your
users will actually use (do they really need to be able to type in 17 minutes
in Hall Pass? Do they really need to be able to switch between 6th and 7th
grade schedules in a single tap?) Every control you use or layout you design
has consequences of what it makes easier, and in turn what it makes harder.
Especially on a tiny screen like a phone. Always think about what things your
design makes harder, not just what it makes easier. For example, if you add a
segmentation bar, that makes switching easy, but moves some information off
the screen, so you have to scroll to get to it. Also, if you add a
segmentation bar for one thing, it means you can't add one for something else
that might be better for it. If you use a spinner instead of a text box,
choosing those choices is easier but one-offs are harder. Which is more
important? Finally, don't be afraid to throw things out. Most of the feedback
I've posted requires you to remove a lot of stuff. There's a lot less moving
parts. In fact, by the end, you might actually have _less_ code than you do
now, despite making the app much better. This is normal and is a good sign
that you are doing things correctly. If you are always adding new stuff and
never removing stuff (or always adding more than you remove) then you very
well might be going down the wrong track.

If you've read this far, I've got some questions for _you_. How did you get
into this? Were your parents involved? How could we get more kids like you to
try hacking on their iPhones?

Great work and keep it up! Finally, here's a short bibliography if you are
interested in reading more:

\- [http://www.amazon.com/Tapworthy-Designing-Great-iPhone-
Apps/...](http://www.amazon.com/Tapworthy-Designing-Great-iPhone-
Apps/dp/1449381650/ref=sr_1_1?ie=UTF8&qid=1355381936&sr=8-1&keywords=designing+iphone+apps)

\- <http://nathanbarry.com/app-design-handbook/>

\- <http://designthencode.com/>

\- Anything by Tufte

~~~
gtmtg
Thanks so much for your detailed feedback! I'll try to address it point-by-
point:

> You should disable selections on these since they do not actually drill in
> anywhere.

I'll definitely do this in both the calendar and schedule views.

> I would suggest for upcoming events, you look into making the dates more
> readable.

This sounds useful - and suggestions for libraries that can handle this?

> Finally, the Feedback button doesn't really belong here.

I agree - but I wanted an easy way for students to report bugs they found. I
don't know if they would find it if I hid it away somewhere. Any suggestions
on where else I can put it?

> But, a better approach might be to ask the user when they first visit this
> tab what grade they are in, save that, and then provide a button in the
> navigation bar to change that setting. (You can try using an action sheet
> for this.)

Good point - I'll probably implement this. One thing, though - for teachers
that teach multiple grades, it might make it harder for them to find the
different schedules at a glance. Then again, I'm not sure they really check
the schedule in between each class.

> But, even more importantly, just like your grade, you probably don't change
> your schedule type very often! In fact, as you noticed since you put it at
> the top, unlike your grade (where everyone is probably evenly split between
> grade), most people all are on a normal schedule, and then everyone changes
> to weird ones once in a while. .... A better format for your schedule screen
> might be something along the lines of the weather app, where you flick to
> page between the different schedules.

Well, we have a PM activity schedule every Friday - but pagination might still
be a better option.

> I might be wrong here, but I don't see the point of moving assignments
> around.

This allows for prioritizing - whenever you add an assignment in, it goes to
the bottom of the list. However, if it is, for example, due before something
that is above it, I like to move it up.

> I think the help text said I should be able to delete things, but I couldn't
> get that to work.

In regular mode (not manage mode), you can press and hold on an assignment to
bring up the edit/delete menu. The modes are confusing - but I want to keep
reordering and have it separate from the regular mode.

> Make it so I can check off an assignment by tapping anywhere in the entire
> table cell.

Good point - I'll do this.

> But, don't move anything around when you tap on them, just leave them there
> checked or unchecked.

Good idea - I think I'll remove the sectioned table view but move the
completed assignments to the bottom (much like Clear).

> First, my guess is most of the time, people are going to get hall passes for
> one of the options in the "List" view.

Not really, actually - I usually use a hall pass to go see teachers, and I
have to type their names in.

> I like the design of your custom "List" box, similar to your "Jump" view,
> but it's very different than the rest of the app and remember: if you're
> being clever like this, you probably need to simplify! iOS already has
> controls for this type of problem: the spinner.

I don't really like the look of spinners, but the list box might be a bit of
an overkill. I'll look in to replacing it.

> Instead, they need things at 5-minute precison.

This is probably correct for times longer than, say, 10 minutes. However, for
shorter times, 5-minute precision might be too limiting.

> I would move "clear" and "submit" to the left and right corners of the
> navigation bar.

I have them at the bottom to follow the natural flow of view - you fill out
the form from top to bottom and hit submit.

> Also, its weird that you have two ways to "clear" a hall pass, though this
> might be a quirk with your school.

Now that I think about it - the clear button seems kind of useless. I'll get
rid of that.

> Red isn't bad, but I'd dial down the saturation a bit since bright red is a
> danger color.

Red is our school's color. The saturation might be a bit high, though, so I'll
change that. I just used the default red navigation bar that came with
PrettyKit. Overall, though, I'll work on trying to come up with a single color
scheme.

> I'm not sure where your buttons came from for Hall Pass but they are a
> little weird and are not standard iOS-styled buttons.

Yeah - they're BButtons (<https://github.com/mattlawer/BButton>). I saw them
on CocoaControls and thought they would be kind of cool. They may be
overboard, though.

> I think it is a little too small as the "Tap here" text is up too far
> against the edges of the control.

I do think it is too small - I'll try to make it larger while still fitting in
the toolbar.

> When users launch the app they will see the calendar tab as the app opens
> and the table view will "pop in".

I'll look in to doing this.

> Think about what your users will actually use.

Great point - I was hoping that the feedback feature would be useful for this.

> How did you get into this?

After 6th grade, I developed a simply prototype of an app to handle the hall
passes. My technology-education teacher saw it and asked me whether I would be
interested in developing a much broader app to replace the agendas. This kind
of got me started - I asked my classmates for what they would like to see and
started developing those features.

> Were your parents involved?

Not really - they gave me some feedback and encouragement, but not any help
with developing the app.

> How could we get more kids like you to try hacking on their iPhones?

I think startups like makegameswith.us (and CodeCademy to some extent) are
helping with this. Having a computer science class (or teaching programming
in, say, tech-ed) as early as middle school would be great.

> Great work and keep it up! Finally, here's a short bibliography if you are
> interested in reading more...

Thanks! The App Design Handbook looks really great...

Again, thank you for taking the time to go through the app and come up with
this feedback. I'll definitely implement some of your suggestions...

------
genwin
Nice! I like the logo (maybe your school's mascot?). Keep making apps like
this and there's a good chance you could have your own business and work
schedule after your schooling.

~~~
gtmtg
Thanks! Yeah - the logo is my school district's mascot.

------
xoail
Brilliant! I would love to see other schools adopt to it too, may be you
should open source it so that other schools can benefit from your code.

