One of the most frequently asked questions is about how to start GPE programming. The answer is pretty easy and leads us to one of the major advantages of GPE: Apart from some hardware limitations you need to keep in mind GPE programming is the same like application development on a PC using the GTK+ widget set. So what makes an application become a GPE application?
Use of a standard set of libraries and tools
X-Window System
GTK+ GUI toolkit
SQLite
DBus
Respect hardware constraints
Limited amount of RAM and mass storage on mobile devices.
Screen size and geometry.
Input capabilities
Common look and feel
The design of user interfaces is an endless source of never ending discussions. Latest essence of wisdom may be reduced to some simple rules:
Keep everything simple and obvious.
Don't use fixed window layouts - screen size and orientation changes.
design the GUI for QVGA, VGA and beyond
Use a toolbar for the very basic functions of your application.
More complex applications should have a menu.
Use stock icons - think about every non-stock icon you intend to use.
We will take a more close look at the details of GUI design later.
Some other things might be good but are not a must: For example it is a good idea to use the C programming language for GPE applications. On devices with limited CPU power and memory C (or if really necessary C++) has some advantages over many other well known programming languages like Java or Python. Reusing code other people wrote isn't only one of the major strengths of Open Source, it is essential and in the context of embedded application design it is very important to save space and manpower. So if several applications share some code consider to make a library from it. This leads to a similar point: If you need additional libraries you should check if some library used for other parts of GPE provide what you want. This helps very much keeping the whole framework as small as possible.
[Details - what should be possible, where are the limitations?]
This sketch can give you some raw impression about the design of a software framework using GPE.

For more generic information about how to become involved into Open Source projects refer to [1] and [2]. For some information how to teach yourself and how become a hacker you maybe want to read [3].